+2015-06-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/utils.c (create_var_decl_1): If an assembler name is
+ specified, let the target mangle it before settting.
+ (create_subprog_decl): Likewise and move this treatment last.
+
2015-06-01 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/lang-specs.h (TARGET_VXWORKS_RTP): Move substitution to
if (TREE_CODE (var_decl) == VAR_DECL)
{
if (asm_name)
- SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
+ {
+ /* Let the target mangle the name if this isn't a verbatim asm. */
+ if (*IDENTIFIER_POINTER (asm_name) != '*')
+ asm_name = targetm.mangle_decl_assembler_name (var_decl, asm_name);
+
+ SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
+ }
if (global_bindings_p ())
rest_of_decl_compilation (var_decl, true, 0);
DECL_BY_REFERENCE (result_decl) = TREE_ADDRESSABLE (subprog_type);
DECL_RESULT (subprog_decl) = result_decl;
+ process_attributes (&subprog_decl, &attr_list, true, gnat_node);
+
+ /* Add this decl to the current binding level. */
+ gnat_pushdecl (subprog_decl, gnat_node);
+
if (asm_name)
{
+ /* Let the target mangle the name if this isn't a verbatim asm. */
+ if (*IDENTIFIER_POINTER (asm_name) != '*')
+ asm_name = targetm.mangle_decl_assembler_name (subprog_decl, asm_name);
+
SET_DECL_ASSEMBLER_NAME (subprog_decl, asm_name);
/* The expand_main_function circuitry expects "main_identifier_node" to
DECL_NAME (subprog_decl) = main_identifier_node;
}
- process_attributes (&subprog_decl, &attr_list, true, gnat_node);
-
- /* Add this decl to the current binding level. */
- gnat_pushdecl (subprog_decl, gnat_node);
-
/* Output the assembler code and/or RTL for the declaration. */
rest_of_decl_compilation (subprog_decl, global_bindings_p (), 0);
switch (TREE_CODE (decl))
{
case FUNCTION_DECL:
- /* FIXME: Imported stdcall names are not modified by the Ada frontend.
- Check and decorate the RTL name now. */
- if (strcmp (lang_hooks.name, "GNU Ada") == 0)
- {
- tree new_id;
- tree old_id = DECL_ASSEMBLER_NAME (decl);
- const char* asm_str = IDENTIFIER_POINTER (old_id);
- /* Do not change the identifier if a verbatim asmspec
- or if stdcall suffix already added. */
- if (!(*asm_str == '*' || strchr (asm_str, '@'))
- && (new_id = i386_pe_maybe_mangle_decl_assembler_name (decl,
- old_id)))
- XSTR (symbol, 0) = IDENTIFIER_POINTER (new_id);
- }
break;
case VAR_DECL: