Predefine all the ObjC goodies from <objc/objc.h>. Removed all the ObjC goodies from the respective test files. Moving forward, it will be very nice to assume these builtin!
llvm-svn: 43077
This commit is contained in:
parent
07159205dd
commit
0f7a2d2dd1
|
@ -371,9 +371,27 @@ static void InitializePredefinedMacros(Preprocessor &PP,
|
|||
DefineBuiltinMacro(Buf, "__OBJC2__=1");
|
||||
|
||||
if (PP.getLangOptions().ObjC1) {
|
||||
// FIXME: make this the right thing.
|
||||
const char *IDTypedef = "/*typedef int id;*/\n";
|
||||
Buf.insert(Buf.end(), IDTypedef, IDTypedef+strlen(IDTypedef));
|
||||
// Predefine all the ObjC goodies (traditionally declared in <objc/objc.h>).
|
||||
// We define the following header guard for source compatibility. It has
|
||||
// the effect of ignoring any explicit inclusion of <objc/objc.h>:-)
|
||||
DefineBuiltinMacro(Buf, "_OBJC_OBJC_H_=1");
|
||||
DefineBuiltinMacro(Buf, "OBJC_EXPORT=extern");
|
||||
DefineBuiltinMacro(Buf, "OBJC_IMPORT=extern");
|
||||
const char *ObjcType;
|
||||
ObjcType = "typedef struct objc_class *Class;\n";
|
||||
Buf.insert(Buf.end(), ObjcType, ObjcType+strlen(ObjcType));
|
||||
ObjcType = "typedef struct objc_object { Class isa; } *id;\n";
|
||||
Buf.insert(Buf.end(), ObjcType, ObjcType+strlen(ObjcType));
|
||||
ObjcType = "typedef struct objc_selector *SEL;\n";
|
||||
Buf.insert(Buf.end(), ObjcType, ObjcType+strlen(ObjcType));
|
||||
ObjcType = "typedef id (*IMP)(id, SEL, ...);\n";
|
||||
Buf.insert(Buf.end(), ObjcType, ObjcType+strlen(ObjcType));
|
||||
ObjcType = "typedef signed char BOOL;\n";
|
||||
Buf.insert(Buf.end(), ObjcType, ObjcType+strlen(ObjcType));
|
||||
DefineBuiltinMacro(Buf, "YES=(BOOL)1");
|
||||
DefineBuiltinMacro(Buf, "NO=(BOOL)0");
|
||||
DefineBuiltinMacro(Buf, "Nil=0");
|
||||
DefineBuiltinMacro(Buf, "nil=0");
|
||||
}
|
||||
|
||||
// Add __builtin_va_list typedef.
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
typedef struct objc_object *id;
|
||||
|
||||
struct S { int a; };
|
||||
|
||||
extern int charStarFunc(char *);
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
// RUN: clang %s -fsyntax-only -verify
|
||||
|
||||
id obj; // expected-error{{expected '=', ',', ';', 'asm', or '__attribute__' after declarator}}
|
||||
// id is now builtin. There should be no errors. Should probably remove this file.
|
||||
id obj;
|
||||
|
||||
@interface Foo
|
||||
|
||||
- defaultToId; // expected-error{{cannot find definition of 'id'}}
|
||||
- defaultToId;
|
||||
|
||||
@end
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
typedef struct objc_object *id;
|
||||
@interface Foo
|
||||
@end
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// RUN: clang -verify %s
|
||||
|
||||
typedef struct objc_selector *SEL;
|
||||
|
||||
int main() {
|
||||
SEL s = @selector(retain);
|
||||
SEL s1 = @selector(meth1:);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// RUN: clang %s -fsyntax-only
|
||||
|
||||
typedef struct objc_object *id;
|
||||
@interface NSObject
|
||||
+ alloc;
|
||||
- init;
|
||||
|
|
Loading…
Reference in New Issue