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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits