home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / gnu / gcc / bug / 2822 < prev    next >
Encoding:
Text File  |  1992-11-22  |  15.0 KB  |  401 lines

  1. Newsgroups: gnu.gcc.bug
  2. Path: sparky!uunet!cis.ohio-state.edu!vm.ucs.ualberta.ca!NTOMCZAK
  3. From: NTOMCZAK@vm.ucs.ualberta.ca (Michal Jaegermann)
  4. Subject: Re: Fatal signal 10 with ObjC.
  5. Message-ID: <9211222347.AA27329@life.ai.mit.edu>
  6. Sender: gnulists@ai.mit.edu
  7. Organization: GNUs Not Usenet
  8. Distribution: gnu
  9. Date: Sun, 22 Nov 1992 23:45:03 GMT
  10. Approved: bug-gcc@prep.ai.mit.edu
  11. Lines: 388
  12.  
  13. This is a followup to a report by enelson@apnext1.slac.stanford.edu
  14. (Eric M. Nelson) of cc1obj getting a fatal signal 10 on the following
  15. test program:
  16.  
  17. #include <stdarg.h>
  18. #include <objc/Object.h>
  19.  
  20. int main(){
  21.   id anObject;
  22.   anObject=[Object new];
  23.   }
  24.  
  25. I tried this on my machine and I got the following:
  26.  
  27. Reading specs from /usr/local/lib/gcc-lib/next/2.3.1/specs
  28. gcc version 2.3.1
  29.  /usr/local/lib/gcc-lib/next/2.3.1/cpp -lang-objc -v -undef -D__OBJC__
  30. -D__GNUC__=2 -Dmc68000 -Dm68k -DNeXT -Dunix -D__MACH__
  31. -D__ARCHITECTURE__="m68k" -D__mc68000__ -D__m68k__ -D__NeXT__
  32. -D__unix__ -D__MACH__ -D__ARCHITECTURE__="m68k" -D__mc68000 -D__m68k
  33. -D__NeXT -D__unix -D__MACH__ -D__ARCHITECTURE__="m68k" test2.m
  34. /usr/tmp/cc006781.i
  35. GNU CPP version 2.3.1 (68k, MIT syntax)
  36.  /usr/local/lib/gcc-lib/next/2.3.1/cc1obj /usr/tmp/cc006781.i -quiet
  37. -dumpbase test2.m -version -lang-objc -o /usr/tmp/cc006781.s
  38. GNU C version 2.3.1 (68k, MIT syntax) compiled by GNU C version 2.3.1.
  39. In file included from /NextDeveloper/Headers/objc/Object.h:14, from test2.m:6:
  40. /NextDeveloper/Headers/objc/objc-class.h:77: invalid Objective C
  41. keyword `@class'
  42. NextDeveloper/Headers/objc/objc-class.h:77: parse error before `@class'
  43. /NextDeveloper/Headers/objc/objc-class.h:82: parse error before `Protocol'
  44. /NextDeveloper/Headers/objc/objc-class.h:82: warning: no semicolon at
  45. end of struct or union
  46. In file included from test2.m:6:
  47. /NextDeveloper/Headers/objc/Object.h:17: invalid Objective C keyword `@class'
  48. /NextDeveloper/Headers/objc/Object.h:17: parse error before `@class'
  49. /NextDeveloper/Headers/objc/Object.h:69: parse error before `Protocol'
  50. /NextDeveloper/Headers/objc/Object.h:70: parse error before `Protocol'
  51.  
  52. A possible difference is that I got reckless and compiled mine cc1obj
  53. with -O2 optimization option.  Maybe this will help to shed some light.
  54. Compacted results of a preprocessor run are included below.
  55.  
  56.    Best regards,
  57.    Michal Jaegermann
  58.    ntomczak@vm.ucs.ualberta.ca
  59.    ntomczak@vega.math.ualberta.ca
  60.  
  61. --------------------------
  62. /* # 1 "test2.m" */
  63. /* # 1 "/NextDeveloper/Headers/ansi/stdarg.h" 1 */
  64. /* # 1 "/NextDeveloper/Headers/ansi/machine/stdarg.h" 1 */
  65. /* # 1 "/NextDeveloper/Headers/architecture/ARCH_INCLUDE.h" 1 */
  66. /* # 9 "/NextDeveloper/Headers/ansi/machine/stdarg.h" 2 */
  67. /* # 1 "/NextDeveloper/Headers/ansi/m68k/stdarg.h" 1 */
  68. typedef char *va_list;
  69. void va_end (va_list);
  70. /* # 11 "/NextDeveloper/Headers/ansi/machine/stdarg.h" 2 */
  71. /* # 7 "/NextDeveloper/Headers/ansi/stdarg.h" 2 */
  72. /* # 5 "test2.m" 2 */
  73. /* # 1 "/NextDeveloper/Headers/objc/Object.h" 1 */
  74. /* # 1 "/NextDeveloper/Headers/objc/objc.h" 1 */
  75. typedef struct objc_class *Class;
  76. typedef struct objc_object {
  77.     Class isa;
  78. } *id;
  79. typedef struct objc_selector     *SEL;
  80. typedef char *            STR;
  81. typedef id             (*IMP)(id, SEL, ...);
  82. typedef char            BOOL;
  83. extern BOOL sel_isMapped(SEL sel);
  84. extern const char *sel_getName(SEL sel);
  85. extern SEL sel_getUid(const char *str);
  86. extern SEL sel_registerName(const char *str);
  87. extern const char *object_getClassName(id obj);
  88. extern void *object_getIndexedIvars(id obj);
  89. /* # 13 "/NextDeveloper/Headers/objc/Object.h" 2 */
  90. /* # 1 "/NextDeveloper/Headers/objc/objc-class.h" 1 */
  91. /* # 1 "/NextDeveloper/Headers/objc/zone.h" 1 */
  92. /* # 1 "/NextDeveloper/Headers/ansi/stddef.h" 1 */
  93. /* # 1 "/NextDeveloper/Headers/ansi/machine/stddef.h" 1 */
  94. /* # 1 "/NextDeveloper/Headers/architecture/ARCH_INCLUDE.h" 1 */
  95. /* # 32 "/NextDeveloper/Headers/architecture/ARCH_INCLUDE.h" */
  96. /* # 9 "/NextDeveloper/Headers/ansi/machine/stddef.h" 2 */
  97. /* # 1 "/NextDeveloper/Headers/ansi/m68k/stddef.h" 1 */
  98. typedef long ptrdiff_t;
  99. typedef unsigned long size_t;
  100. typedef unsigned short wchar_t;
  101. /* # 11 "/NextDeveloper/Headers/ansi/machine/stddef.h" 2 */
  102. /* # 4 "/NextDeveloper/Headers/ansi/stddef.h" 2 */
  103. /* # 1 "/NextDeveloper/Headers/objc/zone.h" 2 */
  104. typedef struct _NXZone {
  105.     void *(*realloc)(struct _NXZone *zonep, void *ptr, size_t size);
  106.     void *(*malloc)(struct _NXZone *zonep, size_t size);
  107.     void (*free)(struct _NXZone *zonep, void *ptr);
  108.     void (*destroy)(struct _NXZone *zonep);
  109. } NXZone;
  110. extern NXZone *NXDefaultMallocZone(void);
  111. extern NXZone *NXCreateZone(size_t startSize, size_t granularity, int canFree);
  112. extern NXZone  *NXCreateChildZone(NXZone *parentZone, size_t startSize,
  113.  size_t granularity, int canFree);
  114. extern void NXMergeZone(NXZone *zonep);
  115. extern void *NXZoneCalloc(NXZone *zonep, size_t numElems, size_t byteSize);
  116. extern NXZone *NXZoneFromPtr(void *ptr);
  117. extern void NXZonePtrInfo(void *ptr);
  118. extern int NXMallocCheck(void);
  119. extern void NXNameZone(NXZone *z, const char *name);
  120. /* # 10 "/NextDeveloper/Headers/objc/objc-class.h" 2 */
  121. struct objc_class {            
  122.     struct objc_class *isa;    
  123.     struct objc_class *super_class;    
  124.     const char *name;        
  125.     long version;
  126.     long info;
  127.     long instance_size;
  128.     struct objc_ivar_list *ivars;
  129.     struct objc_method_list *methods;
  130.     struct objc_cache *cache;
  131.      struct objc_protocol_list *protocols;
  132. };
  133. typedef struct objc_category *Category;
  134. struct objc_category {
  135.     char *category_name;
  136.     char *class_name;
  137.     struct objc_method_list *instance_methods;
  138.     struct objc_method_list *class_methods;
  139.      struct objc_protocol_list *protocols;
  140. };
  141. typedef struct objc_ivar *Ivar;
  142. struct objc_ivar_list {
  143.     int ivar_count;
  144.     struct objc_ivar {
  145.         char *ivar_name;
  146.         char *ivar_type;
  147.         int ivar_offset;
  148.     } ivar_list[1];            
  149. };
  150. typedef struct objc_method *Method;
  151. struct objc_method_list {
  152.     struct objc_method_list *method_next;
  153.     int method_count;
  154.     struct objc_method {
  155.         SEL method_name;
  156.         char *method_types;
  157.                 IMP method_imp;
  158.     } method_list[1];        
  159. };
  160. @class Protocol;
  161. struct objc_protocol_list {
  162.     struct objc_protocol_list *next;
  163.     int count;
  164.     Protocol *list[1];
  165. };
  166. typedef struct objc_cache *Cache;
  167. struct objc_cache {
  168.     unsigned int mask;
  169.     unsigned int occupied;
  170.     Method buckets[1];
  171. };
  172. extern id class_createInstance(Class, unsigned idxIvars);
  173. extern id class_createInstanceFromZone(Class, unsigned idxIvars, NXZone *zone);
  174. extern void class_setVersion(Class, int);
  175. extern int class_getVersion(Class);
  176. extern Ivar class_getInstanceVariable(Class, const char *);
  177. extern Method class_getInstanceMethod(Class, SEL);
  178. extern Method class_getClassMethod(Class, SEL);
  179. extern void class_addMethods(Class, struct objc_method_list *);
  180. extern void class_removeMethods(Class, struct objc_method_list *);
  181. extern Class class_poseAs(Class imposter, Class original);
  182. extern unsigned method_getNumberOfArguments(Method);
  183. extern unsigned method_getSizeOfArguments(Method);
  184. extern unsigned method_getArgumentInfo(Method m, int arg,
  185.  const char **type, int *offset);
  186. typedef void *marg_list;
  187. /* # 14 "/NextDeveloper/Headers/objc/Object.h" 2 */
  188. /* # 1 "/NextDeveloper/Headers/objc/typedstream.h" 1 */
  189. /* # 1 "/NextDeveloper/Headers/streams/streams.h" 1 */
  190. /* # 1 "/NextDeveloper/Headers/mach/port.h" 1 */
  191. typedef int         port_name_t;        
  192. typedef port_name_t    port_set_name_t;    
  193. typedef port_name_t    *port_name_array_t;
  194. typedef int        port_type_t;        
  195. typedef port_type_t    *port_type_array_t;
  196. typedef    port_name_t    port_t;            
  197. typedef    port_t        port_all_t;        
  198. typedef    port_t        *port_array_t;
  199. /* # 12 "/NextDeveloper/Headers/streams/streams.h" 2 */
  200. /* # 1 "/NextDeveloper/Headers/objc/error.h" 1 */
  201. /* # 1 "/NextDeveloper/Headers/ansi/setjmp.h" 1 */
  202. /* # 1 "/NextDeveloper/Headers/ansi/machine/setjmp.h" 1 */
  203. /* # 1 "/NextDeveloper/Headers/architecture/ARCH_INCLUDE.h" 1 */
  204. /* # 32 "/NextDeveloper/Headers/architecture/ARCH_INCLUDE.h" */
  205. /* # 9 "/NextDeveloper/Headers/ansi/machine/setjmp.h" 2 */
  206. /* # 1 "/NextDeveloper/Headers/ansi/m68k/setjmp.h" 1 */
  207. typedef int jmp_buf[(38 +1) ];
  208. extern int setjmp(jmp_buf env);
  209. extern volatile void longjmp(jmp_buf env, int val);
  210. /* # 11 "/NextDeveloper/Headers/ansi/machine/setjmp.h" 2 */
  211. /* # 4 "/NextDeveloper/Headers/ansi/setjmp.h" 2 */
  212. /* # 14 "/NextDeveloper/Headers/objc/error.h" 2 */
  213. typedef struct _NXHandler {    
  214.     jmp_buf jumpState;            
  215.     struct _NXHandler *next;        
  216.     int code;                
  217.     const void *data1, *data2;        
  218. } NXHandler;
  219. typedef void NXUncaughtExceptionHandler(int code, const void *data1,
  220.                         const void *data2);
  221. extern NXUncaughtExceptionHandler *_NXUncaughtExceptionHandler;
  222. extern void _NXAddHandler( NXHandler *handler );
  223. extern void _NXRemoveHandler( NXHandler *handler );
  224. extern _setjmp(jmp_buf env);
  225. __volatile    
  226. extern void _NXRaiseError(int code, const void *data1, const void *data2);
  227. typedef void NXExceptionRaiser(int code, const void *data1, const void *data2);
  228. extern void NXSetExceptionRaiser(NXExceptionRaiser *proc);
  229. extern NXExceptionRaiser *NXGetExceptionRaiser(void);
  230. extern NXExceptionRaiser NXDefaultExceptionRaiser;
  231. extern void NXAllocErrorData(int size, void **data);
  232. extern void NXResetErrorData(void);
  233. /* # 13 "/NextDeveloper/Headers/streams/streams.h" 2 */
  234. typedef struct _NXStream {
  235.     unsigned int    magic_number;    
  236.     unsigned char  *buf_base;    
  237.     unsigned char  *buf_ptr;    
  238.     int        buf_size;    
  239.     int        buf_left;    
  240.     long        offset;     
  241.     int        flags;        
  242.     int        eof;
  243.     const struct stream_functions
  244.             *functions;    
  245.     void        *info;        
  246. } NXStream;
  247. struct stream_functions {
  248.     int    (*read_bytes)(NXStream *s, void *buf, int count);
  249.     int    (*write_bytes)(NXStream *s, const void *buf, int count);
  250.     int    (*flush_buffer)(NXStream *s);
  251.     int    (*fill_buffer)(NXStream *s);
  252.     void    (*change_buffer)(NXStream *s);
  253.     void    (*seek)(NXStream *s, long offset);
  254.     void    (*destroy)(NXStream *s);
  255. };
  256. extern int _NXStreamFillBuffer(NXStream *s);
  257. extern int _NXStreamFlushBuffer(NXStream *s, unsigned char c);
  258. extern int _NXStreamChangeBuffer(NXStream *s, unsigned char ch);
  259. extern int NXFlush(NXStream *s);        
  260. extern void NXSeek(NXStream *s, long offset, int mode);        
  261. extern long NXTell(NXStream *s);        
  262. extern void NXPrintf(NXStream *s, const char *format, ...);
  263. extern void NXVPrintf(NXStream *s, const char *format, va_list argList);
  264. extern int NXScanf(NXStream *s, const char *format, ...);
  265. extern int NXVScanf(NXStream *s, const char *format, va_list argList);
  266. extern void NXUngetc(NXStream *s);        
  267. extern void NXClose(NXStream *s);        
  268. extern NXStream *NXOpenFile(int fd, int mode);
  269. extern NXStream *NXOpenPort(port_t port, int mode);
  270. extern NXStream *NXOpenMemory(const char *addr, int size, int mode);
  271. extern NXStream *NXMapFile(const char *name, int mode);
  272. extern NXStream *NXGetStreamOnSection(const char *fileName,
  273.  const char *segmentName, const char *sectionName);
  274. extern int NXSaveToFile(NXStream *s, const char *name);
  275. extern void NXGetMemoryBuffer(NXStream *s, char **addr, int *len, int *maxlen);
  276. extern void NXCloseMemory(NXStream *s, int option);
  277. typedef void NXPrintfProc(NXStream *stream, void *item, void *procData);
  278. extern void NXRegisterPrintfProc(char formatChar, NXPrintfProc *proc,
  279.                             void *procData);
  280. typedef enum _NXStreamErrors {
  281.     NX_illegalWrite = 2000    ,
  282.     NX_illegalRead,
  283.     NX_illegalSeek,
  284.     NX_illegalStream,
  285.     NX_streamVMError
  286. } NXStreamErrors;
  287. /* # 22 "/NextDeveloper/Headers/objc/typedstream.h" 2 */
  288. typedef void NXTypedStream;    
  289. extern NXTypedStream *NXOpenTypedStream (NXStream *physical, int mode);
  290. extern void NXSetTypedStreamZone(NXTypedStream *stream, NXZone *zone);
  291. extern NXZone *NXGetTypedStreamZone(NXTypedStream *stream);
  292. extern BOOL NXEndOfTypedStream (NXTypedStream *stream);
  293. extern void NXFlushTypedStream (NXTypedStream *stream);
  294. extern void NXCloseTypedStream (NXTypedStream *stream);
  295. extern void NXWriteType (NXTypedStream *stream, const char *type,
  296. const void *data);
  297. extern void NXReadType (NXTypedStream *stream, const char *type, void *data);
  298. extern void NXWriteTypes (NXTypedStream *stream, const char *type, ...);
  299. extern void NXReadTypes (NXTypedStream *stream, const char *type, ...);
  300. extern void NXWriteArray (NXTypedStream *stream, const char *itemType,
  301. int count, const void *data);
  302. extern void NXReadArray (NXTypedStream *stream, const char *itemType,
  303.  int count, void *data);
  304. extern void NXWriteObject (NXTypedStream *stream, id object);
  305. extern id NXReadObject (NXTypedStream *stream);
  306. extern void NXWriteRootObject (NXTypedStream *stream, id object);
  307. extern void NXWriteObjectReference (NXTypedStream *stream, id object);
  308. extern NXTypedStream *NXOpenTypedStreamForFile (const char *fileName,
  309.  int mode);
  310. extern char *NXWriteRootObjectToBuffer (id object, int *length);
  311. extern id NXReadObjectFromBuffer (const char *buffer, int length);
  312. extern id NXReadObjectFromBufferWithZone (const char *buffer, int length,
  313.  NXZone *zone);
  314. extern void NXFreeObjectBuffer (char *buffer, int length);
  315. extern int NXSystemVersion (NXTypedStream *stream);
  316. extern int NXTypedStreamClassVersion (NXTypedStream *stream,
  317.  const char *className);
  318. enum TypedstreamErrors {
  319.     TYPEDSTREAM_CALLER_ERROR = 8000 ,
  320.     TYPEDSTREAM_FILE_INCONSISTENCY,
  321.     TYPEDSTREAM_CLASS_ERROR,
  322.     TYPEDSTREAM_TYPE_DESCRIPTOR_ERROR,
  323.     TYPEDSTREAM_WRITE_REFERENCE_ERROR,
  324.     TYPEDSTREAM_INTERNAL_ERROR
  325. };
  326. /* # 15 "/NextDeveloper/Headers/objc/Object.h" 2 */
  327. @class Protocol;
  328. @interface Object
  329. {
  330.     Class isa;    
  331. }
  332. + initialize;
  333. - init;
  334. + new;
  335. + free;
  336. - free;
  337. + alloc;
  338. - copy;
  339. + allocFromZone:(NXZone *)zone;
  340. - copyFromZone:(NXZone *)zone;
  341. - (NXZone *)zone;
  342. + class;
  343. + superclass;
  344. + (const char *) name;
  345. - class;
  346. - superclass;
  347. - (const char *) name;
  348. - self;
  349. - (unsigned int) hash;
  350. - (BOOL) isEqual:anObject;
  351. - (BOOL) isKindOf: aClassObject;
  352. - (BOOL) isMemberOf: aClassObject;
  353. - (BOOL) isKindOfClassNamed: (const char *)aClassName;
  354. - (BOOL) isMemberOfClassNamed: (const char *)aClassName;
  355. + (BOOL) instancesRespondTo:(SEL)aSelector;
  356. - (BOOL) respondsTo:(SEL)aSelector;
  357. - (BOOL) conformsTo: (Protocol *)aProtocolObject;
  358. + (BOOL) conformsTo: (Protocol *)aProtocolObject;
  359. - (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
  360. + (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
  361. - (IMP) methodFor:(SEL)aSelector;
  362. + (IMP) instanceMethodFor:(SEL)aSelector;
  363. - perform:(SEL)aSelector;
  364. - perform:(SEL)aSelector with:anObject;
  365. - perform:(SEL)aSelector with:object1 with:object2;
  366. + poseAs: aClassObject;
  367. - subclassResponsibility:(SEL)aSelector;
  368. - notImplemented:(SEL)aSelector;
  369. - doesNotRecognize:(SEL)aSelector;
  370. - error:(const char *)aString, ...;
  371. - (void) printForDebugger:(NXStream *)stream;
  372. - awake;
  373. - write:(NXTypedStream *)stream;
  374. - read:(NXTypedStream *)stream;
  375. + (int) version;
  376. + setVersion: (int) aVersion;
  377. - forward: (SEL)sel : (marg_list)args;
  378. - performv: (SEL)sel : (marg_list)args;
  379. @end
  380. @interface Object (Archiving)
  381. - startArchiving: (NXTypedStream *)stream;
  382. - finishUnarchiving;
  383. @end
  384. @interface Object (DynamicLoading)
  385. + finishLoading:(struct mach_header *)header;
  386. + startUnloading;
  387. @end
  388. extern id object_dispose(Object *anObject);
  389. extern id object_copy(Object *anObject, unsigned nBytes);
  390. extern id object_copyFromZone(Object *anObject, unsigned nBytes, NXZone *);
  391. extern id object_realloc(Object *anObject, unsigned nBytes);
  392. extern id object_reallocFromZone(Object *anObject, unsigned nBytes, NXZone *);
  393. extern Ivar object_setInstanceVariable(id, const char *name, void *);
  394. extern Ivar object_getInstanceVariable(id, const char *name, void **);
  395. /* # 6 "test2.m" 2 */
  396. int main(){
  397.   id anObject;
  398.   anObject=[Object new];
  399.   }
  400.  
  401.