diff options
author | Chris Lattner <sabre@nondot.org> | 2009-04-07 04:48:21 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-04-07 04:48:21 +0000 |
commit | c2d140156c577111393bd243dadac6a19257cc0e (patch) | |
tree | 49eb76aa6ab35648cdd8ca8df80822b1e1145341 | |
parent | 89be6526c3a75f608d2c00c18bde8413547aa509 (diff) | |
download | bcm5719-llvm-c2d140156c577111393bd243dadac6a19257cc0e.tar.gz bcm5719-llvm-c2d140156c577111393bd243dadac6a19257cc0e.zip |
The __weak and __strong defines are common to all darwin targets
and are even set in C mode. As such, move them to Targets.cpp.
__OBJC_GC__ is also darwin specific, but seems reasonable to always
define it when in objc-gc mode.
This fixes rdar://6761450
llvm-svn: 68494
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 22 | ||||
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 10 |
2 files changed, 18 insertions, 14 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 40bc31381d1..5fa2967e593 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -138,11 +138,21 @@ static bool getDarwinNumber(const char *Triple, unsigned &Maj, unsigned &Min) { return true; } -static void getDarwinDefines(std::vector<char> &Defs, const char *Triple) { +static void getDarwinDefines(std::vector<char> &Defs, const LangOptions &Opts, + const char *Triple) { Define(Defs, "__APPLE__"); Define(Defs, "__MACH__"); Define(Defs, "OBJC_NEW_PROPERTIES"); + // Darwin defines __weak and __strong even in C mode. + if (!Opts.ObjC1 || Opts.getGCMode() == LangOptions::NonGC) { + Define(Defs, "__weak", ""); + Define(Defs, "__strong", ""); + } else { + Define(Defs, "__weak", "__attribute__((objc_gc(weak)))"); + Define(Defs, "__strong", "__attribute__((objc_gc(strong)))"); + } + // FIXME: OBJC_ZEROCOST_EXCEPTIONS when using zero cost eh. // Figure out which "darwin number" the target triple is. "darwin9" -> 10.5. @@ -375,7 +385,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { PPC32TargetInfo::getTargetDefines(Opts, Defines); - getDarwinDefines(Defines, getTargetTriple()); + getDarwinDefines(Defines, Opts, getTargetTriple()); } /// getDefaultLangOptions - Allow the target to specify default settings for @@ -394,7 +404,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { PPC64TargetInfo::getTargetDefines(Opts, Defines); - getDarwinDefines(Defines, getTargetTriple()); + getDarwinDefines(Defines, Opts, getTargetTriple()); } /// getDefaultLangOptions - Allow the target to specify default settings for @@ -674,7 +684,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { X86_32TargetInfo::getTargetDefines(Opts, Defines); - getDarwinDefines(Defines, getTargetTriple()); + getDarwinDefines(Defines, Opts, getTargetTriple()); } /// getDefaultLangOptions - Allow the target to specify default settings for @@ -835,7 +845,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { X86_64TargetInfo::getTargetDefines(Opts, Defines); - getDarwinDefines(Defines, getTargetTriple()); + getDarwinDefines(Defines, Opts, getTargetTriple()); } /// getDefaultLangOptions - Allow the target to specify default settings for @@ -923,7 +933,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { ARMTargetInfo::getTargetDefines(Opts, Defines); - getDarwinDefines(Defines, getTargetTriple()); + getDarwinDefines(Defines, Opts, getTargetTriple()); } }; } // end anonymous namespace. diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 9eaf1403a2d..139f310e7d1 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -500,15 +500,9 @@ static void InitializePredefinedMacros(Preprocessor &PP, if (PP.getLangOptions().ObjCNonFragileABI) DefineBuiltinMacro(Buf, "__OBJC2__=1"); - if (PP.getLangOptions().getGCMode() == LangOptions::NonGC) { - DefineBuiltinMacro(Buf, "__weak="); - DefineBuiltinMacro(Buf, "__strong="); - } else { - DefineBuiltinMacro(Buf, "__weak=__attribute__((objc_gc(weak)))"); - DefineBuiltinMacro(Buf, "__strong=__attribute__((objc_gc(strong)))"); + if (PP.getLangOptions().getGCMode() != LangOptions::NonGC) DefineBuiltinMacro(Buf, "__OBJC_GC__=1"); - } - + if (PP.getLangOptions().NeXTRuntime) DefineBuiltinMacro(Buf, "__NEXT_RUNTIME__=1"); } |