// 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); }