Index: lib/Parse/ParseDeclCXX.cpp
===================================================================
--- lib/Parse/ParseDeclCXX.cpp	(revision 206186)
+++ lib/Parse/ParseDeclCXX.cpp	(working copy)
@@ -3189,20 +3189,14 @@
   }
 }
 
+/// \brief Returns true if the attribute is a known C++-style attribute which
+/// is either in the global scope (implying that it is a standards-based
+/// attribute), or is in the clang scope (implying it is one of our attributes).
 static bool IsBuiltInOrStandardCXX11Attribute(IdentifierInfo *AttrName,
                                                IdentifierInfo *ScopeName) {
-  switch (AttributeList::getKind(AttrName, ScopeName,
-                                 AttributeList::AS_CXX11)) {
-  case AttributeList::AT_CarriesDependency:
-  case AttributeList::AT_Deprecated:
-  case AttributeList::AT_FallThrough:
-  case AttributeList::AT_CXX11NoReturn: {
-    return true;
-  }
-
-  default:
-    return false;
-  }
+  return (!ScopeName || ScopeName->getName().equals("clang")) &&
+         AttributeList::getKind(AttrName, ScopeName, AttributeList::AS_CXX11) !=
+             AttributeList::UnknownAttribute;
 }
 
 /// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.
@@ -3340,10 +3334,8 @@
       }
     }
 
-    bool StandardAttr = IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName);
     bool AttrParsed = false;
-
-    if (StandardAttr &&
+    if (IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName) &&
         !SeenAttrs.insert(std::make_pair(AttrName, AttrLoc)).second)
       Diag(AttrLoc, diag::err_cxx11_attribute_repeated)
           << AttrName << SourceRange(SeenAttrs[AttrName]);
