diff options
author | Jie Zhang <jie@codesourcery.com> | 2010-12-02 04:09:58 +0000 |
---|---|---|
committer | Jie Zhang <jiez@gcc.gnu.org> | 2010-12-02 04:09:58 +0000 |
commit | bd632dbdf823bf17aecf95d52f0df5e732e9901a (patch) | |
tree | 0d324330ed956478e577c015886740f35584d137 /gcc/varasm.c | |
parent | d0f7899abb4d765cfe9da433cb17b38a425d55e8 (diff) | |
download | gcc-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.c | 11 |
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; } } |