2013-05-08 33 views
7

mã số ít này biên dịch với cả GCC và Clang, nhưng cho kết quả khác nhau:Lỗi với __int128_t trong Clang?

#include <stdio.h> 

int main(){ 

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

} 

Với GCC này đếm từ 10 xuống còn 1, hành vi dự định, trong khi đối với Clang nó vẫn không ngừng đếm vào số âm. Với Clang, nếu tôi thay thế test-- bằng test-=1 thì nó cũng mang lại hành vi mong đợi.

__int128_t là phần mở rộng GCC, vì vậy các kết quả trên chỉ áp dụng cho C không chuẩn, vì vậy có thể __int128_t "tự chịu rủi ro" ở Clang.

Đây có phải là lỗi trong Clang hay tôi nhầm lẫn không thấy?

EDIT: Tôi đang sử dụng gcc (MacPorts gcc48 4.8-20130411_0) 4.8.1 20.130.411 (phát hành trước) và Apple kêu vang phiên bản 4.0 (tags/Apple/kêu vang-421.0.60) (dựa trên LLVM 3.1svn) .

+1

Phải, điều này chỉ là những gì bạn đã giải thích trên OS X 10.7.5 với GCC 4.2 và Clang 4.0. –

+1

Hoạt động tốt ở đây trên máy của tôi, "Apple LLVM phiên bản 4.2 (clang-425.0.28) (dựa trên LLVM 3.2svn)". –

+0

@Carl Có lẽ Apple đã sửa nó giữa clang-421.0.60 và clang-425.0.28. Tôi nên cập nhật để kiểm tra. –

Trả lời

8

Đây là lỗi trong Clang, được giải quyết ở đâu đó giữa phiên bản Apple clang 4.0 (thẻ/Apple/clang-421.0.60) (dựa trên LLVM 3.1svn) và Apple LLVM phiên bản 4.2 (clang-425.0.28) (dựa trên LLVM 3.2svn), xem nhận xét - cảm ơn Carl và H2CO3.

Các vấn đề liên quan