summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.td8
-rw-r--r--clang/lib/Sema/SemaOverload.cpp3
-rw-r--r--clang/test/SemaCXX/warn-bool-conversion.cpp (renamed from clang/test/SemaCXX/warn_false_to_pointer.cpp)12
3 files changed, 12 insertions, 11 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 1ef12248989..92d5dd9e61f 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -1197,6 +1197,10 @@ def warn_impcast_literal_float_to_integer : Warning<
def warn_impcast_different_enum_types : Warning<
"implicit conversion from enumeration type %0 to different enumeration type "
"%1">, InGroup<DiagGroup<"conversion">>;
+def warn_impcast_bool_to_null_pointer : Warning<
+ "initialization of pointer of type %0 to NULL from a constant boolean "
+ "expression">, InGroup<BoolConversions>;
+
def warn_cast_align : Warning<
"cast from %0 to %1 increases required alignment from %2 to %3">,
@@ -1367,10 +1371,6 @@ def note_ovl_candidate : Note<"candidate "
"is the implicit copy assignment operator|"
"is an inherited constructor}0%1">;
-def warn_init_pointer_from_false : Warning<
- "initialization of pointer of type %0 from literal 'false'">,
- InGroup<BoolConversions>;
-
def note_ovl_candidate_inherited_constructor : Note<"inherited from here">;
def note_ovl_candidate_bad_deduction : Note<
"candidate template ignored: failed template argument deduction">;
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 905b555381a..ac2ba1a9929 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -1986,7 +1986,8 @@ bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy) &&
From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
DiagRuntimeBehavior(From->getExprLoc(), From,
- PDiag(diag::warn_init_pointer_from_false) << ToType);
+ PDiag(diag::warn_impcast_bool_to_null_pointer)
+ << ToType << From->getSourceRange());
if (const PointerType *FromPtrType = FromType->getAs<PointerType>())
if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
diff --git a/clang/test/SemaCXX/warn_false_to_pointer.cpp b/clang/test/SemaCXX/warn-bool-conversion.cpp
index 20d4b3a52d4..f6fa9f28369 100644
--- a/clang/test/SemaCXX/warn_false_to_pointer.cpp
+++ b/clang/test/SemaCXX/warn-bool-conversion.cpp
@@ -1,18 +1,18 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
-int* j = false; // expected-warning{{ initialization of pointer of type 'int *' from literal 'false'}}
+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 *' from literal 'false'}}
+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 *' from literal 'false'}}
+ 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 *' from literal 'false'}}
- foo((42 + 24) < 32); // expected-warning{{ initialization of pointer of type 'int *' from literal 'false'}}
+ 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 *' from literal 'false'}}
+ foo(kFlag); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
}
char f(struct Undefined*);
OpenPOWER on IntegriCloud