brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 7d5b4b1 Raw
179 lines · cpp
1// Force x86-64 because some of our heuristics are actually based2// on integer sizes.3 4// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only -verify -std=c++11 %s5 6namespace RuntimeBehavior {7  // Avoid emitting tautological compare warnings when the code already has8  // compile time checks on variable sizes.9 10  const int kintmax = 2147483647;11  void test0(short x) {12    if (sizeof(x) < sizeof(int) || x < kintmax) {}13 14    if (x < kintmax) {}15    // expected-warning@-1{{comparison of constant 2147483647 with expression of type 'short' is always true}}16  }17 18  void test1(short x) {19    if (x < kintmax) {}20    // expected-warning@-1{{comparison of constant 2147483647 with expression of type 'short' is always true}}21 22    if (sizeof(x) < sizeof(int))23      return;24 25    if (x < kintmax) {}26  }27}28 29namespace ArrayCompare {30  #define GetValue(ptr)  ((ptr != 0) ? ptr[0] : 0)31  extern int a[] __attribute__((weak));32  int b[] = {8,13,21};33  struct {34    int x[10];35  } c;36  const char str[] = "text";37  void ignore() {38    if (a == 0) {}39    if (a != 0) {}40    (void)GetValue(b);41  }42  void test() {43    if (b == 0) {}44    // expected-warning@-1{{comparison of array 'b' equal to a null pointer is always false}}45    if (b != 0) {}46    // expected-warning@-1{{comparison of array 'b' not equal to a null pointer is always true}}47    if (0 == b) {}48    // expected-warning@-1{{comparison of array 'b' equal to a null pointer is always false}}49    if (0 != b) {}50    // expected-warning@-1{{comparison of array 'b' not equal to a null pointer is always true}}51    if (c.x == 0) {}52    // expected-warning@-1{{comparison of array 'c.x' equal to a null pointer is always false}}53    if (c.x != 0) {}54    // expected-warning@-1{{comparison of array 'c.x' not equal to a null pointer is always true}}55    if (str == 0) {}56    // expected-warning@-1{{comparison of array 'str' equal to a null pointer is always false}}57    if (str != 0) {}58    // expected-warning@-1{{comparison of array 'str' not equal to a null pointer is always true}}59  }60}61 62namespace FunctionCompare {63  #define CallFunction(f) ((f != 0) ? f() : 0)64  extern void a()  __attribute__((weak));65  void fun1();66  int fun2();67  int* fun3();68  int* fun4(int);69  class S {70  public:71    static int foo();72  };73  void ignore() {74    if (a == 0) {}75    if (0 != a) {}76    (void)CallFunction(fun2);77  }78  void test() {79    if (fun1 == 0) {}80    // expected-warning@-1{{comparison of function 'fun1' equal to a null pointer is always false}}81    // expected-note@-2{{prefix with the address-of operator to silence this warning}}82    if (fun2 == 0) {}83    // expected-warning@-1{{comparison of function 'fun2' equal to a null pointer is always false}}84    // expected-note@-2{{prefix with the address-of operator to silence this warning}}85    // expected-note@-3{{suffix with parentheses to turn this into a function call}}86    if (fun3 == 0) {}87    // expected-warning@-1{{comparison of function 'fun3' equal to a null pointer is always false}}88    // expected-note@-2{{prefix with the address-of operator to silence this warning}}89    // expected-note@-3{{suffix with parentheses to turn this into a function call}}90    if (fun4 == 0) {}91    // expected-warning@-1{{comparison of function 'fun4' equal to a null pointer is always false}}92    // expected-note@-2{{prefix with the address-of operator to silence this warning}}93    if (nullptr != fun1) {}94    // expected-warning@-1{{comparison of function 'fun1' not equal to a null pointer is always true}}95    // expected-note@-2{{prefix with the address-of operator to silence this warning}}96    if (nullptr != fun2) {}97    // expected-warning@-1{{comparison of function 'fun2' not equal to a null pointer is always true}}98    // expected-note@-2{{prefix with the address-of operator to silence this warning}}99    if (nullptr != fun3) {}100    // expected-warning@-1{{comparison of function 'fun3' not equal to a null pointer is always true}}101    // expected-note@-2{{prefix with the address-of operator to silence this warning}}102    // expected-note@-3{{suffix with parentheses to turn this into a function call}}103    if (nullptr != fun4) {}104    // expected-warning@-1{{comparison of function 'fun4' not equal to a null pointer is always true}}105    // expected-note@-2{{prefix with the address-of operator to silence this warning}}106    if (S::foo == 0) {}107    // expected-warning@-1{{comparison of function 'S::foo' equal to a null pointer is always false}}108    // expected-note@-2{{prefix with the address-of operator to silence this warning}}109    // expected-note@-3{{suffix with parentheses to turn this into a function call}}110  }111}112 113namespace PointerCompare {114  extern int a __attribute__((weak));115  int b;116  static int c;117  class S {118  public:119    static int a;120    int b;121  };122  void ignored() {123    if (&a == 0) {}124  }125  void test() {126    S s;127    if (&b == 0) {}128    // expected-warning@-1{{comparison of address of 'b' equal to a null pointer is always false}}129    if (&c == 0) {}130    // expected-warning@-1{{comparison of address of 'c' equal to a null pointer is always false}}131    if (&s.a == 0) {}132    // expected-warning@-1{{comparison of address of 's.a' equal to a null pointer is always false}}133    if (&s.b == 0) {}134    // expected-warning@-1{{comparison of address of 's.b' equal to a null pointer is always false}}135    if (&S::a == 0) {}136    // expected-warning@-1{{comparison of address of 'S::a' equal to a null pointer is always false}}137  }138}139 140namespace macros {141  #define assert(x) if (x) {}142  int array[5];143  void fun();144  int x;145 146  void test() {147    assert(array == 0);148    // expected-warning@-1{{comparison of array 'array' equal to a null pointer is always false}}149    assert(array != 0);150    // expected-warning@-1{{comparison of array 'array' not equal to a null pointer is always true}}151    assert(array == 0 && "expecting null pointer");152    // expected-warning@-1{{comparison of array 'array' equal to a null pointer is always false}}153    assert(array != 0 && "expecting non-null pointer");154    // expected-warning@-1{{comparison of array 'array' not equal to a null pointer is always true}}155 156    assert(fun == 0);157    // expected-warning@-1{{comparison of function 'fun' equal to a null pointer is always false}}158    // expected-note@-2{{prefix with the address-of operator to silence this warning}}159    assert(fun != 0);160    // expected-warning@-1{{comparison of function 'fun' not equal to a null pointer is always true}}161    // expected-note@-2{{prefix with the address-of operator to silence this warning}}162    assert(fun == 0 && "expecting null pointer");163    // expected-warning@-1{{comparison of function 'fun' equal to a null pointer is always false}}164    // expected-note@-2{{prefix with the address-of operator to silence this warning}}165    assert(fun != 0 && "expecting non-null pointer");166    // expected-warning@-1{{comparison of function 'fun' not equal to a null pointer is always true}}167    // expected-note@-2{{prefix with the address-of operator to silence this warning}}168 169    assert(&x == 0);170    // expected-warning@-1{{comparison of address of 'x' equal to a null pointer is always false}}171    assert(&x != 0);172    // expected-warning@-1{{comparison of address of 'x' not equal to a null pointer is always true}}173    assert(&x == 0 && "expecting null pointer");174    // expected-warning@-1{{comparison of address of 'x' equal to a null pointer is always false}}175    assert(&x != 0 && "expecting non-null pointer");176    // expected-warning@-1{{comparison of address of 'x' not equal to a null pointer is always true}}177  }178}179