2012-04-22 24 views
6

Có vẻ như tùy chọn biên dịch -malign-double đã bị xóa khỏi Clang. mã ví dụ:Clang có tương đương với cờ -align-double của GCC không?

#include <stddef.h> 
#include <stdio.h> 

typedef struct X { char a; long long b; } X; 

int main(void) 
{ 
    printf("%zd\n", offsetof(X, b)); 
    return 0; 
} 

Khi biên soạn với GCC ở chế độ 32-bit (-m32), điều này có thể được thực hiện để sản xuất hoặc 8 hoặc 4 tùy thuộc vào nếu -malign-double được kích hoạt hay không tương ứng. Nhưng Clang không xuất hiện để hỗ trợ tùy chọn này:

$ clang test.c -m32 -malign-double 
clang: warning: argument unused during compilation: '-malign-double' 
$ ./a.out 
4 

phiên bản Clang:

Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin11.3.0 
Thread model: posix 

tôi dường như không thể tìm thấy bất kỳ tài liệu chính thức trên danh sách đầy đủ của cờ biên dịch hỗ trợ bởi Clang, họ chỉ dường như trì hoãn tài liệu của GCC cho hầu hết các phần.

Có bất kỳ hiện tại nào tương đương với -malign-double trong Clang không? Hoặc tôi đang bị mắc kẹt phải sử dụng một trình biên dịch khác nhau cho bây giờ? Tôi cần nó để biên dịch một số mã liên kết với một thư viện của bên thứ ba chỉ sử dụng cờ đó.

+0

Bạn có nhận được bất kỳ câu trả lời nào cho điều đó không? – tito

+0

Ok, trông giống như nó vẫn không thể, như ai đó đã nói với tôi về irc: " không có tùy chọn cho điều đó, nếu có thể (ví dụ như không bị ràng buộc bởi ABI), LLVM sẽ sử dụng căn chỉnh tự nhiên | nếu nó được tạo mã, bạn luôn có thể buộc căn chỉnh sử dụng các thuộc tính " – tito

Trả lời

1

Dường như có thể sử dụng -mllvm -malign-double làm công việc chung.

Trích từ https://codereview.chromium.org/1310173005:

Trong khi LLVM hỗ trợ các tùy chọn -malign-double, Clang không. Không thể sử dụng -mllvm -malign-double làm cách giải quyết như nó sẽ dẫn đến việc mô tả máy khác nhau đang được sử dụng bởi Clang và LLVM.

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