Clang中有__int128_t的错误?

时间:2013-05-08 18:35:43

标签: c gcc clang int128

这个小代码汇编了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版(标签/ Apple / clang-421.0.60)(基于LLVM 3.1svn)。

1 个答案:

答案 0 :(得分:8)

这是Clang中的一个错误,它在Apple clang 4.0版(标签/ Apple / clang-421.0.60)(基于LLVM 3.1svn)和Apple LLVM版本4.2(clang-425.0.28)之间解决(基于LLVM 3.2svn),请参阅评论 - 感谢Carl和H2CO3。