https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69981
Bug ID: 69981 Summary: -f[no]keep-static-consts has no effect Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: equinox-gccbugs at diac24 dot net Target Milestone: --- This bug is an extension of #20319; the -fkeep-static-consts option seems to have no effect in either direction. (#20319 was focused on the "-fkeep" variant; my issue is with -O0 -fno-keep-static-consts.) My application code is extern struct foo ref; static struct foo * const myconst = &ref; Where ref is defined in a library that is not always linked in, which works on -O1 -Og -Os -O2 -O3 but not on "-O0 -fno-keep-static-consts". I think it should. Trying older versions, gcc-4.2.4 already behaves the same. $ ./test.sh gcc-4.9.3 -O0 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-4.9.3 -O0 -fkeep-static-consts 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-4.9.3 -O0 -fno-keep-static-consts 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-4.9.3 -O1 gcc-4.9.3 -O1 -fkeep-static-consts gcc-4.9.3 -O1 -fno-keep-static-consts gcc-5.3.0 -O0 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-5.3.0 -O0 -fkeep-static-consts 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-5.3.0 -O0 -fno-keep-static-consts 0000000000000000 l O .rodata 0000000000000004 intval 0000000000000000 l O .data.rel.ro 0000000000000008 ptrval gcc-5.3.0 -O1 gcc-5.3.0 -O1 -fkeep-static-consts gcc-5.3.0 -O1 -fno-keep-static-consts $ cat test.sh #!/bin/sh cat >const.c <<EOF static const int intval = 1234; extern int dst; static int * const ptrval = &dst; EOF for CC in gcc-4.9.3 gcc-5.3.0; do for OPT in -O0 -O1; do for ARG in "" "-fkeep-static-consts" "-fno-keep-static-consts"; do echo $CC $OPT $ARG $CC $OPT $ARG -o const.o -c const.c objdump -t const.o | grep val done done done