https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42065
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Status|UNCONFIRMED |NEW Last reconfirmed| |2017-02-07 CC| |msebor at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- It doesn't look like this has changed between GCC 4.5 and GCC 7 so I'll confirm it as a missing space optimization. $ cat t.c && gcc -g3 -Wall -feliminate-unused-debug-symbols -feliminate-unused-debug-types t.c && readelf -wm a.out | grep -e NOT -e USED #define NOT used #define USED(x) x int main (void) { return USED (0); } DW_MACRO_GNU_define_indirect - lineno : 1 macro : NOT used DW_MACRO_GNU_define_indirect - lineno : 2 macro : USED(x) x With GCC 7, even an empty object file contains 345 macro definitions (one for each macro predefined by GCC): $ /build/gcc-trunk/gcc/xgcc -B /build/gcc-trunk/gcc -c -g3 -xc -ot.o - </dev/null && readelf -wm t.o | grep macro | wc -l 345