aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/analyzer/deref-before-check-macro.c
blob: 5146129772f96d359bf59ec03a55d6c304a1395e (plain)
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
#define NULL ((void*)0)

#define MY_ASSERT(COND)				\
  do {						\
    if (!(COND)) { __builtin_abort(); }		\
  } while (0)

int test_1 (int *p)
{
  int result = *p;
  MY_ASSERT (p); /* { dg-warning "check of 'p' for NULL after already dereferencing it" "" { xfail *-*-* } } */
  /* Due to lack of locations for gimple arguments we can't get
     at the location of the condition separately from the
     gimple_cond stmt, and thus can't distinguish if it's in the
     macro definition or in the supplied params; we defer to
     rejecting the diagnostic.  */
  return result;
}

int test_2 (int *p)
{
  int result = *p;
  MY_ASSERT (p != NULL); /* { dg-warning "check of 'p' for NULL after already dereferencing it" "" { xfail *-*-* } } */
  return result;
}