From: Richard Biener Date: Fri, 14 Feb 2020 08:19:40 +0000 (+0100) Subject: middle-end/93054 deal with undefs in call gimplification X-Git-Tag: releases/gcc-9.3.0~128 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3bcda566d6f485f6eccdc029d115f4246016ba05;p=thirdparty%2Fgcc.git middle-end/93054 deal with undefs in call gimplification 2020-02-14 Richard Biener Backport from mainline 2020-01-09 Richard Biener PR middle-end/93054 * gimplify.c (gimplify_expr): Deal with NOP definitions. * gcc.dg/pr93054.c: New testcase. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eda6c1fb747c..e1a1dc41ac0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2020-02-14 Richard Biener + + Backport from mainline + 2020-01-09 Richard Biener + + PR middle-end/93054 + * gimplify.c (gimplify_expr): Deal with NOP definitions. + 2020-02-14 Richard Biener Backport from mainline diff --git a/gcc/gimplify.c b/gcc/gimplify.c index c57113cda1db..f91ff3aca296 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -13525,7 +13525,8 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, { /* Avoid the extra copy if possible. */ *expr_p = create_tmp_reg (TREE_TYPE (name)); - gimple_set_lhs (SSA_NAME_DEF_STMT (name), *expr_p); + if (!gimple_nop_p (SSA_NAME_DEF_STMT (name))) + gimple_set_lhs (SSA_NAME_DEF_STMT (name), *expr_p); release_ssa_name (name); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b096a03ea907..81d15a747c95 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2020-02-14 Richard Biener + + Backport from mainline + 2020-01-09 Richard Biener + + PR middle-end/93054 + * gcc.dg/pr93054.c: New testcase. + 2020-02-14 Richard Biener Backport from mainline diff --git a/gcc/testsuite/gcc.dg/pr93054.c b/gcc/testsuite/gcc.dg/pr93054.c new file mode 100644 index 000000000000..1d4680d28e6e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr93054.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ + +__attribute__ ((returns_twice)) int +bp (int); + +__attribute__ ((noreturn)) int +cb (void) +{ + return bp (cb ()); /* { dg-warning "declared .noreturn." } */ +}