#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; }