nik added a comment. OK, to skip all function bodies in the preamble except for template functions and functions within a template class, I've amended the previous diff with:
- a/lib/Parse/ParseCXXInlineMethods.cpp +++ b/lib/Parse/ParseCXXInlineMethods.cpp @@ -102,9 +102,14 @@ NamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, } if (SkipFunctionBodies != SkipFunctionBodiesKind::None && + TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate && + !isa<ClassTemplateDecl>(getCurrentClass().TagOrTemplate) && + !isa<ClassTemplateSpecializationDecl>(getCurrentClass().TagOrTemplate) && + !isa<ClassTemplatePartialSpecializationDecl>( + getCurrentClass().TagOrTemplate) && (!FnD || Actions.canSkipFunctionBody(FnD)) && trySkippingFunctionBody()) { Actions.ActOnSkippedFunctionBody(FnD); I'm not sure whether this covers all cases, but here are the timing in relation to others: Reparse for skipping all function bodies: 0.2s Reparse for skipping all function bodies except template functions (previous patch set, not handling function bodies within template classes): 0.27s Reparse for skipping all function bodies with the diff above (fixing another case + ignoring function bodies in templates): 0.44s Reparse without skipping any function bodies in the preamble: 0.51s As I said, I'm not sure whether this diff covered all cases, but it can get only more worse than 0.44s :) That's enough for me to stop here. Repository: rC Clang https://reviews.llvm.org/D45815 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits