在Clang中存在__int128_t的错误?

10

这段小代码可以同时使用GCC和Clang编译,但会得到不同的结果:

#include <stdio.h>

int main(){

  __int128_t test=10;
  while(test>0){
    int myTest=(int)test;
    printf("? %d\n", myTest);
    test--;
  }

}

对于GCC,这会从10倒数到1,即预期的行为,而对于Clang,它会继续计数到负数。对于Clang,如果我将test--替换为test-=1,那么它也会给出预期的行为。

__int128_t是GCC的扩展,因此上述结果仅适用于非标准C,在Clang中使用__int128_t可能存在风险。

这是Clang的错误还是我犯了一些看不见的错误?

编辑:我正在使用gcc(MacPorts gcc48 4.8-20130411_0)4.8.1 20130411(预发布版)和Apple clang版本4.0(tags / Apple / clang-421.0.60)(基于LLVM 3.1svn)。


1
没错,这在 OS X 10.7.5 上使用 GCC 4.2 和 Clang 4.0 就像你所解释的那样。 - user529758
1
在我的机器上运行良好,“Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)”。 - Carl Norum
@Carl 也许苹果在clang-421.0.60和clang-425.0.28之间修复了这个问题。我应该更新一下来检查一下。 - Douglas B. Staple
看起来是这样的,没错。clang完全是开源的,所以如果你真的想找到补丁,我相信你可以找到它。 - Carl Norum
我认为这些更新现在是通过Mac App Store进行的。 - Carl Norum
@Carl 是的,你说得对。显然是因为我在Macintosh HD上禁用了Spotlight,所以我没有收到Xcode更新的通知(https://discussions.apple.com/thread/2794280?start=15&tstart=0)。我更新了Xcode和命令行工具到Apple LLVM版本4.2(clang-425.0.28)(基于LLVM 3.2svn),现在代码可以正常使用Clang了。 - Douglas B. Staple
1个回答

9

这是Clang的一个错误,在Apple clang版本4.0(tags / Apple / clang-421.0.60)(基于LLVM 3.1svn)和Apple LLVM版本4.2(clang-425.0.28)(基于LLVM 3.2svn)之间得到解决,详见评论--感谢Carl和H2CO3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接