Hi Steve,

On 17 Jul 2014, at 07:20, Stephen Drake wrote:

> I'm attaching a patch to select the fragile Objective-C runtime by default 
> for 32-bit Mac OS X, in accordance with Apple's documentation:
> https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html
> 
> In particular, this changes the default runtime for 32-bit ppc, since x86 was 
> already checked for specifically.
> 
> Having written this up I now see that a very similar change was proposed some 
> months ago:
> http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140120/097716.html
> 
> There was some discussion about the test case there - presumably that wasn't 
> resolved?

We have the fix in our local trees, I think progressing the patch upstream just 
fell off the radar in favour of higher priority issues (some of which are 
show-stoppers).

> Index: lib/Driver/ToolChains.h
> ===================================================================
> --- lib/Driver/ToolChains.h   (revision 213217)
> +++ lib/Driver/ToolChains.h   (working copy)
> @@ -272,8 +272,8 @@
>   }
> 
>   bool IsObjCNonFragileABIDefault() const override {
> -    // Non-fragile ABI is default for everything but i386.
> -    return getTriple().getArch() != llvm::Triple::x86;
> +    // Non-fragile ABI is default for everything except 32-bit OS X.
> +    return !(getTriple().isMacOSX() && getTriple().isArch32Bit());
>   }

Although this is neater than my original patch (and would be preferable if it's 
correct), as you have in your test-case changes below, it changes to the 
fragile ABI for 32bit ARM && OSX (which is, arguably, an odd combination).

We had some discussion on IRC, and none of us could find or recall any 
reference to a permutation of arm and OSX/iOS for which the fragile ABI applied.

Do you have some reference to the contrary?

----

As Rafael originally asked, this also still needs expanding to include tests 
for PPC.

I'm using the attached patch locally.

>   bool UseObjCMixedDispatch() const override {
> Index: test/Driver/darwin-objc-defaults.m
> ===================================================================
> --- test/Driver/darwin-objc-defaults.m        (revision 213217)
> +++ test/Driver/darwin-objc-defaults.m        (working copy)
> @@ -71,7 +71,7 @@
> // RUN: FileCheck --check-prefix CHECK-CHECK-ARMV7_OSX10_5 < %t %s
> 
> // CHECK-CHECK-ARMV7_OSX10_5: "-cc1"
> -// CHECK-CHECK-ARMV7_OSX10_5: -fobjc-runtime=macosx-10.5
> +// CHECK-CHECK-ARMV7_OSX10_5: -fobjc-runtime=macosx-fragile-10.5
> // CHECK-CHECK-ARMV7_OSX10_5-NOT: -fobjc-dispatch-method
> // CHECK-CHECK-ARMV7_OSX10_5: darwin-objc-defaults
> 
> @@ -80,7 +80,7 @@
> // RUN: FileCheck --check-prefix CHECK-CHECK-ARMV7_OSX10_6 < %t %s
> 
> // CHECK-CHECK-ARMV7_OSX10_6: "-cc1"
> -// CHECK-CHECK-ARMV7_OSX10_6: -fobjc-runtime=macosx-10.6
> +// CHECK-CHECK-ARMV7_OSX10_6: -fobjc-runtime=macosx-fragile-10.6
> // CHECK-CHECK-ARMV7_OSX10_6-NOT: -fobjc-dispatch-method
> // CHECK-CHECK-ARMV7_OSX10_6: darwin-objc-defaults

These ^ need verification (and/or the required cases need bounding) assuming 
that there is some reference indicating a fragile ABI would be valid on arm.

thanks,
Iain

diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h
index d7467ca..9eca299 100644
--- a/clang/lib/Driver/ToolChains.h
+++ b/clang/lib/Driver/ToolChains.h
@@ -272,8 +272,9 @@ public:
   }
 
   bool IsObjCNonFragileABIDefault() const override {
-    // Non-fragile ABI is default for everything but i386.
-    return getTriple().getArch() != llvm::Triple::x86;
+    // Non-fragile ABI is default for everything other than 32bit x86/ppc.
+    return !(getTriple().getArch() == llvm::Triple::x86 ||
+             getTriple().getArch() == llvm::Triple::ppc);
   }
 
   bool UseObjCMixedDispatch() const override {
diff --git a/clang/test/Driver/darwin-objc-defaults.m 
b/clang/test/Driver/darwin-objc-defaults.m
index 1b3f7a8..b2332ad 100644
--- a/clang/test/Driver/darwin-objc-defaults.m
+++ b/clang/test/Driver/darwin-objc-defaults.m
@@ -92,3 +92,50 @@
 // CHECK-CHECK-ARMV7_IPHONE3_0: -fobjc-runtime=ios-3.0
 // CHECK-CHECK-ARMV7_IPHONE3_0-NOT: -fobjc-dispatch-method
 // CHECK-CHECK-ARMV7_IPHONE3_0: darwin-objc-defaults
+
+// ppc
+
+// RUN: %clang -target powerpc-apple-darwin10 -S -### %s \
+// RUN:   -mmacosx-version-min=10.4 2> %t
+// RUN: FileCheck --check-prefix CHECK-CHECK-PPC_OSX10_4 < %t %s
+
+// CHECK-CHECK-PPC_OSX10_4: "-cc1"
+// CHECK-CHECK-PPC_OSX10_4: -fobjc-runtime=macosx-fragile-10.4
+// CHECK-CHECK-PPC_OSX10_4-NOT: -fobjc-dispatch-method
+// CHECK-CHECK-PPC_OSX10_4: darwin-objc-defaults
+
+// RUN: %clang -target powerpc-apple-darwin10 -S -### %s \
+// RUN:   -mmacosx-version-min=10.5 2> %t
+// RUN: FileCheck --check-prefix CHECK-CHECK-PPC_OSX10_5 < %t %s
+
+// CHECK-CHECK-PPC_OSX10_5: "-cc1"
+// CHECK-CHECK-PPC_OSX10_5: -fobjc-runtime=macosx-fragile-10.5
+// CHECK-CHECK-PPC_OSX10_5-NOT: -fobjc-dispatch-method
+// CHECK-CHECK-PPC_OSX10_5: darwin-objc-defaults
+
+// RUN: %clang -target powerpc64-apple-darwin10 -S -### %s \
+// RUN:   -m32 -mmacosx-version-min=10.4 2> %t
+// RUN: FileCheck --check-prefix CHECK-CHECK-PPCM32_OSX10_4 < %t %s
+
+// CHECK-CHECK-PPCM32_OSX10_4: "-cc1"
+// CHECK-CHECK-PPCM32_OSX10_4: -fobjc-runtime=macosx-fragile-10.4
+// CHECK-CHECK-PPCM32_OSX10_4-NOT: -fobjc-dispatch-method
+// CHECK-CHECK-PPCM32_OSX10_4: darwin-objc-defaults
+
+// RUN: %clang -target powerpc64-apple-darwin10 -S -### %s \
+// RUN:   -m32 -mmacosx-version-min=10.5 2> %t
+// RUN: FileCheck --check-prefix CHECK-CHECK-PPCM32_OSX10_5 < %t %s
+
+// CHECK-CHECK-PPCM32_OSX10_5: "-cc1"
+// CHECK-CHECK-PPCM32_OSX10_5: -fobjc-runtime=macosx-fragile-10.5
+// CHECK-CHECK-PPCM32_OSX10_5-NOT: -fobjc-dispatch-method
+// CHECK-CHECK-PPCM32_OSX10_5: darwin-objc-defaults
+
+// RUN: %clang -target x86_64-apple-darwin10 -S -### %s \
+// RUN:   -arch ppc -mmacosx-version-min=10.5 2> %t
+// RUN: FileCheck --check-prefix CHECK-CHECK-XPPC_OSX10_5 < %t %s
+
+// CHECK-CHECK-XPPC_OSX10_5: "-cc1"
+// CHECK-CHECK-XPPC_OSX10_5: -fobjc-runtime=macosx-fragile-10.5
+// CHECK-CHECK-XPPC_OSX10_5-NOT: -fobjc-dispatch-method
+// CHECK-CHECK-XPPC_OSX10_5: darwin-objc-defaults
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to