Driver/Darwin: Darwin uses -fobjc-legacy-dispatch on ARM.

llvm-svn: 95006
This commit is contained in:
Daniel Dunbar 2010-02-01 21:07:43 +00:00
parent ca5e3eb7f7
commit 98188414ef
4 changed files with 23 additions and 1 deletions

View File

@ -94,6 +94,11 @@ public:
/// -fobjc-nonfragile-abi by default.
virtual bool IsObjCNonFragileABIDefault() const { return false; }
/// IsObjCLegacyDispatchDefault - Does this tool chain set
/// -fobjc-legacy-dispatch by default (this is only used with the non-fragile
/// ABI).
virtual bool IsObjCLegacyDispatchDefault() const { return false; }
/// GetDefaultStackProtectorLevel - Get the default stack protector level for
/// this tool chain (0=off, 1=on, 2=all).
virtual unsigned GetDefaultStackProtectorLevel() const { return 0; }

View File

@ -161,6 +161,11 @@ public:
// Non-fragile ABI default to on for iPhoneOS and x86-64.
return isTargetIPhoneOS() || getTriple().getArch() == llvm::Triple::x86_64;
}
virtual bool IsObjCLegacyDispatchDefault() const {
// This is only used with the non-fragile ABI.
return (getTriple().getArch() == llvm::Triple::arm ||
getTriple().getArch() == llvm::Triple::thumb);
}
virtual bool IsUnwindTablesDefault() const;
virtual unsigned GetDefaultStackProtectorLevel() const {
// Stack protectors default to on for 10.6 and beyond.

View File

@ -1031,7 +1031,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// defaults to off.
if (Args.hasFlag(options::OPT_fobjc_legacy_dispatch,
options::OPT_fno_objc_legacy_dispatch,
false))
getToolChain().IsObjCLegacyDispatchDefault()))
CmdArgs.push_back("-fobjc-legacy-dispatch");
}
}

View File

@ -4,6 +4,9 @@
// CHECK-NOT: ssp
// CHECK: ) {
// CHECK: @__f0_block_invoke
// CHECK: void @f1
// CHECK-NOT: msgSend_fixup_alloc
// CHECK: OBJC_SELECTOR_REFERENCES
int f0() {
return ^(){ return 0; }();
@ -16,3 +19,12 @@ int f0() {
@implementation I0
@synthesize p0 = __sythesized_p0;
@end
@interface I1
+(id) alloc;
@end
void f1() {
[I1 alloc];
}