PR c++/57041
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 May 2013 19:32:35 +0000 (19:32 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 May 2013 19:32:35 +0000 (19:32 +0000)
* decl.c (reshape_init_class): Handle error_mark_node.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/g++.dg/ext/desig6.C [new file with mode: 0644]

index 6c5d210..33c66e3 100644 (file)
@@ -1,5 +1,8 @@
 2013-05-13  Jason Merrill  <jason@redhat.com>
 
+       PR c++/57041
+       * decl.c (reshape_init_class): Handle error_mark_node.
+
        PR c++/57254
        * typeck.c (merge_types): Propagate ref-qualifier
        in METHOD_TYPE case.
index 67e67e6..b16472f 100644 (file)
@@ -5200,6 +5200,9 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
       /* Handle designated initializers, as an extension.  */
       if (d->cur->index)
        {
+         if (d->cur->index == error_mark_node)
+           return error_mark_node;
+
          if (TREE_CODE (d->cur->index) == INTEGER_CST)
            {
              if (complain & tf_error)
diff --git a/gcc/testsuite/g++.dg/ext/desig6.C b/gcc/testsuite/g++.dg/ext/desig6.C
new file mode 100644 (file)
index 0000000..30882a6
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/57041
+// { dg-options "-std=gnu++11" }
+// { dg-prune-output "error:" }
+
+template<typename T>
+union u {
+  T a;
+  char b;
+};
+
+template<typename T>
+u<T> make_u(T t) {
+  return { .a = t };
+}
+
+int main() {
+  return make_u<int>(1).a;
+}