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
This commit is contained in:
parent
d0f7899abb
commit
bd632dbdf8
4 changed files with 32 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-12-02 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
PR middle-end/46674
|
||||
* varasm.c (compute_visible_aliases): Handle user set
|
||||
assembler name.
|
||||
|
||||
2010-12-01 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_option_override_internal): Fix
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-12-02 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
PR middle-end/46674
|
||||
* gcc.dg/pr46674.c: New test.
|
||||
|
||||
2010-12-02 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* objc.dg/exceptions-6.m: New.
|
||||
|
|
11
gcc/testsuite/gcc.dg/pr46674.c
Normal file
11
gcc/testsuite/gcc.dg/pr46674.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-alias "" } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
int yum;
|
||||
void dessert (void) { ++yum; }
|
||||
extern void jelly (void) __asm__ ("jelly2") __attribute__ ((alias ("dessert"), weak));
|
||||
extern void wobbly (void) __attribute__ ((alias ("jelly2"), weak));
|
||||
|
||||
/* { dg-final { scan-assembler "wobbly" } } */
|
||||
/* { dg-final { scan-assembler "jelly2" } } */
|
11
gcc/varasm.c
11
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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue