brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · 93d6557 Raw
391 lines · cpp
1// 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 %s2 3int f1() {4  return 0;5  return 0; // CHECK: Gap,File 0, [[@LINE-1]]:12 -> [[@LINE]]:3 = 06}7 8int f2(int i) {9  if (i)10    return 0;11  else12    ;       // CHECK: Gap,File 0, [[@LINE]]:6 -> [[@LINE+1]]:3 = (#0 - #1)13  return 1; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)14}15 16int f3() {17  for (int a = 1; a < 9; a--)18    return a; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (#0 - #1)19  return 0;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)20}21 22int f4(int i) {23  while (i > 0) {24    i++;25    return i;26  }         // CHECK: File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)27  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)28}29 30int f5(int i) {31  do {32    return i;33  } while (i > 0); // CHECK: Gap,File 0, [[@LINE]]:19 -> [[@LINE+1]]:3 = (0 - #1)34  return 0;        // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (0 - #1)35}36 37int f6() {38  int arr[] = {1, 2, 3, 4};39  for (int i : arr) {40    return i;41  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)42  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)43}44 45int f7() {46  {47    {48      return 0;49    }50    return 0; // CHECK: Gap,File 0, [[@LINE-1]]:6 -> [[@LINE]]:5 = 051  }52  return 0; // CHECK: Gap,File 0, [[@LINE-1]]:4 -> [[@LINE]]:3 = 053}54 55int f8(int i) {56  if (i == 1)57    return 1; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (#0 - #1)58  if (i == 2) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:2 = (#0 - #1)59    return 2; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)60  if (i == 3) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:2 = ((#0 - #1) - #2)61    return 3; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = (((#0 - #1) - #2) - #3)62  return 4;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (((#0 - #1) - #2) - #3)63}64 65int f9(int i) {66  if (i == 1)67    return 1;      // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:8 = (#0 - #1)68  else if (i == 2) // CHECK-NEXT: File 0, [[@LINE]]:8 -> [[@LINE+1]]:13 = (#0 - #1)69    return 2;      // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)70  return 3;        // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = ((#0 - #1) - #2)71}72 73int f10(int i) {74  if (i == 1) {75    return 0;76    if (i == 2) // CHECK: Gap,File 0, [[@LINE-1]]:14 -> [[@LINE]]:5 = 077      return 0;78  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = ((#0 - #1) - #2)79  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = ((#0 - #1) - #2)80}81 82int f11(int i) {83  if (i == 1)84    i = 2;85  else86    return 0; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:3 = #187  return 0;   // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = #188}89 90int f12(int i) {91  int x = 1;92  if (x == 1) {93    if (x == 1) {94      return 0;95    }96  } else if (x == 2) {97    x = 2;98  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #2)99  return 1; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #2)100}101 102int f13(int i) {103  if (i == 1) {104    return 0;     // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:5 = 0105    if (i == 2) { // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+3]]:4 = 0106      i++;107    }108  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0  - #1)109  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)110}111 112int f14(int i) {113  while (i == 0) {114    while (i < 10) {115      i++;116      return 0;117    }118  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #2)119  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #2)120}121 122int f15(int i) {123  while (i == 0) {124    return 0;        // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+1]]:5 = 0125    while (i < 10) { // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+3]]:4 = 0126      i++;127    }128  }         // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#0 - #1)129  return 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = (#0 - #1)130}131 132int f16(int i) {133  while (i == 0) {134    break;135    return 0;136  }137  return 0; // CHECK-NOT: Gap,File 0, [[@LINE-1]]138}139 140#define IF if141#define STMT(S) S142 143// CHECK-LABEL: _Z3fooi:144void foo(int x) {145  if (x == 0) {146    return;147  } // CHECK-NOT: Gap,File 0, [[@LINE]]:4148    //< Don't complete the last deferred region in a decl, even though it may149    //< leave some whitespace marked with the same counter as the final return.150}151 152// CHECK-LABEL: _Z4foooi:153void fooo(int x) {154  if (x == 0) {155    return;156  } // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+2]]:3 = (#0 - #1)157 158  if (x == 1) {159    return;160  } // CHECK-NOT: Gap,File 0, [[@LINE]]:4161 162}163 164// CHECK-LABEL: _Z3bazv:165void baz() { // CHECK: [[@LINE]]:12 -> [[@LINE+2]]:2166  return;    // CHECK-NOT: File167}168 169// CHECK-LABEL: _Z4maazv:170void maaz() {171  if (true)172    return; // CHECK: Gap,File 0, [[@LINE]]:12173  else174    return; // CHECK-NOT: Gap,File 0, [[@LINE]]175}176 177// CHECK-LABEL: _Z5maaazv:178void maaaz() {179  if (true) {180    return;181  } else {  // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE]]:10182    return; // CHECK-NOT: Gap,File 0, [[@LINE]]183  }184}185 186// CHECK-LABEL: _Z3bari:187void bar(int x) {188  IF (x)189    return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)190 191  IF (!x)192    return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = ((#0 - #1) - #2)193 194  foo(x);195}196 197// CHECK-LABEL: _Z4quuxi:198void quux(int x) {199  STMT(200  if (x == 0)201    return;)202 203  // CHECK: Gap,File 0, [[@LINE-2]]:13 -> [[@LINE+2]]:3 = (#0 - #1)204 205  if (x == 1)206    STMT(return;)207 208  // CHECK: Gap,File 0, [[@LINE-2]]:18 -> [[@LINE+2]]:3 = ((#0 - #1) - #2)209 210  STMT(211  if (x == 2)212    return;213 214  // CHECK-NOT: [[@LINE-2]]:{{.*}} -> [[@LINE+2]]215 216  if (x == 3)217    return;218  )219}220 221// CHECK-LABEL: _Z8weird_ifv:222void weird_if() {223  int i = 0;224 225  if (false)226    return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)227 228  if (false)229    i++;230 231  if (i + 100 > 0) { // CHECK: [[@LINE]]:20 -> [[@LINE+6]]:4 = #3232    if (false)       // CHECK: [[@LINE+1]]:7 -> [[@LINE+1]]:13 = #4233      return;        // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+2]]:5 = (#3 - #4)234                     // CHECK: [[@LINE+1]]:5 -> [[@LINE+1]]:11 = (#3 - #4)235    return;236 237  }                  // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+2]]:3 = ((#0 - #1) - #3)238 239  if (false)240    return; // CHECK-NOT: Gap,File 0, [[@LINE]]:11241}242 243// CHECK-LABEL: _Z8for_loopv:244void for_loop() {245  if (false)246    return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)247 248  for (int i = 0; i < 10; ++i) {249    if (i % 2 == 0)250      continue; // CHECK: Gap,File 0, [[@LINE]]:16 -> [[@LINE+2]]:5 = (#2 - #3)251 252    if (i % 5 == 0)253      break; // CHECK: Gap,File 0, [[@LINE]]:13 -> [[@LINE+2]]:5 = ((#2 - #3) - #4)254 255    int x = i; // CHECK: [[@LINE]]:5 -> [[@LINE+1]]:11 = ((#2 - #3) - #4)256    return; // CHECK-NOT: [[@LINE]]:11 -> [[@LINE+2]]257 258  }259}260 261struct Error {};262 263// CHECK-LABEL: _Z10while_loopv:264void while_loop() {265  if (false)266    return; // CHECK: Gap,File 0, [[@LINE]]:12 -> [[@LINE+2]]:3 = (#0 - #1)267 268  int x = 0;269  while (++x < 10) {270    if (x == 1)271      continue; // CHECK: Gap,File 0, [[@LINE]]:16 -> [[@LINE+2]]:5 = (#2 - #3)272 273    while (++x < 4) {274      if (x == 3)275        break; // CHECK: Gap,File 0, [[@LINE]]:15 -> [[@LINE+2]]:7 = (#4 - #5)276 277      while (++x < 5) {}278    }279 280    if (x == 0)281      throw Error(); // CHECK: Gap,File 0, [[@LINE]]:21 -> [[@LINE+2]]:5 = ((#2 - #3) - #7)282 283    while (++x < 9) {284      if (x == 0)285        break; // CHECK-NOT: [[@LINE]]:14 -> [[@LINE+2]]286 287    }288  }289}290 291// CHECK-LABEL: _Z5gotosv:292void gotos() {293  if (false)294    goto out; // CHECK: Gap,File 0, [[@LINE]]:14 -> [[@LINE+2]]:3 = (#0 - #1)295 296  return; // CHECK: [[@LINE]]:3 -> [[@LINE]]:9 = (#0 - #1)297 298out:299	return; // CHECK-NOT: Gap,File 0, [[@LINE]]:8300}301 302// CHECK-LABEL: _Z8switchesv:303void switches() {304  int x;305  switch (x) {306    case 0:307      return;308    default:309      return; // CHECK-NOT: Gap,File 0, [[@LINE]]310  }311}312 313#include "deferred-region-helper.h"314// CHECK-LABEL: _Z13included_funcv:315// CHECK:  Gap,File 0, 2:13 -> 3:5 = #1316// CHECK:  Gap,File 0, 3:12 -> 4:3 = (#0 - #1)317 318// CHECK-LABEL: _Z7includev:319void include() {320  included_func();321}322 323// CHECK-LABEL: _Z7ornoretv:324void abort() __attribute__((noreturn));325 326int ornoret(void) {327  ( true || (abort(), 0) );  // CHECK: Gap,File 0, [[@LINE]]:28 -> [[@LINE+1]]:3 = #0328  ( false || (abort(), 0) ); // CHECK: Gap,File 0, [[@LINE]]:29 -> [[@LINE+1]]:3 = 0329  return 0;330}331 332// CHECK-LABEL: _Z17abstractcondnoretv:333int abstractcondnoret(void) {334  ( true ? void (0) : abort() );  // CHECK: Gap,File 0, [[@LINE]]:33 -> [[@LINE+1]]:3 = #1335  ( false ? void (0) : abort() ); // CHECK: Gap,File 0, [[@LINE]]:34 -> [[@LINE+1]]:3 = #2336  ( true ? abort() : void (0) );  // CHECK: Gap,File 0, [[@LINE]]:33 -> [[@LINE+1]]:3 = (#2 - #3)337  ( false ? abort() : void (0) ); // CHECK: Gap,File 0, [[@LINE]]:34 -> [[@LINE+1]]:3 = ((#2 - #3) - #4)338  return 0;339}340 341// CHECK-LABEL: _Z13elsecondnoretv:342int elsecondnoret(void) {343  if (true) {} else {344    true ? void (0) : abort();345  } // CHECK: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = (#1 + #2)346  return 0;347}348 349// CHECK-LABEL: _Z18statementexprnoretb:350int statementexprnoret(bool crash) {351  int rc = ({ if (crash) abort(); 0; }); // CHECK: File 0, [[@LINE]]:35 -> [[@LINE+1]]:12 = (#0 - #1)352  return rc;                             // CHECK-NOT: Gap353}354 355// CHECK-LABEL: _Z13do_with_breaki:356int do_with_break(int n) {357  do {358    if (n == 87) {359      break;360    }               // CHECK: File 0, [[@LINE-2]]:18 -> [[@LINE]]:6 = #2361  } while (0);      // CHECK: File 0, [[@LINE]]:12 -> [[@LINE]]:13 = ((#0 + #1) - #2)362  return 0;         // CHECK-NOT: Gap,File 0, [[@LINE-1]]:15363}364 365int main() {366  foo(0);367  foo(1);368  fooo(0);369  fooo(1);370  maaz();371  maaaz();372  baz();373  bar(0);374  bar(1);375  quux(0);376  quux(1);377  quux(2);378  quux(3);379  weird_if();380  for_loop();381  while_loop();382  gotos();383  include();384  ornoret();385  abstractcondnoret();386  elsecondnoret();387  statementexprnoret(false);388  do_with_break(0);389  return 0;390}391