brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · b8d0ccb Raw
117 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s2// RUN: grep -F '@objc_assign_global' %t  | count 213// RUN: grep -F '@objc_assign_ivar' %t  | count 114// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s5// RUN: grep -F '@objc_assign_global' %t  | count 216// RUN: grep -F '@objc_assign_ivar' %t  | count 117 8 9typedef const struct __CFDictionary * CFDictionaryRef;10 11// callouts to these are generated with cc -fobjc-gc12 13int GlobalAssigns;14int IvarAssigns;15int StrongCastAssigns;16 17 18// The test case elements;19@class NSObject;20@class NSString;21 22typedef struct {23  id  element;24  id elementArray[10];25  __strong CFDictionaryRef cfElement;26  __strong CFDictionaryRef cfElementArray[10];27} struct_with_ids_t;28 29@interface Foo  {30@public31// assignments to any/all of these fields should generate objc_assign_ivar32  __strong CFDictionaryRef dict;33  __strong CFDictionaryRef dictArray[3];34  id ivar;35  id array[10];36  NSObject *nsobject;37  NSString *stringArray[10];38  struct_with_ids_t inner;39}40 41@end42 43// assignments to these should generate objc_assign_global44id GlobalId;45id GlobalArray[20];46NSObject *GlobalObject;47NSObject *GlobalObjectArray[20];48__strong CFDictionaryRef Gdict;49__strong CFDictionaryRef Gdictarray[10];50struct_with_ids_t GlobalStruct;51struct_with_ids_t GlobalStructArray[10];52 53 54// The test cases55void* rhs = 0;56 57#define ASSIGNTEST(expr, global) expr = (typeof(expr))rhs58 59int testGlobals(void) {60  // Everything in this function generates assign_global intercepts61  int counter = 0;62 63  static id staticGlobalId;64  static id staticGlobalArray[20];65  static NSObject *staticGlobalObject;66  static NSObject *staticGlobalObjectArray[20];67  static __strong CFDictionaryRef staticGdict;68  static __strong CFDictionaryRef staticGdictarray[10];69  static struct_with_ids_t staticGlobalStruct;70  static struct_with_ids_t staticGlobalStructArray[10];71 72  ASSIGNTEST(GlobalId, GlobalAssigns);				// objc_assign_global73  ASSIGNTEST(GlobalArray[0], GlobalAssigns);			// objc_assign_global74  ASSIGNTEST(GlobalObject, GlobalAssigns);			// objc_assign_global75  ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns);		// objc_assign_global76  ASSIGNTEST(Gdict, GlobalAssigns);				// objc_assign_global77  ASSIGNTEST(Gdictarray[1], GlobalAssigns);			// objc_assign_global78 79  ASSIGNTEST(GlobalStruct.element, GlobalAssigns);		// objc_assign_global80  ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns);	// objc_assign_global81  ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns);		// objc_assign_global82  ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns);	// objc_assign_global83 84  ASSIGNTEST(staticGlobalId, GlobalAssigns);			// objc_assign_global85  ASSIGNTEST(staticGlobalArray[0], GlobalAssigns);		// objc_assign_global86  ASSIGNTEST(staticGlobalObject, GlobalAssigns);		// objc_assign_global87  ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns);	// objc_assign_global88  ASSIGNTEST(staticGdict, GlobalAssigns);			// objc_assign_global89  ASSIGNTEST(staticGdictarray[1], GlobalAssigns);		// objc_assign_global90 91  ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns);		// objc_assign_global92  ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns);	// objc_assign_global93  ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns);		// objc_assign_global94  ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns);	// objc_assign_global95 96  return counter;97}98 99 100int testIvars(void) {101  Foo *foo;102  int counter = 0;103 104  ASSIGNTEST(foo->ivar, IvarAssigns);					// objc_assign_ivar105  ASSIGNTEST(foo->dict, IvarAssigns);					// objc_assign_ivar106  ASSIGNTEST(foo->dictArray[0], IvarAssigns);				// objc_assign_ivar107  ASSIGNTEST(foo->array[0], IvarAssigns);				// objc_assign_ivar108  ASSIGNTEST(foo->nsobject, IvarAssigns);				// objc_assign_ivar109  ASSIGNTEST(foo->stringArray[0], IvarAssigns);				// objc_assign_ivar110  ASSIGNTEST(foo->inner.element, IvarAssigns);				// objc_assign_ivar111  ASSIGNTEST(foo->inner.elementArray[0], IvarAssigns);			// objc_assign_ivar112  ASSIGNTEST(foo->inner.cfElement, IvarAssigns);			// objc_assign_ivar113  ASSIGNTEST(foo->inner.cfElementArray[0], IvarAssigns);		// objc_assign_ivar114 115  return counter;116}117