forked from OSchip/llvm-project
[flang][driver] Add options for -Werror
With the option given, warnings are treated as error. Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D98657
This commit is contained in:
parent
af3a839c70
commit
7416e8a843
|
@ -746,7 +746,7 @@ def Wundef_prefix_EQ : CommaJoined<["-"], "Wundef-prefix=">, Group<W_value_Group
|
||||||
MarshallingInfoStringVector<DiagnosticOpts<"UndefPrefixes">>;
|
MarshallingInfoStringVector<DiagnosticOpts<"UndefPrefixes">>;
|
||||||
def Wwrite_strings : Flag<["-"], "Wwrite-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
|
def Wwrite_strings : Flag<["-"], "Wwrite-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
|
||||||
def Wno_write_strings : Flag<["-"], "Wno-write-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
|
def Wno_write_strings : Flag<["-"], "Wno-write-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
|
||||||
def W_Joined : Joined<["-"], "W">, Group<W_Group>, Flags<[CC1Option, CoreOption]>,
|
def W_Joined : Joined<["-"], "W">, Group<W_Group>, Flags<[CC1Option, CoreOption, FC1Option, FlangOption]>,
|
||||||
MetaVarName<"<warning>">, HelpText<"Enable the specified warning">;
|
MetaVarName<"<warning>">, HelpText<"Enable the specified warning">;
|
||||||
def Xanalyzer : Separate<["-"], "Xanalyzer">,
|
def Xanalyzer : Separate<["-"], "Xanalyzer">,
|
||||||
HelpText<"Pass <arg> to the static analyzer">, MetaVarName<"<arg>">,
|
HelpText<"Pass <arg> to the static analyzer">, MetaVarName<"<arg>">,
|
||||||
|
|
|
@ -44,7 +44,7 @@ void Flang::AddOtherOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
|
||||||
Args.AddAllArgs(CmdArgs,
|
Args.AddAllArgs(CmdArgs,
|
||||||
{options::OPT_module_dir, options::OPT_fdebug_module_writer,
|
{options::OPT_module_dir, options::OPT_fdebug_module_writer,
|
||||||
options::OPT_fintrinsic_modules_path, options::OPT_pedantic,
|
options::OPT_fintrinsic_modules_path, options::OPT_pedantic,
|
||||||
options::OPT_std_EQ});
|
options::OPT_std_EQ, options::OPT_W_Joined});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Flang::ConstructJob(Compilation &C, const JobAction &JA,
|
void Flang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
|
|
|
@ -71,6 +71,8 @@ class CompilerInvocation : public CompilerInvocationBase {
|
||||||
|
|
||||||
bool debugModuleDir_ = false;
|
bool debugModuleDir_ = false;
|
||||||
|
|
||||||
|
bool warnAsErr_ = false;
|
||||||
|
|
||||||
// Fortran Dialect options
|
// Fortran Dialect options
|
||||||
Fortran::common::IntrinsicTypeDefaultKinds defaultKinds_;
|
Fortran::common::IntrinsicTypeDefaultKinds defaultKinds_;
|
||||||
|
|
||||||
|
@ -98,6 +100,9 @@ public:
|
||||||
bool &debugModuleDir() { return debugModuleDir_; }
|
bool &debugModuleDir() { return debugModuleDir_; }
|
||||||
const bool &debugModuleDir() const { return debugModuleDir_; }
|
const bool &debugModuleDir() const { return debugModuleDir_; }
|
||||||
|
|
||||||
|
bool &warnAsErr() { return warnAsErr_; }
|
||||||
|
const bool &warnAsErr() const { return warnAsErr_; }
|
||||||
|
|
||||||
bool &enableConformanceChecks() { return EnableConformanceChecks_; }
|
bool &enableConformanceChecks() { return EnableConformanceChecks_; }
|
||||||
const bool &enableConformanceChecks() const {
|
const bool &enableConformanceChecks() const {
|
||||||
return EnableConformanceChecks_;
|
return EnableConformanceChecks_;
|
||||||
|
@ -126,6 +131,8 @@ public:
|
||||||
|
|
||||||
void SetDebugModuleDir(bool flag) { debugModuleDir_ = flag; }
|
void SetDebugModuleDir(bool flag) { debugModuleDir_ = flag; }
|
||||||
|
|
||||||
|
void SetWarnAsErr(bool flag) { warnAsErr_ = flag; }
|
||||||
|
|
||||||
/// Set the Fortran options to predifined defaults. These defaults are
|
/// Set the Fortran options to predifined defaults. These defaults are
|
||||||
/// consistend with f18/f18.cpp.
|
/// consistend with f18/f18.cpp.
|
||||||
// TODO: We should map frontendOpts_ to parserOpts_ instead. For that, we
|
// TODO: We should map frontendOpts_ to parserOpts_ instead. For that, we
|
||||||
|
|
|
@ -350,6 +350,26 @@ static void parseSemaArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parses all diagnostics related arguments and populates the variables
|
||||||
|
/// options accordingly.
|
||||||
|
static void parseDiagArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
|
||||||
|
clang::DiagnosticsEngine &diags) {
|
||||||
|
// -Werror option
|
||||||
|
// TODO: Currently throws a Diagnostic for anything other than -W<error>,
|
||||||
|
// this has to change when other -W<opt>'s are supported.
|
||||||
|
if (args.hasArg(clang::driver::options::OPT_W_Joined)) {
|
||||||
|
if (args.getLastArgValue(clang::driver::options::OPT_W_Joined)
|
||||||
|
.equals("error")) {
|
||||||
|
res.SetWarnAsErr(true);
|
||||||
|
} else {
|
||||||
|
const unsigned diagID =
|
||||||
|
diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
|
||||||
|
"Only `-Werror` is supported currently.");
|
||||||
|
diags.Report(diagID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Parses all Dialect related arguments and populates the variables
|
/// Parses all Dialect related arguments and populates the variables
|
||||||
/// options accordingly.
|
/// options accordingly.
|
||||||
static void parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
|
static void parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
|
||||||
|
@ -445,6 +465,8 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &res,
|
||||||
parseSemaArgs(res, args, diags);
|
parseSemaArgs(res, args, diags);
|
||||||
// Parse dialect arguments
|
// Parse dialect arguments
|
||||||
parseDialectArgs(res, args, diags);
|
parseDialectArgs(res, args, diags);
|
||||||
|
// Parse diagnostic arguments
|
||||||
|
parseDiagArgs(res, args, diags);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -574,5 +596,6 @@ void CompilerInvocation::setSemanticsOpts(
|
||||||
|
|
||||||
semanticsContext_->set_moduleDirectory(moduleDir())
|
semanticsContext_->set_moduleDirectory(moduleDir())
|
||||||
.set_searchDirectories(fortranOptions.searchDirectories)
|
.set_searchDirectories(fortranOptions.searchDirectories)
|
||||||
.set_warnOnNonstandardUsage(enableConformanceChecks());
|
.set_warnOnNonstandardUsage(enableConformanceChecks())
|
||||||
|
.set_warningsAreErrors(warnAsErr());
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,9 @@ bool PrescanAction::BeginSourceFileAction(CompilerInstance &c1) {
|
||||||
// Prescan. In case of failure, report and return.
|
// Prescan. In case of failure, report and return.
|
||||||
ci.parsing().Prescan(currentInputPath, parserOptions);
|
ci.parsing().Prescan(currentInputPath, parserOptions);
|
||||||
|
|
||||||
if (ci.parsing().messages().AnyFatalError()) {
|
if (!ci.parsing().messages().empty() &&
|
||||||
|
(ci.invocation().warnAsErr() ||
|
||||||
|
ci.parsing().messages().AnyFatalError())) {
|
||||||
const unsigned diagID = ci.diagnostics().getCustomDiagID(
|
const unsigned diagID = ci.diagnostics().getCustomDiagID(
|
||||||
clang::DiagnosticsEngine::Error, "Could not scan %0");
|
clang::DiagnosticsEngine::Error, "Could not scan %0");
|
||||||
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
||||||
|
@ -97,7 +99,9 @@ bool PrescanAndSemaAction::BeginSourceFileAction(CompilerInstance &c1) {
|
||||||
// Prescan. In case of failure, report and return.
|
// Prescan. In case of failure, report and return.
|
||||||
ci.parsing().Prescan(currentInputPath, parserOptions);
|
ci.parsing().Prescan(currentInputPath, parserOptions);
|
||||||
|
|
||||||
if (ci.parsing().messages().AnyFatalError()) {
|
if (!ci.parsing().messages().empty() &&
|
||||||
|
(ci.invocation().warnAsErr() ||
|
||||||
|
ci.parsing().messages().AnyFatalError())) {
|
||||||
const unsigned diagID = ci.diagnostics().getCustomDiagID(
|
const unsigned diagID = ci.diagnostics().getCustomDiagID(
|
||||||
clang::DiagnosticsEngine::Error, "Could not scan %0");
|
clang::DiagnosticsEngine::Error, "Could not scan %0");
|
||||||
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
||||||
|
@ -109,7 +113,9 @@ bool PrescanAndSemaAction::BeginSourceFileAction(CompilerInstance &c1) {
|
||||||
// Parse. In case of failure, report and return.
|
// Parse. In case of failure, report and return.
|
||||||
ci.parsing().Parse(llvm::outs());
|
ci.parsing().Parse(llvm::outs());
|
||||||
|
|
||||||
if (ci.parsing().messages().AnyFatalError()) {
|
if (!ci.parsing().messages().empty() &&
|
||||||
|
(ci.invocation().warnAsErr() ||
|
||||||
|
ci.parsing().messages().AnyFatalError())) {
|
||||||
unsigned diagID = ci.diagnostics().getCustomDiagID(
|
unsigned diagID = ci.diagnostics().getCustomDiagID(
|
||||||
clang::DiagnosticsEngine::Error, "Could not parse %0");
|
clang::DiagnosticsEngine::Error, "Could not parse %0");
|
||||||
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
||||||
|
@ -264,7 +270,9 @@ void DebugMeasureParseTreeAction::ExecuteAction() {
|
||||||
// Parse. In case of failure, report and return.
|
// Parse. In case of failure, report and return.
|
||||||
ci.parsing().Parse(llvm::outs());
|
ci.parsing().Parse(llvm::outs());
|
||||||
|
|
||||||
if (ci.parsing().messages().AnyFatalError()) {
|
if (!ci.parsing().messages().empty() &&
|
||||||
|
(ci.invocation().warnAsErr() ||
|
||||||
|
ci.parsing().messages().AnyFatalError())) {
|
||||||
unsigned diagID = ci.diagnostics().getCustomDiagID(
|
unsigned diagID = ci.diagnostics().getCustomDiagID(
|
||||||
clang::DiagnosticsEngine::Error, "Could not parse %0");
|
clang::DiagnosticsEngine::Error, "Could not parse %0");
|
||||||
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
ci.diagnostics().Report(diagID) << GetCurrentFileOrBufferName();
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
! CHECK-NEXT: -std=<value> Language standard to compile for
|
! CHECK-NEXT: -std=<value> Language standard to compile for
|
||||||
! CHECK-NEXT: -U <macro> Undefine macro <macro>
|
! CHECK-NEXT: -U <macro> Undefine macro <macro>
|
||||||
! CHECK-NEXT: --version Print version information
|
! CHECK-NEXT: --version Print version information
|
||||||
|
! CHECK-NEXT: -W<warning> Enable the specified warning
|
||||||
! CHECK-NEXT: -Xflang <arg> Pass <arg> to the flang compiler
|
! CHECK-NEXT: -Xflang <arg> Pass <arg> to the flang compiler
|
||||||
|
|
||||||
!-------------------------------------------------------------
|
!-------------------------------------------------------------
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
! HELP-NEXT: -std=<value> Language standard to compile for
|
! HELP-NEXT: -std=<value> Language standard to compile for
|
||||||
! HELP-NEXT: -U <macro> Undefine macro <macro>
|
! HELP-NEXT: -U <macro> Undefine macro <macro>
|
||||||
! HELP-NEXT: --version Print version information
|
! HELP-NEXT: --version Print version information
|
||||||
|
! HELP-NEXT: -W<warning> Enable the specified warning
|
||||||
! HELP-NEXT: -Xflang <arg> Pass <arg> to the flang compiler
|
! HELP-NEXT: -Xflang <arg> Pass <arg> to the flang compiler
|
||||||
|
|
||||||
!-------------------------------------------------------------
|
!-------------------------------------------------------------
|
||||||
|
@ -103,6 +104,7 @@
|
||||||
! HELP-FC1-NEXT: -test-io Run the InputOuputTest action. Use for development and testing only.
|
! HELP-FC1-NEXT: -test-io Run the InputOuputTest action. Use for development and testing only.
|
||||||
! HELP-FC1-NEXT: -U <macro> Undefine macro <macro>
|
! HELP-FC1-NEXT: -U <macro> Undefine macro <macro>
|
||||||
! HELP-FC1-NEXT: --version Print version information
|
! HELP-FC1-NEXT: --version Print version information
|
||||||
|
! HELP-FC1-NEXT: -W<warning> Enable the specified warning
|
||||||
|
|
||||||
!---------------
|
!---------------
|
||||||
! EXPECTED ERROR
|
! EXPECTED ERROR
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
! Ensure argument -Werror work as expected, this file checks for the functional correctness for
|
||||||
|
! actions that extend the PrescanAndSemaAction, particularly for Semantic warnings/errors.
|
||||||
|
! Multiple RUN lines are added to make sure that the behavior is consistent across multiple actions.
|
||||||
|
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -std=f2018 -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -std=f2018 -Werror -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -std=f2018 -Werror -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -std=f2018 -Werror -fdebug-unparse %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -std=f2018 -Werror -fdebug-dump-symbols %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
|
||||||
|
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -std=f2018 %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -std=f2018 -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -std=f2018 -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -std=f2018 -fdebug-unparse %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -std=f2018 -fdebug-dump-symbols %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITH -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITH: Could not parse
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITHOUT -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITHOUT-NOT: Could not parse
|
||||||
|
|
||||||
|
#ifndef _OM_NO_IOSTREAM
|
||||||
|
#ifdef WIN32
|
||||||
|
#ifndef USE_IOSTREAM
|
||||||
|
#define USE_IOSTREAM
|
||||||
|
#endif USE_IOSTREAM
|
||||||
|
#endif WIN32
|
|
@ -0,0 +1,25 @@
|
||||||
|
! Ensure argument -Werror work as expected, this file checks for the functional correctness for
|
||||||
|
! actions that extend the PrescanAction
|
||||||
|
! Multiple RUN lines are added to make sure that the behavior is consistent across multiple actions.
|
||||||
|
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -E -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -fdebug-dump-parsing-log -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -fdebug-dump-provenance -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -fdebug-measure-parse-tree -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -E %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-dump-parsing-log %s 2>&1 | FileCheck %s --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-dump-provenance %s 2>&1 | FileCheck %s --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-measure-parse-tree %s 2>&1 | FileCheck %s --check-prefix=WITHOUT
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITH -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITH: Could not scan
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITHOUT -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITHOUT-NOT: Could not scan
|
||||||
|
|
||||||
|
1 continue
|
||||||
|
end
|
|
@ -0,0 +1,31 @@
|
||||||
|
! Ensure argument -Werror work as expected, this file checks for the functional correctness for
|
||||||
|
! actions that extend the PrescanAndSemaAction, particularly for Semantic warnings/errors.
|
||||||
|
! Multiple RUN lines are added to make sure that the behavior is consistent across multiple actions.
|
||||||
|
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Werror %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Werror -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Werror -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Werror -fdebug-unparse %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Werror -fdebug-dump-symbols %s 2>&1 | FileCheck %s --check-prefix=WITH
|
||||||
|
|
||||||
|
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-unparse %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
! RUN: %flang_fc1 -fsyntax-only -fdebug-dump-symbols %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITH -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITH: Semantic errors in
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITHOUT -Werror
|
||||||
|
!-----------------------------------------
|
||||||
|
! WITHOUT-NOT: Semantic errors in
|
||||||
|
|
||||||
|
PROGRAM werror
|
||||||
|
REAL, DIMENSION(20, 10) :: A
|
||||||
|
FORALL (J=1:N) A(I, I) = 1
|
||||||
|
END PROGRAM werror
|
|
@ -0,0 +1,9 @@
|
||||||
|
! Ensure that only argument -Werror is supported.
|
||||||
|
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -Wall %s 2>&1 | FileCheck %s --check-prefix=WRONG
|
||||||
|
! RUN: not %flang_fc1 -fsyntax-only -WX %s 2>&1 | FileCheck %s --check-prefix=WRONG
|
||||||
|
|
||||||
|
!-----------------------------------------
|
||||||
|
! EXPECTED OUTPUT WITH -W<opt>
|
||||||
|
!-----------------------------------------
|
||||||
|
! WRONG: Only `-Werror` is supported currently.
|
|
@ -511,8 +511,14 @@ int main(int argc, char *const argv[]) {
|
||||||
} else if (arg == "-fopenmp") {
|
} else if (arg == "-fopenmp") {
|
||||||
options.features.Enable(Fortran::common::LanguageFeature::OpenMP);
|
options.features.Enable(Fortran::common::LanguageFeature::OpenMP);
|
||||||
predefinitions.emplace_back("_OPENMP", "201511");
|
predefinitions.emplace_back("_OPENMP", "201511");
|
||||||
} else if (arg == "-Werror") {
|
} else if (arg.find("-W") != std::string::npos) {
|
||||||
driver.warningsAreErrors = true;
|
if (arg == "-Werror")
|
||||||
|
driver.warningsAreErrors = true;
|
||||||
|
else {
|
||||||
|
// Only -Werror is supported currently
|
||||||
|
llvm::errs() << "Only `-Werror` is supported currently.\n";
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
} else if (arg == "-ed") {
|
} else if (arg == "-ed") {
|
||||||
options.features.Enable(Fortran::common::LanguageFeature::OldDebugLines);
|
options.features.Enable(Fortran::common::LanguageFeature::OldDebugLines);
|
||||||
} else if (arg == "-E") {
|
} else if (arg == "-E") {
|
||||||
|
|
Loading…
Reference in New Issue