Bug 58364 - [4.8/4.9 Regression] likely wrong code bug
Summary: [4.8/4.9 Regression] likely wrong code bug
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.9.0
: P3 normal
Target Milestone: 4.8.2
Assignee: Jakub Jelinek
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2013-09-08 19:43 UTC by John Regehr
Modified: 2013-09-10 13:25 UTC (History)
3 users (show)

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


Attachments
gcc49-pr58364.patch (727 bytes, patch)
2013-09-09 09:56 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-08 19:43:46 UTC
regehr@john-home ~/z/reduce/r107 $ gcc -O0 small.c ; ./a.out
regehr@john-home ~/z/reduce/r107 $ gcc -O1 small.c ; ./a.out
x
regehr@john-home ~/z/reduce/r107 $ cat small.c
int printf(const char *, ...);

int x3 (int x4) { 
  return x4 < 0 ? 1 : x4; 
}

int x0 = 1, x1, x2;

int main (void) {
  if (x3(x0 > x2 == (x1 = 0))) {
    printf("x\n");
  }
  return 0;
}
regehr@john-home ~/z/reduce/r107 $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/regehr/z/compiler-install/gcc-r202341-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-r202341-install --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.9.0 20130906 (experimental) (GCC)
Comment 1 Marc Glisse 2013-09-08 21:01:44 UTC
Something strange seems to happen in reassoc.
Comment 2 Jakub Jelinek 2013-09-09 06:01:13 UTC
Started with r193028 .  I'll have a look.
Comment 3 Jakub Jelinek 2013-09-09 09:56:01 UTC
Created attachment 30771 [details]
gcc49-pr58364.patch

Untested fix.
Comment 4 Jakub Jelinek 2013-09-09 17:10:01 UTC
Author: jakub
Date: Mon Sep  9 17:09:59 2013
New Revision: 202409

URL: http://gcc.gnu.org/viewcvs?rev=202409&root=gcc&view=rev
Log:
	PR tree-optimization/58364
	* tree-ssa-reassoc.c (init_range_entry): For BIT_NOT_EXPR on
	BOOLEAN_TYPE, only invert in_p and continue with arg0 if
	the current range can't be an unconditional true or false.

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

Added:
    trunk/gcc/testsuite/gcc.c-torture/execute/pr58364.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-ssa-reassoc.c
Comment 5 Jakub Jelinek 2013-09-09 17:11:07 UTC
Author: jakub
Date: Mon Sep  9 17:11:05 2013
New Revision: 202410

URL: http://gcc.gnu.org/viewcvs?rev=202410&root=gcc&view=rev
Log:
	PR tree-optimization/58364
	* tree-ssa-reassoc.c (init_range_entry): For BIT_NOT_EXPR on
	BOOLEAN_TYPE, only invert in_p and continue with arg0 if
	the current range can't be an unconditional true or false.

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

Added:
    branches/gcc-4_8-branch/gcc/testsuite/gcc.c-torture/execute/pr58364.c
Modified:
    branches/gcc-4_8-branch/gcc/ChangeLog
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_8-branch/gcc/tree-ssa-reassoc.c
Comment 6 Jakub Jelinek 2013-09-09 17:13:24 UTC
Fixed.
Comment 7 Eric Botcazou 2013-09-10 13:25:14 UTC
r195642 is an equivalent fix in the folder (make_range_step).