xref: /llvm-project/clang/test/CoverageMapping/terminate-statements.cpp (revision 94dd4766a61bb18b263415e17e745dc2fa609162)
19783e209SZequan Wu // RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -fexceptions -fcxx-exceptions -emit-llvm-only -triple %itanium_abi_triple -main-file-name terminate-statements.cpp -I %S/Inputs %s | FileCheck %s
29783e209SZequan Wu 
f1()39783e209SZequan Wu int f1() {
49783e209SZequan Wu   return 0;
59783e209SZequan Wu   return 0; // CHECK: Gap,File 0, [[@LINE-1]]:12 -> [[@LINE]]:3 = 0
69783e209SZequan Wu }
79783e209SZequan Wu 
f2(int i)89783e209SZequan Wu int f2(int i) {
99783e209SZequan Wu   if (i)
109783e209SZequan Wu     return 0;
119783e209SZequan Wu   else
129783e209SZequan Wu     ;       // CHECK: Gap,File 0, [[@LINE]]:6 -> [[@LINE+1]]:3 = (#0 - #1)
139783e209SZequan Wu   return 1; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
149783e209SZequan Wu }
159783e209SZequan Wu 
f3()169783e209SZequan Wu int f3() {
179783e209SZequan Wu   for (int a = 1; a < 9; a--)
189783e209SZequan Wu     return a; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (#0 - #1)
199783e209SZequan Wu   return 0;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
209783e209SZequan Wu }
219783e209SZequan Wu 
f4(int i)229783e209SZequan Wu int f4(int i) {
239783e209SZequan Wu   while (i > 0) {
249783e209SZequan Wu     i++;
259783e209SZequan Wu     return i;
269783e209SZequan Wu   }         // CHECK: File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)
279783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
289783e209SZequan Wu }
299783e209SZequan Wu 
f5(int i)309783e209SZequan Wu int f5(int i) {
319783e209SZequan Wu   do {
329783e209SZequan Wu     return i;
339783e209SZequan Wu   } while (i > 0); // CHECK: Gap,File 0, [[@LINE]]:19 -> [[@LINE+1]]:3 = (0 - #1)
349783e209SZequan Wu   return 0;        // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (0 - #1)
359783e209SZequan Wu }
369783e209SZequan Wu 
f6()379783e209SZequan Wu int f6() {
389783e209SZequan Wu   int arr[] = {1, 2, 3, 4};
399783e209SZequan Wu   for (int i : arr) {
409783e209SZequan Wu     return i;
419783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)
429783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
439783e209SZequan Wu }
449783e209SZequan Wu 
f7()459783e209SZequan Wu int f7() {
469783e209SZequan Wu   {
479783e209SZequan Wu     {
489783e209SZequan Wu       return 0;
499783e209SZequan Wu     }
509783e209SZequan Wu     return 0; // CHECK: Gap,File 0, [[@LINE-1]]:6 -> [[@LINE]]:5 = 0
519783e209SZequan Wu   }
529783e209SZequan Wu   return 0; // CHECK: Gap,File 0, [[@LINE-1]]:4 -> [[@LINE]]:3 = 0
539783e209SZequan Wu }
549783e209SZequan Wu 
f8(int i)559783e209SZequan Wu int f8(int i) {
569783e209SZequan Wu   if (i == 1)
579783e209SZequan Wu     return 1; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (#0 - #1)
589783e209SZequan Wu   if (i == 2) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:2 = (#0 - #1)
599783e209SZequan Wu     return 2; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)
609783e209SZequan Wu   if (i == 3) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:2 = ((#0 - #1) - #2)
619783e209SZequan Wu     return 3; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (((#0 - #1) - #2) - #3)
629783e209SZequan Wu   return 4;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (((#0 - #1) - #2) - #3)
639783e209SZequan Wu }
649783e209SZequan Wu 
f9(int i)659783e209SZequan Wu int f9(int i) {
669783e209SZequan Wu   if (i == 1)
679783e209SZequan Wu     return 1;      // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:8 = (#0 - #1)
689783e209SZequan Wu   else if (i == 2) // CHECK-NEXT: File 0, [[@LINE]]:8 -> [[@LINE+1]]:13 = (#0 - #1)
699783e209SZequan Wu     return 2;      // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)
709783e209SZequan Wu   return 3;        // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = ((#0 - #1) - #2)
719783e209SZequan Wu }
729783e209SZequan Wu 
f10(int i)739783e209SZequan Wu int f10(int i) {
749783e209SZequan Wu   if (i == 1) {
759783e209SZequan Wu     return 0;
769783e209SZequan Wu     if (i == 2) // CHECK: Gap,File 0, [[@LINE-1]]:14 -> [[@LINE]]:5 = 0
779783e209SZequan Wu       return 0;
789783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)
799783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = ((#0 - #1) - #2)
809783e209SZequan Wu }
819783e209SZequan Wu 
f11(int i)829783e209SZequan Wu int f11(int i) {
839783e209SZequan Wu   if (i == 1)
849783e209SZequan Wu     i = 2;
859783e209SZequan Wu   else
869783e209SZequan Wu     return 0; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = #1
879783e209SZequan Wu   return 0;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = #1
889783e209SZequan Wu }
899783e209SZequan Wu 
f12(int i)909783e209SZequan Wu int f12(int i) {
919783e209SZequan Wu   int x = 1;
929783e209SZequan Wu   if (x == 1) {
939783e209SZequan Wu     if (x == 1) {
949783e209SZequan Wu       return 0;
959783e209SZequan Wu     }
969783e209SZequan Wu   } else if (x == 2) {
979783e209SZequan Wu     x = 2;
989783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #2)
999783e209SZequan Wu   return 1; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #2)
1009783e209SZequan Wu }
1019783e209SZequan Wu 
f13(int i)1029783e209SZequan Wu int f13(int i) {
1039783e209SZequan Wu   if (i == 1) {
1049783e209SZequan Wu     return 0;     // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:5 = 0
1059783e209SZequan Wu     if (i == 2) { // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+3]]:4 = 0
1069783e209SZequan Wu       i++;
1079783e209SZequan Wu     }
1089783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0  - #1)
1099783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
1109783e209SZequan Wu }
1119783e209SZequan Wu 
f14(int i)1129783e209SZequan Wu int f14(int i) {
1139783e209SZequan Wu   while (i == 0) {
1149783e209SZequan Wu     while (i < 10) {
1159783e209SZequan Wu       i++;
1169783e209SZequan Wu       return 0;
1179783e209SZequan Wu     }
1189783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #2)
1199783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #2)
1209783e209SZequan Wu }
1219783e209SZequan Wu 
f15(int i)1229783e209SZequan Wu int f15(int i) {
1239783e209SZequan Wu   while (i == 0) {
1249783e209SZequan Wu     return 0;        // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:5 = 0
1259783e209SZequan Wu     while (i < 10) { // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+3]]:4 = 0
1269783e209SZequan Wu       i++;
1279783e209SZequan Wu     }
1289783e209SZequan Wu   }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)
1299783e209SZequan Wu   return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)
1309783e209SZequan Wu }
1319783e209SZequan Wu 
f16(int i)1329783e209SZequan Wu int f16(int i) {
1339783e209SZequan Wu   while (i == 0) {
1349783e209SZequan Wu     break;
1359783e209SZequan Wu     return 0;
1369783e209SZequan Wu   }
1379783e209SZequan Wu   return 0; // CHECK-NOT: Gap,File 0, [[@LINE-1]]
1389783e209SZequan Wu }
1399783e209SZequan Wu 
1409783e209SZequan Wu #define IF if
1419783e209SZequan Wu #define STMT(S) S
1429783e209SZequan Wu 
1439783e209SZequan Wu // CHECK-LABEL: _Z3fooi:
foo(int x)1449783e209SZequan Wu void foo(int x) {
1459783e209SZequan Wu   if (x == 0) {
1469783e209SZequan Wu     return;
1479783e209SZequan Wu   } // CHECK-NOT: Gap,File 0, [[@LINE]]:4
1489783e209SZequan Wu     //< Don't complete the last deferred region in a decl, even though it may
1499783e209SZequan Wu     //< leave some whitespace marked with the same counter as the final return.
1509783e209SZequan Wu }
1519783e209SZequan Wu 
1529783e209SZequan Wu // CHECK-LABEL: _Z4foooi:
fooo(int x)1539783e209SZequan Wu void fooo(int x) {
1549783e209SZequan Wu   if (x == 0) {
1559783e209SZequan Wu     return;
1569783e209SZequan Wu   } // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+2]]:3 = (#0 - #1)
1579783e209SZequan Wu 
1589783e209SZequan Wu   if (x == 1) {
1599783e209SZequan Wu     return;
1609783e209SZequan Wu   } // CHECK-NOT: Gap,File 0, [[@LINE]]:4
1619783e209SZequan Wu 
1629783e209SZequan Wu }
1639783e209SZequan Wu 
1649783e209SZequan Wu // CHECK-LABEL: _Z3bazv:
baz()1659783e209SZequan Wu void baz() { // CHECK: [[@LINE]]:12 -> [[@LINE+2]]:2
1669783e209SZequan Wu   return;    // CHECK-NOT: File
1679783e209SZequan Wu }
1689783e209SZequan Wu 
1699783e209SZequan Wu // CHECK-LABEL: _Z4maazv:
maaz()1709783e209SZequan Wu void maaz() {
1719783e209SZequan Wu   if (true)
1729783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12
1739783e209SZequan Wu   else
1749783e209SZequan Wu     return; // CHECK-NOT: Gap,File 0, [[@LINE]]
1759783e209SZequan Wu }
1769783e209SZequan Wu 
1779783e209SZequan Wu // CHECK-LABEL: _Z5maaazv:
maaaz()1789783e209SZequan Wu void maaaz() {
1799783e209SZequan Wu   if (true) {
1809783e209SZequan Wu     return;
1819783e209SZequan Wu   } else {  // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE]]:10
1829783e209SZequan Wu     return; // CHECK-NOT: Gap,File 0, [[@LINE]]
1839783e209SZequan Wu   }
1849783e209SZequan Wu }
1859783e209SZequan Wu 
1869783e209SZequan Wu // CHECK-LABEL: _Z3bari:
bar(int x)1879783e209SZequan Wu void bar(int x) {
1889783e209SZequan Wu   IF (x)
1899783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)
1909783e209SZequan Wu 
1919783e209SZequan Wu   IF (!x)
1929783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = ((#0 - #1) - #2)
1939783e209SZequan Wu 
1949783e209SZequan Wu   foo(x);
1959783e209SZequan Wu }
1969783e209SZequan Wu 
1979783e209SZequan Wu // CHECK-LABEL: _Z4quuxi:
quux(int x)1989783e209SZequan Wu void quux(int x) {
1999783e209SZequan Wu   STMT(
2009783e209SZequan Wu   if (x == 0)
2019783e209SZequan Wu     return;)
2029783e209SZequan Wu 
2039783e209SZequan Wu   // CHECK: Gap,File 0, [[@LINE-2]]:13 -> [[@LINE+2]]:3 = (#0 - #1)
2049783e209SZequan Wu 
2059783e209SZequan Wu   if (x == 1)
2069783e209SZequan Wu     STMT(return;)
2079783e209SZequan Wu 
2089783e209SZequan Wu   // CHECK: Gap,File 0, [[@LINE-2]]:18 -> [[@LINE+2]]:3 = ((#0 - #1) - #2)
2099783e209SZequan Wu 
2109783e209SZequan Wu   STMT(
2119783e209SZequan Wu   if (x == 2)
2129783e209SZequan Wu     return;
2139783e209SZequan Wu 
2149783e209SZequan Wu   // CHECK-NOT: [[@LINE-2]]:{{.*}} -> [[@LINE+2]]
2159783e209SZequan Wu 
2169783e209SZequan Wu   if (x == 3)
2179783e209SZequan Wu     return;
2189783e209SZequan Wu   )
2199783e209SZequan Wu }
2209783e209SZequan Wu 
2219783e209SZequan Wu // CHECK-LABEL: _Z8weird_ifv:
weird_if()2229783e209SZequan Wu void weird_if() {
2239783e209SZequan Wu   int i = 0;
2249783e209SZequan Wu 
2259783e209SZequan Wu   if (false)
2269783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)
2279783e209SZequan Wu 
2289783e209SZequan Wu   if (false)
2299783e209SZequan Wu     i++;
2309783e209SZequan Wu 
2319783e209SZequan Wu   if (i + 100 > 0) { // CHECK: [[@LINE]]:20 -> [[@LINE+6]]:4 = #3
2329783e209SZequan Wu     if (false)       // CHECK: [[@LINE+1]]:7 -> [[@LINE+1]]:13 = #4
2339783e209SZequan Wu       return;        // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+2]]:5 = (#3 - #4)
2349783e209SZequan Wu                      // CHECK: [[@LINE+1]]:5 -> [[@LINE+1]]:11 = (#3 - #4)
2359783e209SZequan Wu     return;
2369783e209SZequan Wu 
2379783e209SZequan Wu   }                  // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+2]]:3 = ((#0 - #1) - #3)
2389783e209SZequan Wu 
2399783e209SZequan Wu   if (false)
2409783e209SZequan Wu     return; // CHECK-NOT: Gap,File 0, [[@LINE]]:11
2419783e209SZequan Wu }
2429783e209SZequan Wu 
2439783e209SZequan Wu // CHECK-LABEL: _Z8for_loopv:
for_loop()2449783e209SZequan Wu void for_loop() {
2459783e209SZequan Wu   if (false)
2469783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)
2479783e209SZequan Wu 
2489783e209SZequan Wu   for (int i = 0; i < 10; ++i) {
2499783e209SZequan Wu     if (i % 2 == 0)
2509783e209SZequan Wu       continue; // CHECK: Gap,File 0, [[@LINE]]:16 -> [[@LINE+2]]:5 = (#2 - #3)
2519783e209SZequan Wu 
2529783e209SZequan Wu     if (i % 5 == 0)
2539783e209SZequan Wu       break; // CHECK: Gap,File 0, [[@LINE]]:13 -> [[@LINE+2]]:5 = ((#2 - #3) - #4)
2549783e209SZequan Wu 
2559783e209SZequan Wu     int x = i; // CHECK: [[@LINE]]:5 -> [[@LINE+1]]:11 = ((#2 - #3) - #4)
2569783e209SZequan Wu     return; // CHECK-NOT: [[@LINE]]:11 -> [[@LINE+2]]
2579783e209SZequan Wu 
2589783e209SZequan Wu   }
2599783e209SZequan Wu }
2609783e209SZequan Wu 
2619783e209SZequan Wu struct Error {};
2629783e209SZequan Wu 
2639783e209SZequan Wu // CHECK-LABEL: _Z10while_loopv:
while_loop()2649783e209SZequan Wu void while_loop() {
2659783e209SZequan Wu   if (false)
2669783e209SZequan Wu     return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)
2679783e209SZequan Wu 
2689783e209SZequan Wu   int x = 0;
2699783e209SZequan Wu   while (++x < 10) {
2709783e209SZequan Wu     if (x == 1)
2719783e209SZequan Wu       continue; // CHECK: Gap,File 0, [[@LINE]]:16 -> [[@LINE+2]]:5 = (#2 - #3)
2729783e209SZequan Wu 
2739783e209SZequan Wu     while (++x < 4) {
2749783e209SZequan Wu       if (x == 3)
2759783e209SZequan Wu         break; // CHECK: Gap,File 0, [[@LINE]]:15 -> [[@LINE+2]]:7 = (#4 - #5)
2769783e209SZequan Wu 
2779783e209SZequan Wu       while (++x < 5) {}
2789783e209SZequan Wu     }
2799783e209SZequan Wu 
2809783e209SZequan Wu     if (x == 0)
2819783e209SZequan Wu       throw Error(); // CHECK: Gap,File 0, [[@LINE]]:21 -> [[@LINE+2]]:5 = ((#2 - #3) - #7)
2829783e209SZequan Wu 
2839783e209SZequan Wu     while (++x < 9) {
2849783e209SZequan Wu       if (x == 0)
2859783e209SZequan Wu         break; // CHECK-NOT: [[@LINE]]:14 -> [[@LINE+2]]
2869783e209SZequan Wu 
2879783e209SZequan Wu     }
2889783e209SZequan Wu   }
2899783e209SZequan Wu }
2909783e209SZequan Wu 
2919783e209SZequan Wu // CHECK-LABEL: _Z5gotosv:
gotos()2929783e209SZequan Wu void gotos() {
2939783e209SZequan Wu   if (false)
2949783e209SZequan Wu     goto out; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+2]]:3 = (#0 - #1)
2959783e209SZequan Wu 
2969783e209SZequan Wu   return; // CHECK: [[@LINE]]:3 -> [[@LINE]]:9 = (#0 - #1)
2979783e209SZequan Wu 
2989783e209SZequan Wu out:
2999783e209SZequan Wu 	return; // CHECK-NOT: Gap,File 0, [[@LINE]]:8
3009783e209SZequan Wu }
3019783e209SZequan Wu 
3029783e209SZequan Wu // CHECK-LABEL: _Z8switchesv:
switches()3039783e209SZequan Wu void switches() {
3049783e209SZequan Wu   int x;
3059783e209SZequan Wu   switch (x) {
3069783e209SZequan Wu     case 0:
3079783e209SZequan Wu       return;
3089783e209SZequan Wu     default:
3099783e209SZequan Wu       return; // CHECK-NOT: Gap,File 0, [[@LINE]]
3109783e209SZequan Wu   }
3119783e209SZequan Wu }
3129783e209SZequan Wu 
3139783e209SZequan Wu #include "deferred-region-helper.h"
3149783e209SZequan Wu // CHECK-LABEL: _Z13included_funcv:
3159783e209SZequan Wu // CHECK:  Gap,File 0, 2:13 -> 3:5 = #1
3169783e209SZequan Wu // CHECK:  Gap,File 0, 3:12 -> 4:3 = (#0 - #1)
3179783e209SZequan Wu 
3189783e209SZequan Wu // CHECK-LABEL: _Z7includev:
include()3199783e209SZequan Wu void include() {
3209783e209SZequan Wu   included_func();
3219783e209SZequan Wu }
3229783e209SZequan Wu 
323*94dd4766SYing Yi // CHECK-LABEL: _Z7ornoretv:
324*94dd4766SYing Yi void abort() __attribute__((noreturn));
325*94dd4766SYing Yi 
ornoret(void)326*94dd4766SYing Yi int ornoret(void) {
327*94dd4766SYing Yi   ( true || (abort(), 0) );  // CHECK: Gap,File 0, [[@LINE]]:28 -> [[@LINE+1]]:3 = #0
328*94dd4766SYing Yi   ( false || (abort(), 0) ); // CHECK: Gap,File 0, [[@LINE]]:29 -> [[@LINE+1]]:3 = 0
329*94dd4766SYing Yi   return 0;
330*94dd4766SYing Yi }
331*94dd4766SYing Yi 
332*94dd4766SYing Yi // CHECK-LABEL: _Z17abstractcondnoretv:
abstractcondnoret(void)333*94dd4766SYing Yi int abstractcondnoret(void) {
334*94dd4766SYing Yi   ( true ? void (0) : abort() );  // CHECK: Gap,File 0, [[@LINE]]:33 -> [[@LINE+1]]:3 = #1
335*94dd4766SYing Yi   ( false ? void (0) : abort() ); // CHECK: Gap,File 0, [[@LINE]]:34 -> [[@LINE+1]]:3 = #2
336*94dd4766SYing Yi   ( true ? abort() : void (0) );  // CHECK: Gap,File 0, [[@LINE]]:33 -> [[@LINE+1]]:3 = (#2 - #3)
337*94dd4766SYing Yi   ( false ? abort() : void (0) ); // CHECK: Gap,File 0, [[@LINE]]:34 -> [[@LINE+1]]:3 = ((#2 - #3) - #4)
338*94dd4766SYing Yi   return 0;
339*94dd4766SYing Yi }
340*94dd4766SYing Yi 
341*94dd4766SYing Yi // CHECK-LABEL: _Z13elsecondnoretv:
elsecondnoret(void)342*94dd4766SYing Yi int elsecondnoret(void) {
343*94dd4766SYing Yi   if (true) {} else {
344*94dd4766SYing Yi     true ? void (0) : abort();
345*94dd4766SYing Yi   } // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#1 + #2)
346*94dd4766SYing Yi   return 0;
347*94dd4766SYing Yi }
348*94dd4766SYing Yi 
main()3499783e209SZequan Wu int main() {
3509783e209SZequan Wu   foo(0);
3519783e209SZequan Wu   foo(1);
3529783e209SZequan Wu   fooo(0);
3539783e209SZequan Wu   fooo(1);
3549783e209SZequan Wu   maaz();
3559783e209SZequan Wu   maaaz();
3569783e209SZequan Wu   baz();
3579783e209SZequan Wu   bar(0);
3589783e209SZequan Wu   bar(1);
3599783e209SZequan Wu   quux(0);
3609783e209SZequan Wu   quux(1);
3619783e209SZequan Wu   quux(2);
3629783e209SZequan Wu   quux(3);
3639783e209SZequan Wu   weird_if();
3649783e209SZequan Wu   for_loop();
3659783e209SZequan Wu   while_loop();
3669783e209SZequan Wu   gotos();
3679783e209SZequan Wu   include();
368*94dd4766SYing Yi   ornoret();
369*94dd4766SYing Yi   abstractcondnoret();
370*94dd4766SYing Yi   elsecondnoret();
3719783e209SZequan Wu   return 0;
3729783e209SZequan Wu }
373