Comments
Patch
commit eae21fea450d9fa1b9fce0544db5cf7fdce8f022
Author: Jason Merrill <jason@redhat.com>
Date: Thu Jun 30 18:35:25 2011 -0400
PR c++/49569
* method.c (implicitly_declare_fn): Set DECL_PARM_LEVEL and
DECL_PARM_INDEX on rhs parm.
@@ -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);
new file mode 100644
@@ -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) { }
+};
+