Combining the following C functions and using -fdump-tree-original causes the static function with the same name to emitted with the same name instead of with an unique number. --- file1.c --- static void f(){} void g(){f();} --- cut --- --- file2.c --- static void f(){} void h(){f();} --- cut ---
Compile this with "-combine -fdump-tree-original file1.c file2.c -c" and see that this fails to assemble. Some analysis from Caroline: If you call c_genericize with the flag for the dump turned on, it calls DECL_ASSEMBLER_NAME (it ought to call DECL_NAME). The problem I saw was: I was compiling a bunch of files at the same time (a SPEC benchmark). Several of the C files called the same header file, which had a tiny function defined inside it. The function name *should* have gotten a number appended to the end of it so that each occurrence of it in the assembly file was unique. However the premature call to DECL_ASSEMBLER_NAME in c_genericize (when dump is turned on) meant the context was not properly set at the time DECL_ASSEMBLER_NAME was called, which in turn meant the uniquifying numbers were not appended to the function name, which resulted in multiple functions with the same name in the .s file, which caused the linker to complain vociferously. I generated the testcase from her description of the bug. -- Summary: -fdump-tree-original causes static function to emitted with the same name Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pinskia at gcc dot gnu dot org CC: ctice at apple dot com,gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22065