Commit 16515e5c by Andrew Pinski Committed by Andrew Pinski

re PR target/19041 (-fvisibility=hidden causes bad codegen for common symbols)

2004-12-16  Andrew Pinski  <pinskia@physics.uc.edu>

        PR target/19041
        * config/darwin.c (machopic_symbol_defined_p): Return false
        if the binds local and is a common symbol.

2004-12-16  Andrew Pinski  <pinskia@physics.uc.edu>

        PR target/19041
        * gcc.dg/visibility-c.c: New test.

From-SVN: r92292
parent 67ba1be6
2004-12-16 Andrew Pinski <pinskia@physics.uc.edu>
PR target/19041
* config/darwin.c (machopic_symbol_defined_p): Return false
if the binds local and is a common symbol.
2004-12-16 Richard Henderson <rth@redhat.com>
* config/i386/i386.md (extv, extzv, insv): Revalidate the
......
......@@ -90,16 +90,30 @@ name_needs_quotes (const char *name)
return 0;
}
/*
* flag_pic = 1 ... generate only indirections
* flag_pic = 2 ... generate indirections and pure code
*/
/* Return true if SYM_REF can be used without an indirection. */
static int
machopic_symbol_defined_p (rtx sym_ref)
{
return (SYMBOL_REF_FLAGS (sym_ref) & MACHO_SYMBOL_FLAG_DEFINED)
|| (SYMBOL_REF_LOCAL_P (sym_ref) && ! SYMBOL_REF_EXTERNAL_P (sym_ref));
if (SYMBOL_REF_FLAGS (sym_ref) & MACHO_SYMBOL_FLAG_DEFINED)
return true;
/* If a symbol references local and is not an extern to this
file, then the symbol might be able to declared as defined. */
if (SYMBOL_REF_LOCAL_P (sym_ref) && ! SYMBOL_REF_EXTERNAL_P (sym_ref))
{
/* If the symbol references a variable and the variable is a
common symbol, then this symbol is not defined. */
if (SYMBOL_REF_FLAGS (sym_ref) & MACHO_SYMBOL_FLAG_VARIABLE)
{
tree decl = SYMBOL_REF_DECL (sym_ref);
if (!decl)
return true;
if (DECL_COMMON (decl))
return false;
}
return true;
}
return false;
}
/* This module assumes that (const (symbol_ref "foo")) is a legal pic
......
2004-12-16 Andrew Pinski <pinskia@physics.uc.edu>
PR target/19041
* gcc.dg/visibility-c.c: New test.
2004-12-16 Roger Sayle <roger@eyesopen.com>
PR middle-end/18493
......
/* Test that visibility works on common symbols also. */
/* { dg-do compile } */
/* { dg-require-visibility "" } */
/* { dg-final { scan-hidden "options" } } */
int options __attribute__((__visibility__("hidden")));
void f(void)
{
options = 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment