https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43565

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |matz at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Simplified testcase, optimized with -fno-common, not optimized without. 
Likewise
if g and f are 'extern' this is not optimized independently of -fno-common.
That is, the issue is whether &g or &f might resolve to NULL if in another unit
they are declared weak.

void link_error();
int g, f;
int main()
{
  if (&g == &f)
    link_error ();
  return 0;
}

so the issue is probably fear of

> cat t.c
extern void abort ();
extern int g, f;
int main()
{
  if (&g == &f)
    abort ();
  return 0;
}
> cat t2.c
int f __attribute__((weak)), g __attribute__((weak));

being miscompiled somehow.  While the above ends up with WEAK symbols,
the objects still get allocated.  If I make f and g extern in t2.c
I still get unresolved references at link time.

So sth is not exactly set up.

Reply via email to