From a422cd0ed4da8cb5a172498f29bb02065707c6ce Mon Sep 17 00:00:00 2001 From: David Chisnall Date: Wed, 4 Jul 2012 10:37:03 +0000 Subject: [PATCH] A few more cleanups for the GNU family of ObjC runtimes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159708 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/ObjCRuntime.h | 7 ++----- lib/Basic/ObjCRuntime.cpp | 5 ++++- lib/Driver/Tools.cpp | 7 ++++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/clang/Basic/ObjCRuntime.h b/include/clang/Basic/ObjCRuntime.h index 9212a8bf95..10922ed5af 100644 --- a/include/clang/Basic/ObjCRuntime.h +++ b/include/clang/Basic/ObjCRuntime.h @@ -116,11 +116,8 @@ public: case MacOSX: return getVersion() >= VersionTuple(10, 7); case iOS: return getVersion() >= VersionTuple(5); - // This is really a lie, because some implementations and versions - // of the runtime do not support ARC. Probably -fgnu-runtime - // should imply a "maximal" runtime or something? - case GCC: return true; - case GNUstep: return true; + case GCC: return false; + case GNUstep: return getVersion() >= VersionTuple(1, 6); } llvm_unreachable("bad kind"); } diff --git a/lib/Basic/ObjCRuntime.cpp b/lib/Basic/ObjCRuntime.cpp index 0f30bfaa2c..f52677b512 100644 --- a/lib/Basic/ObjCRuntime.cpp +++ b/lib/Basic/ObjCRuntime.cpp @@ -54,6 +54,7 @@ bool ObjCRuntime::tryParse(StringRef input) { // Everything prior to that must be a valid string name. Kind kind; StringRef runtimeName = input.substr(0, dash); + Version = VersionTuple(0); if (runtimeName == "macosx") { kind = ObjCRuntime::MacOSX; } else if (runtimeName == "macosx-fragile") { @@ -61,6 +62,9 @@ bool ObjCRuntime::tryParse(StringRef input) { } else if (runtimeName == "ios") { kind = ObjCRuntime::iOS; } else if (runtimeName == "gnustep") { + // If no version is specified then default to the most recent one that we + // know about. + Version = VersionTuple(1, 6); kind = ObjCRuntime::GNUstep; } else if (runtimeName == "gcc") { kind = ObjCRuntime::GCC; @@ -69,7 +73,6 @@ bool ObjCRuntime::tryParse(StringRef input) { } TheKind = kind; - Version = VersionTuple(0); if (dash != StringRef::npos) { StringRef verString = input.substr(dash + 1); if (Version.tryParse(verString)) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index a558c1ff96..3b15d123cc 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2934,7 +2934,12 @@ ObjCRuntime Clang::AddObjCRuntimeArgs(const ArgList &args, // -fgnu-runtime } else { assert(runtimeArg->getOption().matches(options::OPT_fgnu_runtime)); - runtime = ObjCRuntime(ObjCRuntime::GCC, VersionTuple()); + // Legacy behaviour is to target the gnustep runtime if we are i + // non-fragile mode or the GCC runtime in fragile mode. + if (isNonFragile) + runtime = ObjCRuntime(ObjCRuntime::GNUstep, VersionTuple()); + else + runtime = ObjCRuntime(ObjCRuntime::GCC, VersionTuple()); } cmdArgs.push_back(args.MakeArgString( -- 2.40.0