aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-06-30 20:03:58 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-06-30 20:03:58 -0400
commite2c17be05b9b8215d01014b58864a639abe1b87d (patch)
treef062fcd42d3963620dec8b718c77ca45e171e33e
parent98ff3996628e649bd2ae54f0d68e47395ee51db9 (diff)
downloadgcc-e2c17be05b9b8215d01014b58864a639abe1b87d.zip
gcc-e2c17be05b9b8215d01014b58864a639abe1b87d.tar.gz
gcc-e2c17be05b9b8215d01014b58864a639abe1b87d.tar.bz2
re PR c++/49569 (-std=gnu++0x causes segmentation fault)
PR c++/49569 * method.c (implicitly_declare_fn): Set DECL_PARM_LEVEL and DECL_PARM_INDEX on rhs parm. From-SVN: r175738
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/method.c7
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C21
4 files changed, 33 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c2ebf9a..e3f9845 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2011-06-30 Jason Merrill <jason@redhat.com>
+ PR c++/49569
+ * method.c (implicitly_declare_fn): Set DECL_PARM_LEVEL and
+ DECL_PARM_INDEX on rhs parm.
+
* pt.c (iterative_hash_template_arg): Use cp_tree_operand_length.
PR c++/49355
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index f10e846..9b9eb9a 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1528,8 +1528,11 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p)
/* Note that this parameter is *not* marked DECL_ARTIFICIAL; we
want its type to be included in the mangled function
name. */
- DECL_ARGUMENTS (fn) = cp_build_parm_decl (NULL_TREE, rhs_parm_type);
- TREE_READONLY (DECL_ARGUMENTS (fn)) = 1;
+ tree decl = cp_build_parm_decl (NULL_TREE, rhs_parm_type);
+ TREE_READONLY (decl) = 1;
+ retrofit_lang_decl (decl);
+ DECL_PARM_INDEX (decl) = DECL_PARM_LEVEL (decl) = 1;
+ DECL_ARGUMENTS (fn) = decl;
}
/* Add the "this" parameter. */
this_parm = build_this_parm (fn_type, TYPE_UNQUALIFIED);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ed34b5f..382e098 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2011-06-30 Jason Merrill <jason@redhat.com>
+ PR c++/49569
+ * g++.dg/cpp0x/regress/ctor1.C: New.
+
PR c++/49355
* g++.dg/cpp0x/initlist54.C: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C
new file mode 100644
index 0000000..c35d601
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C
@@ -0,0 +1,21 @@
+// PR c++/49569
+// { dg-options -std=c++0x }
+
+struct A
+{
+ virtual void f() = 0;
+};
+
+struct B: A
+{
+ int i;
+ virtual void f() { }
+};
+
+struct C
+{
+ B b;
+ C(): b() { }
+ C(const B& b): b(b) { }
+};
+