diff options
author | Martin Liska <mliska@suse.cz> | 2019-11-18 12:51:05 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-11-18 11:51:05 +0000 |
commit | 446096148ca9775cb56f9ee924fa283babcd0b76 (patch) | |
tree | be28bc8ab15513a44efc7a6a0b50d954ba47d77e /gcc | |
parent | 20a380171f5db5f356b173d573559bfeef1ebbff (diff) | |
download | gcc-446096148ca9775cb56f9ee924fa283babcd0b76.zip gcc-446096148ca9775cb56f9ee924fa283babcd0b76.tar.gz gcc-446096148ca9775cb56f9ee924fa283babcd0b76.tar.bz2 |
Verify NOP_EXPR LHS type in IPA ICF.
2019-11-18 Martin Liska <mliska@suse.cz>
PR ipa/92529
* ipa-icf-gimple.c (func_checker::compare_gimple_assign):
Compare LHS types of NOP_EXPR.
2019-11-18 Martin Liska <mliska@suse.cz>
PR ipa/92529
* gcc.dg/ipa/pr92529.c: New test.
From-SVN: r278395
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-icf-gimple.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ipa/pr92529.c | 28 |
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 78a9182..a829a68 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-11-18 Martin Liska <mliska@suse.cz> + + PR ipa/92529 + * ipa-icf-gimple.c (func_checker::compare_gimple_assign): + Compare LHS types of NOP_EXPR. + 2019-11-18 Matthew Malcomson <matthew.malcomson@arm.com> * run-rtl-passes.c (run_rtl_passes): Accept and handle empty diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index ac53a1d..9aa2fe0 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -620,6 +620,13 @@ func_checker::compare_gimple_assign (gimple *s1, gimple *s2) arg1 = gimple_op (s1, i); arg2 = gimple_op (s2, i); + /* LHS types of NOP_EXPR must be compatible. */ + if (CONVERT_EXPR_CODE_P (code1) && i == 0) + { + if (!compatible_types_p (TREE_TYPE (arg1), TREE_TYPE (arg2))) + return return_false_with_msg ("GIMPLE NOP LHS type mismatch"); + } + if (!compare_operand (arg1, arg2)) return return_false_with_msg ("GIMPLE assignment operands " "are different"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 87705b4..8773d50 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-11-18 Martin Liska <mliska@suse.cz> + + PR ipa/92529 + * gcc.dg/ipa/pr92529.c: New test. + 2019-11-18 Matthew Malcomson <matthew.malcomson@arm.com> * gcc.dg/rtl/aarch64/unspecified-pass-error.c: New test. diff --git a/gcc/testsuite/gcc.dg/ipa/pr92529.c b/gcc/testsuite/gcc.dg/ipa/pr92529.c new file mode 100644 index 0000000..0864f34 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr92529.c @@ -0,0 +1,28 @@ +/* PR ipa/92529 */ +/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */ + +int +foo(volatile int a) +{ + return (char)a; +} + +int +bar(volatile int a) +{ + return (short)a; +} + +#pragma GCC optimize ("-O0") + +int main(int argc, char **argv) +{ + int r = bar(1000); + __builtin_printf ("global: %d\n", r); + if (r != 1000) + __builtin_abort (); + + return 0; +} + +/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */ |