Hi,
this patch should fix HP-PA bootstrap issue where we create local aliases but 
the target
has no support for them. 

Bootstrapped/regtested x86_64-linux (with aliases disabled) and commited.
        PR middle-end/58329
        * ipa-devirt.c (ipa_devirt): Be ready for symtab_nonoverwritable_alias
        to return NULL.
        * ipa.c (function_and_variable_visibility): Likewise.
        * ipa-profile.c (ipa_profile): Likewise.
Index: ipa-devirt.c
===================================================================
--- ipa-devirt.c        (revision 202650)
+++ ipa-devirt.c        (working copy)
@@ -1098,7 +1098,13 @@ ipa_devirt (void)
                           cgraph_node_name (likely_target),
                           likely_target->symbol.order);
                if (!symtab_can_be_discarded ((symtab_node) likely_target))
-                 likely_target = cgraph (symtab_nonoverwritable_alias 
((symtab_node)likely_target));
+                 {
+                   cgraph_node *alias;
+                   alias = cgraph (symtab_nonoverwritable_alias
+                                    ((symtab_node)likely_target));
+                   if (alias)
+                     likely_target = alias;
+                 }
                nconverted++;
                update = true;
                cgraph_turn_edge_to_speculative
Index: ipa.c
===================================================================
--- ipa.c       (revision 202650)
+++ ipa.c       (working copy)
@@ -998,7 +998,7 @@ function_and_variable_visibility (bool w
        {
          struct cgraph_node *alias = cgraph (symtab_nonoverwritable_alias 
((symtab_node) node));
 
-         if (alias != node)
+         if (alias && alias != node)
            {
              while (node->callers)
                {
Index: ipa-profile.c
===================================================================
--- ipa-profile.c       (revision 202650)
+++ ipa-profile.c       (working copy)
@@ -625,7 +625,13 @@ ipa_profile (void)
                         of N2.  Speculate on the local alias to allow inlining.
                       */
                      if (!symtab_can_be_discarded ((symtab_node) n2))
-                       n2 = cgraph (symtab_nonoverwritable_alias 
((symtab_node)n2));
+                       {
+                         cgraph_node *alias;
+                         alias = cgraph (symtab_nonoverwritable_alias
+                                          ((symtab_node)n2));
+                         if (alias)
+                           n2 = alias;
+                       }
                      nconverted++;
                      cgraph_turn_edge_to_speculative
                        (e, n2,
Index: symtab.c
===================================================================
--- symtab.c    (revision 202650)
+++ symtab.c    (working copy)
@@ -1083,6 +1083,10 @@ symtab_nonoverwritable_alias (symtab_nod
                               (void *)&new_node, true);
   if (new_node)
     return new_node;
+#ifndef ASM_OUTPUT_DEF
+  /* If aliases aren't supported by the assembler, fail.  */
+  return NULL;
+#endif
 
   /* Otherwise create a new one.  */
   new_decl = copy_node (node->symbol.decl);

Reply via email to