File: pattern-test-2.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (47 lines) | stat: -rw-r--r-- 1,431 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* { dg-additional-options "-fanalyzer-checker=pattern-test -O2" } */
// TODO: run this at every optimization level

extern void foo(void *);
extern void bar(void *);

void test1(void *ptr)
{
  if (ptr) { /* { dg-warning "pattern match on 'ptr != 0'" "ptr != 0" } */
  /* { dg-warning "pattern match on 'ptr == 0'" "ptr == 0" { target *-*-* } .-1 } */
    foo(ptr);
  } else {
    bar(ptr);
  }
}

void test_2 (void *p, void *q)
{
  _Bool tmp1 = p == 0;
  _Bool tmp2 = q == 0;
  _Bool tmp = tmp1 | tmp2;

  /* Verify that we can detect the implied conditions on p and q here.  */
  if (tmp) /* { dg-line cond_2 }  */
    return;
  foo(p);

  /* { dg-warning "pattern match on 'p != 0'" "p != 0" { target *-*-* } cond_2 } */
  /* { dg-warning "pattern match on 'tmp1 | tmp2 != 0'" "tmp1 | tmp2 != 0" { target *-*-* } cond_2 } */
  /* { dg-warning "pattern match on 'q != 0'" "q != 0" { target *-*-* } cond_2 } */
}

void test_3 (void *p, void *q)
{
  _Bool tmp1 = p == 0;
  _Bool tmp2 = q == 0;
  _Bool tmp = tmp1 & tmp2;

  /* Verify that we can detect the implied conditions on p and q here.  */
  if (tmp) /* { dg-line cond_3 }  */
    return;
  foo(p);

  /* { dg-warning "pattern match on 'p == 0'" "p == 0" { target *-*-* } cond_3 } */
  /* { dg-warning "pattern match on 'tmp1 & tmp2 == 0'" "tmp1 & tmp2 == 0" { target *-*-* } cond_3 } */
  /* { dg-warning "pattern match on 'q == 0'" "q == 0" { target *-*-* } cond_3 } */
}