https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70808

--- Comment #5 from Paolo Carlini <paolo.carlini at oracle dot com> ---
In fact, there is sort-of an inconsistency in build_zero_init_1 which explains
the inconsistency in the original testcase:

  else if (TYPE_PTR_OR_PTRMEM_P (type))
    init = fold (convert (type, nullptr_node));
  else if (SCALAR_TYPE_P (type))
    init = fold (convert (type, integer_zero_node));

thus std::nullptr_t is handled as a generic scalar, whereas int* is not.
Changing the above as in the below makes sense to me and would have the effect
of suppressing the warning for both the testcases here.

Index: init.c
===================================================================
--- init.c      (revision 259287)
+++ init.c      (working copy)
@@ -180,7 +180,7 @@ build_zero_init_1 (tree type, tree nelts, bool sta
        items with static storage duration that are not otherwise
        initialized are initialized to zero.  */
     ;
-  else if (TYPE_PTR_OR_PTRMEM_P (type))
+  else if (TYPE_PTR_OR_PTRMEM_P (type) || NULLPTR_TYPE_P (type))
     init = fold (convert (type, nullptr_node));
   else if (SCALAR_TYPE_P (type))
     init = fold (convert (type, integer_zero_node));

Reply via email to