@@ -2844,6 +2844,22 @@ Parameter* Parser::WalkParameter(const clang::ParmVarDecl* PVD,
28442844 return P;
28452845}
28462846
2847+ void Parser::SetBody (const clang::FunctionDecl* FD, Function* F)
2848+ {
2849+ F->Body = GetFunctionBody (FD);
2850+ F->isInline = FD->isInlined ();
2851+ if (!F->Body .empty () && F->isInline )
2852+ return ;
2853+ for (const auto & R : FD->redecls ())
2854+ {
2855+ if (F->Body .empty ())
2856+ F->Body = GetFunctionBody (R);
2857+ F->isInline |= R->isInlined ();
2858+ if (!F->Body .empty () && F->isInline )
2859+ break ;
2860+ }
2861+ }
2862+
28472863void Parser::WalkFunction (const clang::FunctionDecl* FD, Function* F,
28482864 bool IsDependent)
28492865{
@@ -2859,18 +2875,10 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F,
28592875 F->_namespace = NS;
28602876 F->isConstExpr = FD->isConstexpr ();
28612877 F->isVariadic = FD->isVariadic ();
2862- F->isInline = FD->isInlined ();
2863- for (const auto & R : FD->redecls ())
2864- {
2865- if (R->isInlined ())
2866- {
2867- F->isInline = true ;
2868- break ;
2869- }
2870- }
28712878 F->isDependent = FD->isDependentContext ();
28722879 F->isPure = FD->isPure ();
28732880 F->isDeleted = FD->isDeleted ();
2881+ SetBody (FD, F);
28742882 if (auto InstantiatedFrom = FD->getTemplateInstantiationPattern ())
28752883 F->instantiatedFrom = static_cast <Function*>(WalkDeclaration (InstantiatedFrom));
28762884
@@ -3920,7 +3928,7 @@ ParserResult* Parser::ParseHeader(const std::vector<std::string>& SourceFiles, P
39203928 clang::DiagnosticConsumer* client = c->getDiagnostics ().getClient ();
39213929 client->BeginSourceFile (c->getLangOpts (), &c->getPreprocessor ());
39223930
3923- ParseAST (c->getSema (), /* PrintStats= */ false , /* SkipFunctionBodies= */ true );
3931+ ParseAST (c->getSema ());
39243932
39253933 client->EndSourceFile ();
39263934
0 commit comments