From b6006696358572a668d6de773af8f550e54259bf Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sat, 9 Apr 2011 07:48:17 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129205 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 8 ++++---- lib/Sema/SemaOverload.cpp | 3 ++- ...false_to_pointer.cpp => warn-bool-conversion.cpp} | 12 ++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) rename test/SemaCXX/{warn_false_to_pointer.cpp => warn-bool-conversion.cpp} (66%) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 1ef1224898..92d5dd9e61 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/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>; +def warn_impcast_bool_to_null_pointer : Warning< + "initialization of pointer of type %0 to NULL from a constant boolean " + "expression">, InGroup; + 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; - 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/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 905b555381..ac2ba1a992 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/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()) if (const PointerType *ToPtrType = ToType->getAs()) { diff --git a/test/SemaCXX/warn_false_to_pointer.cpp b/test/SemaCXX/warn-bool-conversion.cpp similarity index 66% rename from test/SemaCXX/warn_false_to_pointer.cpp rename to test/SemaCXX/warn-bool-conversion.cpp index 20d4b3a52d..f6fa9f2836 100644 --- a/test/SemaCXX/warn_false_to_pointer.cpp +++ b/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*); -- 2.40.0