http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60022
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- No need for that, just look carefully at the output: ... # 132 "../system.h" 2 #define _(Text) dgettext (PACKAGE, Text) ... # 46 "/usr/include/libelf.h" 3 4 #undef _ typedef void Elf_Void; #define _(a) a ... Elf_Data *elf64_xlatetom (Elf_Data *, const Elf_Data *, unsigned); #undef _ # 35 "/usr/include/gelf.h" 2 3 4 ... if (tfd == ((void *)0) || Ferror(tfd)) { rpmlog(RPMLOG_ERR, _("error creating temporary file %s: %m\n"), tempfn); goto exit; } So, clearly your libelf.h is undefining _, then defining it and undefining it again at the end. So, I'd say your libelf.h is badly written, it shouldn't be really changing _, and perhaps if you want to compile rpm you need to reshuffle the headers so that <libelf.h> is included before headers that actually define _ macro. In any case, not a GCC bug.