[cfe-dev] Are synthesised Objective-C types needed?
csdavec at swansea.ac.uk
Tue Sep 2 06:15:32 PDT 2008
I've been having problems with the type of SEL in Sema.cpp being hard-
coded to the type used by the NeXT runtime (on GNU it is const, and
so you now get an error compiling any Objective-C program anywhere
except Darwin because there is a type conflict).
Looking at the headers, on both Cocoa and GNUstep Foundation.h
includes <objc/objc.h> before any Objective-C headers. Objective-C
programs which don't include Foundation.h as their first include,
which provides definitions for SEL, Protocol, id, Class, IMP and
MetaClass. It seems like some duplicated effort to synthesise them
when every Objective-C program will also force the definitions to be
parsed (Objective-C programs which don't use Foundation either
include this header themselves or include <objc/Object.h>, which, in
turn, includes it.
With GCC, they are not hard-coded:
$ cat test.m && gcc test.m
test.m: In function 'main':
test.m:3: error: 'SEL' undeclared (first use in this function)
test.m:3: error: (Each undeclared identifier is reported only once
test.m:3: error: for each function it appears in.)
test.m:3: error: expected ';' before 'd'
It seems that value in ASTContext for a SEL type is used in a few
places, so ideally we would lazily look this up from whichever
typedef has the SEL type (although I can't currently find the correct
place for doing this - hints welcome).
More information about the cfe-dev