https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68764
Bug ID: 68764
Summary: C frontend does not fold away trivial expressions that
refer to const variables
Product: gcc
Version: 5.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: ppalka at gcc dot gnu.org
Target Milestone: ---
In the following snippet, one would expect foo and bar to get folded to the
same code, but that is not the case.
void dummy (const void *);
int
foo (void)
{
const int x = 7;
dummy (&x);
return x + 0;
}
int
bar (void)
{
const int x = 7;
dummy (&x);
return x;
}
While the C FE does fold "return x + 0;" to "return 7;", it does not fold
"return x;" to "return 7;". And the load of x is the function bar() eventually
survives all optimization passes and is present in the final optimized code:
bar ()
{
const int x;
int _4;
<bb 2>:
x = 7;
dummy (&x);
_4 = x;
x ={v} {CLOBBER};
return _4;
}
The C++ frontend is able to fully fold both return statements.