Ошибка LLVM при сборке на устройстве, но не в симуляторе
Когда я пытаюсь построить свою тестовую цель на своем iPad1 (4.3.5) или iPhone4 (4.3.5), я получаю следующую ошибку из Xcode 4 (Build 4A304a):
Internal compiler error: tree check: expected tree that contains 'decl with visibility' structure, have 'const_decl' in c_common_truthvalue_conversion
Но не тогда, когда Test Target переключается на встроенный симулятор.
Строка кода, которая скрывается,
GHAssertNotNULL(xxxObject, @"xxxObject could not be created");
(объекты были переименованы, чтобы защитить невинных;-)) Но я могу сказать, что это одиночка.
Я ищу в Google и не получил ничего релевантного для этой ошибки.
Заранее спасибо, Ян.
1 ответ
Я испытал ту же ошибку компилятора:
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
Использование Xcode 4.1 с GHUnitIOS-0.4.32 (и GHUnitIOS-0.4.31) при сборке для устройств iOS. Обратите внимание, что нет проблем при сборке симулятора.
Ошибки компилятора включали вызовы GHAssertNotEqualObjects
а также GHAssertNotEquals
,
Шаблон кода, который я использовал, когда получил ошибку компилятора, был следующим:
- (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);
}
Обратите внимание, что звонки на GHAssertEqualObjects
, GHAssertEqualStrings
, GHAssertEquals
, GHAssertFalse
, GHAssertNil
, GHAssertNotNil
, а также GHAssertTrue
использование const NSString, то есть @"some string", не вызывало ошибку компиляции.
Глядя в #define GHAssertNotEquals(a1, a2, description, ...)
а также #define GHAssertEqualObjects(a1, a2, description, ...)
и их использование description
, оба зовут GHComposeString(description, ##__VA_ARGS__)
, но так же и другие макросы, которые работают.