brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 3139017 Raw
93 lines · c
1// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wint-in-bool-context %s2// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wall %s3// RUN: %clang_cc1 -x c -std=c23 -fsyntax-only -verify -Wall %s4// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -Wint-in-bool-context %s5// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -Wall %s6 7#define ONE 18#define TWO 29 10#define SHIFT(l, r) l << r11#define MM a << a12#define AF 1 << 713 14#ifdef __cplusplus15typedef bool boolean;16#else17typedef _Bool boolean;18#endif19 20enum num {21  zero,22  one,23  two,24};25 26int test(int a, unsigned b, enum num n) {27  boolean r;28  r = a << a;    // expected-warning {{converting the result of '<<' to a boolean}}29  r = MM;        // expected-warning {{converting the result of '<<' to a boolean}}30  r = (1 << 7);  // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}31  r = 2UL << 2;  // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}32  r = 0 << a;    // expected-warning {{converting the result of '<<' to a boolean always evaluates to false}}33  r = 0 << 2;    // expected-warning {{converting the result of '<<' to a boolean always evaluates to false}}34  r = 1 << 0;    // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}35  r = 1 << 2;    // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}36  r = 1ULL << 2; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}37  r = 2 << b;    // expected-warning {{converting the result of '<<' to a boolean}}38  r = (unsigned)(2 << b);39  r = b << 7;40  r = (1 << a); // expected-warning {{converting the result of '<<' to a boolean}}41  r = TWO << a; // expected-warning {{converting the result of '<<' to a boolean}}42  r = a << 7;   // expected-warning {{converting the result of '<<' to a boolean}}43  r = ONE << a; // expected-warning {{converting the result of '<<' to a boolean}}44  if (TWO << a) // expected-warning {{converting the result of '<<' to a boolean}}45    return a;46 47  a = 1 << 2 ? 0: 1; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}48  a = 1 << a ? 0: 1; // expected-warning {{converting the result of '<<' to a boolean}}49 50  for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' to a boolean}}51    ;52 53  if (a << TWO) // expected-warning {{converting the result of '<<' to a boolean}}54    return a;55 56  if (n || two)57    // expected-warning@-1 {{converting the enum constant to a boolean}}58    return a;59 60  if (n == one || two)61    // expected-warning@-1 {{converting the enum constant to a boolean}}62    return a;63 64  if (r && two)65    // expected-warning@-1 {{converting the enum constant to a boolean}}66    return a;67 68  if (two && r)69    // expected-warning@-1 {{converting the enum constant to a boolean}}70    return a;71 72  if (n == one && two)73    // expected-warning@-1 {{converting the enum constant to a boolean}}74    return a;75 76  if(1 << 5) // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}}77    return a;78 79  // Don't warn in macros.80  return SHIFT(1, a);81}82 83int GH64356(int arg) {84  if ((arg == 1) && (1 == 1)) return 1;85    return 0;86 87  if ((64 > 32) && (32 < 64))88    return 2;89 90  if ((1 == 1) && (arg == 1)) return 1;91    return 0;92}93