Index: lib/Frontend/InitHeaderSearch.cpp
===================================================================
--- lib/Frontend/InitHeaderSearch.cpp	(revision 123938)
+++ lib/Frontend/InitHeaderSearch.cpp	(working copy)
@@ -718,6 +718,13 @@
                                 "i686-pc-linux-gnu", "", "", triple);
     AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
                                 "x86_64-unknown-linux-gnu", "", "", triple);
+
+		// Arch Linux 2010.05
+		AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.5.2",
+																"i686-pc-linux-gnu", "", "", triple);
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.5.2",
+                                "x86_64-unknown-linux-gnu", "", "", triple);
+
     // Gentoo x86 2010.0 stable
     AddGnuCPlusPlusIncludePaths(
       "/usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include/g++-v4",
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp	(revision 123938)
+++ lib/Driver/ToolChains.cpp	(working copy)
@@ -1205,6 +1205,7 @@
 /// Linux toolchain (very bare-bones at the moment).
 
 enum LinuxDistro {
+  ArchLinux,
   DebianLenny,
   DebianSqueeze,
   Exherbo,
@@ -1218,6 +1219,10 @@
   UnknownDistro
 };
 
+static bool IsArchLinux(enum LinuxDistro Distro) {
+  return Distro == ArchLinux;
+}
+
 static bool IsFedora(enum LinuxDistro Distro) {
   return Distro == Fedora13 || Distro == Fedora14;
 }
@@ -1298,6 +1303,9 @@
   }
 
   bool Exists;
+  if (!llvm::sys::fs::exists("/etc/arch-release", Exists) && Exists)
+    return ArchLinux;
+
   if (!llvm::sys::fs::exists("/etc/exherbo-release", Exists) && Exists)
     return Exherbo;
 
@@ -1367,8 +1375,8 @@
       GccTriple = "i586-suse-linux";
   }
 
-  const char* GccVersions[] = {"4.5.1", "4.5", "4.4.5", "4.4.4", "4.4.3", "4.4",
-                               "4.3.4", "4.3.3", "4.3.2"};
+  const char* GccVersions[] = {"4.5.2", "4.5.1", "4.5", "4.4.5", "4.4.4", 
+                               "4.4.3", "4.4", "4.3.4", "4.3.3", "4.3.2"};
   std::string Base = "";
   for (unsigned i = 0; i < sizeof(GccVersions)/sizeof(char*); ++i) {
     std::string Suffix = GccTriple + "/" + GccVersions[i];
