summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/warn-bool-conversion.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-04-09 07:48:17 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-04-09 07:48:17 +0000
commit66a7b0476768fe9dec3d8ff4881017b88cab3e5c (patch)
treeb8f9e1ded16143da98319757e5dd84d202ff12c6 /clang/test/SemaCXX/warn-bool-conversion.cpp
parentffab873ed5f5094d459094e87480a3f01e892233 (diff)
downloadbcm5719-llvm-66a7b0476768fe9dec3d8ff4881017b88cab3e5c.tar.gz
bcm5719-llvm-66a7b0476768fe9dec3d8ff4881017b88cab3e5c.zip
Clean up the bool conversion warning. Group it with other conversion
warnings, and make its text appropriate for constant bool expressions other than 'false'. This should finish off PR9612. llvm-svn: 129205
Diffstat (limited to 'clang/test/SemaCXX/warn-bool-conversion.cpp')
-rw-r--r--clang/test/SemaCXX/warn-bool-conversion.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-bool-conversion.cpp b/clang/test/SemaCXX/warn-bool-conversion.cpp
new file mode 100644
index 00000000000..f6fa9f28369
--- /dev/null
+++ b/clang/test/SemaCXX/warn-bool-conversion.cpp
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+int* j = false; // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+
+void foo(int* i, int *j=(false)) // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+{
+ foo(false); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+ foo((int*)false); // no-warning: explicit cast
+ foo(0); // no-warning: not a bool, even though its convertible to bool
+
+ foo(false == true); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+ foo((42 + 24) < 32); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+
+ const bool kFlag = false;
+ foo(kFlag); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
+}
+
+char f(struct Undefined*);
+double f(...);
+
+// Ensure that when using false in metaprogramming machinery its conversion
+// isn't flagged.
+template <int N> struct S {};
+S<sizeof(f(false))> s;
OpenPOWER on IntegriCloud