| // RUN: %clang_cc1 -triple x86_64-unknown-freebsd -S -emit-llvm -fobjc-runtime=gnustep-2.0 -o - %s | FileCheck %s | 
 |  | 
 | @protocol X | 
 | @optional | 
 | - (id)x; | 
 | @required | 
 | + (void*)y; | 
 | @property int reqProp; | 
 | @optional | 
 | @property int optProp; | 
 | @end | 
 |  | 
 | // Check that we get some plausible-looking method lists. | 
 | // CHECK: internal global { i32, i32, [2 x { i8*, i8* }] } { i32 2, i32 16,  | 
 | // CHECK-SAME: @".objc_selector_reqProp_i16\010:8" | 
 | // CHECK-SAME: @".objc_selector_setReqProp:_v20\010:8i16" | 
 | // CHECK: internal global { i32, i32, [3 x { i8*, i8* }] } { i32 3, i32 16, | 
 | // CHECK-SAME: @".objc_selector_x_\0116\010:8" | 
 | // CHECK-SAME: @".objc_selector_optProp_i16\010:8" | 
 | // CHECK-SAME: @".objc_selector_setOptProp:_v20\010:8i16" | 
 |  | 
 |  | 
 | // Check that we're emitting the protocol and a correctly initialised | 
 | // indirection variable. | 
 | // CHECK: @._OBJC_PROTOCOL_X = global | 
 | // CHECK-SAME: , section "__objc_protocols", comdat, align 8 | 
 | // CHECK: @._OBJC_REF_PROTOCOL_X = linkonce_odr global | 
 | // CHECK-SAME: @._OBJC_PROTOCOL_X | 
 | // CHECK-SAME: , section "__objc_protocol_refs", comdat, align 8 | 
 |  | 
 |  | 
 | // Check that we load from the indirection variable on protocol references. | 
 | // CHECK: define i8* @x() | 
 | // CHECK:   = load  | 
 | // CHECK-SAME: @._OBJC_REF_PROTOCOL_X, align 8 | 
 | void *x() | 
 | { | 
 | 	return @protocol(X); | 
 | } |