diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 2870c3d..bb838ed 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -497,6 +497,8 @@
 //   -fpascal-strings
 static void InitializeLanguageStandard(LangOptions &Options, LangKind LK,
                                        TargetInfo *Target) {
+  // Allow the target to set the default the langauge options as it sees fit.
+  Target->getDefaultLangOptions(Options);
   
   if (Ansi) // "The -ansi option is equivalent to -std=c89."
     LangStd = lang_c89;
@@ -574,13 +576,11 @@
   Options.LaxVectorConversions = LaxVectorConversions;
   Options.Exceptions = Exceptions;
 
-  if (NeXTRuntime) {
+  // Override the default runtime if the user requested it.
+  if (NeXTRuntime)
     Options.NeXTRuntime = 1;
-  } else if (GNURuntime) {
+  else if (GNURuntime)
     Options.NeXTRuntime = 0;
-  } else {
-    Options.NeXTRuntime = Target->useNeXTRuntimeAsDefault();
-  }
 }
 
 static llvm::cl::opt<bool>
@@ -1524,8 +1524,8 @@
       InitializeBaseLanguage();
       LangKind LK = GetLanguage(InFile);
       bool PCH = InitializeLangOptions(LangInfo, LK);
-      InitializeLanguageStandard(LangInfo, LK, Target.get());
       InitializeGCMode(LangInfo);
+      InitializeLanguageStandard(LangInfo, LK, Target.get());
             
       // Process the -I options and set them in the HeaderInfo.
       HeaderSearch HeaderInfo(FileMgr);
diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h
index 32c8743..a9a7136 100644
--- a/include/clang/Basic/TargetInfo.h
+++ b/include/clang/Basic/TargetInfo.h
@@ -24,6 +24,7 @@
 
 class Diagnostic;
 class SourceManager;
+class LangOptions;
   
 namespace Builtin { struct Info; }
   
@@ -228,7 +229,10 @@
 
   virtual bool useGlobalsForAutomaticVariables() const { return false; }
 
-  virtual bool useNeXTRuntimeAsDefault() const { return false; }
+  /// getDefaultLangOptions - Allow the target to specify default settings for
+  /// various language options.  These may be overridden by command line
+  /// options. 
+  virtual void getDefaultLangOptions(LangOptions &Opts) {}
 
 protected:
   virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 71321f1..6f563a5 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -15,6 +15,7 @@
 #include "clang/AST/Builtins.h"
 #include "clang/AST/TargetBuiltins.h"
 #include "clang/Basic/TargetInfo.h"
+#include "clang/Basic/LangOptions.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/APFloat.h"
 using namespace clang;
@@ -366,7 +367,12 @@
     getDarwinDefines(Defines, getTargetTriple());
   }
 
-  virtual bool useNeXTRuntimeAsDefault() const { return true; }
+  /// getDefaultLangOptions - Allow the target to specify default settings for
+  /// various language options.  These may be overridden by command line
+  /// options. 
+  virtual void getDefaultLangOptions(LangOptions &Opts) {
+    Opts.NeXTRuntime = true;
+  }
 };
 } // end anonymous namespace.
 
@@ -379,7 +385,12 @@
     getDarwinDefines(Defines, getTargetTriple());
   }
 
-  virtual bool useNeXTRuntimeAsDefault() const { return true; }
+  /// getDefaultLangOptions - Allow the target to specify default settings for
+  /// various language options.  These may be overridden by command line
+  /// options. 
+  virtual void getDefaultLangOptions(LangOptions &Opts) {
+    Opts.NeXTRuntime = true;
+  }
 };
 } // end anonymous namespace.
 
@@ -526,7 +537,12 @@
     X86_32TargetInfo::getTargetDefines(Defines);
     getDarwinDefines(Defines, getTargetTriple());
   }
-  virtual bool useNeXTRuntimeAsDefault() const { return true; }
+  /// getDefaultLangOptions - Allow the target to specify default settings for
+  /// various language options.  These may be overridden by command line
+  /// options. 
+  virtual void getDefaultLangOptions(LangOptions &Opts) {
+    Opts.NeXTRuntime = true;
+  }
 };
 } // end anonymous namespace
 
@@ -670,7 +686,12 @@
     getDarwinDefines(Defines, getTargetTriple());
   }
 
-  virtual bool useNeXTRuntimeAsDefault() const { return true; }
+  /// getDefaultLangOptions - Allow the target to specify default settings for
+  /// various language options.  These may be overridden by command line
+  /// options. 
+  virtual void getDefaultLangOptions(LangOptions &Opts) {
+    Opts.NeXTRuntime = true;
+  }
 };
 } // end anonymous namespace.
 
