From: Jakub Jelinek Date: Tue, 30 May 2017 07:54:21 +0000 (+0200) Subject: backport: re PR middle-end/50199 (wrong code with -flto -fno-merge-constants) X-Git-Tag: releases/gcc-5.5.0~274 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0eeb3228b0efcf0711b0b48315fc2b7d9773f9d2;p=thirdparty%2Fgcc.git backport: re PR middle-end/50199 (wrong code with -flto -fno-merge-constants) Backported from mainline 2017-01-11 Jakub Jelinek PR middle-end/50199 * lto-lang.c (lto_post_options): Force flag_merge_constants = 1 if it was 0. * gcc.dg/lto/pr50199_0.c: New test. From-SVN: r248638 --- diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 045d632c016b..e7ec0c7bc074 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,12 @@ +2017-05-30 Jakub Jelinek + + Backported from mainline + 2017-01-11 Jakub Jelinek + + PR middle-end/50199 + * lto-lang.c (lto_post_options): Force flag_merge_constants = 1 + if it was 0. + 2016-06-03 Release Manager * GCC 5.4.0 released. diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c index 073bf17cd10f..7651143cb857 100644 --- a/gcc/lto/lto-lang.c +++ b/gcc/lto/lto-lang.c @@ -827,6 +827,12 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED) support. */ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST; + /* When partitioning, we can tear appart STRING_CSTs uses from the same + TU into multiple partitions. Without constant merging the constants + might not be equal at runtime. See PR50199. */ + if (!flag_merge_constants) + flag_merge_constants = 1; + /* Initialize the compiler back end. */ return false; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9424d657d507..6015fe17c121 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-01-11 Jakub Jelinek + + PR middle-end/50199 + * gcc.dg/lto/pr50199_0.c: New test. + 2017-01-04 Jakub Jelinek PR c++/78949 diff --git a/gcc/testsuite/gcc.dg/lto/pr50199_0.c b/gcc/testsuite/gcc.dg/lto/pr50199_0.c new file mode 100644 index 000000000000..61d0012be929 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr50199_0.c @@ -0,0 +1,17 @@ +/* PR middle-end/50199 */ +/* { dg-lto-options {{-O2 -flto -fno-merge-constants --param=lto-min-partition=1}} } */ + +__attribute__ ((noinline)) const char * +foo (const char *x) +{ + return x; +} + +int +main () +{ + const char *a = "ab"; + if (a != foo (a)) + __builtin_abort (); + return 0; +}