gcc
我可以通过使用used
andnoinline
函数属性轻松实现这一点(请参见下面的代码),但这不起作用,clang
即使它应该支持这两个函数属性。
一个简化的例子:
template<typename T>
struct Factory {
static __attribute__((used, noinline))
T createFoo() { return T(); }
};
int main() {
Factory<int> f; // instantiate and use Factory<int>
}
编译代码gcc
并使用nm
以确认 gcc 正确发出了函数:
nm --demangle test | grep createFoo
0000000000403185 W Factory<int>::createFoo()
代码在 中编译得很好clang
,但它不会createFoo()
像预期的那样为静态函数发出代码。
如何强制 clang 发出这个从未被引用的静态函数?