Ошибка с __int128_t в Clang?
Этот небольшой код компилируется как с 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, поэтому, возможно, __int128_t является "использовать на свой страх и риск" в Clang.
Это ошибка в 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 ответ
Это была ошибка в 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), смотрите комментарии - спасибо Карлу и H2CO3.