2012-04-22 14 views
6

-malign-doubleコンパイラオプションがClangから削除されたようです。コード例:32ビットモード(-m32)でGCCでコンパイルする場合ClangにはGCCの-malign-doubleフラグと同等の機能がありますか?

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

-malign-doubleときは、この出力に応じて8または4のいずれかに行うことができ、それぞれ有効またはされていません。しかし、クランは、このオプションをサポートしていないよう:

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

クランバージョン:

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 

私は、彼らはただ、クランでサポートされているコンパイラフラグの完全なリスト上の任意の公式ドキュメントを見つけることができないよう大部分はGCCの文書に従っているようです。

Clangの-malign-doubleに相当するサービスはありますか?あるいは、別のコンパイラを今使っていなくてもいいですか?私は、そのフラグを使用するバイナリのみの第三者ライブラリとリンクするコードをコンパイルする必要があります。

+0

回答はありましたか? – tito

+0

これはまだ可能ではないようです。誰かが私にircに言ったように、 "これはオプションがありません(可能な場合はABIによって制約されません)。LLVMは自然なアライメントを使用します。属性を使用して常にアライメントを強制することができます " – tito

答えて

1

明らかに回避策として-mllvm -malign-doubleを使用することは可能です。 https://codereview.chromium.org/1310173005から

引用:LLVMは-malign-doubleオプションをサポートしていますが

、クランはしていません。 -mllvm -malign-doubleを渡すことは、 という回避策として使用できません。その結果、Clang とLLVMによって異なるマシン記述が使用されます。

関連する問題