Index: lib/Driver/WindowsToolChain.cpp
===================================================================
--- lib/Driver/WindowsToolChain.cpp	(revision 150897)
+++ lib/Driver/WindowsToolChain.cpp	(working copy)
@@ -308,18 +308,12 @@
   if (DriverArgs.hasArg(options::OPT_nostdinc))
     return;
 
-  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
-    llvm::sys::Path P(getDriver().ResourceDir);
-    P.appendComponent("include");
-    addSystemInclude(DriverArgs, CC1Args, P.str());
-  }
-
   if (DriverArgs.hasArg(options::OPT_nostdlibinc))
     return;
 
   std::string VSDir;
   std::string WindowsSDKDir;
-
+  bool foundSystemIncludes = false;
 #ifdef _MSC_VER
   // When built with access to the proper Windows APIs, try to actually find
   // the correct include paths first.
@@ -330,19 +324,29 @@
     else
       addSystemInclude(DriverArgs, CC1Args,
                        VSDir + "\\VC\\PlatformSDK\\Include");
-    return;
+    foundSystemIncludes = true;
   }
 #endif // _MSC_VER
 
-  // As a fallback, select default install paths.
-  const StringRef Paths[] = {
-    "C:/Program Files/Microsoft Visual Studio 10.0/VC/include",
-    "C:/Program Files/Microsoft Visual Studio 9.0/VC/include",
-    "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include",
-    "C:/Program Files/Microsoft Visual Studio 8/VC/include",
-    "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
-  };
-  addSystemIncludes(DriverArgs, CC1Args, Paths);
+  if (!foundSystemIncludes) {
+    // As a fallback, select default install paths.
+    const StringRef Paths[] = {
+      "C:/Program Files/Microsoft Visual Studio 10.0/VC/include",
+      "C:/Program Files/Microsoft Visual Studio 9.0/VC/include",
+      "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include",
+      "C:/Program Files/Microsoft Visual Studio 8/VC/include",
+      "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
+    };
+    addSystemIncludes(DriverArgs, CC1Args, Paths);
+  }
+
+  // Add the builtin includes after the platform includes so that any duplicate
+  // names resolve to the SDK before our builtins.
+  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+    llvm::sys::Path P(getDriver().ResourceDir);
+    P.appendComponent("include");
+    addSystemInclude(DriverArgs, CC1Args, P.str());
+  }
 }
 
 void Windows::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
