[flang-commits] [clang] [flang] [Flang] RFC: Add support for -w option 1/n (PR #90420)
Kiran Chandramohan via flang-commits
flang-commits at lists.llvm.org
Tue May 7 12:45:29 PDT 2024
https://github.com/kiranchandramohan updated https://github.com/llvm/llvm-project/pull/90420
>From 78e91d2d84638ded51267c5e0720cc1d1d4d773b Mon Sep 17 00:00:00 2001
From: Kiran Chandramohan <kiran.chandramohan at arm.com>
Date: Fri, 26 Apr 2024 09:26:11 +0000
Subject: [PATCH 1/2] [Flang][Driver] Add support for -w option 1/n
Add support for the -w option to switch OFF all Flang
warnings. This patch only supports switching OFF the
frontend warnings.
TODO : Support for MLIR, LLVM and Driver warnings.
TODO : Support interactions between -w, -pedantic, -Wall
---
clang/include/clang/Driver/Options.td | 2 +-
clang/lib/Driver/ToolChains/Flang.cpp | 4 ++++
.../flang/Frontend/CompilerInvocation.h | 8 +++++++
flang/lib/Frontend/CompilerInvocation.cpp | 10 ++++++++
flang/test/Driver/w-option.f90 | 23 +++++++++++++++++++
5 files changed, 46 insertions(+), 1 deletion(-)
create mode 100644 flang/test/Driver/w-option.f90
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 2c319ba38a2985..734ae7833f5c35 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5703,7 +5703,7 @@ def whatsloaded : Flag<["-"], "whatsloaded">;
def why_load : Flag<["-"], "why_load">;
def whyload : Flag<["-"], "whyload">, Alias<why_load>;
def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">,
- Visibility<[ClangOption, CC1Option]>,
+ Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
MarshallingInfoFlag<DiagnosticOpts<"IgnoreWarnings">>;
def x : JoinedOrSeparate<["-"], "x">,
Flags<[NoXarchOption]>,
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index 8955b9fb653c2a..436a9c418a5f93 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -748,6 +748,10 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA,
// Add other compile options
addOtherOptions(Args, CmdArgs);
+ // Disable all warnings
+ // TODO: Handle interactions between -w, -pedantic, -Wall, -WOption
+ Args.AddLastArg(CmdArgs, options::OPT_w);
+
// Forward flags for OpenMP. We don't do this if the current action is an
// device offloading action other than OpenMP.
if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ,
diff --git a/flang/include/flang/Frontend/CompilerInvocation.h b/flang/include/flang/Frontend/CompilerInvocation.h
index 4924d090eaf9c0..0fefaecfe4f06f 100644
--- a/flang/include/flang/Frontend/CompilerInvocation.h
+++ b/flang/include/flang/Frontend/CompilerInvocation.h
@@ -114,8 +114,10 @@ class CompilerInvocation : public CompilerInvocationBase {
// Fortran Dialect options
Fortran::common::IntrinsicTypeDefaultKinds defaultKinds;
+ // Fortran Warning options
bool enableConformanceChecks = false;
bool enableUsageChecks = false;
+ bool disableWarnings = false;
/// Used in e.g. unparsing to dump the analyzed rather than the original
/// parse-tree objects.
@@ -197,6 +199,9 @@ class CompilerInvocation : public CompilerInvocationBase {
bool &getEnableUsageChecks() { return enableUsageChecks; }
const bool &getEnableUsageChecks() const { return enableUsageChecks; }
+ bool &getDisableWarnings() { return disableWarnings; }
+ const bool &getDisableWarnings() const { return disableWarnings; }
+
Fortran::parser::AnalyzedObjectsAsFortran &getAsFortran() {
return asFortran;
}
@@ -226,6 +231,9 @@ class CompilerInvocation : public CompilerInvocationBase {
// Enables the usage checks
void setEnableUsageChecks() { enableUsageChecks = true; }
+ // Disables all Warnings
+ void setDisableWarnings() { disableWarnings = true; }
+
/// Useful setters
void setArgv0(const char *dir) { argv0 = dir; }
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index f1b7b53975398e..4318286e74152e 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -975,6 +975,11 @@ static bool parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
res.setEnableConformanceChecks();
res.setEnableUsageChecks();
}
+
+ // -w
+ if (args.hasArg(clang::driver::options::OPT_w))
+ res.setDisableWarnings();
+
// -std=f2018
// TODO: Set proper options when more fortran standards
// are supported.
@@ -1403,6 +1408,11 @@ void CompilerInvocation::setFortranOpts() {
if (getEnableUsageChecks())
fortranOptions.features.WarnOnAllUsage();
+
+ if (getDisableWarnings()) {
+ fortranOptions.features.DisableAllNonstandardWarnings();
+ fortranOptions.features.DisableAllUsageWarnings();
+ }
}
std::unique_ptr<Fortran::semantics::SemanticsContext>
diff --git a/flang/test/Driver/w-option.f90 b/flang/test/Driver/w-option.f90
new file mode 100644
index 00000000000000..d1524059cace6f
--- /dev/null
+++ b/flang/test/Driver/w-option.f90
@@ -0,0 +1,23 @@
+! RUN: %flang -c %s 2>&1 | FileCheck %s
+! RUN: %flang -c -w %s 2>&1 | FileCheck --allow-empty %s -check-prefix=CHECK-W
+! RUN: %flang -c -pedantic %s 2>&1 | FileCheck %s -check-prefixes=CHECK,CHECK-PORT
+! RUN: %flang -c -pedantic -w %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=CHECK-W,CHECK-PORT-W
+! RUN: %flang -c -w -pedantic %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=CHECK-W,CHECK-PORT-W
+! CHECK: warning: Label '40' is in a construct that should not be used as a branch target here
+! CHECK: warning: Label '50' is in a construct that should not be used as a branch target here
+! CHECK-W-NOT: warning
+! CHECK-PORT: portability: Statement function 'sf1' should not contain an array constructor
+! CHECK-PORT-W-NOT: portability
+
+subroutine sub01(n)
+ integer n
+ GOTO (40,50,60) n
+ if (n .eq. 1) then
+40 print *, "xyz"
+50 end if
+60 continue
+end subroutine sub01
+
+subroutine sub02
+ sf1(n) = sum([(j,j=1,n)])
+end subroutine sub02
>From facbbc32905a1b81776187397e1f5ab378b66134 Mon Sep 17 00:00:00 2001
From: Kiran Chandramohan <kiran.chandramohan at arm.com>
Date: Tue, 7 May 2024 19:44:47 +0000
Subject: [PATCH 2/2] Address review comments and rebase
---
flang/test/Driver/w-option.f90 | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/flang/test/Driver/w-option.f90 b/flang/test/Driver/w-option.f90
index d1524059cace6f..e34cddaab373a1 100644
--- a/flang/test/Driver/w-option.f90
+++ b/flang/test/Driver/w-option.f90
@@ -1,13 +1,21 @@
-! RUN: %flang -c %s 2>&1 | FileCheck %s
-! RUN: %flang -c -w %s 2>&1 | FileCheck --allow-empty %s -check-prefix=CHECK-W
-! RUN: %flang -c -pedantic %s 2>&1 | FileCheck %s -check-prefixes=CHECK,CHECK-PORT
-! RUN: %flang -c -pedantic -w %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=CHECK-W,CHECK-PORT-W
-! RUN: %flang -c -w -pedantic %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=CHECK-W,CHECK-PORT-W
-! CHECK: warning: Label '40' is in a construct that should not be used as a branch target here
-! CHECK: warning: Label '50' is in a construct that should not be used as a branch target here
-! CHECK-W-NOT: warning
-! CHECK-PORT: portability: Statement function 'sf1' should not contain an array constructor
-! CHECK-PORT-W-NOT: portability
+! Test the default setting. Emit warnings only.
+! RUN: %flang -c %s 2>&1 | FileCheck %s -check-prefix=DEFAULT
+
+! Test that the warnings are not generated with `-w` option.
+! RUN: %flang -c -w %s 2>&1 | FileCheck --allow-empty %s -check-prefix=WARNING
+
+! Test that warnings are portability messages are generated.
+! RUN: %flang -c -pedantic %s 2>&1 | FileCheck %s -check-prefixes=DEFAULT,PORTABILITY
+
+! Test that warnings and portability messages are not generated.
+! TODO: Support the last flag wins behaviour.
+! RUN: %flang -c -pedantic -w %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=WARNING,PORTABILITY-WARNING
+! RUN: %flang -c -w -pedantic %s 2>&1 | FileCheck --allow-empty %s -check-prefixes=WARNING,PORTABILITY-WARNING
+! DEFAULT: warning: Label '40' is in a construct that should not be used as a branch target here
+! DEFAULT: warning: Label '50' is in a construct that should not be used as a branch target here
+! WARNING-NOT: warning
+! PORTABILITY: portability: Statement function 'sf1' should not contain an array constructor
+! PORTABILITY-WARNING-NOT: portability
subroutine sub01(n)
integer n
More information about the flang-commits
mailing list