brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 7513608 Raw
144 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-constant-conversion %s2// RUN: %clang_cc1 -fsyntax-only -verify -Wno-constant-conversion -std=c++98 %s3// RUN: %clang_cc1 -fsyntax-only -verify -Wno-constant-conversion -std=c++11 %s4 5void choice(int);6int choice(bool);7 8void test() {9  // Result of ! must be type bool.10  int i = choice(!1);11}12 13#if __cplusplus < 201703L14void f0() {15  extern void f0_1(int*);16  register int x;17#if __cplusplus >= 201103L // C++11 or later18  // expected-warning@-2 {{'register' storage class specifier is deprecated}}19#endif20  f0_1(&x);21}22#endif23 24namespace test1 {25  template <class T> void bar(T &x) { T::fail(); }26  template <class T> void bar(volatile T &x) {}27 28  void test_ints() {29    volatile int x;30    bar(x = 5);31    bar(x += 5);32  }33 34  enum E { E_zero };35  void test_enums() {36    volatile E x;37    bar(x = E_zero);38    bar(x += E_zero); // expected-error {{incompatible type}}39  }40}41 42int test2(int x) {43  return x && 4; // expected-warning {{use of logical '&&' with constant operand}} \44                   // expected-note {{use '&' for a bitwise operation}} \45                   // expected-note {{remove constant to silence this warning}}46 47  return x && sizeof(int) == 4;  // no warning, RHS is logical op.48  return x && true;49  return x && false;50  return x || true;51  return x || false;52 53  return x && (unsigned)0; // expected-warning {{use of logical '&&' with constant operand}} \54                   // expected-note {{use '&' for a bitwise operation}} \55                   // expected-note {{remove constant to silence this warning}}56 57  return x || (unsigned)1; // expected-warning {{use of logical '||' with constant operand}} \58                   // expected-note {{use '|' for a bitwise operation}}59 60  return x || 0; // expected-warning {{use of logical '||' with constant operand}} \61                   // expected-note {{use '|' for a bitwise operation}}62  return x || 1; // expected-warning {{use of logical '||' with constant operand}} \63                   // expected-note {{use '|' for a bitwise operation}}64  return x || -1; // expected-warning {{use of logical '||' with constant operand}} \65                   // expected-note {{use '|' for a bitwise operation}}66  return x || 5; // expected-warning {{use of logical '||' with constant operand}} \67                   // expected-note {{use '|' for a bitwise operation}}68  return x && 0; // expected-warning {{use of logical '&&' with constant operand}} \69                   // expected-note {{use '&' for a bitwise operation}} \70                   // expected-note {{remove constant to silence this warning}}71  return x && 1; // expected-warning {{use of logical '&&' with constant operand}} \72                   // expected-note {{use '&' for a bitwise operation}} \73                   // expected-note {{remove constant to silence this warning}}74  return x && -1; // expected-warning {{use of logical '&&' with constant operand}} \75                   // expected-note {{use '&' for a bitwise operation}} \76                   // expected-note {{remove constant to silence this warning}}77  return x && 5; // expected-warning {{use of logical '&&' with constant operand}} \78                   // expected-note {{use '&' for a bitwise operation}} \79                   // expected-note {{remove constant to silence this warning}}80  return x || (0); // expected-warning {{use of logical '||' with constant operand}} \81                   // expected-note {{use '|' for a bitwise operation}}82  return x || (1); // expected-warning {{use of logical '||' with constant operand}} \83                   // expected-note {{use '|' for a bitwise operation}}84  return x || (-1); // expected-warning {{use of logical '||' with constant operand}} \85                   // expected-note {{use '|' for a bitwise operation}}86  return x || (5); // expected-warning {{use of logical '||' with constant operand}} \87                   // expected-note {{use '|' for a bitwise operation}}88  return x && (0); // expected-warning {{use of logical '&&' with constant operand}} \89                   // expected-note {{use '&' for a bitwise operation}} \90                   // expected-note {{remove constant to silence this warning}}91  return x && (1); // expected-warning {{use of logical '&&' with constant operand}} \92                   // expected-note {{use '&' for a bitwise operation}} \93                   // expected-note {{remove constant to silence this warning}}94  return x && (-1); // expected-warning {{use of logical '&&' with constant operand}} \95                   // expected-note {{use '&' for a bitwise operation}} \96                   // expected-note {{remove constant to silence this warning}}97  return x && (5); // expected-warning {{use of logical '&&' with constant operand}} \98                   // expected-note {{use '&' for a bitwise operation}} \99                   // expected-note {{remove constant to silence this warning}}100}101 102template<unsigned int A, unsigned int B> struct S103{104  enum {105    e1 = A && B,106    e2 = A && 7      // expected-warning {{use of logical '&&' with constant operand}} \107                     // expected-note {{use '&' for a bitwise operation}} \108                     // expected-note {{remove constant to silence this warning}}109  };110 111  int foo() {112    int x = A && B;113    int y = B && 3;  // expected-warning {{use of logical '&&' with constant operand}} \114                     // expected-note {{use '&' for a bitwise operation}} \115                     // expected-note {{remove constant to silence this warning}}116 117    return x + y;118  }119};120 121void test3() {122  S<5, 8> s1;123  S<2, 7> s2;124  (void)s1.foo();125  (void)s2.foo();126}127 128namespace pr16992 {129  typedef int T;130  unsigned getsz() {131    return (sizeof T());132  }133}134 135void test4() {136  #define X 0137  #define Y 1138  bool r1 = X || Y;139 140  #define Y2 2141  bool r2 = X || Y2; // expected-warning {{use of logical '||' with constant operand}} \142                     // expected-note {{use '|' for a bitwise operation}}143}144