llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Feng Zou (fzou1) <details> <summary>Changes</summary> An error message will be emitted if the wrong value is passed to -mstack-alignment option. --- Full diff: https://github.com/llvm/llvm-project/pull/143124.diff 2 Files Affected: - (modified) clang/lib/Driver/ToolChains/Clang.cpp (+11-3) - (added) clang/test/Driver/stack-alignment.c (+11) ``````````diff 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' `````````` </details> https://github.com/llvm/llvm-project/pull/143124 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits