[PCH] We only need to record C++ overridden methods once for the canonical decl.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 12 Oct 2012 05:31:40 +0000 (05:31 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 12 Oct 2012 05:31:40 +0000 (05:31 +0000)
llvm-svn: 165788

clang/lib/Serialization/ASTWriterDecl.cpp

index 7bf16be..2270e8f 100644 (file)
@@ -948,11 +948,16 @@ void ASTDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) {
 
 void ASTDeclWriter::VisitCXXMethodDecl(CXXMethodDecl *D) {
   VisitFunctionDecl(D);
-  Record.push_back(D->size_overridden_methods());
-  for (CXXMethodDecl::method_iterator
-         I = D->begin_overridden_methods(), E = D->end_overridden_methods();
-         I != E; ++I)
-    Writer.AddDeclRef(*I, Record);
+  if (D->isCanonicalDecl()) {
+    Record.push_back(D->size_overridden_methods());
+    for (CXXMethodDecl::method_iterator
+           I = D->begin_overridden_methods(), E = D->end_overridden_methods();
+           I != E; ++I)
+      Writer.AddDeclRef(*I, Record);
+  } else {
+    // We only need to record overridden methods once for the canonical decl.
+    Record.push_back(0);
+  }
   Code = serialization::DECL_CXX_METHOD;
 }