[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan edited https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan ready_for_review https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan updated https://github.com/llvm/llvm-project/pull/90420 >From a250de8647af85e51e3eb7bf87c6a881a6de5ca0 Mon Sep 17 00:00:00 2001 From: Kiran Chandramohan Date: Fri, 26 Apr 2024 09:26:11 + Subject: [PATCH] [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/driver-help-hidden.f90 | 1 + flang/test/Driver/w-option.f90| 23 +++ 6 files changed, 47 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 938d5358eeda6b..716de6dc933d3b 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5698,7 +5698,7 @@ def whatsloaded : Flag<["-"], "whatsloaded">; def why_load : Flag<["-"], "why_load">; def whyload : Flag<["-"], "whyload">, Alias; def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, MarshallingInfoFlag>; 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 diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 706b2cb6c2452c..3f8a0f534a880d 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -162,6 +162,7 @
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan updated https://github.com/llvm/llvm-project/pull/90420 >From a250de8647af85e51e3eb7bf87c6a881a6de5ca0 Mon Sep 17 00:00:00 2001 From: Kiran Chandramohan Date: Fri, 26 Apr 2024 09:26:11 + Subject: [PATCH] [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/driver-help-hidden.f90 | 1 + flang/test/Driver/w-option.f90| 23 +++ 6 files changed, 47 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 938d5358eeda6b..716de6dc933d3b 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5698,7 +5698,7 @@ def whatsloaded : Flag<["-"], "whatsloaded">; def why_load : Flag<["-"], "why_load">; def whyload : Flag<["-"], "whyload">, Alias; def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, MarshallingInfoFlag>; 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 diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 706b2cb6c2452c..3f8a0f534a880d 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -162,6 +162,7 @
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
kiranchandramohan wrote: Thanks @jeffhammond. I will wait for @klausler to submit https://github.com/llvm/llvm-project/pull/90518 which will make it easier for the driver and will provide more fine-grained control of warnings. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/jeffhammond approved this pull request. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
jeffhammond wrote: Sorry, I bumped the "Ready for Review" button on accident. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
llvmbot wrote: @llvm/pr-subscribers-clang-driver Author: Kiran Chandramohan (kiranchandramohan) Changes A quick and dirty implementation of the -w option. Filters the warning messages generated by the Frontend during emission. TODO: Add more tests TODO: Ignore MLIR, LLVM IR, Driver and pedantic Semantics warnings TODO: Check whether we can avoid generating rather than filtering the warning options in the frontend TODO: Check whether a ShouldWarn should precede each warning in the frontend as in the case of portability warnings. TODO: Check the clang implementation of -w --- Full diff: https://github.com/llvm/llvm-project/pull/90420.diff 11 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+1-1) - (modified) clang/lib/Driver/ToolChains/Flang.cpp (+2) - (modified) flang/include/flang/Frontend/FrontendOptions.h (+5-1) - (modified) flang/include/flang/Parser/message.h (+1-1) - (modified) flang/include/flang/Semantics/semantics.h (+1-1) - (modified) flang/lib/Frontend/CompilerInvocation.cpp (+3) - (modified) flang/lib/Frontend/FrontendAction.cpp (+5-2) - (modified) flang/lib/Frontend/FrontendActions.cpp (+8-3) - (modified) flang/lib/Parser/message.cpp (+6-2) - (modified) flang/lib/Semantics/semantics.cpp (+4-2) - (added) flang/test/Driver/w-option.f90 (+14) ``diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 086aedefc11878..e73aee3f63fa47 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5680,7 +5680,7 @@ def whatsloaded : Flag<["-"], "whatsloaded">; def why_load : Flag<["-"], "why_load">; def whyload : Flag<["-"], "whyload">, Alias; def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, MarshallingInfoFlag>; def x : JoinedOrSeparate<["-"], "x">, Flags<[NoXarchOption]>, diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 6d93c1f3d7034a..6d1372152601e5 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -757,6 +757,8 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA, // Add other compile options addOtherOptions(Args, CmdArgs); + 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/FrontendOptions.h b/flang/include/flang/Frontend/FrontendOptions.h index 06b1318f243b08..acbc55a75f9a11 100644 --- a/flang/include/flang/Frontend/FrontendOptions.h +++ b/flang/include/flang/Frontend/FrontendOptions.h @@ -232,7 +232,8 @@ class FrontendInputFile { struct FrontendOptions { FrontendOptions() : showHelp(false), showVersion(false), instrumentedParse(false), -showColors(false), needProvenanceRangeToCharBlockMappings(false) {} +showColors(false), needProvenanceRangeToCharBlockMappings(false), +disableWarnings(false) {} /// Show the -help text. unsigned showHelp : 1; @@ -251,6 +252,9 @@ struct FrontendOptions { /// compilation. unsigned needProvenanceRangeToCharBlockMappings : 1; + /// Disable warnings emitted by the Frontend + unsigned disableWarnings : 1; + /// Input values from `-fget-definition` struct GetDefinitionVals { unsigned line; diff --git a/flang/include/flang/Parser/message.h b/flang/include/flang/Parser/message.h index 668559aeec9478..d1eb6e6f5aa52d 100644 --- a/flang/include/flang/Parser/message.h +++ b/flang/include/flang/Parser/message.h @@ -284,7 +284,7 @@ class Messages { void Copy(const Messages &); void ResolveProvenances(const AllCookedSources &); void Emit(llvm::raw_ostream &, const AllCookedSources &, - bool echoSourceLines = true) const; + bool echoSourceLines = true, bool disableWarnings = false) const; void AttachTo(Message &, std::optional = std::nullopt); bool AnyFatalError() const; diff --git a/flang/include/flang/Semantics/semantics.h b/flang/include/flang/Semantics/semantics.h index c8ee71945d8bde..456c2928f5b368 100644 --- a/flang/include/flang/Semantics/semantics.h +++ b/flang/include/flang/Semantics/semantics.h @@ -312,7 +312,7 @@ class Semantics { return context_.FindScope(where); } bool AnyFatalError() const { return context_.AnyFatalError(); } - void EmitMessages(llvm::raw_ostream &) const; + void EmitMessages(llvm::raw_ostream &, bool disableWarnings = false) const; void DumpSymbols(llvm::raw_ostream &); void DumpSymbolsSources(llvm::raw_ostream &) const; diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index f1b7b53975398e..4a19592edf6ed8 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Fronten
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/jeffhammond converted_to_draft https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
jeffhammond wrote: This solves the problem that motivated my initial complaint on Slack. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/jeffhammond ready_for_review https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
klausler wrote: See https://github.com/llvm/llvm-project/pull/90518, which I think would greatly ease implementation of `-w`. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
klausler wrote: I am finishing up a patch that ensures that all warning messages are conditional in Semantics. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
jeffhammond wrote: Thanks! I built it already and will test later today. https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan edited https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang] RFC: Add support for -w option (PR #90420)
https://github.com/kiranchandramohan edited https://github.com/llvm/llvm-project/pull/90420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits