From 851ec5e44c0477a4f61839160eb657f9c97d1812 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 2 Oct 2021 16:14:25 +0300 Subject: [PATCH] Fix instantiation of specializations not to crash Signed-off-by: Dimitar Dobrev --- src/CppParser/Parser.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 822973b4..a65fd1d4 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -3051,10 +3051,14 @@ void Parser::CompleteIfSpecializationType(const clang::QualType& QualType) SemaDiagnostics->Decl = CTS; c->getSema().getDiagnostics().setClient(SemaDiagnostics.get(), false); + Scope Scope(nullptr, Scope::ScopeFlags::ClassScope, c->getSema().getDiagnostics()); + c->getSema().TUScope = &Scope; + c->getSema().InstantiateClassTemplateSpecialization(CTS->getBeginLoc(), CTS, TSK_ImplicitInstantiation, false); c->getSema().getDiagnostics().setClient(existingClient, false); + c->getSema().TUScope = nullptr; auto CT = WalkClassTemplate(CTS->getSpecializedTemplate()); auto USR = GetDeclUSR(CTS); @@ -3178,6 +3182,9 @@ void Parser::MarkValidity(Function* F) SemaDiagnostics->Decl = FD; c->getSema().getDiagnostics().setClient(SemaDiagnostics.get(), false); + Scope Scope(nullptr, Scope::ScopeFlags::FnScope, c->getSema().getDiagnostics()); + c->getSema().TUScope = &Scope; + c->getSema().InstantiateFunctionDefinition(FD->getBeginLoc(), FD, /*Recursive*/true); F->isInvalid = FD->isInvalidDecl(); @@ -3188,6 +3195,7 @@ void Parser::MarkValidity(Function* F) } c->getSema().getDiagnostics().setClient(existingClient, false); + c->getSema().TUScope = nullptr; } void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F)