OSDN Git Service

gcc:
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / objc.dg / encode-7-next-64bit.m
1 /* Additional testing for the NeXT runtime. Encoding in -m64 mode  */
2
3 /* { dg-do run { target *-*-darwin* } } */
4 /* { dg-require-effective-target lp64 } */
5 /* { dg-options "-Wno-deprecated-declarations" } */
6 /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
7 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
8 /* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
9
10 #include "../objc-obj-c++-shared/Object1.h"
11 #include "../objc-obj-c++-shared/next-mapping.h"
12 #include <stdbool.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #define CHECK_IF(E) if (!(E)) abort ()
16
17 @class NSDictionary, NSFont, NSError, _NSATSTypesetterGuts, NSString, NSMenu, NSArray;
18
19 typedef unsigned char UInt8;
20 typedef const signed long OSStatus;
21 typedef unsigned long CFIndex;
22 typedef unsigned int UInt32;
23 typedef UInt32 FourCharCode;
24 typedef FourCharCode OSType;
25
26 struct FSRef {
27   UInt8 hidden[80];
28 };
29 typedef struct FSRef FSRef;
30
31 typedef struct _NSPoint {
32     float x;
33     float y;
34 } NSPoint;
35
36 typedef struct _NSSize {
37     float width;
38     float height;
39 } NSSize;
40
41 typedef struct _NSRect {
42     NSPoint origin;
43     NSSize size;
44 } NSRect;
45
46 typedef struct _NSRange {
47     unsigned int location;
48     unsigned int length;
49 } NSRange;
50
51 typedef const char *NXAtom;
52
53 typedef struct {
54   NSDictionary *_attributes;
55   NSFont *_font;
56   CFIndex _characterLength;
57   CFIndex _nominalGlyphLocation;
58   const CFIndex *p;
59   float _defaultLineHeight;
60   float _defaultBaselineOffset;
61   float _horizExpansion;
62   float _baselineDelta;
63   NSRect _attachmentBBox;
64   long ll, *llp;
65   unsigned long ull, *ullp;
66   id a;
67   const id a1;
68   const struct objc_object *a2;
69   SEL b;
70   const SEL b1;
71   const struct objc_selector *b2;
72   const char *str1;
73   char *str2;
74   char *const str3;
75   const char *const str4;
76   struct {
77     unsigned int _isAttachmentRun:1;
78     unsigned int _hasPositionalStake:1;
79     unsigned int _isDefaultFace:1;
80     unsigned int _hasCombiningMarks:1;
81     unsigned int _isScreenFont:1;
82     unsigned int _reserved:27;
83   } _rFlags;
84 } NSATSGlyphStorageRun;
85
86 typedef struct __CFSet *CFMutableSetRef;
87 typedef const struct __CTLine * CTLineRef;
88 typedef const struct __NSAppleEventManagerSuspension* NSAppleEventManagerSuspensionID;
89
90 struct ComponentInstanceRecord {
91   long data[1];
92 };
93 typedef struct ComponentInstanceRecord  ComponentInstanceRecord;
94 typedef ComponentInstanceRecord *ComponentInstance;
95
96 typedef NSString *(*NSErrorUserInfoFormatterFunc)(id objToBeDisplayed, NSError *err, char modifier);
97 typedef struct {
98   NSErrorUserInfoFormatterFunc formatterFunc;
99   NSString *userInfoKey;
100   unsigned int parameterMask;
101 } NSErrorUserInfoFormatter;
102
103 typedef Object MyObj;
104 typedef Object *MyPtr;
105
106 @interface Foo: Object {
107   NSATSGlyphStorageRun r;
108 }
109 - (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
110   reading:(BOOL)inReadingNotWriting;
111 - (const NSATSGlyphStorageRun *)_attributeRunForCharacterAtIndex:(const CFIndex)charIndex;
112 - (const _NSATSTypesetterGuts *)_getATSTypesetterGuts:(const struct objc_selector *)sel;
113 - (void)resumeWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID and:(const CFIndex *)status;
114 - (const id)anotherMeth:(const SEL)sel and:(const Foo *)foo and:(const struct objc_object *)obj;
115 - (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4;
116 - (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4;
117 - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1;
118 - (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3;
119 + (ComponentInstance)_defaultScriptingComponent;
120 - (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters 
121   applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters;
122 - (NSErrorUserInfoFormatter *)formatter_func:(id)obj run:(const NSATSGlyphStorageRun **)run;
123 - (BOOL)_forgetWord:(bycopy in NSString *)word inDictionary:(bycopy in NSString *)language;
124 - (void)_registerServicesMenu:(NSMenu *)servicesMenu withSendTypes:(const NXAtom *)sendTypes 
125   andReturnTypes:(const NXAtom *)returnTypes addToList:(BOOL)addToList;
126 + (CFMutableSetRef *)_proxySharePointer;
127 - (NSRange)_checkGrammarInString:(in NSString *)stringToCheck language:(bycopy in NSString *)language details:(bycopy out NSArray **)details;
128 - (bool)_resolvePositionalStakeGlyphsForLineFragment:(CTLineRef)line lineFragmentRect:(NSRect)lineFragmentRect
129   minPosition:(float)minPosition maxPosition:(float)maxPosition maxLineFragmentWidth:(float)maxLineFragmentWidth
130   breakHint:(CFIndex *)charIndex;
131 + (BOOL)findVoiceByIdentifier:(NSString *)identifier returningCreator:(OSType *)returnedCreator returningID:(OSType *)returnedID;
132 @end
133
134 NSRange globalRange;
135
136 @implementation Foo
137 - (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
138   reading:(BOOL)inReadingNotWriting {
139   return (NSError *)self;
140 }
141 - (const NSATSGlyphStorageRun *)_attributeRunForCharacterAtIndex:(CFIndex)charIndex {
142   return (const NSATSGlyphStorageRun *)self;
143 }
144 - (const _NSATSTypesetterGuts *)_getATSTypesetterGuts:(const struct objc_selector *)sel {
145   return (const _NSATSTypesetterGuts *)self;
146 }
147 - (void)resumeWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID and:(const CFIndex *)status {
148 }
149 - (const id)anotherMeth:(const SEL)sel and:(const Foo *)foo and:(const struct objc_object *)obj {
150   return (const id)self;
151 }
152 - (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4 {
153   return self;
154 }
155 - (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4 {
156 }
157 - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1 {
158   return "Hello";
159 }  
160 - (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3 {
161   return self;
162 }
163 + (ComponentInstance)_defaultScriptingComponent {
164   return (ComponentInstance)0;
165 }
166 - (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters 
167   applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters {
168   return (NSString *)self;
169 }
170 - (NSErrorUserInfoFormatter *)formatter_func:(id)obj run:(const NSATSGlyphStorageRun **)run {
171   return (NSErrorUserInfoFormatter *)0;
172 }
173 - (BOOL)_forgetWord:(bycopy in NSString *)word inDictionary:(bycopy in NSString *)language {
174   return YES;
175 }
176 - (void)_registerServicesMenu:(NSMenu *)servicesMenu withSendTypes:(const NXAtom *)sendTypes 
177   andReturnTypes:(const NXAtom *)returnTypes addToList:(BOOL)addToList {
178 }
179 + (CFMutableSetRef *)_proxySharePointer {
180   return (CFMutableSetRef *)0;
181 }
182 - (NSRange)_checkGrammarInString:(in NSString *)stringToCheck language:(bycopy in NSString *)language details:(bycopy out NSArray **)details {
183   return globalRange;
184 }
185 - (bool)_resolvePositionalStakeGlyphsForLineFragment:(CTLineRef)line lineFragmentRect:(NSRect)lineFragmentRect 
186   minPosition:(float)minPosition maxPosition:(float)maxPosition maxLineFragmentWidth:(float)maxLineFragmentWidth 
187   breakHint:(CFIndex *)charIndex {
188   return false;
189 }
190 + (BOOL)findVoiceByIdentifier:(NSString *)identifier returningCreator:(OSType *)returnedCreator returningID:(OSType *)returnedID {
191   return NO;
192 }
193 @end
194
195 int main(void) {
196   Class fooClass = objc_getClass ("Foo");
197   Method meth;
198   struct objc_ivar_list *ivars;
199   struct objc_ivar *ivar;
200
201   meth = class_getInstanceMethod (fooClass, @selector(_errorWithOSStatus:ref1:ref2:reading:));
202   CHECK_IF (!strcmp (meth->method_types, "@44@0:8q16r^{FSRef=[80C]}24r^{FSRef=[80C]}32c40"));
203
204   meth = class_getInstanceMethod (fooClass, @selector(_attributeRunForCharacterAtIndex:));
205   CHECK_IF (!strcmp (meth->method_types, "r^{?=@@QQ^Qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8Q16"));
206
207   meth = class_getInstanceMethod (fooClass, @selector(_getATSTypesetterGuts:));
208   CHECK_IF (!strcmp (meth->method_types, "r@24@0:8r:16"));
209
210   meth = class_getInstanceMethod (fooClass, @selector(resumeWithSuspensionID:and:));
211   CHECK_IF (!strcmp (meth->method_types, "v32@0:8^{__NSAppleEventManagerSuspension=}16r^Q24"));
212
213   meth = class_getInstanceMethod (fooClass, @selector(anotherMeth:and:and:));
214   CHECK_IF (!strcmp (meth->method_types, "r@40@0:8r:16r@24r@32"));
215
216   meth = class_getInstanceMethod (fooClass, @selector(str1:str2:str3:str4:));
217   CHECK_IF (!strcmp (meth->method_types, "@48@0:8r*16*24*32r*40"));
218
219   meth = class_getInstanceMethod (fooClass, @selector(foo1:foo2:foo3:foo4:));
220   CHECK_IF (!strcmp (meth->method_types, "Vv48@0:8@16r@24@32r@40"));
221
222   meth = class_getInstanceMethod (fooClass, @selector(sel1:id1:));
223   CHECK_IF (!strcmp (meth->method_types, "rn*32@0:8r:16r@24"));
224
225   meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
226   CHECK_IF (!strcmp (meth->method_types, "N@40@0:8r@16@24^{Object=#}32"));
227
228   meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
229   CHECK_IF (!strcmp (meth->method_types, "^{ComponentInstanceRecord=[1q]}16@0:8"));
230
231   meth = class_getInstanceMethod (fooClass, @selector(_formatCocoaErrorString:parameters:applicableFormatters:count:));
232   CHECK_IF (!strcmp (meth->method_types, "@44@0:8@16r*24^^{?}32i40"));
233
234   meth = class_getInstanceMethod (fooClass, @selector(formatter_func:run:));
235   CHECK_IF (!strcmp (meth->method_types, "^{?=^?@I}32@0:8@16r^^{?}24"));
236
237   meth = class_getInstanceMethod (fooClass, @selector(_forgetWord:inDictionary:));
238   CHECK_IF (!strcmp (meth->method_types, "c32@0:8nO@16nO@24"));
239
240   meth = class_getInstanceMethod (fooClass, @selector(_registerServicesMenu:withSendTypes:andReturnTypes:addToList:));
241   CHECK_IF (!strcmp (meth->method_types, "v44@0:8@16r^*24r^*32c40"));
242
243   meth = class_getClassMethod (fooClass, @selector(_proxySharePointer));
244   CHECK_IF (!strcmp (meth->method_types, "^^{__CFSet}16@0:8"));
245
246   meth = class_getInstanceMethod (fooClass, @selector(_checkGrammarInString:language:details:));
247   CHECK_IF (!strcmp (meth->method_types, "{_NSRange=II}40@0:8n@16nO@24oO^@32"));
248
249   meth = class_getInstanceMethod (fooClass, @selector(_resolvePositionalStakeGlyphsForLineFragment:lineFragmentRect:minPosition:maxPosition:maxLineFragmentWidth:breakHint:));
250   CHECK_IF (!strcmp (meth->method_types, "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^Q52"));
251
252   meth = class_getClassMethod (fooClass, @selector(findVoiceByIdentifier:returningCreator:returningID:));
253   CHECK_IF (!strcmp (meth->method_types, "c40@0:8@16^I24^I32"));
254
255   ivars = fooClass->ivars;
256   CHECK_IF (ivars->ivar_count == 1);
257
258   ivar = ivars->ivar_list;
259   CHECK_IF (!strcmp (ivar->ivar_name, "r"));
260   CHECK_IF (!strcmp (ivar->ivar_type,
261    "{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\""
262     "Q\"_nominalGlyphLocation\"Q\"p\"^Q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
263     "f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\""
264     "{_NSPoint=\"x\"f\"y\"f}\"size\"{_NSSize=\"width\"f\"height\"f}}\"ll\"q\"llp\"^q\"ull\""
265     "Q\"ullp\"^Q\"a\"@\"a1\"@\"a2\"@\"b\":\"b1\":\"b2\":\"str1\"*\"str2\"*\"str3\"*\"str4\""
266     "*\"_rFlags\"{?=\"_isAttachmentRun\"b1\"_hasPositionalStake\"b1\"_isDefaultFace\""
267     "b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}"));
268
269   return 0;
270 }