diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-10-12 05:31:40 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-10-12 05:31:40 +0000 |
commit | 3b1a77969d26f78b22b4bbcdc64d06854cf5a78b (patch) | |
tree | 876d808ced8c1ba3f7ce4db14840ad0f429f1280 /clang/lib/Serialization | |
parent | 6522c717193d1d52cd153028899ea904390d43f5 (diff) | |
download | bcm5719-llvm-3b1a77969d26f78b22b4bbcdc64d06854cf5a78b.tar.gz bcm5719-llvm-3b1a77969d26f78b22b4bbcdc64d06854cf5a78b.zip |
[PCH] We only need to record C++ overridden methods once for the canonical decl.
llvm-svn: 165788
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTWriterDecl.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index 7bf16be76ef..2270e8f6210 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -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; } |