Home | History | Annotate | Download | only in TestCases
      1 // RUN: %clangxx_asan -O2 %s -o %t
      2 // RUN: not %run %t -2 2>&1 | FileCheck --check-prefix=CHECK-m2 %s
      3 // RUN: not %run %t -1 2>&1 | FileCheck --check-prefix=CHECK-m1 %s
      4 // RUN: %run %t 0
      5 // RUN: %run %t 8
      6 // RUN: not %run %t 9  2>&1 | FileCheck --check-prefix=CHECK-9  %s
      7 // RUN: not %run %t 10 2>&1 | FileCheck --check-prefix=CHECK-10 %s
      8 // RUN: not %run %t 30 2>&1 | FileCheck --check-prefix=CHECK-30 %s
      9 // RUN: not %run %t 31 2>&1 | FileCheck --check-prefix=CHECK-31 %s
     10 // RUN: not %run %t 41 2>&1 | FileCheck --check-prefix=CHECK-41 %s
     11 // RUN: not %run %t 42 2>&1 | FileCheck --check-prefix=CHECK-42 %s
     12 // RUN: not %run %t 62 2>&1 | FileCheck --check-prefix=CHECK-62 %s
     13 // RUN: not %run %t 63 2>&1 | FileCheck --check-prefix=CHECK-63 %s
     14 // RUN: not %run %t 73 2>&1 | FileCheck --check-prefix=CHECK-73 %s
     15 // RUN: not %run %t 74 2>&1 | FileCheck --check-prefix=CHECK-74 %s
     16 #include <string.h>
     17 #include <stdio.h>
     18 #include <stdlib.h>
     19 #include <assert.h>
     20 int main(int argc, char **argv) {
     21   assert(argc >= 2);
     22   int idx = atoi(argv[1]);
     23   char AAA[10], BBB[10], CCC[10];
     24   memset(AAA, 0, sizeof(AAA));
     25   memset(BBB, 0, sizeof(BBB));
     26   memset(CCC, 0, sizeof(CCC));
     27   int res = 0;
     28   char *p = AAA + idx;
     29   printf("AAA: %p\ny: %p\nz: %p\np: %p\n", AAA, BBB, CCC, p);
     30   // make sure BBB and CCC are not removed;
     31   return *(short*)(p) + BBB[argc % 2] + CCC[argc % 2];
     32 }
     33 // CHECK-m2: 'AAA' <== {{.*}}underflows this variable
     34 // CHECK-m1: 'AAA' <== {{.*}}partially underflows this variable
     35 // CHECK-9:  'AAA' <== {{.*}}partially overflows this variable
     36 // CHECK-10: 'AAA' <== {{.*}}overflows this variable
     37 // CHECK-30: 'BBB' <== {{.*}}underflows this variable
     38 // CHECK-31: 'BBB' <== {{.*}}partially underflows this variable
     39 // CHECK-41: 'BBB' <== {{.*}}partially overflows this variable
     40 // CHECK-42: 'BBB' <== {{.*}}overflows this variable
     41 // CHECK-62: 'CCC' <== {{.*}}underflows this variable
     42 // CHECK-63: 'CCC' <== {{.*}}partially underflows this variable
     43 // CHECK-73: 'CCC' <== {{.*}}partially overflows this variable
     44 // CHECK-74: 'CCC' <== {{.*}}overflows this variable
     45