diff options
author | Jason Merrill <jason@redhat.com> | 2017-02-03 17:42:37 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-02-03 17:42:37 -0500 |
commit | 77095a6ab13996a38b0a360d8ef9fc6cc6bc5234 (patch) | |
tree | 3d5b23c76bf199ee7e8f14bc642997ba0d96ab88 /gcc/cp/optimize.c | |
parent | ac6dbb1a4042eaa719afbb9c7a02e4f409b8aa75 (diff) | |
download | gcc-77095a6ab13996a38b0a360d8ef9fc6cc6bc5234.zip gcc-77095a6ab13996a38b0a360d8ef9fc6cc6bc5234.tar.gz gcc-77095a6ab13996a38b0a360d8ef9fc6cc6bc5234.tar.bz2 |
PR c++/78689 - ICE on constructor with label
gcc/
* tree-inline.c (copy_tree_body_r) [COND_EXPR]: Revert change to
avoid copying non-taken branch.
gcc/cp/
* optimize.c (maybe_clone_body): Replace omitted parameters with
null lvalues.
* class.c (build_clone): Fix logic for omitting inherited parms.
From-SVN: r245172
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); } } |