Author: Fangrui Song Date: 2023-04-24T20:11:21-07:00 New Revision: e66c2db7996ed0ce8cd27548a623ce62246be33b
URL: https://github.com/llvm/llvm-project/commit/e66c2db7996ed0ce8cd27548a623ce62246be33b DIFF: https://github.com/llvm/llvm-project/commit/e66c2db7996ed0ce8cd27548a623ce62246be33b.diff LOG: -Wframe-larger-than=: improve error with an invalid argument Remove a FIXME. For simplicity, the error message for the missing argument case has changed from err_drv_missing_argument to err_drv_invalid_argument_to_option, which should be fine. Added: Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/Wframe-larger-than.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index f7544c8f593c8..95ef79416acff 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5230,14 +5230,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) { - StringRef v = A->getValue(); - // FIXME: Validate the argument here so we don't produce meaningless errors - // about -fwarn-stack-size=. - if (v.empty()) - D.Diag(diag::err_drv_missing_argument) << A->getSpelling() << 1; + StringRef V = A->getValue(), V1 = V; + unsigned Size; + if (V1.consumeInteger(10, Size) || !V1.empty()) + D.Diag(diag::err_drv_invalid_argument_to_option) + << V << A->getOption().getName(); else - CmdArgs.push_back(Args.MakeArgString("-fwarn-stack-size=" + v)); - A->claim(); + CmdArgs.push_back(Args.MakeArgString("-fwarn-stack-size=" + V)); } Args.addOptOutFlag(CmdArgs, options::OPT_fjump_tables, diff --git a/clang/test/Driver/Wframe-larger-than.c b/clang/test/Driver/Wframe-larger-than.c index cc5b5d0a2ca1a..768ff4407624b 100644 --- a/clang/test/Driver/Wframe-larger-than.c +++ b/clang/test/Driver/Wframe-larger-than.c @@ -8,6 +8,7 @@ // RUN: -v -E %s 2>&1 | FileCheck %s --check-prefix=NOARG // RUN: not %clang -Wframe-larger-than \ // RUN: -v -E %s 2>&1 | FileCheck %s --check-prefix=NOARG +// RUN: not %clang -Wframe-larger-than=0x2a -E %s 2>&1 | FileCheck %s --check-prefix=INVALID // ENABLE: cc1 {{.*}} -fwarn-stack-size=42 {{.*}} -Wframe-larger-than=42 // ENABLE: frame-larger-than: @@ -21,7 +22,8 @@ // REENABLE: frame-larger-than: // REENABLE-SAME: warning -// NOARG: error: argument to '-Wframe-larger-than=' is missing +// NOARG: error: invalid argument '' to -Wframe-larger-than= +// INVALID: error: invalid argument '0x2a' to -Wframe-larger-than= // We need to create some state transitions before the pragma will dump anything. #pragma clang diagnostic push _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits