Browse Source

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

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

24
src/CppParser/Parser.cpp

@ -2640,6 +2640,8 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments()); TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
do
{
if (LocValid) if (LocValid)
{ {
TypeLoc UTL, ETL, ITL; TypeLoc UTL, ETL, ITL;
@ -2659,21 +2661,17 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
{ {
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>(); TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
} break;
else
{
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,6 +2686,8 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments()); TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
do
{
if (LocValid) if (LocValid)
{ {
TypeLoc UTL, ETL, ITL; TypeLoc UTL, ETL, ITL;
@ -2707,21 +2707,17 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
{ {
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>(); TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL); TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
} break;
else
{
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