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 | d1b6778e69373405af71645e3ac826e586b54e9d (patch) | |
| tree | 722870e4bb0bdfabddffac55326645cb3b98226c /clang/test/CodeGenObjC | |
| parent | 3c4a251ce8cc9c7aacc96949413bea3efcb21289 (diff) | |
| download | bcm5719-llvm-d1b6778e69373405af71645e3ac826e586b54e9d.tar.gz bcm5719-llvm-d1b6778e69373405af71645e3ac826e586b54e9d.zip | |
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.
llvm-svn: 179599
Diffstat (limited to 'clang/test/CodeGenObjC')
| -rw-r--r-- | clang/test/CodeGenObjC/tentative-cfconstantstring.m | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/clang/test/CodeGenObjC/tentative-cfconstantstring.m b/clang/test/CodeGenObjC/tentative-cfconstantstring.m new file mode 100644 index 00000000000..c0bea0f2eb6 --- /dev/null +++ b/clang/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 + | 

