https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117287
Bug ID: 117287
Summary: [13/14/15 Regression] assume attribute related
miscompilation
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: build
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
CC: amonakov at gcc dot gnu.org, jakub at gcc dot gnu.org,
pinskia at gcc dot gnu.org, rguenth at gcc dot gnu.org,
sjames at gcc dot gnu.org
Depends on: 117249
Target Milestone: ---
+++ This bug was initially created as a clone of Bug #117249 +++
C++
static inline bool
foo (unsigned x)
{
return x == 4 || x == 5 || x == 9 || x == 10;
}
int v;
[[gnu::noipa]] void
bar (const char *p)
{
if (p[0] != (v ? 'a' : 'b') || p[1])
__builtin_abort ();
}
[[gnu::noipa]] void
baz (unsigned x)
{
bool a = x == 5;
[[assume (foo (x))]];
bar (a ? "a" : "b");
}
int
main ()
{
baz (4);
v = 1;
baz (5);
v = 0;
baz (9);
baz (10);
}
is miscompiled on the trunk and 14/13 branches with -O2
--param=logical-op-non-short-circuit=0, the vrp1 pass decides to call bar
("b"); unconditionally, even when the assumption should result in [4,5][9,10]
range for x.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117249
[Bug 117249] [12/13/14/15 Regression] --disable-checking is broken since
r5-2450