diff --git include/clang/AST/RecursiveASTVisitor.h include/clang/AST/RecursiveASTVisitor.h
index ae4ff4b..a50db86 100644
--- include/clang/AST/RecursiveASTVisitor.h
+++ include/clang/AST/RecursiveASTVisitor.h
@@ -1546,10 +1546,12 @@ DEF_TRAVERSE_DECL(UnresolvedUsingTypenameDecl, {
   })
 
 DEF_TRAVERSE_DECL(EnumDecl, {
-    if (D->getTypeForDecl())
-      TRY_TO(TraverseType(QualType(D->getTypeForDecl(), 0)));
-
     TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc()));
+    if (D->getIntegerTypeSourceInfo())
+      TRY_TO(TraverseTypeLoc(D->getIntegerTypeSourceInfo()->getTypeLoc()));
+    // We shouldn't traverse D->getTypeForDecl(); it's a result of
+    // declaring the type, not something that was written in the
+    // source.
     // The enumerators are already traversed by
     // decls_begin()/decls_end().
   })
diff --git unittests/Tooling/RecursiveASTVisitorTest.cpp unittests/Tooling/RecursiveASTVisitorTest.cpp
index a68a869..8dd67ee 100644
--- unittests/Tooling/RecursiveASTVisitorTest.cpp
+++ unittests/Tooling/RecursiveASTVisitorTest.cpp
@@ -460,4 +460,12 @@ TEST(RecursiveASTVisitor, VisitsCompoundLiteralType) {
       TypeLocVisitor::Lang_C));
 }
 
+TEST(RecursiveASTVisitor, VisitsEnumType) {
+  TypeLocVisitor Visitor;
+  Visitor.ExpectMatch("int", 1, 10);
+  EXPECT_TRUE(Visitor.runOver(
+      "enum e : int;",
+      TypeLocVisitor::Lang_CXX11));
+}
+
 } // end namespace clang
diff --git unittests/Tooling/TestVisitor.h unittests/Tooling/TestVisitor.h
index 8333c24..6380ca9 100644
--- unittests/Tooling/TestVisitor.h
+++ unittests/Tooling/TestVisitor.h
@@ -40,7 +40,7 @@ public:
 
   virtual ~TestVisitor() { }
 
-  enum Language { Lang_C, Lang_CXX };
+  enum Language { Lang_C, Lang_CXX, Lang_CXX11 };
 
   /// \brief Runs the current AST visitor over the given code.
   bool runOver(StringRef Code, Language L = Lang_CXX) {
@@ -48,6 +48,7 @@ public:
     switch (L) {
       case Lang_C: Args.push_back("-std=c99"); break;
       case Lang_CXX: Args.push_back("-std=c++98"); break;
+      case Lang_CXX11: Args.push_back("-std=c++11"); break;
     }
     return tooling::runToolOnCodeWithArgs(CreateTestAction(), Code, Args);
   }
