diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-04-16 15:25:39 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-04-16 15:25:39 +0000 |
commit | 428edb7f7599b4ee44eaad00bb3c330495fc1ad6 (patch) | |
tree | 972fd04af7826fa0102e4faeabe3b96e4932278b /test | |
parent | 6ca6752992103964706ca0983efbc2b9fcfe3307 (diff) | |
download | clang-428edb7f7599b4ee44eaad00bb3c330495fc1ad6.tar.gz |
Objective-C IRGen. Use llvm::WeakVH
for caching couple of global symbols used
for generation of CF/NS string meta-data
so they are not released prematuely in certain
corner cases. // rdar:// 13598026.
Reviewed by John M.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179599 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGenObjC/tentative-cfconstantstring.m | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/CodeGenObjC/tentative-cfconstantstring.m b/test/CodeGenObjC/tentative-cfconstantstring.m new file mode 100644 index 0000000000..c0bea0f2eb --- /dev/null +++ b/test/CodeGenObjC/tentative-cfconstantstring.m @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s +// rdar://13598026 + +@interface NSObject @end + +@class NSString; + +int __CFConstantStringClassReference[24]; + +@interface Bar : NSObject ++(void)format:(NSString *)format,...; +@end + +@interface Foo : NSObject +@end + + +static inline void _inlineFunction() { + [Bar format:@" "]; +} + +@implementation Foo + + ++(NSString *)someMethod { + return @""; +} + +-(void)someMethod { + _inlineFunction(); +} +@end + +// CHECK: @__CFConstantStringClassReference = common global [24 x i32] zeroinitializer, align 16 +// CHECK: @_unnamed_cfstring_{{.*}} = private constant %struct.NSConstantString { i32* getelementptr inbounds ([24 x i32]* @__CFConstantStringClassReference, i32 0, i32 0) + +// CHECK: define internal void @_inlineFunction() +// CHECK-NEXT: entry: +// CHECK-NEXT: [[ZERO:%.*]] = load %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_ +// CHECK-NEXT: [[ONE:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_" +// CHECK-NEXT: [[TWO:%.*]] = bitcast %struct._class_t* [[ZERO]] to i8* +// CHECK-NEXT: call{{.*}}@objc_msgSend{{.*}}(i8* [[TWO]], i8* [[ONE]], [[ZERO]]* bitcast (%struct.NSConstantString* @_unnamed_cfstring_{{.*}} +// CHECK-NEXT: ret void + |