diff options
author | Jason Merrill <jason@redhat.com> | 2011-06-30 20:03:58 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-06-30 20:03:58 -0400 |
commit | e2c17be05b9b8215d01014b58864a639abe1b87d (patch) | |
tree | f062fcd42d3963620dec8b718c77ca45e171e33e | |
parent | 98ff3996628e649bd2ae54f0d68e47395ee51db9 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/method.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C | 21 |
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) { } +}; + |