2013-05-08 14 views
7

この小さなコードはGCCとクランの両方でコンパイルしますが、異なる結果が得られます。Clangの__int128_tのバグ?

#include <stdio.h> 

int main(){ 

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

} 

GCCでクランのために、それは負の数にカウントを続けながら、これは、1まで10から意図した動作をカウントします。 Clangの場合、test--test-=1に置き換えると、期待される動作も得られます。

__int128_tはGCC拡張ですので、上記の結果は非標準Cにのみ適用されるため、__int128_tはClangの「自己責任で使用する」可能性があります。

これはClangのバグですか、私は見ていない間違いをしましたか?

EDIT:私はGCCを使用しています(MacPortsのgcc48 4.8-20130411_0)(タグ/アップル/打ち鳴らす-421.0.60)(LLVMの3.1svnに基づく)4.8.1 20130411(プレリリース)とApple打ち鳴らすバージョン4.0 。

+1

これはGCC 4.2とClang 4.0のOS X 10.7.5で説明したとおりです。 –

+1

私のマシン「Apple LLVMバージョン4.2(clang-425.0.28)(LLVM 3.2svnベース)」でうまく動作します。 –

+0

@Carl Appleはclang-421.0.60とclang-425.0.28の間で修正した可能性があります。私は確認するために更新する必要があります。 –

答えて

8

これは、Apple clangバージョン4.0(tags/Apple/clang-421.0.60)(LLVM 3.1svnベース)とApple LLVMバージョン4.2(clang-425.0.28)の間で解決されたClangのバグでした。 (LLVM 3.2svnに基づいて)コメントを参照してください - CarlとH2CO3に感謝します。

関連する問題