https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116835
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #5)
> Found a testcase which we produce wrong code as we introduce an
> unconditional load:
> ```
> extern int a __attribute__((weak));
>
> int b;
> int bar (int c) __attribute__((noipa, noinline));
> int
> bar (int c)
> {
> int *p = &a;
> for (int j = 0; j < c; ++j)
> p = &b;
> return *p;
> }
>
> int main(void)
> {
> if (bar(100))
> __builtin_abort();
> }
> ```
>
> Compile this at -Os and you will see the load from a happens even though it
> is weak.
Or `-O1 -fno-tree-sink` since otherwise sinks the load of a into the branch.