http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51900
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
CC| |ktietz at gcc dot gnu.org
--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-19
15:01:28 UTC ---
Ugh. I think this is a bug in the way i386_pe_binds_local_p implements
the binds_local target macro:
bool
i386_pe_binds_local_p (const_tree exp)
{
/* PE does not do dynamic binding. Indeed, the only kind of
non-local reference comes from a dllimport'd symbol. */
if ((TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == FUNCTION_DECL)
&& DECL_DLLIMPORT_P (exp))
return false;
/* Or a weak one, now that they are supported. */
if ((TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == FUNCTION_DECL)
&& DECL_WEAK (exp))
return false;
return true;
}
It's completely bogus to return true at the end - you have to do
return default_binds_local_p (exp);
to get even slightly correct/optimal handling. Thus, confirmed as a target
issue.