]> granicus.if.org Git - clang/commitdiff
Fariborz points out that weak is now defined to the attribute even
authorChris Lattner <sabre@nondot.org>
Tue, 7 Apr 2009 16:50:40 +0000 (16:50 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 7 Apr 2009 16:50:40 +0000 (16:50 +0000)
in C mode.

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

lib/Basic/Targets.cpp

index 5fa2967e5932e30ec8ff484f8b2e5b1b12adf983..2197b42eb7e139fa06975f0a2a906b656941c5ee 100644 (file)
@@ -144,14 +144,14 @@ static void getDarwinDefines(std::vector<char> &Defs, const LangOptions &Opts,
   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", "");
+  // __weak is always defined, for use in blocks and with objc pointers.
+  Define(Defs, "__weak", "__attribute__((objc_gc(weak)))");
+  
+  // Darwin defines __strong even in C mode (just to nothing).
+  if (!Opts.ObjC1 || Opts.getGCMode() == LangOptions::NonGC)
     Define(Defs, "__strong", "");
-  } else {
-    Define(Defs, "__weak", "__attribute__((objc_gc(weak)))");
+  else
     Define(Defs, "__strong", "__attribute__((objc_gc(strong)))");
-  }
   
   // FIXME: OBJC_ZEROCOST_EXCEPTIONS when using zero cost eh.