36 lines
888 B
C
36 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,
|
|
};
|
|
}
|