Browse Source

Simplify the marking of invalid functions

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1557/head
Dimitar Dobrev 5 years ago
parent
commit
9f7098b8ff
  1. 27
      src/CppParser/Parser.cpp
  2. 1
      src/CppParser/Parser.h

27
src/CppParser/Parser.cpp

@ -3140,29 +3140,6 @@ static bool IsInvalid(clang::Stmt* Body, std::unordered_set<clang::Stmt*>& Bodie
return false; return false;
} }
std::stack<clang::Scope> Parser::GetScopesFor(clang::FunctionDecl* FD)
{
using namespace clang;
std::stack<DeclContext*> Contexts;
DeclContext* DC = FD;
while (DC)
{
Contexts.push(DC);
DC = DC->getParent();
}
std::stack<Scope> Scopes;
while (!Contexts.empty())
{
Scope S(Scopes.empty() ? 0 : &Scopes.top(),
Scope::ScopeFlags::DeclScope, c->getDiagnostics());
S.setEntity(Contexts.top());
Scopes.push(S);
Contexts.pop();
}
return Scopes;
}
void Parser::MarkValidity(Function* F) void Parser::MarkValidity(Function* F)
{ {
using namespace clang; using namespace clang;
@ -3177,12 +3154,8 @@ void Parser::MarkValidity(Function* F)
SemaDiagnostics->Decl = FD; SemaDiagnostics->Decl = FD;
c->getSema().getDiagnostics().setClient(SemaDiagnostics.get(), false); c->getSema().getDiagnostics().setClient(SemaDiagnostics.get(), false);
auto TUScope = c->getSema().TUScope;
std::stack<Scope> Scopes = GetScopesFor(FD);
c->getSema().TUScope = &Scopes.top();
c->getSema().InstantiateFunctionDefinition(FD->getBeginLoc(), FD, c->getSema().InstantiateFunctionDefinition(FD->getBeginLoc(), FD,
/*Recursive*/true); /*Recursive*/true);
c->getSema().TUScope = TUScope;
F->isInvalid = FD->isInvalidDecl(); F->isInvalid = FD->isInvalidDecl();
if (!F->isInvalid) if (!F->isInvalid)
{ {

1
src/CppParser/Parser.h

@ -137,7 +137,6 @@ private:
Parameter* WalkParameter(const clang::ParmVarDecl* PVD, Parameter* WalkParameter(const clang::ParmVarDecl* PVD,
const clang::SourceLocation& ParamStartLoc); const clang::SourceLocation& ParamStartLoc);
void SetBody(const clang::FunctionDecl* FD, Function* F); void SetBody(const clang::FunctionDecl* FD, Function* F);
std::stack<clang::Scope> GetScopesFor(clang::FunctionDecl* FD);
void MarkValidity(Function* F); void MarkValidity(Function* F);
void WalkFunction(const clang::FunctionDecl* FD, Function* F); void WalkFunction(const clang::FunctionDecl* FD, Function* F);
int GetAlignAs(const clang::AlignedAttr* alignedAttr); int GetAlignAs(const clang::AlignedAttr* alignedAttr);

Loading…
Cancel
Save