aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorJie Zhang <jie@codesourcery.com>2010-12-02 04:09:58 +0000
committerJie Zhang <jiez@gcc.gnu.org>2010-12-02 04:09:58 +0000
commitbd632dbdf823bf17aecf95d52f0df5e732e9901a (patch)
tree0d324330ed956478e577c015886740f35584d137 /gcc/varasm.c
parentd0f7899abb4d765cfe9da433cb17b38a425d55e8 (diff)
downloadgcc-bd632dbdf823bf17aecf95d52f0df5e732e9901a.zip
gcc-bd632dbdf823bf17aecf95d52f0df5e732e9901a.tar.gz
gcc-bd632dbdf823bf17aecf95d52f0df5e732e9901a.tar.bz2
re PR middle-end/46674 (Weak alias is mistakenly optimized away)
PR middle-end/46674 * varasm.c (compute_visible_aliases): Handle user set assembler name. testsuite/ PR middle-end/46674 * gcc.dg/pr46674.c: New test. From-SVN: r167365
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 5f79ece..921ee2e 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -5525,12 +5525,21 @@ compute_visible_aliases (void)
{
struct cgraph_node *fnode = NULL;
struct varpool_node *vnode = NULL;
+ tree asmname = DECL_ASSEMBLER_NAME (p->decl);
+ const char *str = IDENTIFIER_POINTER (asmname);
+
+ if (str[0] == '*')
+ {
+ str ++;
+ asmname = get_identifier (str);
+ }
+
fnode = cgraph_node_for_asm (p->target);
vnode = (fnode == NULL) ? varpool_node_for_asm (p->target) : NULL;
if ((fnode
|| vnode
|| pointer_set_contains (visible, p->target))
- && !pointer_set_insert (visible, DECL_ASSEMBLER_NAME (p->decl)))
+ && !pointer_set_insert (visible, asmname))
changed = true;
}
}