Index: lib/Frontend/InitHeaderSearch.cpp
===================================================================
--- lib/Frontend/InitHeaderSearch.cpp	(revision 133343)
+++ lib/Frontend/InitHeaderSearch.cpp	(working copy)
@@ -90,7 +90,8 @@
 
   // AddDefaultCPlusPlusIncludePaths -  Add paths that should be searched when
   //  compiling c++.
-  void AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple);
+  void AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple,
+                                       const HeaderSearchOptions &HSOpts);
 
   /// AddDefaultSystemIncludePaths - Adds the default system include paths so
   ///  that e.g. stdio.h is found.
@@ -552,9 +553,12 @@
     break;
   case llvm::Triple::MinGW32:
     // FIXME: We should be aware of i686-w64-mingw32.
-    if (triple.getArch() == llvm::Triple::x86_64)
-      AddPath("c:/mingw/x86_64-w64-mingw32/include",
-              System, true, false, false);
+    
+    if (triple.getArch() == llvm::Triple::x86_64) {
+      llvm::sys::Path P(HSOpts.ResourceDir);
+      P.appendComponent("../../../x86_64-w64-mingw32/include");
+      AddPath(P.str(), System, true, false, false);
+    }
     AddPath("/mingw/include", System, true, false, false);
     AddPath("c:/mingw/include", System, true, false, false);
     break;
@@ -579,7 +583,7 @@
 }
 
 void InitHeaderSearch::
-AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple) {
+AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOptions &HSOpts) {
   llvm::Triple::OSType os = triple.getOS();
   llvm::StringRef CxxIncludeRoot(CXX_INCLUDE_ROOT);
   if (CxxIncludeRoot != "") {
@@ -641,10 +645,25 @@
   case llvm::Triple::MinGW32:
     // FIXME: We should be aware of i686-w64-mingw32.
     if (triple.getArch() == llvm::Triple::x86_64) {
-      // mingw-w64-20110207
-      AddMinGW64CXXPaths("c:/mingw/x86_64-w64-mingw32/include/c++/4.5.3");
-      // mingw-w64-20101129
-      AddMinGW64CXXPaths("c:/mingw/x86_64-w64-mingw32/include/c++/4.5.2");
+      // "sysroot" is assumed.
+      llvm::sys::Path P(HSOpts.ResourceDir);
+      P.appendComponent("../../../include/c++/4.5.0");
+      AddMinGW64CXXPaths(P.str());
+      P = HSOpts.ResourceDir;
+      P.appendComponent("../../../include/c++/4.5.1");
+      AddMinGW64CXXPaths(P.str());
+      P = HSOpts.ResourceDir;
+      P.appendComponent("../../../include/c++/4.5.2");
+      AddMinGW64CXXPaths(P.str());
+      P = HSOpts.ResourceDir;
+      P.appendComponent("../../../include/c++/4.6.0");
+      AddMinGW64CXXPaths(P.str());
+      P = HSOpts.ResourceDir;
+      P.appendComponent("../../../include/c++/4.6.1");
+      AddMinGW64CXXPaths(P.str());
+      P = HSOpts.ResourceDir;
+      P.appendComponent("../../../include/c++/4.6.2");
+      AddMinGW64CXXPaths(P.str());
     }
     // Try gcc 4.5.2 (MSYS)
     AddMinGWCPlusPlusIncludePaths("/mingw/lib/gcc", "mingw32", "4.5.2");
@@ -921,7 +940,7 @@
                                                     const llvm::Triple &triple,
                                             const HeaderSearchOptions &HSOpts) {
   if (Lang.CPlusPlus && HSOpts.UseStandardCXXIncludes)
-    AddDefaultCPlusPlusIncludePaths(triple);
+    AddDefaultCPlusPlusIncludePaths(triple, HSOpts);
 
   AddDefaultCIncludePaths(triple, HSOpts);
 
