fix -typecheck -verify and experimental features

When using `-enable-experimental-feature` on a non-asserts build,
we only emit an error diagnostic that has no source-line information
and continue to enable the feature.

That doesn't actually prevent use of the experimental feature when
you are passing `-typecheck -verify`, since in diagnostics verification
mode, a diagnostic with an unknown error location is ignored. Thus,
the experimental feature is enabled and run for type-checking, but
the compiler would exit with a zero error code.

This patch takes a hammer to that escape-hatch, forcing an early
non-zero exit the moment an experimental feature is requested. The
error message is output to stderr so that CI and other tools should see
what happened.
This commit is contained in:
Kavon Farvardin
2023-09-22 13:23:06 -07:00
parent d6483ae889
commit a238d3ea17
2 changed files with 3 additions and 7 deletions

View File

@@ -812,9 +812,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
if (auto feature = getExperimentalFeature(value)) {
#ifdef NDEBUG
if (!isFeatureAvailableInProduction(*feature)) {
Diags.diagnose(SourceLoc(),
diag::error_experimental_feature_not_available,
A->getValue());
llvm::errs() << "error: experimental feature '" << A->getValue()
<< "' cannot be enabled in a production compiler\n";
exit(1);
}
#endif