diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
index 174143d..1dccafd 100644
--- a/tools/clang-cc/Options.cpp
+++ b/tools/clang-cc/Options.cpp
@@ -910,8 +910,7 @@
 }
 
 void clang::InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                          llvm::StringRef BuiltinIncludePath,
-                                          const LangOptions &Lang) {
+                                          llvm::StringRef BuiltinIncludePath) {
   using namespace headersearchoptions;
 
   Opts.Sysroot = isysroot;
@@ -993,19 +992,14 @@
     Opts.EnvIncPath = Env;
 
   // Add language specific environment paths.
-  if (Lang.CPlusPlus && Lang.ObjC1) {
-    if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.CPlusPlus) {
-    if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.ObjC1) {
-    if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else {
-    if (const char *Env = getenv("C_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  }
+  if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
+    Opts.ObjCXXEnvIncPath = Env;
+  if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
+    Opts.CXXEnvIncPath = Env;
+  if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
+  if (const char *Env = getenv("C_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
 
   if (!nobuiltininc)
     Opts.BuiltinIncludePath = BuiltinIncludePath;
diff --git a/tools/clang-cc/Options.h b/tools/clang-cc/Options.h
index 0b67da3..9a2fd9d 100644
--- a/tools/clang-cc/Options.h
+++ b/tools/clang-cc/Options.h
@@ -40,8 +40,7 @@
 void InitializeFrontendOptions(FrontendOptions &Opts);
 
 void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                   llvm::StringRef BuiltinIncludePath,
-                                   const LangOptions &Lang);
+                                   llvm::StringRef BuiltinIncludePath);
 
 void InitializeLangOptions(LangOptions &Options,
                            FrontendOptions::InputKind LK,
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index aea9774..fb397d5 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -52,7 +52,7 @@
 using namespace clang;
 
 //===----------------------------------------------------------------------===//
-// Utility Methods
+// Main driver
 //===----------------------------------------------------------------------===//
 
 std::string GetBuiltinIncludePath(const char *Argv0) {
@@ -74,9 +74,14 @@
   return P.str();
 }
 
-//===----------------------------------------------------------------------===//
-// Main driver
-//===----------------------------------------------------------------------===//
+static void LLVMErrorHandler(void *UserData, const std::string &Message) {
+  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
+
+  Diags.Report(diag::err_fe_error_backend) << Message;
+
+  // We cannot recover from llvm errors.
+  exit(1);
+}
 
 /// ClangFrontendTimer - The front-end activities should charge time to it with
 /// TimeRegion.  The -ftime-report option controls whether this will do
@@ -144,15 +149,6 @@
   }
 }
 
-static void LLVMErrorHandler(void *UserData, const std::string &Message) {
-  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
-
-  Diags.Report(diag::err_fe_error_backend) << Message;
-
-  // We cannot recover from llvm errors.
-  exit(1);
-}
-
 static TargetInfo *
 ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags,
                             const char *Argv0, bool &IsAST) {
@@ -194,8 +190,7 @@
 
   // Initialize the header search options.
   InitializeHeaderSearchOptions(Opts.getHeaderSearchOpts(),
-                                GetBuiltinIncludePath(Argv0),
-                                Opts.getLangOpts());
+                                GetBuiltinIncludePath(Argv0));
 
   // Initialize the other preprocessor options.
   InitializePreprocessorOptions(Opts.getPreprocessorOpts());
