On 11/03/2011 05:06 PM, Jason Merrill wrote:
I'd rather use maybe_constant_value here, but I think you don't need to check the actual value at all; if we have decided that there is a conversion from bool to pointer, it must be a null pointer constant, and so false.
Ah! Thanks for the explanation, thus it seems even simpler than I thought yesterday.

I just booted and tested the below on x86_64-linux. Ok?

Thanks again,
Paolo.

///////////////

/cp
2011-11-04  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/48420
        * call.c (conversion_null_warnings): For 'false' to NULL pointer,
        just check that TREE_TYPE (expr) is a BOOLEAN_TYPE.

/testsuite
2011-11-04  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/48420
        * g++.dg/warn/Wconversion-null-3.C: New.
Index: testsuite/g++.dg/warn/Wconversion-null-3.C
===================================================================
--- testsuite/g++.dg/warn/Wconversion-null-3.C  (revision 0)
+++ testsuite/g++.dg/warn/Wconversion-null-3.C  (revision 0)
@@ -0,0 +1,8 @@
+// PR c++/48420
+
+void foo(int* p);
+
+void bar() {
+  const bool kDebugMode = false;
+  foo(kDebugMode);   // { dg-warning "converting 'false'" }
+}
Index: cp/call.c
===================================================================
--- cp/call.c   (revision 180920)
+++ cp/call.c   (working copy)
@@ -5544,7 +5544,8 @@ conversion_null_warnings (tree totype, tree expr,
     }
 
   /* Issue warnings if "false" is converted to a NULL pointer */
-  else if (expr == boolean_false_node && TYPE_PTR_P (totype))
+  else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
+          && TYPE_PTR_P (totype))
     {
       if (fn)
        warning_at (input_location, OPT_Wconversion_null,

Reply via email to