Index: include/clang/AST/RecursiveASTVisitor.h
===================================================================
--- include/clang/AST/RecursiveASTVisitor.h	(revision 161818)
+++ include/clang/AST/RecursiveASTVisitor.h	(working copy)
@@ -799,7 +799,7 @@ bool RecursiveASTVisitor<Derived>::Trave
   if (TypeSourceInfo *TInfo = Init->getTypeSourceInfo())
     TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
 
-  if (Init->isWritten())
+  if (Init->isWritten() || getDerived().shouldVisitImplicitCode())
     TRY_TO(TraverseStmt(Init->getInit()));
   return true;
 }
Index: unittests/Tooling/RecursiveASTVisitorTest.cpp
===================================================================
--- unittests/Tooling/RecursiveASTVisitorTest.cpp	(revision 161818)
+++ unittests/Tooling/RecursiveASTVisitorTest.cpp	(working copy)
@@ -385,4 +385,35 @@ TEST(RecursiveASTVisitor, VisitsImplicit
       "int main() { Simple s; Simple t(s); }\n"));
 }
 
+// \brief A visitor that visits implicit code and matches CXXConstructExpr.
+//
+// The name recorded for the match is the name of the class whose constructor
+// is invoked by the CXXConstructExpr, not the name of the class whose
+// constructor the CXXConstructExpr is contained in.
+class ConstructExprVisitor
+    : public ExpectedLocationVisitor<ConstructExprVisitor> {
+public:
+  bool shouldVisitImplicitCode() const { return true; }
+
+  bool VisitCXXConstructExpr(CXXConstructExpr* Expr) {
+    if (const CXXConstructorDecl* Ctor = Expr->getConstructor()) {
+      if (const CXXRecordDecl* Class = Ctor->getParent()) {
+        Match(Class->getName(), Expr->getLocation());
+      }
+    }
+    return true;
+  }
+};
+
+TEST(RecursiveASTVisitor, VisitsImplicitMemberInitializations) {
+  ConstructExprVisitor Visitor;
+  Visitor.ExpectMatch("WithCtor", 2, 8);
+  // Note: Clang lazily instantiates implicit declarations, so we need
+  // to use them in order to force them to appear in the AST.
+  EXPECT_TRUE(Visitor.runOver(
+      "struct WithCtor { WithCtor(); }; \n"
+      "struct Simple { Simple(); WithCtor w; }; \n"
+      "int main() { Simple s; Simple t(s); }\n"));
+}
+
 } // end namespace clang
