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

Reply via email to