summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-12 05:31:40 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-12 05:31:40 +0000
commit3b1a77969d26f78b22b4bbcdc64d06854cf5a78b (patch)
tree876d808ced8c1ba3f7ce4db14840ad0f429f1280 /clang/lib/Serialization
parent6522c717193d1d52cd153028899ea904390d43f5 (diff)
downloadbcm5719-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.cpp15
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;
}
OpenPOWER on IntegriCloud