Doing so breaks compilation of the following C program
(under -fprofile-instr-generate):
__attribute__((always_inline)) inline int foo() { return 0; } int main() { return foo(); }
At link time, we fail because taking the address of an
available_externally function creates an undefined external reference,
which the TU cannot provide.
Emitting the function definition into the object file at all appears to
be a violation of the langref: "Globals with 'available_externally'
linkage are never emitted into the object file corresponding to the LLVM
module."
Testing: check-llvm, check-profile
Should you check always inline attribute here too to avoid missing indirect call profiling? AvailableExternally is very common in C++ (e.g, for extern template). Blindly dropping the address can lead to lots of missing value profiling.