Ошибка с __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.

Другие вопросы по тегам