diff --git a/clang/test/Sema/shift-bool.c b/clang/test/Sema/shift-bool.c new file mode 100644 index 0000000000000..f3b00aa87e068 --- /dev/null +++ b/clang/test/Sema/shift-bool.c @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -fsyntax-only -Wshift-bool -verify %s + +void t() { + int x = 10; + int y = 5; + + int a = (x < y) << 1; + int b = (x < y) >> 1; + + int c = (x > y) << 1; + int d = (x > y) >> 1; + + int e = (x == y) << 1; + int f = (x == y) >> 1; + + int g = (x != y) << 1; + int h = (x != y) >> 1; + + int i = (x < y) << 0; + int j = (x < y) >> 0; + + int k = (x < y) << -1; // expected-warning {{shift count is negative}} + int l = (x < y) >> -1; // expected-warning {{shift count is negative}} + + if (((x < y) << 1) != 0) { } + if (((x < y) >> 1) != 0) { } +} diff --git a/clang/test/Sema/shift-bool.cpp b/clang/test/Sema/shift-bool.cpp index a17a0e0ad9e7d..5350da91976f9 100644 --- a/clang/test/Sema/shift-bool.cpp +++ b/clang/test/Sema/shift-bool.cpp @@ -3,6 +3,7 @@ void t() { int x = 10; bool y = true; + int z = 1; bool a = y << x; bool b = y >> x; // expected-warning {{right shifting a 'bool' implicitly converts it to 'int'}} @@ -20,6 +21,8 @@ void t() { bool i = y << 0; bool j = y >> 0; // expected-warning {{right shifting a 'bool' implicitly converts it to 'int'}} + bool k = (x < z) >> 1; // expected-warning {{right shifting a 'bool' implicitly converts it to 'int'}} + if ((y << 1) != 0) { } if ((y >> 1) != 0) { } // expected-warning {{right shifting a 'bool' implicitly converts it to 'int'}} }