diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-02-01 21:07:33 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-02-01 21:07:33 +0000 |
commit | 2feefe8c195694d134b77503d67f535e04ca2a8b (patch) | |
tree | 36a8ccd050a68b64f3966c05771e9b9ab3583f2b | |
parent | 984eb8611d9ee46fc6351dee43609f2deed99f3c (diff) |
NeXT: Add support for -fobjc-legacy-dispatch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95005 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGObjCMac.cpp | 4 | ||||
-rw-r--r-- | test/CodeGenObjC/objc2-legacy-dispatch.m | 26 |
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 137ea51721..0dcbe829e2 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -21,6 +21,7 @@ #include "clang/AST/RecordLayout.h" #include "clang/AST/StmtObjC.h" #include "clang/Basic/LangOptions.h" +#include "clang/CodeGen/CodeGenOptions.h" #include "llvm/Intrinsics.h" #include "llvm/LLVMContext.h" @@ -4224,6 +4225,9 @@ void CGObjCNonFragileABIMac::FinishNonFragileABIModule() { /// message dispatch call for all the rest. /// bool CGObjCNonFragileABIMac::LegacyDispatchedSelector(Selector Sel) { + if (CGM.getCodeGenOpts().ObjCLegacyDispatch) + return true; + if (NonLegacyDispatchMethods.empty()) { NonLegacyDispatchMethods.insert(GetNullarySelector("alloc")); NonLegacyDispatchMethods.insert(GetNullarySelector("class")); diff --git a/test/CodeGenObjC/objc2-legacy-dispatch.m b/test/CodeGenObjC/objc2-legacy-dispatch.m new file mode 100644 index 0000000000..4c37573ad5 --- /dev/null +++ b/test/CodeGenObjC/objc2-legacy-dispatch.m @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -fobjc-nonfragile-abi -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_NEW_DISPATCH %s +// +// CHECK_NEW_DISPATCH: define void @f0 +// CHECK_NEW_DISPATCH: bitcast {{.*}}objc_msgSend_fixup_alloc +// CHECK_NEW_DISPATCH: define void @f1 +// CHECK_NEW_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES +// +// RUN: %clang_cc1 -fobjc-nonfragile-abi -fobjc-legacy-dispatch -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_OLD_DISPATCH %s +// +// CHECK_OLD_DISPATCH: define void @f0 +// CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES +// CHECK_OLD_DISPATCH: define void @f1 +// CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES + +@interface A ++(id) alloc; +-(int) im0; +@end + +void f0(void) { + [A alloc]; +} + +void f1(A *a) { + [a im0]; +} |