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

Bob*_*Bob 3 clang inline-assembly llvm-clang

$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)  
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

这在gcc.

邮件列表将其解释为

裸函数没有序言或尾声,因此对内联汇编以外的任何内容进行代码生成都可能完全失败。

那么怎么gcc办呢?

Dav*_*erd 6

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

为什么 Clang 不支持裸函数中的非 ASM 语句?这在 gcc 上运行良好。

答案是这在 gcc 中不能正常工作。引用 gcc文档中的属性naked

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

如果有更明确的方式来表达这一点,我想不出。

请注意,虽然上面的特定链接适用于 ARM(我猜测 OP 正在使用该链接),但我相信相同的文本适用于所有支持naked.

  • @MichaelPetch - 没错。所以这里的问题并不是“为什么这在 gcc 中有效而不是在 clang 中有效?” 更多的是“为什么 gcc 不给出与 clang 对于这种不受支持的用法相同的信息丰富的编译器错误?” 这可能不是OP想听到的,但事实就是如此。 (3认同)