Index: lib/Sema/SemaDecl.cpp
===================================================================
--- lib/Sema/SemaDecl.cpp	(revision 160453)
+++ lib/Sema/SemaDecl.cpp	(working copy)
@@ -10411,10 +10411,16 @@
   //   name different from T:
   //     - every enumerator of every member of class T that is an enumerated 
   //       type
+  //
+  // C++ [dcl.enum]p10:
+  // Each enum-name and each unscoped enumerator is declared in the scope that 
+  // immediately contains the enum-specifier. Each scoped enumerator is declared 
+  // in the scope of the enumeration.
   if (CXXRecordDecl *Record
                       = dyn_cast<CXXRecordDecl>(
                              TheEnumDecl->getDeclContext()->getRedeclContext()))
-    if (Record->getIdentifier() && Record->getIdentifier() == Id)
+    if (!TheEnumDecl->isScoped() && 
+        Record->getIdentifier() && Record->getIdentifier() == Id)
       Diag(IdLoc, diag::err_member_name_of_class) << Id;
   
   EnumConstantDecl *New =
Index: test/SemaCXX/enum-scoped.cpp
===================================================================
--- test/SemaCXX/enum-scoped.cpp	(revision 160453)
+++ test/SemaCXX/enum-scoped.cpp	(working copy)
@@ -245,3 +245,10 @@
   int m = g<int>();
   int n = g<short>(); // expected-note {{here}}
 }
+
+namespace pr13128 {
+  // This should compile cleanly
+  class C {
+    enum class E { C };
+  };
+}
