]> granicus.if.org Git - clang/commitdiff
The __weak and __strong defines are common to all darwin targets
authorChris Lattner <sabre@nondot.org>
Tue, 7 Apr 2009 04:48:21 +0000 (04:48 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 7 Apr 2009 04:48:21 +0000 (04:48 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68494 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
lib/Lex/Preprocessor.cpp

index 40bc31381d1e186c9010d94bf5e4bf128b342689..5fa2967e5932e30ec8ff484f8b2e5b1b12adf983 100644 (file)
@@ -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.
index 9eaf1403a2d7e8896036b1f9ab1528ab85ef0951..139f310e7d19d7af336f592ea576550ee9f14084 100644 (file)
@@ -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");
   }