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

clang-错误:不支持裸函数中的非ASM语句,clang,inline-assembly,llvm-clang,Clang,Inline Assembly,Llvm Clang,为什么Clang不支持裸函数中的非ASM语句 这在gcc上运行良好 裸函数没有开场白或尾声,所以这样做 除了内联程序集之外的任何代码都将被完全删除 命中或未命中 那么,gcc如何才能做到这一点呢?我应该把它作为一个答案而不是评论来写。问题是: 为什么Clang不支持裸函数中的非ASM语句?这在gcc上运行良好 答案是,这个在gcc中无法正常工作。从gcc中引用裸属性: 裸函数中只能安全地包含基本asm语句。虽然使用扩展asm或基本asm和C代码的混合似乎可以工作,但它们不能可靠地工作,因此不受

为什么Clang不支持裸函数中的
非ASM语句

这在
gcc
上运行良好

裸函数没有开场白或尾声,所以这样做 除了内联程序集之外的任何代码都将被完全删除 命中或未命中


那么,gcc如何才能做到这一点呢?

我应该把它作为一个答案而不是评论来写。问题是:

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

答案是,这个在gcc中无法正常工作。从gcc中引用
属性:

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

如果有一种不那么模棱两可的表达方式,我想不出来


请注意,虽然上面的特定链接是针对ARM的(我猜OP使用的是ARM),但我相信相同的文本适用于所有支持
裸体

@negacao的平台,并用您的信息更新了问题。“gcc怎么做”-it。裸函数中只能安全地包含基本asm语句。虽然使用扩展asm或基本asm和C代码的混合可能看起来有效,但它们不能可靠地工作,因此不受支持。GCC可能抛出错误,而不是允许它知道不可靠地支持的内容。@MichaelPetch-没错。所以这里的问题不是“为什么这在gcc中工作而不是在clang中?”而是“为什么gcc没有给出与clang在这种不受支持的用法中相同的高信息编译器错误?”这可能不是OP想要听到的,但确实如此。@DavidWohlferd我只是想澄清一下。这个答案提供了答案。
$ 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