Hi,

This patch fixes a regression introduced by rev. 193204 for all 32-bit
Windows targets.
It corrects the wrong assumption in i386.c to be able to simply
undefine TARGET_MANGLE_DECL_ASSEMBLER_NAME
there without keeping care to call sub-target specific hook.  This
destroyed name-decoration for
stdcall and fastcall calling conventions.

ChangeLog

2012-11-20  Kai Tietz

        PR target/55268
        * i386.c (ix86_mangle_decl_assembler_name): Use
        SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME if defined.
        * cygming.h (TARGET_MANGLE_DECL_ASSEMBLER_NAME): Rename
        to SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME.

Tested for i686-w64-mingw32, i686-pc-cygwin, and x86_64-w64-mingw32.
Ok for apply?

Regards,
Kai

        
Index: cygming.h
===================================================================
--- cygming.h   (Revision 193650)
+++ cygming.h   (Arbeitskopie)
@@ -471,7 +471,7 @@

 #define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p
 #define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION
i386_pe_adjust_class_at_definition
-#define TARGET_MANGLE_DECL_ASSEMBLER_NAME i386_pe_mangle_decl_assembler_name
+#define SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME i386_pe_mangle_decl_assembler_name

 #undef TARGET_ASM_ASSEMBLE_VISIBILITY
 #define TARGET_ASM_ASSEMBLE_VISIBILITY i386_pe_assemble_visibility
Index: i386.c
===================================================================
--- i386.c      (Revision 193650)
+++ i386.c      (Arbeitskopie)
@@ -28981,7 +28981,10 @@
   /* For function version, add the target suffix to the assembler name.  */
   if (TREE_CODE (decl) == FUNCTION_DECL
       && DECL_FUNCTION_VERSIONED (decl))
-    return ix86_mangle_function_version_assembler_name (decl, id);
+    id = ix86_mangle_function_version_assembler_name (decl, id);
+#ifdef SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME
+  id = SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME (decl, id);
+#endif

   return id;
 }

Reply via email to