@@ -869,11 +869,12 @@ GetOrCreateTemplateSpecialization(ASTContext &context, Sema &sema,
869
869
if (specializationDecl->getInstantiatedFrom().isNull()) {
870
870
// InstantiateClassTemplateSpecialization returns true if it finds an
871
871
// 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);
877
878
}
878
879
return context.getTemplateSpecializationType(
879
880
TemplateName(templateDecl), templateArgs.data(), templateArgs.size(),
@@ -885,11 +886,12 @@ GetOrCreateTemplateSpecialization(ASTContext &context, Sema &sema,
885
886
templateDecl, templateArgsForDecl.data(), templateArgsForDecl.size(),
886
887
nullptr);
887
888
// 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);
893
895
templateDecl->AddSpecialization(specializationDecl, InsertPos);
894
896
specializationDecl->setImplicit(true);
895
897
@@ -937,7 +939,9 @@ static QualType GetOrCreateMatrixSpecialization(
937
939
DeclContext::lookup_result lookupResult =
938
940
matrixSpecializationType->getAsCXXRecordDecl()->lookup(
939
941
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(),
941
945
"otherwise matrix handle cannot be looked up");
942
946
#endif
943
947
@@ -972,7 +976,9 @@ GetOrCreateVectorSpecialization(ASTContext &context, Sema *sema,
972
976
DeclContext::lookup_result lookupResult =
973
977
vectorSpecializationType->getAsCXXRecordDecl()->lookup(
974
978
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(),
976
982
"otherwise vector handle cannot be looked up");
977
983
#endif
978
984
@@ -1028,7 +1034,9 @@ GetOrCreateNodeOutputRecordSpecialization(ASTContext &context, Sema *sema,
1028
1034
DeclContext::lookup_result lookupResult =
1029
1035
specializationType->getAsCXXRecordDecl()->lookup(
1030
1036
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(),
1032
1040
"otherwise *NodeOutputRecords handle cannot be looked up");
1033
1041
#endif
1034
1042
0 commit comments