7
在我的應用程序有以下Objective-C代碼:LLVM循環優化錯誤?
-(void)layoutPages
{
NSMutableArray* sections = [NSMutableArray array];
[sections addObject:[[NSAttributedString alloc] initWithString:@"Hello world"]];
for (NSAttributedString* contentSection in sections) {
NSLog(@"%@",contentSection);
}
}
控制檯輸出:2014-04-22 14:11:01.505 MyApp[24784:830b] Hello world{}
如果我使用-Os優化編譯x86_64體系,LLVM然後靜靜地優化了循環變量'contentSection'。當我使用-O0時,錯誤消失。 這是輸出,當我嘗試打印contentSection變量的描述:
(lldb) po contentSection
error: Couldn't materialize struct: the variable 'contentSection' has no location, it may have been optimized out
Errored out in Execute, couldn't PrepareToExecuteJITExpression
這怎麼可能?從我的角度來看,循環變量在循環內部使用時不應該被優化。我看到其他人與LLVM有類似的問題,但沒有使用循環變量。這可能是一個編譯器錯誤?
你嘗試使用屬性self.contentSections而不是一個ivar –
謝謝@PeterLapisu我試着用相同的結果。 – Sbhklr
你是怎麼聲明'iVar'或'@ property'的?正如可能發生的情況是,更多的時間內存管理可能會發生在'-Os'和'_contentSections'正在被釋放。 – Rich