From c37accf0a207a09b80c1109eb7a114876c45f959 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 26 Mar 2022 00:57:06 -0700 Subject: [PATCH] [Option] Avoid using the default argument for the 3-argument hasFlag. NFC The default argument true is error-prone: I think many would think the default is false. --- clang/lib/Driver/Driver.cpp | 2 +- clang/lib/Driver/SanitizerArgs.cpp | 4 ++-- clang/lib/Driver/ToolChains/AMDGPU.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 24 +++++++++++----------- clang/lib/Driver/ToolChains/HIPAMD.cpp | 7 ++++--- clang/lib/Frontend/CompilerInvocation.cpp | 4 ++-- lld/COFF/Driver.cpp | 2 +- llvm/tools/llvm-objcopy/ObjcopyOptions.cpp | 20 +++++++++--------- 8 files changed, 33 insertions(+), 32 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 31ef07cd5acc6..dd89121e671e5 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3024,7 +3024,7 @@ class OffloadingActionBuilder final { if (Args.hasArg(options::OPT_gpu_bundle_output, options::OPT_no_gpu_bundle_output)) BundleOutput = Args.hasFlag(options::OPT_gpu_bundle_output, - options::OPT_no_gpu_bundle_output); + options::OPT_no_gpu_bundle_output, true); } bool canUseBundlerUnbundler() const override { return true; } diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index 440f29142ab29..598fe9a3bf0fd 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -1016,8 +1016,8 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, // AMDGPU sanitizer support is experimental and controlled by -fgpu-sanitize. if (TC.getTriple().isNVPTX() || (TC.getTriple().isAMDGPU() && - !Args.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize))) + !Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, + true))) return; // Translate available CoverageFeatures to corresponding clang-cc1 flags. diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 8df86ca4f4784..123d92664495e 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -947,7 +947,7 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, options::OPT_fno_fast_math, false); bool CorrectSqrt = DriverArgs.hasFlag( options::OPT_fhip_fp32_correctly_rounded_divide_sqrt, - options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt); + options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt, true); bool Wave64 = isWave64(DriverArgs, Kind); return RocmInstallation.getCommonBitcodeLibs( diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 7c7f9254b34da..6c4bc86787290 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3905,7 +3905,7 @@ static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, // -fdiagnostics-fixit-info is default, only pass non-default. if (!Args.hasFlag(options::OPT_fdiagnostics_fixit_info, - options::OPT_fno_diagnostics_fixit_info)) + options::OPT_fno_diagnostics_fixit_info, true)) CmdArgs.push_back("-fno-diagnostics-fixit-info"); // Enable -fdiagnostics-show-option by default. @@ -3974,7 +3974,7 @@ static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, CmdArgs.push_back("-fansi-escape-codes"); if (!Args.hasFlag(options::OPT_fshow_source_location, - options::OPT_fno_show_source_location)) + options::OPT_fno_show_source_location, true)) CmdArgs.push_back("-fno-show-source-location"); if (Args.hasArg(options::OPT_fdiagnostics_absolute_paths)) @@ -3985,7 +3985,7 @@ static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, CmdArgs.push_back("-fno-show-column"); if (!Args.hasFlag(options::OPT_fspell_checking, - options::OPT_fno_spell_checking)) + options::OPT_fno_spell_checking, true)) CmdArgs.push_back("-fno-spell-checking"); } @@ -4780,7 +4780,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Render the CodeGen options that need to be passed. if (!Args.hasFlag(options::OPT_foptimize_sibling_calls, - options::OPT_fno_optimize_sibling_calls)) + options::OPT_fno_optimize_sibling_calls, true)) CmdArgs.push_back("-mdisable-tail-calls"); RenderFloatingPointOptions(TC, D, isOptimizationLevelFast(Args), Args, @@ -5156,7 +5156,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_fno_strict_aliasing, TBAAOnByDefault)) CmdArgs.push_back("-relaxed-aliasing"); if (!Args.hasFlag(options::OPT_fstruct_path_tbaa, - options::OPT_fno_struct_path_tbaa)) + options::OPT_fno_struct_path_tbaa, true)) CmdArgs.push_back("-no-struct-path-tbaa"); if (Args.hasFlag(options::OPT_fstrict_enums, options::OPT_fno_strict_enums, false)) @@ -5176,7 +5176,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, false)) CmdArgs.push_back("-fforce-emit-vtables"); if (!Args.hasFlag(options::OPT_foptimize_sibling_calls, - options::OPT_fno_optimize_sibling_calls)) + options::OPT_fno_optimize_sibling_calls, true)) CmdArgs.push_back("-mdisable-tail-calls"); if (Args.hasFlag(options::OPT_fno_escaping_block_tail_calls, options::OPT_fescaping_block_tail_calls, false)) @@ -6298,7 +6298,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, RenderBuiltinOptions(TC, RawTriple, Args, CmdArgs); if (!Args.hasFlag(options::OPT_fassume_sane_operator_new, - options::OPT_fno_assume_sane_operator_new)) + options::OPT_fno_assume_sane_operator_new, true)) CmdArgs.push_back("-fno-assume-sane-operator-new"); // -fblocks=0 is default. @@ -6577,7 +6577,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // C++ "sane" operator new. if (!Args.hasFlag(options::OPT_fassume_sane_operator_new, - options::OPT_fno_assume_sane_operator_new)) + options::OPT_fno_assume_sane_operator_new, true)) CmdArgs.push_back("-fno-assume-sane-operator-new"); // -frelaxed-template-template-args is off by default, as it is a severe @@ -6614,9 +6614,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // -fconstant-cfstrings is default, and may be subject to argument translation // on Darwin. if (!Args.hasFlag(options::OPT_fconstant_cfstrings, - options::OPT_fno_constant_cfstrings) || + options::OPT_fno_constant_cfstrings, true) || !Args.hasFlag(options::OPT_mconstant_cfstrings, - options::OPT_mno_constant_cfstrings)) + options::OPT_mno_constant_cfstrings, true)) CmdArgs.push_back("-fno-constant-cfstrings"); // -fno-pascal-strings is default, only pass non-default. @@ -6660,12 +6660,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // -fsigned-bitfields is default, and clang doesn't yet support // -funsigned-bitfields. if (!Args.hasFlag(options::OPT_fsigned_bitfields, - options::OPT_funsigned_bitfields)) + options::OPT_funsigned_bitfields, true)) D.Diag(diag::warn_drv_clang_unsupported) << Args.getLastArg(options::OPT_funsigned_bitfields)->getAsString(Args); // -fsigned-bitfields is default, and clang doesn't support -fno-for-scope. - if (!Args.hasFlag(options::OPT_ffor_scope, options::OPT_fno_for_scope)) + if (!Args.hasFlag(options::OPT_ffor_scope, options::OPT_fno_for_scope, true)) D.Diag(diag::err_drv_clang_unsupported) << Args.getLastArg(options::OPT_fno_for_scope)->getAsString(Args); diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index 7497d7521d559..9f0ac6294e607 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -47,7 +47,7 @@ static bool shouldSkipSanitizeOption(const ToolChain &TC, return false; if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize)) + options::OPT_fno_gpu_sanitize, true)) return true; auto &Diags = TC.getDriver().getDiags(); @@ -162,7 +162,8 @@ HIPAMDToolChain::HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple, getProgramPaths().push_back(getDriver().Dir); // Diagnose unsupported sanitizer options only once. - if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize)) + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, + true)) return; for (auto A : Args.filtered(options::OPT_fsanitize_EQ)) { SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); @@ -332,7 +333,7 @@ HIPAMDToolChain::getHIPDeviceLibs(const llvm::opt::ArgList &DriverArgs) const { // If --hip-device-lib is not set, add the default bitcode libraries. if (DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize) && + options::OPT_fno_gpu_sanitize, true) && getSanitizerArgs(DriverArgs).needsAsanRt()) { auto AsanRTL = RocmInstallation.getAsanRTLPath(); if (AsanRTL.empty()) { diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index e18c7ed81873e..be7828ba2e937 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1982,8 +1982,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, else if (Args.hasArg(options::OPT_fno_finite_loops)) Opts.FiniteLoops = CodeGenOptions::FiniteLoopsKind::Never; - Opts.EmitIEEENaNCompliantInsts = - Args.hasFlag(options::OPT_mamdgpu_ieee, options::OPT_mno_amdgpu_ieee); + Opts.EmitIEEENaNCompliantInsts = Args.hasFlag( + options::OPT_mamdgpu_ieee, options::OPT_mno_amdgpu_ieee, true); if (!Opts.EmitIEEENaNCompliantInsts && !LangOptsRef.NoHonorNaNs) Diags.Report(diag::err_drv_amdgpu_ieee_without_no_honor_nans); diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index f7fd932c8bee1..9cb836d151cd1 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1500,7 +1500,7 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } // Handle /demangle - config->demangle = args.hasFlag(OPT_demangle, OPT_demangle_no); + config->demangle = args.hasFlag(OPT_demangle, OPT_demangle_no, true); // Handle /debugtype config->debugTypes = parseDebugTypes(args); diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp index 29ed65be23a09..e94c4cc92d6da 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp +++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp @@ -870,11 +870,12 @@ objcopy::parseObjcopyOptions(ArrayRef RawArgsArr, InputArgs.hasArg(OBJCOPY_extract_main_partition); ELFConfig.LocalizeHidden = InputArgs.hasArg(OBJCOPY_localize_hidden); Config.Weaken = InputArgs.hasArg(OBJCOPY_weaken); - if (InputArgs.hasArg(OBJCOPY_discard_all, OBJCOPY_discard_locals)) - Config.DiscardMode = - InputArgs.hasFlag(OBJCOPY_discard_all, OBJCOPY_discard_locals) - ? DiscardType::All - : DiscardType::Locals; + if (auto *Arg = + InputArgs.getLastArg(OBJCOPY_discard_all, OBJCOPY_discard_locals)) { + Config.DiscardMode = Arg->getOption().matches(OBJCOPY_discard_all) + ? DiscardType::All + : DiscardType::Locals; + } Config.OnlyKeepDebug = InputArgs.hasArg(OBJCOPY_only_keep_debug); ELFConfig.KeepFileSymbols = InputArgs.hasArg(OBJCOPY_keep_file_symbols); MachOConfig.KeepUndefined = InputArgs.hasArg(OBJCOPY_keep_undefined); @@ -1277,11 +1278,10 @@ objcopy::parseStripOptions(ArrayRef RawArgsArr, ELFConfig.AllowBrokenLinks = InputArgs.hasArg(STRIP_allow_broken_links); Config.StripDebug = InputArgs.hasArg(STRIP_strip_debug); - if (InputArgs.hasArg(STRIP_discard_all, STRIP_discard_locals)) - Config.DiscardMode = - InputArgs.hasFlag(STRIP_discard_all, STRIP_discard_locals) - ? DiscardType::All - : DiscardType::Locals; + if (auto *Arg = InputArgs.getLastArg(STRIP_discard_all, STRIP_discard_locals)) + Config.DiscardMode = Arg->getOption().matches(STRIP_discard_all) + ? DiscardType::All + : DiscardType::Locals; Config.StripSections = InputArgs.hasArg(STRIP_strip_sections); Config.StripUnneeded = InputArgs.hasArg(STRIP_strip_unneeded); if (auto Arg = InputArgs.getLastArg(STRIP_strip_all, STRIP_no_strip_all))