teak-llvm/clang/test/CodeGenObjC/property-list-in-extension.m
Akira Hatanaka 187770dc74 [CodeGen][ObjC] Remove the leading l_ from ObjC symbols and make
private symbols in the __DATA segment internal.

This prevents the linker from removing the symbol names. Keeping the
symbols visible enables tools to collect various information about the
symbols, for example, tools that discover whether or not a symbol gets
dirtied.

rdar://problem/48887111

Differential Revision: https://reviews.llvm.org/D61454

llvm-svn: 360359
2019-05-09 17:43:52 +00:00

48 lines
1.9 KiB
Objective-C

// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-weak -fobjc-runtime-has-weak -emit-llvm %s -o - | FileCheck %s
// Checks metadata for properties in a few cases.
// Property from a class extension:
__attribute__((objc_root_class))
@interface Foo
@end
@interface Foo()
@property int myprop;
@end
@implementation Foo
@synthesize myprop = _myprop;
@end
// Metadata for _myprop should be present, and PROP_LIST for Foo should have
// only one entry.
// CHECK: = private unnamed_addr constant [12 x i8] c"Ti,V_myprop\00",
// CHECK: @"_OBJC_$_PROP_LIST_Foo" = internal global { i32, i32, [1 x %struct._prop_t] }
// Readonly property in interface made readwrite in a category:
__attribute__((objc_root_class))
@interface FooRO
@property (readonly) int evolvingprop;
@property (nonatomic,readonly,getter=isBooleanProp) int booleanProp;
@property (nonatomic,readonly,weak) Foo *weakProp;
@end
@interface FooRO ()
@property int evolvingprop;
@property int booleanProp;
@property Foo *weakProp;
@end
@implementation FooRO
@synthesize evolvingprop = _evolvingprop;
@end
// Metadata for _evolvingprop should be present, and PROP_LIST for FooRO should
// still have only one entry, and the one entry should point to the version of
// the property with a getter and setter.
// CHECK: [[evolvinggetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [13 x i8] c"evolvingprop\00"
// CHECK: [[evolvingsetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [18 x i8] c"Ti,V_evolvingprop\00",
// CHECK: [[booleanmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [34 x i8] c"Ti,N,GisBooleanProp,V_booleanProp\00"
// CHECK: [[weakmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [23 x i8] c"T@\22Foo\22,W,N,V_weakProp\00"
// CHECK: @"_OBJC_$_PROP_LIST_FooRO" = internal global { i32, i32, [3 x %struct._prop_t] }{{.*}}[[evolvinggetter]]{{.*}}[[evolvingsetter]]{{.*}}[[booleanmetadata]]