diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2009-09-16 21:37:16 +0000 | 
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-09-16 21:37:16 +0000 | 
| commit | a7fa6beb2e7111cef2ac41ec2ddc06d450404fe3 (patch) | |
| tree | b8e5ce8b661795505da96498cb668d216227e20a /clang/test/CodeGenObjC | |
| parent | ca968cf1f0ca4014bc44907e50269cd9f1c487d2 (diff) | |
| download | bcm5719-llvm-a7fa6beb2e7111cef2ac41ec2ddc06d450404fe3.tar.gz bcm5719-llvm-a7fa6beb2e7111cef2ac41ec2ddc06d450404fe3.zip | |
Starting patch to generate more specific API for objc's
GC. Currently, new API will be generated under
clang-cc's -fobjc-newgc-api flag which will eventually
become the default. WIP.
llvm-svn: 82082
Diffstat (limited to 'clang/test/CodeGenObjC')
| -rw-r--r-- | clang/test/CodeGenObjC/objc2-assign-global.m | 82 | 
1 files changed, 78 insertions, 4 deletions
| diff --git a/clang/test/CodeGenObjC/objc2-assign-global.m b/clang/test/CodeGenObjC/objc2-assign-global.m index ae407619093..426b99fde15 100644 --- a/clang/test/CodeGenObjC/objc2-assign-global.m +++ b/clang/test/CodeGenObjC/objc2-assign-global.m @@ -1,8 +1,82 @@ -// RUN: clang-cc -fnext-runtime -fobjc-gc -emit-llvm -o %t %s && -// RUN: grep -F '@objc_assign_global' %t  | count 2 && +// RUN: clang-cc -fnext-runtime -fobjc-gc -fobjc-newgc-api -emit-llvm -o %t %s && +// RUN: grep -F '@objc_assign_global' %t  | count 26 &&  // RUN: true -id a; + +@class NSObject; +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct { +  id  element; +  id elementArray[10]; +  __strong CFDictionaryRef cfElement; +  __strong CFDictionaryRef cfElementArray[10]; +} struct_with_ids_t; + + +// assignments to these should generate objc_assign_global +@interface A +@end + +typedef struct s0 { +  A *a[4]; +} T; + +T g0; + +extern id FileExternID; +static id FileStaticID; +id GlobalId; +id GlobalArray[20]; +NSObject *GlobalObject; +NSObject *GlobalObjectArray[20]; +__strong CFDictionaryRef Gdict; +__strong CFDictionaryRef Gdictarray[10]; +struct_with_ids_t GlobalStruct; +struct_with_ids_t GlobalStructArray[10]; + +#define ASSIGNTEST(expr, global) expr = rhs +void *rhs = 0; +  int main() { -        a = 0; +  static id staticGlobalId; +  static id staticGlobalArray[20]; +  static NSObject *staticGlobalObject; +  static NSObject *staticGlobalObjectArray[20]; +  static __strong CFDictionaryRef staticGdict; +  static __strong CFDictionaryRef staticGdictarray[10]; +  static struct_with_ids_t staticGlobalStruct; +  static struct_with_ids_t staticGlobalStructArray[10]; +  extern id ExID; +  id localID; + +  ASSIGNTEST(GlobalId, GlobalAssigns);                          // objc_assign_global +  ASSIGNTEST(GlobalArray[0], GlobalAssigns);                    // objc_assign_global +  ASSIGNTEST(GlobalObject, GlobalAssigns);                      // objc_assign_global +  ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns);              // objc_assign_global +  ASSIGNTEST(Gdict, GlobalAssigns);                             // objc_assign_global +  ASSIGNTEST(Gdictarray[1], GlobalAssigns);                     // objc_assign_global + +  ASSIGNTEST(GlobalStruct.element, GlobalAssigns);              // objc_assign_global +  ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns);      // objc_assign_global +  ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns);            // objc_assign_global +  ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns);    // objc_assign_global + +  ASSIGNTEST(staticGlobalId, GlobalAssigns);                    // objc_assign_global +  ASSIGNTEST(staticGlobalArray[0], GlobalAssigns);              // objc_assign_global +  ASSIGNTEST(staticGlobalObject, GlobalAssigns);                // objc_assign_global +  ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns);        // objc_assign_global +  ASSIGNTEST(staticGdict, GlobalAssigns);                       // objc_assign_global +  ASSIGNTEST(staticGdictarray[1], GlobalAssigns);               // objc_assign_global + +  ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns);                // objc_assign_global +  ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns);        // objc_assign_global +  ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns);              // objc_assign_global +  ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns);      // objc_assign_global + +  ExID = 0; +  localID = 0; +  FileStaticID = 0; +  FileExternID=0; +  g0.a[0] = 0; +  ((T*) &g0)->a[0] = 0;  } | 

