mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 11:35:51 -04:00

null comparison when the pointer is known to be non-null. This catches the array to pointer decay, function to pointer decay and address of variables. This does not catch address of function since this has been previously used to silence a warning. Pointer to bool conversion is under -Wbool-conversion. Pointer to null comparison is under -Wtautological-pointer-compare, a sub-group of -Wtautological-compare. void foo() { int arr[5]; int x; // warn on these conditionals if (foo); if (arr); if (&x); if (foo == null); if (arr == null); if (&x == null); if (&foo); // no warning } llvm-svn: 202216
25 lines
691 B
C
25 lines
691 B
C
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-bool-conversion %s
|
|
|
|
typedef __typeof((int*) 0 - (int*) 0) intptr_t;
|
|
|
|
static int f = 10;
|
|
static int b = f; // expected-error {{initializer element is not a compile-time constant}}
|
|
|
|
float r = (float) (intptr_t) &r; // expected-error {{initializer element is not a compile-time constant}}
|
|
intptr_t s = (intptr_t) &s;
|
|
_Bool t = &t;
|
|
|
|
|
|
union bar {
|
|
int i;
|
|
};
|
|
|
|
struct foo {
|
|
short ptr;
|
|
};
|
|
|
|
union bar u[1];
|
|
struct foo x = {(intptr_t) u}; // expected-error {{initializer element is not a compile-time constant}}
|
|
struct foo y = {(char) u}; // expected-error {{initializer element is not a compile-time constant}}
|
|
intptr_t z = (intptr_t) u; // no-error
|