1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -triple i686-apple-darwin8 -fobjc-runtime=macosx-fragile-10.5 -o %t %s 2*67e74705SXin Li 3*67e74705SXin Li// No object generated 4*67e74705SXin Li// RUN: not grep OBJC_PROTOCOL_P0 %t 5*67e74705SXin Li@protocol P0; 6*67e74705SXin Li 7*67e74705SXin Li// No object generated 8*67e74705SXin Li// RUN: not grep OBJC_PROTOCOL_P1 %t 9*67e74705SXin Li@protocol P1 -im1; @end 10*67e74705SXin Li 11*67e74705SXin Li// Definition triggered by protocol reference. 12*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_P2 %t | count 3 13*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P2 %t | count 3 14*67e74705SXin Li@protocol P2 -im1; @end 15*67e74705SXin Livoid f0() { id x = @protocol(P2); } 16*67e74705SXin Li 17*67e74705SXin Li// Forward definition triggered by protocol reference. 18*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_P3 %t | count 3 19*67e74705SXin Li// RUN: not grep OBJC_PROTOCOL_INSTANCE_METHODS_P3 %t 20*67e74705SXin Li@protocol P3; 21*67e74705SXin Livoid f1() { id x = @protocol(P3); } 22*67e74705SXin Li 23*67e74705SXin Li// Definition triggered by class reference. 24*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_P4 %t | count 3 25*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P4 %t | count 3 26*67e74705SXin Li@protocol P4 -im1; @end 27*67e74705SXin Li@interface I0<P4> @end 28*67e74705SXin Li@implementation I0 -im1 { return 0; }; @end 29*67e74705SXin Li 30*67e74705SXin Li// Definition following forward reference. 31*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_P5 %t | count 3 32*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P5 %t | count 3 33*67e74705SXin Li@protocol P5; 34*67e74705SXin Livoid f2() { id x = @protocol(P5); } // This generates a forward 35*67e74705SXin Li // reference, which has to be 36*67e74705SXin Li // updated on the next line. 37*67e74705SXin Li@protocol P5 -im1; @end 38*67e74705SXin Li 39*67e74705SXin Li// Protocol reference following definition. 40*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_P6 %t | count 4 41*67e74705SXin Li// RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P6 %t | count 3 42*67e74705SXin Li@protocol P6 -im1; @end 43*67e74705SXin Li@interface I1<P6> @end 44*67e74705SXin Li@implementation I1 -im1 { return 0; }; @end 45*67e74705SXin Livoid f3() { id x = @protocol(P6); } 46*67e74705SXin Li 47