diff options
author | David Bolvansky <david.bolvansky@gmail.com> | 2019-09-24 09:14:33 +0000 |
---|---|---|
committer | David Bolvansky <david.bolvansky@gmail.com> | 2019-09-24 09:14:33 +0000 |
commit | 33e9203d936781748afcd6afa89207cb81420fd4 (patch) | |
tree | f9602a12e22e017447e58f2d9cbed826ba7ce2c2 /test/Sema | |
parent | 2708d3fad7a0f9ec9792ac211240bc94e0b3a67d (diff) | |
download | clang-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.c | 20 |
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; |