[cfe-dev] Are synthesised Objective-C types needed?

David Chisnall 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
int main(void)
         SEL d;
         return 0;
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 mailing list