diff options
Diffstat (limited to 'gcc/cp/optimize.c')
-rw-r--r-- | gcc/cp/optimize.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index f61d035..933612c 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -621,9 +621,21 @@ maybe_clone_body (tree fn) function. */ else { - decl_map->put (parm, clone_parm); + tree replacement; if (clone_parm) - clone_parm = DECL_CHAIN (clone_parm); + { + replacement = clone_parm; + clone_parm = DECL_CHAIN (clone_parm); + } + else + { + /* Inheriting ctors can omit parameters from the base + clone. Replace them with null lvalues. */ + tree reftype = build_reference_type (TREE_TYPE (parm)); + replacement = fold_convert (reftype, null_pointer_node); + replacement = convert_from_reference (replacement); + } + decl_map->put (parm, replacement); } } |