1 | // RUN: %clang_cc1 -triple arm-apple-ios -emit-llvm -debug-info-kind=limited -fblocks %s -o - | FileCheck %s |
2 | // Objective-C code cargo-culted from debug-info-lifetime-crash.m. |
3 | @protocol NSObject |
4 | - (id)copy; |
5 | @end |
6 | @class W; |
7 | @interface View1 |
8 | @end |
9 | @implementation Controller { |
10 | void (^Block)(void); |
11 | } |
12 | - (void)View:(View1 *)View foo:(W *)W |
13 | { |
14 | // The reference from inside the block implicitly creates another |
15 | // local variable for the referenced member. That is what gets |
16 | // suppressed by the attribute. It still gets debug info as a |
17 | // member, though. |
18 | // CHECK-NOT: !DILocalVariable(name: "weakSelf" |
19 | // CHECK: !DIDerivedType({{.*}} name: "weakSelf" |
20 | // CHECK-NOT: !DILocalVariable(name: "weakSelf" |
21 | __attribute__((nodebug)) __typeof(self) weakSelf = self; |
22 | Block = [^{ |
23 | __typeof(self) strongSelf = weakSelf; |
24 | } copy]; |
25 | } |
26 | @end |
27 | |