2012-04-22 13 views
6

Wygląda na to, że opcja kompilatora -malign-double została usunięta z Clang. Przykład Kod:Czy Clang ma odpowiednik flagi -malign-double GCC?

#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; 
} 

wkompilowaną GCC w trybie 32-bitowym (-m32), może być do wyjścia 8 lub 4, w zależności czy -malign-double jest włączony, czy nie, odpowiednio. Ale Clang nie wydaje się wspierać tę opcję:

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

wersja 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 

ja nie mogę znaleźć żadnej oficjalnej dokumentacji na pełną listę flag kompilatora obsługiwanych przez Clang, po prostu Wydaje się, że w większości przypadków odkładają się one na dokumentację GCC.

Czy istnieje prąd równoważny z -malign-double w Clang? Czy utknąłem na razie, aby użyć innego kompilatora? Potrzebuję go do skompilowania kodu, który łączy się z biblioteką firm trzecich, która używa tej flagi.

+0

Czy otrzymałeś na to odpowiedź? – tito

+0

OK, wygląda na to, że nadal nie jest możliwe, jak ktoś mi powiedział na IRC: " nie ma opcji, jeśli to możliwe (np. Nie ograniczone przez ABI), LLVM użyje naturalnego wyrównania | jeśli jest wygenerowany kod, ty zawsze może wymusić wyrównanie za pomocą atrybutów " – tito

Odpowiedz

1

Najwyraźniej możliwe jest użycie -mllvm -malign-double jako obejścia.

Cytat https://codereview.chromium.org/1310173005:

Podczas LLVM obsługuje opcję -malign-double, Clang nie. Przekazanie w -mllvm -malign-double nie może być użyte jako obejście tego problemu, ponieważ spowoduje to użycie innego opisu urządzenia przez Clang i LLVM.