From: Jakub Jelinek Date: Tue, 7 Apr 2020 19:01:06 +0000 (+0200) Subject: objsz: Don't call replace_uses_by on SSA_NAME_OCCURS_IN_ABNORMAL_PHI [PR94423] X-Git-Tag: embedded-9-2020q2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4486a537f14bc3b05ac552c3cbe18e540e397ed7;p=thirdparty%2Fgcc.git objsz: Don't call replace_uses_by on SSA_NAME_OCCURS_IN_ABNORMAL_PHI [PR94423] The following testcase ICEs because the objsz pass calls replace_uses_by on SSA_NAME_OCCURS_IN_ABNORMAL_PHI SSA_NAME. The following patch instead of that calls replace_call_with_value, which will turn it into xyz_123(ab) = 234; 2020-04-01 Jakub Jelinek PR middle-end/94423 * tree-object-size.c (pass_object_sizes::execute): Don't call replace_uses_by for SSA_NAME_OCCURS_IN_ABNORMAL_PHI lhs, instead call replace_call_with_value. * gcc.dg/ubsan/pr94423.c: New test. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3e5d86275be..4cb05e922e9f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2020-04-07 Jakub Jelinek Backported from mainline + 2020-04-01 Jakub Jelinek + + PR middle-end/94423 + * tree-object-size.c (pass_object_sizes::execute): Don't call + replace_uses_by for SSA_NAME_OCCURS_IN_ABNORMAL_PHI lhs, instead + call replace_call_with_value. + 2020-03-31 Marc Glisse Jakub Jelinek @@ -8,8 +15,6 @@ * fold-const.c (fold_binary_loc) : Use ANY_INTEGRAL_TYPE_P instead of INTEGRAL_TYPE_P. -2020-04-07 Jakub Jelinek - 2020-03-30 Jakub Jelinek PR target/93069 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0c09c9ee12f7..78f4b5119d8e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2020-04-07 Jakub Jelinek Backported from mainline + 2020-04-01 Jakub Jelinek + + PR middle-end/94423 + * gcc.dg/ubsan/pr94423.c: New test. + 2020-03-31 Jakub Jelinek PR middle-end/94412 diff --git a/gcc/testsuite/gcc.dg/ubsan/pr94423.c b/gcc/testsuite/gcc.dg/ubsan/pr94423.c new file mode 100644 index 000000000000..76f831f26e29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr94423.c @@ -0,0 +1,17 @@ +/* PR middle-end/94423 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fsanitize=object-size" } */ + +void foo (void); +typedef struct { long buf[22]; } jmp_buf[1]; +extern int sigsetjmp (jmp_buf, int) __attribute__ ((__nothrow__)); +jmp_buf buf; + +void +bar (int *c) +{ + while (*c) + foo (); + while (*c) + sigsetjmp (buf, 0); +} diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index 25c5ced57b71..6450cae371d6 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -1369,7 +1369,10 @@ pass_object_sizes::execute (function *fun) } /* Propagate into all uses and fold those stmts. */ - replace_uses_by (lhs, result); + if (!SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs)) + replace_uses_by (lhs, result); + else + replace_call_with_value (&i, result); } }