aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-11-19 09:05:36 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-11-19 09:05:36 -0500
commit5aeb734800f9bcf6216458eb39a1efa8b85fea1e (patch)
tree49224497754b7d358090cb97bc76deff371875b6
parentabcc192bdb161171f2871a85de739b58f346548a (diff)
downloadgcc-5aeb734800f9bcf6216458eb39a1efa8b85fea1e.zip
gcc-5aeb734800f9bcf6216458eb39a1efa8b85fea1e.tar.gz
gcc-5aeb734800f9bcf6216458eb39a1efa8b85fea1e.tar.bz2
re PR c++/55261 ([C++0x] ICE (SIGSEGV) when inheriting implicit constructor)
PR c++/55261 * class.c (add_implicitly_declared_members): Use lookup_fnfields_slot to get the base constructors. From-SVN: r193621
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C10
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a4e76a6..6d4ab8b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/55261
+ * class.c (add_implicitly_declared_members): Use
+ lookup_fnfields_slot to get the base constructors.
+
2012-11-19 Jakub Jelinek <jakub@redhat.com>
PR middle-end/54630
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 2737cbc..04f9df5 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -3014,7 +3014,8 @@ add_implicitly_declared_members (tree t, tree* access_decls,
if (DECL_SELF_REFERENCE_P (decl))
{
/* declare, then remove the decl */
- tree ctor_list = CLASSTYPE_CONSTRUCTORS (TREE_TYPE (decl));
+ tree ctor_list = lookup_fnfields_slot (TREE_TYPE (decl),
+ ctor_identifier);
location_t loc = input_location;
input_location = DECL_SOURCE_LOCATION (using_decl);
if (ctor_list)
diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C
new file mode 100644
index 0000000..2032ad3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C
@@ -0,0 +1,10 @@
+// PR c++/55261
+// { dg-options -std=c++11 }
+
+struct A
+{
+};
+struct B : A
+{
+ using A::A;
+};