* typeck.c (convert_for_initialization): Move check for odd uses
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Aug 1998 11:12:27 +0000 (11:12 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Aug 1998 11:12:27 +0000 (11:12 +0000)
of NULL to avoid duplicate warnings.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21938 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/typeck.c

index 19db217..57dc30e 100644 (file)
@@ -1,3 +1,8 @@
+1998-08-24  Mark Mitchell  <mark@markmitchell.com>
+
+       * typeck.c (convert_for_initialization): Move check for odd uses
+       of NULL to avoid duplicate warnings.
+
 1998-08-24  Jason Merrill  <jason@yorick.cygnus.com>
 
        * tree.c (lvalue_type): Fix for arrays.
index 61ebe18..3bbd6bd 100644 (file)
@@ -7085,10 +7085,6 @@ convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
   register tree rhstype;
   register enum tree_code coder;
 
-  /* Issue warnings about peculiar, but legal, uses of NULL.  */
-  if (ARITHMETIC_TYPE_P (type) && rhs == null_node)
-    cp_warning ("converting NULL to non-pointer type");
-
   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
   if (TREE_CODE (rhs) == NOP_EXPR
@@ -7176,8 +7172,16 @@ convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
 
   if (type == TREE_TYPE (rhs))
     {
+      /* Issue warnings about peculiar, but legal, uses of NULL.  We
+        do this *before* the call to decl_constant_value so as to
+        avoid duplicate warnings on code like `const int I = NULL;
+        f(I);'.  */
+      if (ARITHMETIC_TYPE_P (type) && rhs == null_node)
+       cp_warning ("converting NULL to non-pointer type");
+
       if (TREE_READONLY_DECL_P (rhs))
        rhs = decl_constant_value (rhs);
+
       return rhs;
     }