clang - 错误:不支持裸函数中的非ASM语句

时间:2017-11-15 20:24:45

标签: clang inline-assembly llvm-clang

$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)  

CC ../../py/nlrthumb.c
../../py/nlrthumb.c:79:5: error: non-ASM statement in naked function is not supported
    return 0; // needed to silence compiler warning

为什么Clang不支持non-ASM statement in naked function

这适用于gcc

mailing list explains it as

  

裸体功能没有序言或结语,所以这样做   除了内联汇编之外的任何其他代码都是完全的   命中或错过。

那么gcc怎么做呢?

1 个答案:

答案 0 :(得分:3)

我应该把它写成答案而不是评论。问题是:

为什么Clang不支持裸函数中的非ASM语句?这在gcc上工作正常。

答案是这个并不在gcc中正常工作。从gcc docs引用naked属性:

  

只有基本的asm语句可以安全地包含在裸函数中。虽然使用扩展的asm或基本的asm和C代码的混合似乎可行,但它们不能依赖于可靠地工作而且不受支持。

如果用一种不那么模糊的方式来表达这一点,我就无法想出来。

请注意,虽然上面的具体链接适用于ARM(这是我猜测OP正在使用的),但我相信同一文本适用于支持naked的所有平台。