2012-04-22 23 views
6

Clang'dan -malign-double derleyici seçeneği kaldırılmış gibi görünüyor. Örnek kod:Clang GCC'nin -malign-double bayrağına eşdeğer mi?

32-bit modunda ( -m32) içerisinde GCC derlenmiş
#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; 
} 

bu -malign-double etkin ya da sırasıyla eğer bağlı olarak çıkış olarak 8 veya 4'e yapılabilir. Ama Clang bu seçeneğin desteklenmesi görünmüyor:

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

Clang sürümü:

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 

Ben Clang tarafından desteklenen derleyici bayrakları tam listesi üzerinde herhangi bir resmi belge bulmak gibi olamaz, onlar sadece GCC'nin belgelerinin çoğunu erteliyor gibi görünüyor.

Clang'de -malign-double için herhangi bir güncel eşdeğer var mı? Yoksa şimdilik farklı bir derleyici kullanmak zorunda kaldım mı? Bu bayrağı kullanan sadece ikili bir üçüncü taraf kitaplığına bağlanan bazı kodları derlemek için buna ihtiyacım var.

+0

Bunun için herhangi bir cevap aldınız mı? – tito

+0

Tamam, birileri bana irc'de söylediğinden hala mümkün değil gibi görün: " bunun için seçenek yok, mümkünse (örneğin ABI tarafından kısıtlanmıyorsa), LLVM, oluşturulan kod ise doğal hizalamayı kullanacaktır. her zaman özellikleri kullanarak hizalamayı zorlayabilir " – tito

cevap

1

Görünüşe göre, -mllvm -malign-double'u çalışma ortamı olarak kullanmak mümkündür. https://codereview.chromium.org/1310173005 den

Alıntı:

LLVM -malign-double seçeneği desteklerken, Clang değildir. -mllvm -malign-double içinde geçme, olarak bir geçici çözüm olarak kullanılamaz; bu, Clang ve LLVM tarafından kullanılan farklı makine açıklamasına neden olur.