This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++ Patch] PR 43453


I wondered if moving the list-collapsing code up for all cases would work, so I gave it a try and it seems to work fine.

Tested x86_64-pc-linux-gnu, applying to trunk.

commit 7d4d6e5d91d5677be05ad196a140f28b01a8f55f
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Jun 5 13:32:14 2014 -0400

    	PR c++/43453
    	* decl.c (check_initializer): Collapse a TREE_LIST here.
    	* typeck2.c (store_init_value): Not here.

diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index b068df8..b4d26b7 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5758,13 +5758,16 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
 		check_narrowing (type, init);
 	    }
 	}
-      else if (TREE_CODE (type) == ARRAY_TYPE
-	       && TREE_CODE (init) == TREE_LIST
-	       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
-	       && list_length (init) == 1
-	       && TREE_CODE (TREE_VALUE (init)) == STRING_CST)
-	/* We get here with code like `char s[] ("abc");' */
-	init = TREE_VALUE (init);
+      else if (TREE_CODE (init) == TREE_LIST
+	       && TREE_TYPE (init) != unknown_type_node
+	       && !MAYBE_CLASS_TYPE_P (type))
+	{
+	  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
+
+	  /* We get here with code like `int a (2);' */
+	  init = build_x_compound_expr_from_list (init, ELK_INIT,
+						  tf_warning_or_error);
+	}
 
       /* If DECL has an array type without a specific bound, deduce the
 	 array size from the initializer.  */
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 3ed5c1d..a620f22 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -780,15 +780,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
 	  init = build_constructor_from_list (init_list_type_node, nreverse (init));
 	}
     }
-  else if (TREE_CODE (init) == TREE_LIST
-	   && TREE_TYPE (init) != unknown_type_node)
-    {
-      gcc_assert (TREE_CODE (decl) != RESULT_DECL);
-
-      /* We get here with code like `int a (2);' */
-      init = build_x_compound_expr_from_list (init, ELK_INIT,
-					      tf_warning_or_error);
-    }
 
   /* End of special C++ code.  */
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]