Bug 58385 - [4.7 Regression] likely wrong code bug
Summary: [4.7 Regression] likely wrong code bug
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.9.0
: P3 normal
Target Milestone: 4.8.2
Assignee: Jakub Jelinek
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-09-10 17:11 UTC by John Regehr
Modified: 2014-06-12 13:29 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work: 4.8.2
Known to fail: 4.7.4
Last reconfirmed: 2013-09-10 00:00:00


Attachments
gcc49-pr58385.patch (538 bytes, patch)
2013-09-10 18:55 UTC, Jakub Jelinek
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description John Regehr 2013-09-10 17:11:15 UTC
regehr@john-home ~/z/reduce/r112 $ gcc -O0 small.c ; ./a.out
0
regehr@john-home ~/z/reduce/r112 $ gcc -O1 small.c ; ./a.out
1
regehr@john-home ~/z/reduce/r112 $ cat small.c
int printf(const char *, ...);
int x0, x1 = 1;
int x2() {
  x1 = 0;
  return 0;
}

int main() {
  ((0 || x0) & x2() >= 0) <= 1 && 1;
  printf("%d\n", x1);
  return 0;
}
regehr@john-home ~/z/reduce/r112 $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/regehr/z/compiler-install/gcc-r202470-install/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /home/regehr/z/compiler-source/gcc/configure --prefix=/home/regehr/z/compiler-install/gcc-r202470-install --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.9.0 20130910 (experimental) (GCC)
Comment 1 Marc Glisse 2013-09-10 18:06:16 UTC
Confirmed, already in 4.6. Somewhere in fold_range_test we forget to check for side effects.
Comment 2 Jakub Jelinek 2013-09-10 18:33:46 UTC
Started with r145254.
Comment 3 Jakub Jelinek 2013-09-10 18:55:00 UTC
Created attachment 30795 [details]
gcc49-pr58385.patch

Untested fix.
Comment 4 Jakub Jelinek 2013-09-11 11:35:53 UTC
Author: jakub
Date: Wed Sep 11 11:35:51 2013
New Revision: 202494

URL: http://gcc.gnu.org/viewcvs?rev=202494&root=gcc&view=rev
Log:
	PR tree-optimization/58385
	* fold-const.c (build_range_check): If both low and high are NULL,
	use omit_one_operand_loc to preserve exp side-effects.

	* gcc.c-torture/execute/pr58385.c: New test.

Added:
    trunk/gcc/testsuite/gcc.c-torture/execute/pr58385.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/fold-const.c
    trunk/gcc/testsuite/ChangeLog
Comment 5 Jakub Jelinek 2013-09-11 12:17:49 UTC
Author: jakub
Date: Wed Sep 11 12:17:47 2013
New Revision: 202495

URL: http://gcc.gnu.org/viewcvs?rev=202495&root=gcc&view=rev
Log:
	PR tree-optimization/58385
	* fold-const.c (build_range_check): If both low and high are NULL,
	use omit_one_operand_loc to preserve exp side-effects.

	* gcc.c-torture/execute/pr58385.c: New test.

Added:
    branches/gcc-4_8-branch/gcc/testsuite/gcc.c-torture/execute/pr58385.c
Modified:
    branches/gcc-4_8-branch/gcc/ChangeLog
    branches/gcc-4_8-branch/gcc/fold-const.c
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog
Comment 6 Jakub Jelinek 2013-09-11 12:19:05 UTC
Fixed for 4.8.2+ so far.
Comment 7 Richard Biener 2014-06-12 13:29:06 UTC
Fixed for 4.8.2.