Add -verify-all-substitution-maps frontend flag

This commit is contained in:
Joe Groff
2020-03-11 15:23:34 -07:00
parent 23f0d8ccbc
commit d06b839c03
4 changed files with 17 additions and 3 deletions

View File

@@ -322,6 +322,9 @@ namespace swift {
/// `@differentiable` declaration attribute, etc.
bool EnableExperimentalDifferentiableProgramming = false;
/// Enable verification when every SubstitutionMap is constructed.
bool VerifyAllSubstitutionMaps = false;
/// Sets the target we are building for and updates platform conditions
/// to match.
///
@@ -512,6 +515,7 @@ namespace swift {
/// Enable constraint solver support for experimental
/// operator protocol designator feature.
bool SolverEnableOperatorDesignatedTypes = false;
};
} // end namespace swift

View File

@@ -549,6 +549,9 @@ def sil_merge_partial_modules : Flag<["-"], "sil-merge-partial-modules">,
def sil_verify_all : Flag<["-"], "sil-verify-all">,
HelpText<"Verify SIL after each transform">;
def verify_all_substitution_maps : Flag<["-"], "verify-all-substitution-maps">,
HelpText<"Verify all SubstitutionMaps on construction">;
def sil_debug_serialization : Flag<["-"], "sil-debug-serialization">,
HelpText<"Do not eliminate functions in Mandatory Inlining/SILCombine dead "
"functions. (for debugging only)">;

View File

@@ -56,7 +56,12 @@ SubstitutionMap::SubstitutionMap(
GenericSignature genericSig,
ArrayRef<Type> replacementTypes,
ArrayRef<ProtocolConformanceRef> conformances)
: storage(Storage::get(genericSig, replacementTypes, conformances)) { }
: storage(Storage::get(genericSig, replacementTypes, conformances)) {
#ifndef NDEBUG
if (genericSig->getASTContext().LangOpts.VerifyAllSubstitutionMaps)
verify();
#endif
}
ArrayRef<Type> SubstitutionMap::getReplacementTypesBuffer() const {
return storage ? storage->getReplacementTypes() : ArrayRef<Type>();

View File

@@ -565,6 +565,8 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
Target.isOSDarwin());
Opts.EnableSILOpaqueValues |= Args.hasArg(OPT_enable_sil_opaque_values);
Opts.VerifyAllSubstitutionMaps |= Args.hasArg(OPT_verify_all_substitution_maps);
Opts.UseDarwinPreStableABIBit =
(Target.isMacOSX() && Target.isMacOSXVersionLT(10, 14, 4)) ||
(Target.isiOS() && Target.isOSVersionLT(12, 2)) ||