https://github.com/fzou1 created https://github.com/llvm/llvm-project/pull/143124
An error message will be emitted if the wrong value is passed to -mstack-alignment option. >From 688405f851d3685e588b4797314377a1d5d5c124 Mon Sep 17 00:00:00 2001 From: Feng Zou <feng....@intel.com> Date: Fri, 6 Jun 2025 18:21:30 +0800 Subject: [PATCH] [Driver] Add check for -mstack-alignment An error message will be emitted if the wrong value is passed to -mstack-alignment option. --- clang/lib/Driver/ToolChains/Clang.cpp | 14 +++++++++++--- clang/test/Driver/stack-alignment.c | 11 +++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 clang/test/Driver/stack-alignment.c diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 80dd72a23a673..290c10e5ea6cb 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7047,9 +7047,17 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.addOptInFlag(CmdArgs, options::OPT_mstackrealign, options::OPT_mno_stackrealign); - if (Args.hasArg(options::OPT_mstack_alignment)) { - StringRef alignment = Args.getLastArgValue(options::OPT_mstack_alignment); - CmdArgs.push_back(Args.MakeArgString("-mstack-alignment=" + alignment)); + if (const Arg *A = Args.getLastArg(options::OPT_mstack_alignment)) { + StringRef Value = A->getValue(); + int64_t Alignment = 0; + if (Value.getAsInteger(10, Alignment) || Alignment < 0) + D.Diag(diag::err_drv_invalid_argument_to_option) + << Value << A->getOption().getName(); + else if (Alignment & (Alignment - 1)) + D.Diag(diag::err_drv_alignment_not_power_of_two) + << A->getAsString(Args) << Value; + else + CmdArgs.push_back(Args.MakeArgString("-mstack-alignment=" + Value)); } if (Args.hasArg(options::OPT_mstack_probe_size)) { diff --git a/clang/test/Driver/stack-alignment.c b/clang/test/Driver/stack-alignment.c new file mode 100644 index 0000000000000..e1e62c05c32ab --- /dev/null +++ b/clang/test/Driver/stack-alignment.c @@ -0,0 +1,11 @@ +// RUN: not %clang -### -mstack-alignment=-1 %s 2>&1 | FileCheck %s --check-prefix=CHECK_NEG_1 +// RUN: %clang -### -mstack-alignment=0 %s 2>&1 | FileCheck %s --check-prefix=CHECK_0 +// RUN: %clang -### -mstack-alignment=1 %s 2>&1 | FileCheck %s --check-prefix=CHECK_1 +// RUN: %clang -### -mstack-alignment=4 %s 2>&1 | FileCheck %s --check-prefix=CHECK_4 +// RUN: not %clang -### -mstack-alignment=5 %s 2>&1 | FileCheck %s --check-prefix=CHECK_5 + +// CHECK_NEG_1: error: invalid argument '-1' to -mstack-alignment= +// CHECK_0: -mstack-alignment=0 +// CHECK_1: -mstack-alignment=1 +// CHECK_4: -mstack-alignment=4 +// CHECK_5: error: alignment is not a power of 2 in '-mstack-alignment=5' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits