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