Browse Source

Removed some redundant completion of types now that we complete all of them anyway.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
cpp_module_crash
Dimitar Dobrev 9 years ago
parent
commit
c4332f2c8a
  1. 19
      src/CppParser/Parser.cpp

19
src/CppParser/Parser.cpp

@ -2229,8 +2229,7 @@ static const clang::CodeGen::CGFunctionInfo& GetCodeGenFuntionInfo(
return CodeGenTypes->arrangeFunctionDeclaration(FD); return CodeGenTypes->arrangeFunctionDeclaration(FD);
} }
static bool CanCheckCodeGenInfo(clang::Sema& S, static bool CanCheckCodeGenInfo(clang::Sema& S, const clang::Type* Ty)
const clang::Type* Ty, bool IsMicrosoftABI)
{ {
bool CheckCodeGenInfo = true; bool CheckCodeGenInfo = true;
@ -2240,15 +2239,6 @@ static bool CanCheckCodeGenInfo(clang::Sema& S,
if (auto RD = Ty->getAsCXXRecordDecl()) if (auto RD = Ty->getAsCXXRecordDecl())
CheckCodeGenInfo &= RD->hasDefinition(); CheckCodeGenInfo &= RD->hasDefinition();
// Lock in the MS inheritance model if we have a member pointer to a class,
// else we get an assertion error inside Clang's codegen machinery.
if (IsMicrosoftABI)
{
if (auto MPT = Ty->getAs<clang::MemberPointerType>())
if (!MPT->isDependentType())
S.RequireCompleteType(clang::SourceLocation(), clang::QualType(Ty, 0), 1);
}
return CheckCodeGenInfo; return CheckCodeGenInfo;
} }
@ -2377,13 +2367,10 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F,
F->HasThisReturn = HasThisReturn; F->HasThisReturn = HasThisReturn;
bool IsMicrosoftABI = C->getASTContext().getTargetInfo().getCXXABI().isMicrosoft();
bool CheckCodeGenInfo = !FD->isDependentContext() && !FD->isInvalidDecl(); bool CheckCodeGenInfo = !FD->isDependentContext() && !FD->isInvalidDecl();
CheckCodeGenInfo &= CanCheckCodeGenInfo(C->getSema(), FD->getReturnType().getTypePtr(), CheckCodeGenInfo &= CanCheckCodeGenInfo(C->getSema(), FD->getReturnType().getTypePtr());
IsMicrosoftABI);
for (auto I = FD->param_begin(), E = FD->param_end(); I != E; ++I) for (auto I = FD->param_begin(), E = FD->param_end(); I != E; ++I)
CheckCodeGenInfo &= CanCheckCodeGenInfo(C->getSema(), (*I)->getType().getTypePtr(), CheckCodeGenInfo &= CanCheckCodeGenInfo(C->getSema(), (*I)->getType().getTypePtr());
IsMicrosoftABI);
if (CheckCodeGenInfo) if (CheckCodeGenInfo)
{ {

Loading…
Cancel
Save