symtab.c (symtab_node::get_partitioning_class): Aliases of external symbols are external.
authorJan Hubicka <hubicka@ucw.cz>
Tue, 17 Dec 2019 15:57:25 +0000 (16:57 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 17 Dec 2019 15:57:25 +0000 (15:57 +0000)
* symtab.c (symtab_node::get_partitioning_class): Aliases of external
symbols are external.

From-SVN: r279464

gcc/ChangeLog
gcc/symtab.c

index 1be2ae9607d49d4d9aac1c1c1f9395e831c67c71..e5702ae06124a6ed5da7d3b057d9c7a6d0d8d0fa 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-17  Jan Hubicka  <hubicka@ucw.cz>
+
+       * symtab.c (symtab_node::get_partitioning_class): Aliases of external
+       symbols are external.
+
 2019-12-17  Christophe Lyon  <christophe.lyon@linaro.org>
 
        * config/arm/arm-protos.h (thumb1_gen_const_int): Add new prototype.
index a88f45c43416ffe9eeae5bf9f06206338c9c8721..10b8ed1d178baa2cd0a93f12362fe85578b3e619 100644 (file)
@@ -1952,6 +1952,11 @@ symtab_node::get_partitioning_class (void)
   if (DECL_EXTERNAL (decl))
     return SYMBOL_EXTERNAL;
 
+  /* Even static aliases of external functions as external.  Those can happen
+     when COMDAT got resolved to non-IL implementation.  */
+  if (alias && DECL_EXTERNAL (ultimate_alias_target ()->decl))
+    return SYMBOL_EXTERNAL;
+
   if (varpool_node *vnode = dyn_cast <varpool_node *> (this))
     {
       if (alias && definition && !ultimate_alias_target ()->definition)