https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118864
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> Confirmed. Does the clang version work for function pointer types and
> indirect calls?
Yes but in an interesting way it seems.
The examples from their documentation:
```
[[clang::nomerge]] void foo(int) {}
void bar(int x) {
auto *ptr = foo;
if (x) foo(1); else foo(2); // will not be merged
if (x) ptr(1); else ptr(2); // indirect call, can be merged
}
```
```
[[clang::nomerge]] void (*foo)(int);
void bar(int x) {
auto *ptr = foo;
if (x) foo(1); else foo(2); // will not be merged
if (x) ptr(1); else ptr(2); // 'ptr' has no 'nomerge' attribute, can be
merged
}
```
>From the looks of it, this is purely a front-end attribute which then gets
attached to the call statement rather than the attribute staying of the
types/function for the middle-end.