A problem that I keep running into is functions defined headers, but used in sources files that are compiled with different CPU feature flags (for runtime CPU feature selection).
We know to make sure the functions are inlinable and their address never taken, but of course in debug builds they are still not inlined. Every so often the functions get compiled using some of the optional CPU instructions, and if the linker selects the optimized versions those instructions can then leak through to instances compiled with different CPU flags where the instructions aren't supposed to be used. This happens even in unoptimized debug builds as the extended instruction selections doesn't count as an optimization. So far the main workaround for gcc has been to mark the functions as always_inline. I have been wondering if you couldn't use the same technique you used for fix similar problems for mixed archs for LTO builds and tag shared functions with their archs so they don't get merged by linker? I know the whole thing could technially be seen as an ODR violation, but it would still be great if it was something GCC could just handle it out of the box. Alternatively an compile time option to mark non-inline inline functions as weak or not generated at all would when compiling certain files would also work. Best regards 'Allan