Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / test / API / lang / objc / direct-dispatch-step / stepping-tests.m
blobb919a7ba131d330ead86adc63698a61c986dbf77
1 #import <Foundation/Foundation.h>
3 @interface OverridesALot: NSObject
5 - (void)boring;
7 @end
9 @implementation OverridesALot
11 + (id)alloc {
12   NSLog(@"alloc");
13   return [super alloc];
16 + (id)allocWithZone: (NSZone *)z {
17   NSLog(@"allocWithZone:");
18   return [super allocWithZone: z];
21 + (id)new {
22   NSLog(@"new");
23   return [super new];
26 - (id)init {
27   NSLog(@"init");
28   return [super init];
31 - (id)self {
32   NSLog(@"self");
33   return [super self];
36 + (id)class {
37   NSLog(@"class");
38   return [super class];
41 - (BOOL)isKindOfClass: (Class)c {
42   NSLog(@"isKindOfClass:");
43   return [super isKindOfClass: c];
46 - (BOOL)respondsToSelector: (SEL)s {
47   NSLog(@"respondsToSelector:");
48   return [super respondsToSelector: s];
51 - (id)retain {
52   NSLog(@"retain");
53   return [super retain];
56 - (oneway void)release {
57   NSLog(@"release");
58   [super release];
61 - (id)autorelease { 
62   NSLog(@"autorelease");
63   return [super autorelease];
66 - (void)boring {
67   NSLog(@"boring");
70 @end
72 @interface OverridesInit: NSObject
74 - (void)boring;
76 @end
78 @implementation OverridesInit
80 - (id)init {
81   NSLog(@"init");
82   return [super init];
85 @end
87 int main() {
88   id obj;
90   // First make an object of the class that overrides everything,
91   // and make sure we step into all the methods:
92   
93   obj = [OverridesALot alloc]; // Stop here to start stepping
94   [obj release]; // Stop Location 2
95   
96   obj = [OverridesALot allocWithZone: NULL]; // Stop Location 3
97   [obj release]; // Stop Location 4
98   
99   obj = [OverridesALot new]; // Stop Location 5
100   [obj release]; // Stop Location 6
101   
102   obj = [[OverridesALot alloc] init]; // Stop Location 7
103   [obj self]; // Stop Location 8
104   [obj isKindOfClass: [OverridesALot class]]; // Stop Location 9
105   [obj respondsToSelector: @selector(hello)]; // Stop Location 10
106   [obj retain];  // Stop Location 11
107   [obj autorelease]; // Stop Location 12
108   [obj boring]; // Stop Location 13
109   [obj release]; // Stop Location 14
111   // Now try a class that only overrides init but not alloc, to make
112   // sure we get into the second method in a combined call:
113   
114   obj = [[OverridesInit alloc] init]; // Stop Location 15
116   return 0; // Stop Location 15