37 lines
888 B
C
37 lines
888 B
C
|
// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name statement-expression.c %s
|
||
|
|
||
|
// No crash for the following examples, where GNU Statement Expression extension
|
||
|
// could introduce region terminators (break, goto etc) before implicit
|
||
|
// initializers in a struct or an array.
|
||
|
// See https://github.com/llvm/llvm-project/pull/89564
|
||
|
|
||
|
struct Foo {
|
||
|
int field1;
|
||
|
int field2;
|
||
|
};
|
||
|
|
||
|
void f1(void) {
|
||
|
struct Foo foo = {
|
||
|
.field1 = ({
|
||
|
switch (0) {
|
||
|
case 0:
|
||
|
break; // A region terminator
|
||
|
}
|
||
|
0;
|
||
|
}),
|
||
|
// ImplicitValueInitExpr introduced here for .field2
|
||
|
};
|
||
|
}
|
||
|
|
||
|
void f2(void) {
|
||
|
int arr[3] = {
|
||
|
[0] = ({
|
||
|
goto L0; // A region terminator
|
||
|
L0:
|
||
|
0;
|
||
|
}),
|
||
|
// ImplicitValueInitExpr introduced here for subscript [1]
|
||
|
[2] = 0,
|
||
|
};
|
||
|
}
|