1  /* Basic test on number of inserted callbacks.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-fsanitize-coverage=trace-cmp -fdump-tree-optimized -fno-thread-jumps" } */
       4  /* { dg-skip-if "different type layout" { avr-*-* } } */
       5  
       6  #if __SIZEOF_INT__ < 4
       7  typedef __INT32_TYPE__ int32;
       8  #else
       9  typedef int int32;
      10  #endif
      11  
      12  void
      13  foo (char *a, short *b, int32 *c, long long *d, float *e, double *f)
      14  {
      15    if (*a)
      16      *a += 1;
      17    if (*b)
      18      *b = *a;
      19    if (*c)
      20      *c += 1;
      21    if (*d)
      22      *d = *c;
      23    if (*e == *c)
      24      *e = *c;
      25    if (*f == *e)
      26      *f = *e;
      27    switch (*a)
      28      {
      29      case 2:
      30        *b += 2;
      31        break;
      32      case 3:
      33        *b += 3;
      34        break;
      35      case 4:
      36        *b += 4;
      37        break;
      38      case 5:
      39        *b += 5;
      40        break;
      41      case 6:
      42        *b += 6;
      43        break;
      44      case 7 ... 24:
      45        *b += 7;
      46        break;
      47      default:
      48        break;
      49      }
      50    switch (*d)
      51      {
      52      case 3:
      53        *d += 3;
      54      case -4:
      55        *d -= 4;
      56      case -5:
      57        *d -= 5;
      58      case -6:
      59        *d -= 6;
      60      case -7:
      61        *d -= 7;
      62      case -8:
      63        *d -= 8;
      64      case -9:
      65        *d -= 9;
      66      case -10:
      67        *d -= 10;
      68      }
      69  }
      70  
      71  void
      72  bar (int32 *c)
      73  {
      74    if (*c == 27)
      75      *c += 2;
      76    if (*c == 37)
      77      *c += 2;
      78  }
      79  
      80  int32
      81  baz (int32 *c, long long d, long long e)
      82  {
      83    *c = (*c == 48) ? 12 : 24;
      84    return d == e;
      85  }
      86  
      87  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp1 \\(0, " 1 "optimized" } } */
      88  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp2 \\(0, " 1 "optimized" } } */
      89  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp4 \\(0, " 1 "optimized" } } */
      90  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp8 \\(0, " 1 "optimized" } } */
      91  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp4 \\(27, " 1 "optimized" } } */
      92  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp4 \\(37, " 1 "optimized" } } */
      93  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp4 \\(48, " 1 "optimized" } } */
      94  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_cmp8 \\(" 1 "optimized" } } */
      95  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_cmpf \\(" 1 "optimized" } } */
      96  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_cmpd \\(" 1 "optimized" } } */
      97  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_const_cmp" 7 "optimized" } } */
      98  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_cmp" 3 "optimized" } } */
      99  /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_switch \\(" 2 "optimized" } } */