summaryrefslogtreecommitdiff
path: root/test/Sema
diff options
context:
space:
mode:
authorDavid Bolvansky <david.bolvansky@gmail.com>2019-09-24 09:14:33 +0000
committerDavid Bolvansky <david.bolvansky@gmail.com>2019-09-24 09:14:33 +0000
commit33e9203d936781748afcd6afa89207cb81420fd4 (patch)
treef9602a12e22e017447e58f2d9cbed826ba7ce2c2 /test/Sema
parent2708d3fad7a0f9ec9792ac211240bc94e0b3a67d (diff)
downloadclang-33e9203d936781748afcd6afa89207cb81420fd4.tar.gz
[Diagnostics] Do not diagnose unsigned shifts in boolean context (-Wint-in-bool-context)
I was looking at old GCC's patch. Current "trunk" version avoids warning for unsigned case, GCC warns only for signed shifts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@372708 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema')
-rw-r--r--test/Sema/warn-int-in-bool-context.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/test/Sema/warn-int-in-bool-context.c b/test/Sema/warn-int-in-bool-context.c
index f190fdf6a1..ae35ca34fb 100644
--- a/test/Sema/warn-int-in-bool-context.c
+++ b/test/Sema/warn-int-in-bool-context.c
@@ -7,6 +7,8 @@
#define TWO 2
#define SHIFT(l, r) l << r
+#define MM a << a
+#define AF 1 << 7
#ifdef __cplusplus
typedef bool boolean;
@@ -20,15 +22,25 @@ enum num {
two,
};
-int test(int a, enum num n) {
+int test(int a, unsigned b, enum num n) {
boolean r;
- r = (1 << 3); // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << 3) != 0'?}}
- r = TWO << 7; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << 7) != 0'?}}
+ r = a << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << a) != 0'?}}
+ r = MM; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << a) != 0'?}}
+ r = (1 << 7); // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << 7) != 0'?}}
+ r = 2UL << 2;
+ r = 2 << b; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << b) != 0'?}}
+ r = (unsigned)(2 << b);
+ r = b << 7;
+ r = (1 << a); // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}}
+ r = TWO << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << a) != 0'?}}
r = a << 7; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << 7) != 0'?}}
r = ONE << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}}
- if (TWO << 4) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << 4) != 0'?}}
+ if (TWO << a) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << a) != 0'?}}
return a;
+ for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}}
+ ;
+
if (a << TWO) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << 2) != 0'?}}
return a;