diff options
Diffstat (limited to 'include/clang')
-rw-r--r-- | include/clang/Basic/ObjCRuntime.h | 16 | ||||
-rw-r--r-- | include/clang/Driver/ToolChain.h | 5 |
2 files changed, 16 insertions, 5 deletions
diff --git a/include/clang/Basic/ObjCRuntime.h b/include/clang/Basic/ObjCRuntime.h index 10922ed5af..228135d094 100644 --- a/include/clang/Basic/ObjCRuntime.h +++ b/include/clang/Basic/ObjCRuntime.h @@ -16,6 +16,7 @@ #define LLVM_CLANG_OBJCRUNTIME_H #include "clang/Basic/VersionTuple.h" +#include "llvm/ADT/Triple.h" #include "llvm/Support/ErrorHandling.h" namespace clang { @@ -84,6 +85,21 @@ public: /// implied behaviors for a "fragile" ABI? bool isFragile() const { return !isNonFragile(); } + /// The default dispatch mechanism to use for the specified architecture + bool isLegacyDispatchDefaultForArch(llvm::Triple::ArchType Arch) { + // The GNUstep runtime uses a newer dispatch method by default from + // version 1.6 onwards + if (getKind() == GNUstep && getVersion() >= VersionTuple(1, 6)) { + if (Arch == llvm::Triple::arm || + Arch == llvm::Triple::x86 || + Arch == llvm::Triple::x86_64) + return false; + // Mac runtimes use legacy dispatch everywhere except x86-64 + } else if (isNeXTFamily() && isNonFragile()) + return Arch != llvm::Triple::x86_64; + return true; + } + /// \brief Is this runtime basically of the GNUstep family of runtimes? bool isGNUFamily() const { switch (getKind()) { diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h index 642d8a4274..ab417bb577 100644 --- a/include/clang/Driver/ToolChain.h +++ b/include/clang/Driver/ToolChain.h @@ -149,11 +149,6 @@ 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 true; } - /// UseObjCMixedDispatchDefault - When using non-legacy dispatch, should the /// mixed dispatch method be used? virtual bool UseObjCMixedDispatch() const { return false; } |