[Bug middle-end/99696] New: lto looks past aliases to initializers
rth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Mar 21 15:34:59 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99696
Bug ID: 99696
Summary: lto looks past aliases to initializers
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: rth at gcc dot gnu.org
Target Milestone: ---
The following is a c-ish version of
const int y = init();
which no longer works with gcc 11.
The intended advantage to the program from which this is
extracted is that references to Y may be cse'd across calls.
IMO this should work fine with LTO, so long as it does not
apply the constant initializer optimization to const variables
that are aliased.
Compile: gcc -O2 -flto y?.c
--- y1.c ---
#include <assert.h>
extern const int y;
int main(void)
{
assert(y == 1);
return 0;
}
--- y2.c ---
static int x;
extern const int y __attribute__((alias("x")));
static void __attribute__((constructor)) init(void)
{
x = 1;
}
More information about the Gcc-bugs
mailing list