From 2236cf7a503a24ef54b02a41ab3b7febf99bfc13 Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 11 Jan 2017 08:40:59 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244304 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/lto/ChangeLog | 6 ++++++ gcc/lto/lto-lang.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/lto/pr50199_0.c | 17 +++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/lto/pr50199_0.c diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index f94add55852..9bf6df01544 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,9 @@ +2017-01-11 Jakub Jelinek + + PR middle-end/50199 + * lto-lang.c (lto_post_options): Force flag_merge_constants = 1 + if it was 0. + 2017-01-09 Jakub Jelinek PR translation/79019 diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c index c2b49dc44b6..fccb8c61f8f 100644 --- a/gcc/lto/lto-lang.c +++ b/gcc/lto/lto-lang.c @@ -857,6 +857,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 c332d9062e0..2b5f3b9dca0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-01-11 Jakub Jelinek + + PR middle-end/50199 + * gcc.dg/lto/pr50199_0.c: New test. + 2017-01-10 Martin Sebor PR testsuite/78960 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 00000000000..61d0012be92 --- /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; +} -- 2.11.4.GIT