On Mon, Mar 09, 2015 at 04:38:57AM +0100, Jan Hubicka wrote:
--- varasm.c (revision 221269)
+++ varasm.c (working copy)
@@ -1630,35 +1630,30 @@ default_ctor_section_asm_out_constructor
void
notice_global_symbol (tree decl)
{
- const char **type = first_global_object_name;
+ const char **t = first_global_object_name;
if (first_global_object_name
|| !TREE_PUBLIC (decl)
|| DECL_EXTERNAL (decl)
|| !DECL_NAME (decl)
+ || (TREE_CODE (decl) == VAR_DECL DECL_HARD_REGISTER (decl))
|| (TREE_CODE (decl) != FUNCTION_DECL
(TREE_CODE (decl) != VAR_DECL
|| (DECL_COMMON (decl)
(DECL_INITIAL (decl) == 0
- || DECL_INITIAL (decl) == error_mark_node
- || !MEM_P (DECL_RTL (decl)))
+ || DECL_INITIAL (decl) == error_mark_node)
return;
/* We win when global object is found, but it is useful to know about weak
symbol as well so we can produce nicer unique names. */
if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl) || flag_shlib)
-type = weak_global_object_name;
+t = weak_global_object_name;
- if (!*type)
+ if (!*t)
{
- const char *p;
- const char *name;
- rtx decl_rtl = DECL_RTL (decl);
-
- p = targetm.strip_name_encoding (XSTR (XEXP (decl_rtl, 0), 0));
- name = ggc_strdup (p);
-
- *type = name;
+ tree id = DECL_ASSEMBLER_NAME (decl);
+ ultimate_transparent_alias_target (id);
make_decl_rtl only calls this for:
if (TREE_CODE (decl) == FUNCTION_DECL
cgraph_node::get (decl)
cgraph_node::get (decl)-instrumentation_clone)
Is it intentional you are doing it unconditionally?
+ *t = ggc_strdup (targetm.strip_name_encoding (IDENTIFIER_POINTER
(id)));
Otherwise it looks reasonable. Another option would be to just create the
RTL for notice_global_symbol purposes using make_decl_rtl_for_debug.
Jakub