2012-04-22 12 views
6

Parece que la opción del compilador -malign-double se ha eliminado de Clang. Código de ejemplo:¿Clang tiene un equivalente al indicador de malignidad doble de 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; 
} 

cuando se compila con GCC en el modo de 32 bits (-m32), esto se puede hacer a la salida 8 o 4 dependiendo de si -malign-double está habilitado o no, respectivamente. Pero Clang no parece apoyar esta opción:

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

versió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 

Me parece que no puede encontrar ninguna documentación oficial sobre la lista completa de los parámetros del compilador con el apoyo de Sonido metálico, que acaba parece diferir a la documentación de GCC en su mayor parte.

¿Hay alguna corriente equivalente a -malign-double en Clang? ¿O tengo que usar un compilador diferente por ahora? Necesito compilar algún código que vincule con una biblioteca de terceros de solo binario que usa esa bandera.

+0

¿Recibió alguna respuesta al respecto? – tito

+0

Ok, parece que todavía no es posible, como alguien me dijo en IRC: " no hay opción para eso, si es posible (por ejemplo, no está limitado por el ABI), LLVM usará alineación natural | si se genera código, usted siempre se puede forzar la alineación usando atributos " – tito

Respuesta

1

Aparentemente es posible usar -mllvm -malign-double como solución temporal.

Presupuesto de https://codereview.chromium.org/1310173005:

Mientras LLVM soporta la opción -malign-double, Clang no lo hace. Al pasar en -mllvm -malign-double no se puede utilizar como una solución alternativa como , Clang y LLVM utilizarán una descripción de máquina diferente.

Cuestiones relacionadas