diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c2ebf9a38cb..e3f98455c37 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-06-30 Jason Merrill + 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 f10e846d0ea..9b9eb9a9df9 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 ed34b5f3c10..382e0981a70 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-06-30 Jason Merrill + 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 00000000000..c35d6011f3b --- /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) { } +}; +