1*c1b6cca1SWentao Zhang // 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 2*c1b6cca1SWentao Zhang 3*c1b6cca1SWentao Zhang // No crash for the following examples, where GNU Statement Expression extension 4*c1b6cca1SWentao Zhang // could introduce region terminators (break, goto etc) before implicit 5*c1b6cca1SWentao Zhang // initializers in a struct or an array. 6*c1b6cca1SWentao Zhang // See https://github.com/llvm/llvm-project/pull/89564 7*c1b6cca1SWentao Zhang 8*c1b6cca1SWentao Zhang struct Foo { 9*c1b6cca1SWentao Zhang int field1; 10*c1b6cca1SWentao Zhang int field2; 11*c1b6cca1SWentao Zhang }; 12*c1b6cca1SWentao Zhang f1(void)13*c1b6cca1SWentao Zhangvoid f1(void) { 14*c1b6cca1SWentao Zhang struct Foo foo = { 15*c1b6cca1SWentao Zhang .field1 = ({ 16*c1b6cca1SWentao Zhang switch (0) { 17*c1b6cca1SWentao Zhang case 0: 18*c1b6cca1SWentao Zhang break; // A region terminator 19*c1b6cca1SWentao Zhang } 20*c1b6cca1SWentao Zhang 0; 21*c1b6cca1SWentao Zhang }), 22*c1b6cca1SWentao Zhang // ImplicitValueInitExpr introduced here for .field2 23*c1b6cca1SWentao Zhang }; 24*c1b6cca1SWentao Zhang } 25*c1b6cca1SWentao Zhang f2(void)26*c1b6cca1SWentao Zhangvoid f2(void) { 27*c1b6cca1SWentao Zhang int arr[3] = { 28*c1b6cca1SWentao Zhang [0] = ({ 29*c1b6cca1SWentao Zhang goto L0; // A region terminator 30*c1b6cca1SWentao Zhang L0: 31*c1b6cca1SWentao Zhang 0; 32*c1b6cca1SWentao Zhang }), 33*c1b6cca1SWentao Zhang // ImplicitValueInitExpr introduced here for subscript [1] 34*c1b6cca1SWentao Zhang [2] = 0, 35*c1b6cca1SWentao Zhang }; 36*c1b6cca1SWentao Zhang } 37