@@ -883,6 +883,11 @@ void GenericSignature::verify() const {
883
883
}
884
884
885
885
void GenericSignature::verify (ArrayRef<Requirement> reqts) const {
886
+ auto dumpAndAbort = [&]() {
887
+ getPointer ()->getRequirementMachine ()->dump (llvm::errs ());
888
+ abort ();
889
+ };
890
+
886
891
auto canSig = getCanonicalSignature ();
887
892
888
893
PrettyStackTraceGenericSignature debugStack (" checking" , canSig);
@@ -903,14 +908,14 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
903
908
llvm::errs () << " Left-hand side must be a type parameter: " ;
904
909
reqt.dump (llvm::errs ());
905
910
llvm::errs () << " \n " ;
906
- abort ();
911
+ dumpAndAbort ();
907
912
}
908
913
909
914
if (!canSig->isReducedType (reqt.getFirstType ())) {
910
915
llvm::errs () << " Left-hand side is not reduced: " ;
911
916
reqt.dump (llvm::errs ());
912
917
llvm::errs () << " \n " ;
913
- abort ();
918
+ dumpAndAbort ();
914
919
}
915
920
}
916
921
@@ -921,28 +926,28 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
921
926
llvm::errs () << " Left hand side is not a generic parameter: " ;
922
927
reqt.dump (llvm::errs ());
923
928
llvm::errs () << " \n " ;
924
- abort ();
929
+ dumpAndAbort ();
925
930
}
926
931
927
932
if (!reqt.getFirstType ()->isRootParameterPack ()) {
928
933
llvm::errs () << " Left hand side is not a parameter pack: " ;
929
934
reqt.dump (llvm::errs ());
930
935
llvm::errs () << " \n " ;
931
- abort ();
936
+ dumpAndAbort ();
932
937
}
933
938
934
939
if (!reqt.getSecondType ()->is <GenericTypeParamType>()) {
935
940
llvm::errs () << " Right hand side is not a generic parameter: " ;
936
941
reqt.dump (llvm::errs ());
937
942
llvm::errs () << " \n " ;
938
- abort ();
943
+ dumpAndAbort ();
939
944
}
940
945
941
946
if (!reqt.getSecondType ()->isRootParameterPack ()) {
942
947
llvm::errs () << " Right hand side is not a parameter pack: " ;
943
948
reqt.dump (llvm::errs ());
944
949
llvm::errs () << " \n " ;
945
- abort ();
950
+ dumpAndAbort ();
946
951
}
947
952
948
953
break ;
@@ -951,7 +956,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
951
956
llvm::errs () << " Right-hand side is not reduced: " ;
952
957
reqt.dump (llvm::errs ());
953
958
llvm::errs () << " \n " ;
954
- abort ();
959
+ dumpAndAbort ();
955
960
}
956
961
break ;
957
962
@@ -977,21 +982,21 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
977
982
llvm::errs () << " Left hand side does not have a reduced parent: " ;
978
983
reqt.dump (llvm::errs ());
979
984
llvm::errs () << " \n " ;
980
- abort ();
985
+ dumpAndAbort ();
981
986
}
982
987
983
988
if (reqt.getSecondType ()->isTypeParameter ()) {
984
989
if (!hasReducedOrConcreteParent (secondType)) {
985
990
llvm::errs () << " Right hand side does not have a reduced parent: " ;
986
991
reqt.dump (llvm::errs ());
987
992
llvm::errs () << " \n " ;
988
- abort ();
993
+ dumpAndAbort ();
989
994
}
990
995
if (compareDependentTypes (firstType, secondType) >= 0 ) {
991
996
llvm::errs () << " Out-of-order type parameters: " ;
992
997
reqt.dump (llvm::errs ());
993
998
llvm::errs () << " \n " ;
994
- abort ();
999
+ dumpAndAbort ();
995
1000
}
996
1001
997
1002
if (component.empty ()) {
@@ -1001,7 +1006,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1001
1006
<< " is out-of-order: " ;
1002
1007
reqt.dump (llvm::errs ());
1003
1008
llvm::errs () << " \n " ;
1004
- abort ();
1009
+ dumpAndAbort ();
1005
1010
}
1006
1011
1007
1012
component.push_back (secondType);
@@ -1010,7 +1015,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1010
1015
llvm::errs () << " Right hand side is not reduced: " ;
1011
1016
reqt.dump (llvm::errs ());
1012
1017
llvm::errs () << " \n " ;
1013
- abort ();
1018
+ dumpAndAbort ();
1014
1019
}
1015
1020
1016
1021
if (component.empty ()) {
@@ -1019,7 +1024,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1019
1024
llvm::errs () << " Inconsistent concrete requirement in equiv. class: " ;
1020
1025
reqt.dump (llvm::errs ());
1021
1026
llvm::errs () << " \n " ;
1022
- abort ();
1027
+ dumpAndAbort ();
1023
1028
}
1024
1029
}
1025
1030
break ;
@@ -1043,7 +1048,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1043
1048
llvm::errs () << " Out-of-order left-hand side: " ;
1044
1049
reqt.dump (llvm::errs ());
1045
1050
llvm::errs () << " \n " ;
1046
- abort ();
1051
+ dumpAndAbort ();
1047
1052
}
1048
1053
1049
1054
// If we have a concrete same-type requirement, we shouldn't have any
@@ -1055,15 +1060,15 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1055
1060
<< " any other requirements: " ;
1056
1061
reqt.dump (llvm::errs ());
1057
1062
llvm::errs () << " \n " ;
1058
- abort ();
1063
+ dumpAndAbort ();
1059
1064
}
1060
1065
}
1061
1066
1062
1067
if (prevReqt.compare (reqt) >= 0 ) {
1063
1068
llvm::errs () << " Out-of-order requirement: " ;
1064
1069
reqt.dump (llvm::errs ());
1065
1070
llvm::errs () << " \n " ;
1066
- abort ();
1071
+ dumpAndAbort ();
1067
1072
}
1068
1073
}
1069
1074
@@ -1079,11 +1084,11 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1079
1084
1080
1085
if (protos.size () != canonicalProtos.size ()) {
1081
1086
llvm::errs () << " Redundant conformance requirements in signature\n " ;
1082
- abort ();
1087
+ dumpAndAbort ();
1083
1088
}
1084
1089
if (!std::equal (protos.begin (), protos.end (), canonicalProtos.begin ())) {
1085
1090
llvm::errs () << " Out-of-order conformance requirements\n " ;
1086
- abort ();
1091
+ dumpAndAbort ();
1087
1092
}
1088
1093
}
1089
1094
@@ -1095,7 +1100,7 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
1095
1100
llvm::errs () << " Reduced type: " << pair.first << " \n " ;
1096
1101
llvm::errs () << " Left hand side of first requirement: "
1097
1102
<< pair.second .front () << " \n " ;
1098
- abort ();
1103
+ dumpAndAbort ();
1099
1104
}
1100
1105
}
1101
1106
}
0 commit comments