[PATCH] PR gcc/84923 - gcc.dg/attr-weakref-1.c failed on aarch64

vladimir.mezentsev@oracle.com vladimir.mezentsev@oracle.com
Fri May 11 06:42:00 GMT 2018


From: Vladimir Mezentsev <vladimir.mezentsev@oracle.com>

When weakref_targets is not empty a target cannot be removed from the weak list.
A small example is below when 'wv12' is removed from the weak list on aarch64:
  static vtype Wv12 __attribute__((weakref ("wv12")));
  extern vtype wv12 __attribute__((weak));

Bootstrapped on aarch64-unknown-linux-gnu including (c,c++ and go).
Tested on aarch64-linux-gnu.
No regression. The attr-weakref-1.c test passed.

ChangeLog:
2018-05-10  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR gcc/84923
* varasm.c (weak_finish): clean up weak_decls
---
 gcc/varasm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/varasm.c b/gcc/varasm.c
index 85296b4..8cf6e1e 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -5652,7 +5652,8 @@ weak_finish (void)
       tree alias_decl = TREE_PURPOSE (t);
       tree target = ultimate_transparent_alias_target (&TREE_VALUE (t));
 
-      if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl)))
+      if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl))
+         || TREE_SYMBOL_REFERENCED (target))
 	/* Remove alias_decl from the weak list, but leave entries for
 	   the target alone.  */
 	target = NULL_TREE;
-- 
1.8.3.1



More information about the Gcc-patches mailing list