]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
More '#ifdef ASM_OUTPUT_DEF' -> 'if (TARGET_SUPPORTS_ALIASES)' etc.
authorThomas Schwinge <thomas@codesourcery.com>
Thu, 7 Sep 2023 20:15:08 +0000 (22:15 +0200)
committerThomas Schwinge <thomas@codesourcery.com>
Thu, 26 Oct 2023 06:37:25 +0000 (08:37 +0200)
Per commit a8b522b483ebb8c972ecfde8779a7a6ec16aecd6 (Subversion r251048)
"Introduce TARGET_SUPPORTS_ALIASES", there is the idea that a back end may or
may not provide symbol aliasing support ('TARGET_SUPPORTS_ALIASES') independent
of '#ifdef ASM_OUTPUT_DEF', and in particular, depending not just on static but
instead on dynamic (run-time) configuration.  There did remain a few instances
where we currently still assume that from '#ifdef ASM_OUTPUT_DEF' follows
'TARGET_SUPPORTS_ALIASES'.  Change these to 'if (TARGET_SUPPORTS_ALIASES)',
similarly, or 'gcc_checking_assert (TARGET_SUPPORTS_ALIASES);'.

gcc/
* ipa-icf.cc (sem_item::target_supports_symbol_aliases_p):
'gcc_checking_assert (TARGET_SUPPORTS_ALIASES);' before
'return true;'.
* ipa-visibility.cc (function_and_variable_visibility): Change
'#ifdef ASM_OUTPUT_DEF' to 'if (TARGET_SUPPORTS_ALIASES)'.
* varasm.cc (output_constant_pool_contents)
[#ifdef ASM_OUTPUT_DEF]:
'gcc_checking_assert (TARGET_SUPPORTS_ALIASES);'.
(do_assemble_alias) [#ifdef ASM_OUTPUT_DEF]:
'if (!TARGET_SUPPORTS_ALIASES)',
'gcc_checking_assert (seen_error ());'.
(assemble_alias): Change '#if !defined (ASM_OUTPUT_DEF)' to
'if (!TARGET_SUPPORTS_ALIASES)'.
(default_asm_output_anchor):
'gcc_checking_assert (TARGET_SUPPORTS_ALIASES);'.

gcc/ipa-icf.cc
gcc/ipa-visibility.cc
gcc/varasm.cc

index 836d0914ded2801607af4b3c0f84a52b6ff180de..bbdfd445397d6a55e41bb488b7a1ce6a51657d6c 100644 (file)
@@ -218,6 +218,7 @@ sem_item::target_supports_symbol_aliases_p (void)
 #if !defined (ASM_OUTPUT_DEF) || (!defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL))
   return false;
 #else
+  gcc_checking_assert (TARGET_SUPPORTS_ALIASES);
   return true;
 #endif
 }
index 8ec82bb333e2b66eadaec13b5965ec673de4665e..8ce56114ee3d6d3cef052d6bebd4972d98a64aee 100644 (file)
@@ -622,41 +622,43 @@ function_and_variable_visibility (bool whole_program)
   /* All aliases should be processed at this point.  */
   gcc_checking_assert (!alias_pairs || !alias_pairs->length ());
 
-#ifdef ASM_OUTPUT_DEF
-  FOR_EACH_DEFINED_FUNCTION (node)
+  if (TARGET_SUPPORTS_ALIASES)
     {
-      if (node->get_availability () != AVAIL_INTERPOSABLE
-         || DECL_EXTERNAL (node->decl)
-         || node->has_aliases_p ()
-         || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl)))
-       continue;
-
-      cgraph_node *alias = 0;
-      cgraph_edge *next_edge;
-      for (cgraph_edge *e = node->callees; e; e = next_edge)
+      FOR_EACH_DEFINED_FUNCTION (node)
        {
-         next_edge = e->next_callee;
-         /* Recursive function calls usually can't be interposed.  */
-
-         if (!e->recursive_p ())
+         if (node->get_availability () != AVAIL_INTERPOSABLE
+             || DECL_EXTERNAL (node->decl)
+             || node->has_aliases_p ()
+             || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl)))
            continue;
 
-         if (!alias)
+         cgraph_node *alias = 0;
+         cgraph_edge *next_edge;
+         for (cgraph_edge *e = node->callees; e; e = next_edge)
            {
-             alias = dyn_cast<cgraph_node *> (node->noninterposable_alias ());
-             gcc_assert (alias && alias != node);
-           }
+             next_edge = e->next_callee;
+             /* Recursive function calls usually can't be interposed.  */
 
-         e->redirect_callee (alias);
-         if (gimple_has_body_p (e->caller->decl))
-           {
-             push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
-             cgraph_edge::redirect_call_stmt_to_callee (e);
-             pop_cfun ();
+             if (!e->recursive_p ())
+               continue;
+
+             if (!alias)
+               {
+                 alias
+                   = dyn_cast<cgraph_node *> (node->noninterposable_alias ());
+                 gcc_assert (alias && alias != node);
+               }
+
+             e->redirect_callee (alias);
+             if (gimple_has_body_p (e->caller->decl))
+               {
+                 push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
+                 cgraph_edge::redirect_call_stmt_to_callee (e);
+                 pop_cfun ();
+               }
            }
        }
     }
-#endif
 
   FOR_EACH_FUNCTION (node)
     {
index b0eff17b8b5c5931d069ee0a68e5b3c38fa98cd2..6ae35edc5aed931ca52f4f0bb0daf6e48f81f8c1 100644 (file)
@@ -4300,6 +4300,8 @@ output_constant_pool_contents (struct rtx_constant_pool *pool)
     if (desc->mark < 0)
       {
 #ifdef ASM_OUTPUT_DEF
+       gcc_checking_assert (TARGET_SUPPORTS_ALIASES);
+
        const char *name = XSTR (desc->sym, 0);
        char label[256];
        char buffer[256 + 32];
@@ -6280,6 +6282,10 @@ do_assemble_alias (tree decl, tree target)
                  IDENTIFIER_POINTER (id),
                  IDENTIFIER_POINTER (target));
 # endif
+  /* If symbol aliases aren't actually supported...  */
+  if (!TARGET_SUPPORTS_ALIASES)
+    /* ..., 'ASM_OUTPUT_DEF{,_FROM_DECLS}' better have raised an error.  */
+    gcc_checking_assert (seen_error ());
 #elif defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
   {
     const char *name;
@@ -6349,9 +6355,8 @@ assemble_alias (tree decl, tree target)
       if (TREE_PUBLIC (decl))
        error ("%qs symbol %q+D must have static linkage", "weakref", decl);
     }
-  else
+  else if (!TARGET_SUPPORTS_ALIASES)
     {
-#if !defined (ASM_OUTPUT_DEF)
 # if !defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL)
       error_at (DECL_SOURCE_LOCATION (decl),
                "alias definitions not supported in this configuration");
@@ -6372,7 +6377,7 @@ assemble_alias (tree decl, tree target)
          return;
        }
 # endif
-#endif
+      gcc_unreachable ();
     }
   TREE_USED (decl) = 1;
 
@@ -7461,6 +7466,8 @@ default_strip_name_encoding (const char *str)
 void
 default_asm_output_anchor (rtx symbol)
 {
+  gcc_checking_assert (TARGET_SUPPORTS_ALIASES);
+
   char buffer[100];
 
   sprintf (buffer, "*. + " HOST_WIDE_INT_PRINT_DEC,