Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGenObjC/debug-info-nodebug.m
// RUN: %clang_cc1 -triple arm-apple-ios -emit-llvm -debug-info-kind=limited -fblocks %s -o - | FileCheck %s | |||||
// Objective-C code cargo-culted from debug-info-lifetime-crash.m. | |||||
@protocol NSObject | |||||
- (id)copy; | |||||
@end | |||||
@class W; | |||||
@interface View1 | |||||
@end | |||||
@implementation Controller { | |||||
void (^Block)(void); | |||||
} | |||||
- (void)View:(View1 *)View foo:(W *)W | |||||
{ | |||||
// The reference from inside the block implicitly creates another | |||||
// local variable for the referenced member. That is what gets | |||||
// suppressed by the attribute. It still gets debug info as a | |||||
// member, though. | |||||
// CHECK-NOT: !DILocalVariable(name: "weakSelf" | |||||
dblaikie: Is this case outside of the block interesting in some way? It doesn't look like it. | |||||
Not Done ReplyInline ActionsThe attribute on "weakSelf" is what triggers the second modified path in CGDebugInfo and suppresses the DILocalVariable for that name. I should not have been so hesitant to work out what was going on here, sorry about that. My cluelessness about Objective-C knows no bounds. probinson: The attribute on "weakSelf" is what triggers the second modified path in CGDebugInfo and… | |||||
// CHECK: !DIDerivedType({{.*}} name: "weakSelf" | |||||
// CHECK-NOT: !DILocalVariable(name: "weakSelf" | |||||
__attribute__((nodebug)) __typeof(self) weakSelf = self; | |||||
Block = [^{ | |||||
__typeof(self) strongSelf = weakSelf; | |||||
} copy]; | |||||
} | |||||
@end |
Is this case outside of the block interesting in some way? It doesn't look like it.