2011-07-28 17 views
4

テストターゲットをiPad1(4.3.5)またはiPhone4(4.3.5)にビルドしようとすると、Xcode 4から次のエラーが発生します。 4A304a):デバイスへのビルド時にLLVMエラーが発生する

Internal compiler error: tree check: expected tree that contains 'decl with visibility' structure, have 'const_decl' in c_common_truthvalue_conversion 

ただし、テストターゲットをシミュレータでビルドするように切り替えたときは表示されません。

borkingされているコードの行が

GHAssertNotNULL(xxxObject, @"xxxObject could not be created"); 

です(オブジェクトが;-)無実を保護するために名前が変更されている)しかし、私はそれがシングルトンであると言うことができます。

私はGoogleを検索しましたが、このエラーに関連するものは何も見つかりませんでした。

ありがとうございました イアン。

+0

誰かがそれを提案する前に、私はすでに製品 - >クリーンを実行しました。 – ShogoDodo

+0

もう6時間私自身の質問に答えることができないので、これは私が提出しようとした答えです: - – ShogoDodo

+0

私は問題に答えたと思います。 当初私の代わりに学校男の子のエラーでした。返されるエラー条件がnilである場合、nullをテストするべきではありません。 これまでのところ簡単に聞こえます。私はコードを修正し、再度コンパイルしました。同じエラーですが、かなり異なるシナリオで、GreaterThanを実行すると、off_tの値とゼロ(off_tへのキャスト)の比較が実行されます。 長い話を簡単にまとめると、問題は32ビット(64ビット)であると思われます(それぞれiPadとSimulatorの間)。 – ShogoDodo

答えて

2

私は同じコンパイラエラーを経験した:iOSデバイス用に構築する際に

internal compiler error: tree check: expected tree that contains 'decl with visibility' structure, have 'const_decl' in c_common_truthvalue_conversion, at c-common.c:2836 

はGHUnitIOS-0.4.32(およびGHUnitIOS-0.4.31)でのXcode 4.1を使用します。シミュレータのためのビルド時に問題はありません。

コンパイラのエラーには、GHAssertNotEqualObjectsGHAssertNotEqualsが含まれています。

Iはコンパイラエラーを受信したとき、私が使用していたコードパターンは、以下であった:私は、次の変更を使用してコードをコンパイルすることができた

- (void) test_isEqual { 
    SomeObject *foo = [[SomeObject alloc] initWithValue: 1]; 
    SomeObject *bar = [[SomeObject alloc] initWithValue: 2]; 

    GHAssertNotEquals(bar, foo, @"Different Objects, different values - different pointers"); 
    GHAssertNotEqualObjects(bar, foo, @"Different Objects, different values - different pointers (calls isEqual)"); 
} 

- (void) test_isEqual { 
    NSString *comment; 
    SomeObject *foo = [[SomeObject alloc] initWithValue: 1]; 
    SomeObject *bar = [[SomeObject alloc] initWithValue: 2]; 

    comment = @"Different Objects, different values - different pointers"; 
    GHAssertNotEquals(bar, foo, comment); 

    comment = @"Different Objects, different values - different pointers (calls isEqual)"; 
    GHAssertNotEqualObjects(bar, foo, comment); 
} 

なおconst NSStringを使用して、「ある文字列」を使用して、GHAssertEqualObjectsGHAssertEqualStringsGHAssertEqualsGHAssertFalseGHAssertNilGHAssertNotNil、およびGHAssertTrueを呼び出しましたコンパイラエラーは発生しません。

#define GHAssertNotEquals(a1, a2, description, ...)#define GHAssertEqualObjects(a1, a2, description, ...)を参照し、それらの使用はdescriptionです。両方ともGHComposeString(description, ##__VA_ARGS__)と呼びますが、動作するその他のマクロも同様です。

+0

Thx!私も同じ問題がありました。わずかに異なるカスタムアサーションマクロを使用して回避することができました。文字列定数ポインタを渡すことで、関数呼び出しでインライン展開するのではなく、問題を確実に解決しました。 – pchap10k

関連する問題