OSDN Git Service

/cp
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Dec 2011 17:12:17 +0000 (17:12 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Dec 2011 17:12:17 +0000 (17:12 +0000)
2011-12-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51431
* init.c (build_value_init): Check build_aggr_init_expr return
value for error_mark_node.

/testsuite
2011-12-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51431
* g++.dg/other/abstract3.C: New.

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

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/abstract3.C [new file with mode: 0644]

index 4391a47..f979af5 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51431
+       * init.c (build_value_init): Check build_aggr_init_expr return
+       value for error_mark_node.
+
 2011-12-06  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/51427
index 8e28e3b..e1eb681 100644 (file)
@@ -359,11 +359,9 @@ build_value_init (tree type, tsubst_flags_t complain)
          tree ctor = build_special_member_call
            (NULL_TREE, complete_ctor_identifier,
             NULL, type, LOOKUP_NORMAL, complain);
+         ctor = build_aggr_init_expr (type, ctor, complain);
          if (ctor != error_mark_node)
-           {
-             ctor = build_aggr_init_expr (type, ctor, complain);
-             AGGR_INIT_ZERO_FIRST (ctor) = 1;
-           }
+           AGGR_INIT_ZERO_FIRST (ctor) = 1;
          return ctor;
        }
     }
index f4c61d3..ac537cf 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51431
+       * g++.dg/other/abstract3.C: New.
+
 2011-12-06  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/49997
diff --git a/gcc/testsuite/g++.dg/other/abstract3.C b/gcc/testsuite/g++.dg/other/abstract3.C
new file mode 100644 (file)
index 0000000..528b7d7
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/51431
+
+struct A                  // { dg-message "note" }
+{
+  virtual void foo() = 0; // { dg-message "note" }
+};
+
+struct B
+{
+  A a;           // { dg-error "abstract" }
+  B() : a() {}   // { dg-error "abstract" }
+};