brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · a24b5a2 Raw
138 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -verify -Wno-unused -Wunused-comparison %s2 3struct A {4  bool operator==(const A&);5  bool operator!=(const A&);6  bool operator<(const A&);7  bool operator>(const A&);8  bool operator<=(const A&);9  bool operator>=(const A&);10  A operator|=(const A&);11  operator bool();12};13 14void test() {15  int x, *p;16  A a, b;17 18  x == 7; // expected-warning {{equality comparison result unused}} \19          // expected-note {{use '=' to turn this equality comparison into an assignment}}20  x != 7; // expected-warning {{inequality comparison result unused}} \21          // expected-note {{use '|=' to turn this inequality comparison into an or-assignment}}22  x < 7;  // expected-warning {{relational comparison result unused}}23  x > 7;  // expected-warning {{relational comparison result unused}}24  x <= 7; // expected-warning {{relational comparison result unused}}25  x >= 7; // expected-warning {{relational comparison result unused}}26 27  7 == x; // expected-warning {{equality comparison result unused}}28  p == p; // expected-warning {{equality comparison result unused}} \29          // expected-note {{use '=' to turn this equality comparison into an assignment}} \30          // expected-warning {{self-comparison always evaluates to true}}31  a == a; // expected-warning {{equality comparison result unused}} \32          // expected-note {{use '=' to turn this equality comparison into an assignment}}33  a == b; // expected-warning {{equality comparison result unused}} \34          // expected-note {{use '=' to turn this equality comparison into an assignment}}35  a != b; // expected-warning {{inequality comparison result unused}} \36          // expected-note {{use '|=' to turn this inequality comparison into an or-assignment}}37  a < b;  // expected-warning {{relational comparison result unused}}38  a > b;  // expected-warning {{relational comparison result unused}}39  a <= b; // expected-warning {{relational comparison result unused}}40  a >= b; // expected-warning {{relational comparison result unused}}41 42  A() == b; // expected-warning {{equality comparison result unused}}43  if (42) x == 7; // expected-warning {{equality comparison result unused}} \44                  // expected-note {{use '=' to turn this equality comparison into an assignment}}45  else if (42) x == 7; // expected-warning {{equality comparison result unused}} \46                       // expected-note {{use '=' to turn this equality comparison into an assignment}}47  else x == 7; // expected-warning {{equality comparison result unused}} \48               // expected-note {{use '=' to turn this equality comparison into an assignment}}49  do x == 7; // expected-warning {{equality comparison result unused}} \50             // expected-note {{use '=' to turn this equality comparison into an assignment}}51  while (false);52  while (false) x == 7; // expected-warning {{equality comparison result unused}} \53                        // expected-note {{use '=' to turn this equality comparison into an assignment}}54  for (x == 7; // expected-warning {{equality comparison result unused}} \55               // expected-note {{use '=' to turn this equality comparison into an assignment}}56       x == 7; // No warning -- result is used57       x == 7) // expected-warning {{equality comparison result unused}} \58               // expected-note {{use '=' to turn this equality comparison into an assignment}}59    x == 7; // expected-warning {{equality comparison result unused}} \60            // expected-note {{use '=' to turn this equality comparison into an assignment}}61  switch (42) default: x == 7; // expected-warning {{equality comparison result unused}} \62                               // expected-note {{use '=' to turn this equality comparison into an assignment}}63  switch (42) case 42: x == 7; // expected-warning {{equality comparison result unused}} \64                               // expected-note {{use '=' to turn this equality comparison into an assignment}}65  switch (42) {66    case 1:67    case 2:68    default:69    case 3:70    case 4:71      x == 7; // expected-warning {{equality comparison result unused}} \72              // expected-note {{use '=' to turn this equality comparison into an assignment}}73  }74 75  (void)(x == 7);76  (void)(p == p); // expected-warning {{self-comparison always evaluates to true}}77  { bool b = x == 7; }78 79  { bool b = ({ x == 7; // expected-warning {{equality comparison result unused}} \80                        // expected-note {{use '=' to turn this equality comparison into an assignment}}81                x == 7; }); } // no warning on the second, its result is used!82 83#define EQ(x,y) (x) == (y)84  EQ(x, 5);85#undef EQ86 87  (void)sizeof(1 < 2, true); // No warning; unevaluated context.88}89 90namespace PR10291 {91  template<typename T>92  class X93  {94  public:95 96    X() : i(0) { } 97 98    void foo()99    {   100      throw 101        i == 0u ?102        5 : 6;103    }   104 105  private:106    int i;107  };108 109  X<int> x;110}111 112namespace PR19724 {113class stream {114} cout, cin;115 116stream &operator<(stream &s, int);117bool operator<(stream &s, stream &s2);118 119void test() {120  cout < 5;    // no warning, operator returns a reference121  cout < cin;  // expected-warning {{relational comparison result unused}}122}123}124 125namespace PR19791 {126struct S {127  void operator!=(int);128  int operator==(int);129};130 131void test() {132  S s;133  s != 1;134  s == 1;  // expected-warning{{equality comparison result unused}}135           // expected-note@-1{{use '=' to turn this equality comparison into an assignment}}136}137}138