// 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,
};
}