2013-05-08 16 views
7

Ten mały kod kompiluje zarówno GCC i Clang, ale daje różne wyniki:Błąd z __int128_t w Clang?

#include <stdio.h> 

int main(){ 

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

} 

z GCC ten liczy się od 10 do 1, zamierzonego zachowania, podczas gdy dla Clang to ciągle licząc na liczbach ujemnych. Z Clang, jeśli zastąpię test-- z test-=1, to również daje oczekiwane zachowanie.

__int128_t jest rozszerzeniem GCC, więc powyższe wyniki odnoszą się tylko do niestandardowego C, więc może __int128_t jest "używaj na własne ryzyko" w Clang.

Czy to błąd w Clangu, czy też popełniłem jakiś błąd, którego nie widzę?

EDIT: Używam gcc (MacPorts gcc48 4.8-20130411_0) 4.8.1 20.130.411 (prerelease) i Apple dzyń wersja 4.0 (tags/Apple/dzyń-421.0.60) (oparty na LLVM 3.1svn) .

+1

Dobrze, to właśnie wytłumaczyłeś na OS X 10.7.5 z GCC 4.2 i Clang 4.0. –

+1

Działa dobrze tutaj na moim komputerze, "Apple LLVM wersja 4.2 (clang-425.0.28) (na podstawie LLVM 3.2svn)". –

+0

@Carl Może Apple naprawił to między clang-421.0.60 a clang-425.0.28. Powinienem zaktualizować, aby sprawdzić. –

Odpowiedz

8

To był błąd w Clangu, który został rozwiązany gdzieś pomiędzy Apple clang w wersji 4.0 (tagi/Apple/clang-421.0.60) (w oparciu o LLVM 3.1svn) i Apple LLVM w wersji 4.2 (clang-425.0.28) (w oparciu o LLVM 3.2svn), zobacz komentarze - dziękuję Carlowi i H2CO3.

Powiązane problemy