https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43565
--- Comment #13 from Martin Sebor <msebor at gcc dot gnu.org> ---
As noted in the duplicate pr90122, the test case below shows that GCC already
relies on different extern declarations denoting distinct objects. It just
doesn't fold the address equality expression for some reason.
$ cat x.c && gcc -O2 -S -Wall -Wextra -fdump-tree-optimized=/dev/stdout
-fno-common x.c
extern int a, b;
void foo ();
void bar ();
void f (void)
{
if (&a == &b) // not folded
foo ();
int i = a;
b = 0;
if (i != a) // folded to false
bar ();
}
;; Function f (f, funcdef_no=0, decl_uid=1910, cgraph_uid=1, symbol_order=2)
Removing basic block 5
f ()
{
<bb 2> [local count: 1073741824]:
if (&a == &b)
goto <bb 3>; [17.43%]
else
goto <bb 4>; [82.57%]
<bb 3> [local count: 187153200]:
foo ();
<bb 4> [local count: 1073741824]:
b = 0;
return;
}