Browse Source

Parser.cpp: use nullptr TypeLoc fallthrough when semantics are unexpected

pull/1819/head
Deadlocklogic 2 years ago
parent
commit
b3b04e5a7e
  1. 112
      src/CppParser/Parser.cpp

112
src/CppParser/Parser.cpp

@ -2640,40 +2640,38 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments()); TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
if (LocValid) do
{ {
TypeLoc UTL, ETL, ITL; if (LocValid)
if (TL->getTypeLocClass() == TypeLoc::Qualified)
{
UTL = TL->getUnqualifiedLoc();
TL = &UTL;
}
if (TL->getTypeLocClass() == TypeLoc::Elaborated)
{ {
ETL = TL->getAs<ElaboratedTypeLoc>(); TypeLoc UTL, ETL, ITL;
ITL = ETL.getNextTypeLoc(); if (TL->getTypeLocClass() == TypeLoc::Qualified)
TL = &ITL; {
} UTL = TL->getUnqualifiedLoc();
TL = &UTL;
}
if (TL->getTypeLocClass() == TypeLoc::Elaborated)
{
ETL = TL->getAs<ElaboratedTypeLoc>();
ITL = ETL.getNextTypeLoc();
TL = &ITL;
}
if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization) if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization)
{ {
DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>(); DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
} break;
else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization) }
{ else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization)
TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>(); {
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
} TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
else break;
{ }
llvm_unreachable("Unexpected semantics");
} }
}
else
{
TST->Arguments = WalkTemplateArgumentList(&TArgs, (TemplateSpecializationTypeLoc*)nullptr); TST->Arguments = WalkTemplateArgumentList(&TArgs, (TemplateSpecializationTypeLoc*)nullptr);
} } while (false);
Ty = TST; Ty = TST;
break; break;
@ -2688,40 +2686,38 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments()); TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
if (LocValid) do
{ {
TypeLoc UTL, ETL, ITL; if (LocValid)
if (TL->getTypeLocClass() == TypeLoc::Qualified)
{
UTL = TL->getUnqualifiedLoc();
TL = &UTL;
}
if (TL->getTypeLocClass() == TypeLoc::Elaborated)
{ {
ETL = TL->getAs<ElaboratedTypeLoc>(); TypeLoc UTL, ETL, ITL;
ITL = ETL.getNextTypeLoc(); if (TL->getTypeLocClass() == TypeLoc::Qualified)
TL = &ITL; {
} UTL = TL->getUnqualifiedLoc();
TL = &UTL;
}
if (TL->getTypeLocClass() == TypeLoc::Elaborated)
{
ETL = TL->getAs<ElaboratedTypeLoc>();
ITL = ETL.getNextTypeLoc();
TL = &ITL;
}
if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization) if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization)
{ {
DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>(); DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
} break;
else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization) }
{ else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization)
TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>(); {
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
} TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
else break;
{ }
llvm_unreachable("Unexpected semantics");
} }
}
else
{
TST->Arguments = WalkTemplateArgumentList(&TArgs, (DependentTemplateSpecializationTypeLoc*)nullptr); TST->Arguments = WalkTemplateArgumentList(&TArgs, (DependentTemplateSpecializationTypeLoc*)nullptr);
} } while (false);
Ty = TST; Ty = TST;
break; break;

Loading…
Cancel
Save