@@ -869,11 +869,12 @@ GetOrCreateTemplateSpecialization(ASTContext &context, Sema &sema,
869869 if (specializationDecl->getInstantiatedFrom().isNull()) {
870870 // InstantiateClassTemplateSpecialization returns true if it finds an
871871 // error.
872- DXVERIFY_NOMSG(false ==
873- sema.InstantiateClassTemplateSpecialization(
874- NoLoc, specializationDecl,
875- TemplateSpecializationKind::TSK_ImplicitInstantiation,
876- true));
872+ bool errorFound = sema.InstantiateClassTemplateSpecialization(
873+ NoLoc, specializationDecl,
874+ TemplateSpecializationKind::TSK_ImplicitInstantiation, true);
875+ // Template specialization is suppressed if a fatal error has already been
876+ // registered so don't assert in such cases.
877+ DXVERIFY_NOMSG(sema.Diags.hasFatalErrorOccurred() || !errorFound);
877878 }
878879 return context.getTemplateSpecializationType(
879880 TemplateName(templateDecl), templateArgs.data(), templateArgs.size(),
@@ -885,11 +886,12 @@ GetOrCreateTemplateSpecialization(ASTContext &context, Sema &sema,
885886 templateDecl, templateArgsForDecl.data(), templateArgsForDecl.size(),
886887 nullptr);
887888 // InstantiateClassTemplateSpecialization returns true if it finds an error.
888- DXVERIFY_NOMSG(false ==
889- sema.InstantiateClassTemplateSpecialization(
890- NoLoc, specializationDecl,
891- TemplateSpecializationKind::TSK_ImplicitInstantiation,
892- true));
889+ bool errorFound = sema.InstantiateClassTemplateSpecialization(
890+ NoLoc, specializationDecl,
891+ TemplateSpecializationKind::TSK_ImplicitInstantiation, true);
892+ // Template specialization is suppressed if a fatal error has already been
893+ // registered so don't assert in such cases.
894+ DXVERIFY_NOMSG(sema.Diags.hasFatalErrorOccurred() || !errorFound);
893895 templateDecl->AddSpecialization(specializationDecl, InsertPos);
894896 specializationDecl->setImplicit(true);
895897
@@ -937,7 +939,9 @@ static QualType GetOrCreateMatrixSpecialization(
937939 DeclContext::lookup_result lookupResult =
938940 matrixSpecializationType->getAsCXXRecordDecl()->lookup(
939941 DeclarationName(&context.Idents.get(StringRef("h"))));
940- DXASSERT(!lookupResult.empty(),
942+ // Template specialization is suppressed if a fatal error has been registered
943+ // so only assert if lookup failed for some other reason.
944+ DXASSERT(sema->Diags.hasFatalErrorOccurred() || !lookupResult.empty(),
941945 "otherwise matrix handle cannot be looked up");
942946#endif
943947
@@ -972,7 +976,9 @@ GetOrCreateVectorSpecialization(ASTContext &context, Sema *sema,
972976 DeclContext::lookup_result lookupResult =
973977 vectorSpecializationType->getAsCXXRecordDecl()->lookup(
974978 DeclarationName(&context.Idents.get(StringRef("h"))));
975- DXASSERT(!lookupResult.empty(),
979+ // Template specialization is suppressed if a fatal error has been registered
980+ // so only assert if lookup failed for some other reason.
981+ DXASSERT(sema->Diags.hasFatalErrorOccurred() || !lookupResult.empty(),
976982 "otherwise vector handle cannot be looked up");
977983#endif
978984
@@ -1028,7 +1034,9 @@ GetOrCreateNodeOutputRecordSpecialization(ASTContext &context, Sema *sema,
10281034 DeclContext::lookup_result lookupResult =
10291035 specializationType->getAsCXXRecordDecl()->lookup(
10301036 DeclarationName(&context.Idents.get(StringRef("h"))));
1031- DXASSERT(!lookupResult.empty(),
1037+ // Template specialization is suppressed if a fatal error has been registered
1038+ // so only assert if lookup failed for some other reason.
1039+ DXASSERT(sema->Diags.hasFatalErrorOccurred() || !lookupResult.empty(),
10321040 "otherwise *NodeOutputRecords handle cannot be looked up");
10331041#endif
10341042
0 commit comments