| // 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" |
| // CHECK: !DIDerivedType({{.*}} name: "weakSelf" |
| // CHECK-NOT: !DILocalVariable(name: "weakSelf" |
| __attribute__((nodebug)) __typeof(self) weakSelf = self; |
| Block = [^{ |
| __typeof(self) strongSelf = weakSelf; |
| } copy]; |
| } |
| @end |