https://github.com/mh4ck-Thales updated https://github.com/llvm/llvm-project/pull/100321
>From b812b9c2a7b92edf5dab739eadff0295c2a1f631 Mon Sep 17 00:00:00 2001 From: Quentin Michaud <quentin.mich...@thalesgroup.com> Date: Wed, 24 Jul 2024 09:54:53 +0200 Subject: [PATCH 1/2] First draft of wasm-opt warning --- clang/lib/Driver/ToolChains/WebAssembly.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index 9aacda5fd5702f..dc49fde378a9a7 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -180,6 +180,9 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (WasmOptPath == "wasm-opt") { WasmOptPath = {}; } + if (WasmOptPath.empty()) { + printf("warning: wasm-opt not found but was requested\n"); + } } if (!WasmOptPath.empty()) { >From a798b1fd7a7a6c7b782584021e5c32e52c3abffc Mon Sep 17 00:00:00 2001 From: Quentin Michaud <quentin.mich...@thalesgroup.com> Date: Thu, 29 Aug 2024 16:31:48 +0200 Subject: [PATCH 2/2] Add errors and warnings for when wasm-opt is missing or invoked but incompatible --- clang/include/clang/Basic/DiagnosticDriverKinds.td | 8 ++++++++ clang/include/clang/Basic/DiagnosticGroups.td | 2 ++ clang/include/clang/Driver/Options.td | 1 + clang/lib/Driver/ToolChains/WebAssembly.cpp | 14 +++++++++++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index ba90742fbdaabc..2a862edf8788c8 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -826,4 +826,12 @@ def err_drv_triple_version_invalid : Error< def warn_missing_include_dirs : Warning< "no such include directory: '%0'">, InGroup<MissingIncludeDirs>, DefaultIgnore; + +def warn_wasm_opt_not_found : Warning< + "wasm-opt was not found, some optimizations were not applied">, + InGroup<WebAssemblyOptimization>; +def err_wasm_opt_not_found_with_flag : Error< + "wasm-opt was explicitly requested, but was not found">; +def err_wasm_opt_requested_but_not_supported : Error< + "wasm-opt was explicitly requested, but is not supported with '%0'">; } diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 28d315f63e5c47..fab11f47492db3 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -1520,6 +1520,8 @@ in addition with the pragmas or -fmax-tokens flag to get any warnings. def WebAssemblyExceptionSpec : DiagGroup<"wasm-exception-spec">; +def WebAssemblyOptimization : DiagGroup<"wasm-opt">; + def RTTI : DiagGroup<"rtti">; def OpenCLCoreFeaturesDiagGroup : DiagGroup<"pedantic-core-features">; diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 83cf753e824845..ba6e7ab9e11d06 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -8923,3 +8923,4 @@ def wasm_opt : Flag<["--"], "wasm-opt">, Group<m_Group>, HelpText<"Enable the wasm-opt optimizer (default)">, MarshallingInfoNegativeFlag<LangOpts<"NoWasmOpt">>; +def Wwarn_wasm_opt_not_found : Flag<["-"], "Wwarn_wasm_opt_not_found">; diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index dc49fde378a9a7..e9820ce1d35995 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -9,6 +9,7 @@ #include "WebAssembly.h" #include "CommonArgs.h" #include "Gnu.h" +#include "clang/Basic/DiagnosticDriver.h" #include "clang/Basic/Version.h" #include "clang/Config/config.h" #include "clang/Driver/Compilation.h" @@ -20,6 +21,7 @@ #include "llvm/Support/Path.h" #include "llvm/Support/VirtualFileSystem.h" + using namespace clang::driver; using namespace clang::driver::tools; using namespace clang::driver::toolchains; @@ -172,6 +174,11 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, bool RunWasmOpt = Args.hasFlag(options::OPT_wasm_opt, options::OPT_no_wasm_opt, WasmOptDefault); + if (TargetBuildsComponents(ToolChain.getTriple()) && + Args.hasFlag(options::OPT_wasm_opt, options::OPT_no_wasm_opt, false)) { + ToolChain.getDriver().Diag(diag::err_wasm_opt_requested_but_not_supported) + << ToolChain.getTriple().str(); + } // If wasm-opt is enabled and optimizations are happening look for the // `wasm-opt` program. If it's not found auto-disable it. std::string WasmOptPath; @@ -181,7 +188,12 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, WasmOptPath = {}; } if (WasmOptPath.empty()) { - printf("warning: wasm-opt not found but was requested\n"); + if (Args.hasFlag(options::OPT_wasm_opt, options::OPT_no_wasm_opt, + false)) { + ToolChain.getDriver().Diag(diag::err_wasm_opt_not_found_with_flag); + } else { + ToolChain.getDriver().Diag(diag::warn_wasm_opt_not_found); + } } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits