Trong ứng dụng của tôi, tôi có mã Objective-C sau:Lỗi tối ưu hóa vòng lặp LLVM?
-(void)layoutPages
{
NSMutableArray* sections = [NSMutableArray array];
[sections addObject:[[NSAttributedString alloc] initWithString:@"Hello world"]];
for (NSAttributedString* contentSection in sections) {
NSLog(@"%@",contentSection);
}
}
điều khiển đầu ra: 2014-04-22 14:11:01.505 MyApp[24784:830b] Hello world{}
Nếu tôi biên dịch cho kiến trúc x86_64 sử dụng -os tối ưu hóa, LLVM sau đó âm thầm tối ưu hóa ra biến vòng lặp 'contentSection'. Khi tôi sử dụng -O0, lỗi sẽ biến mất. Đây là đầu ra khi tôi cố gắng để in các mô tả của biến 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
thế nào là tốt? Theo quan điểm của tôi, một biến vòng lặp không bao giờ được tối ưu hóa khi được sử dụng bên trong vòng lặp. Tôi đã thấy rằng những người khác có một vấn đề tương tự với LLVM nhưng không phải với một biến vòng lặp. Đây có phải là lỗi trình biên dịch không?
bạn đã thử sử dụng thuộc tính self.contentSections thay vì một ivar –
Cảm ơn @PeterLapisu Tôi đã thử điều này với cùng một kết quả. – Sbhklr
Bạn đã khai báo 'iVar' hoặc' @ property' như thế nào? Như những gì có thể xảy ra là việc quản lý bộ nhớ vigiours hơn có thể đang diễn ra với '-Os' và' _contentSections' đang được deallocated. – Rich