Browse Source

Instantiate exception specifications before reading

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1295/head
Dimitar Dobrev 6 years ago committed by João Matos
parent
commit
8b0aecef9b
  1. 940
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs
  2. 940
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs
  3. 29
      src/CppParser/Parser.cpp

940
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs

File diff suppressed because it is too large Load Diff

940
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs

File diff suppressed because it is too large Load Diff

29
src/CppParser/Parser.cpp

@ -366,6 +366,9 @@ void Parser::Setup()
} }
} }
if (TC)
delete TC;
// Enable preprocessing record. // Enable preprocessing record.
PPOpts.DetailedRecord = true; PPOpts.DetailedRecord = true;
@ -3120,9 +3123,7 @@ void Parser::MarkValidity(Function* F)
auto FD = static_cast<FunctionDecl*>(F->originalPtr); auto FD = static_cast<FunctionDecl*>(F->originalPtr);
if (!FD->getTemplateInstantiationPattern() || if (!FD->getTemplateInstantiationPattern() || !FD->isExternallyVisible())
!FD->isExternallyVisible() ||
c->getSourceManager().isInSystemHeader(FD->getBeginLoc()))
return; return;
auto existingClient = c->getSema().getDiagnostics().getClient(); auto existingClient = c->getSema().getDiagnostics().getClient();
@ -3269,20 +3270,17 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F,
if (auto FTSI = FD->getTemplateSpecializationInfo()) if (auto FTSI = FD->getTemplateSpecializationInfo())
F->specializationInfo = WalkFunctionTemplateSpec(FTSI, F); F->specializationInfo = WalkFunctionTemplateSpec(FTSI, F);
if (FD->isDependentContext())
return;
const CXXMethodDecl* MD; const CXXMethodDecl* MD;
if ((MD = dyn_cast<CXXMethodDecl>(FD)) && !MD->isStatic() && if (FD->isDependentContext() ||
!HasLayout(cast<CXXRecordDecl>(MD->getDeclContext()))) (MD = dyn_cast<CXXMethodDecl>(FD)) && !MD->isStatic() &&
return; !HasLayout(cast<CXXRecordDecl>(MD->getDeclContext())) ||
!CanCheckCodeGenInfo(c->getSema(), FD->getReturnType().getTypePtr()) ||
if (!CanCheckCodeGenInfo(c->getSema(), FD->getReturnType().getTypePtr())) std::any_of(FD->parameters().begin(), FD->parameters().end(),
return; [this](auto* P) { return !CanCheckCodeGenInfo(c->getSema(), P->getType().getTypePtr()); }))
{
for (const auto& P : FD->parameters()) F->qualifiedType = GetQualifiedType(FD->getType(), &FTL);
if (!CanCheckCodeGenInfo(c->getSema(), P->getType().getTypePtr()))
return; return;
}
auto& CGInfo = GetCodeGenFunctionInfo(codeGenTypes, FD); auto& CGInfo = GetCodeGenFunctionInfo(codeGenTypes, FD);
F->isReturnIndirect = CGInfo.getReturnInfo().isIndirect() || F->isReturnIndirect = CGInfo.getReturnInfo().isIndirect() ||
@ -3296,6 +3294,7 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F,
} }
MarkValidity(F); MarkValidity(F);
F->qualifiedType = GetQualifiedType(FD->getType(), &FTL);
} }
Function* Parser::WalkFunction(const clang::FunctionDecl* FD, bool IsDependent, Function* Parser::WalkFunction(const clang::FunctionDecl* FD, bool IsDependent,

Loading…
Cancel
Save