https://github.com/voltur01 updated https://github.com/llvm/llvm-project/pull/203884
>From e72ca196dfc1a9fa3542cef91ac3cd40698af112 Mon Sep 17 00:00:00 2001 From: Volodymyr Turanskyy <[email protected]> Date: Mon, 15 Jun 2026 13:38:26 +0100 Subject: [PATCH 1/2] [clang][Driver] Pass --cstdlib through to multilibs Pass the --cstdlib through to the multilibs backend so that the value specified on the command line can be used inside the multilibs YAML file. Assisted-by: codex, reviewed and tested by me. --- clang/lib/Driver/ToolChain.cpp | 6 ++++++ clang/test/Driver/baremetal-multilib.yaml | 11 +++++++++++ clang/test/Driver/print-multi-selection-flags.c | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 8db726cedfe90..a4a4f49036eda 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -492,6 +492,12 @@ ToolChain::getMultilibFlags(const llvm::opt::ArgList &Args) const { processMultilibCustomFlags(Result, Args); + if (Arg *CStdLibArg = Args.getLastArg(options::OPT_cstdlib_EQ)) { + Result.push_back(std::string(CStdLibArg->getOption().getPrefixedName()) + + CStdLibArg->getValue()); + CStdLibArg->claim(); + } + // Include fno-exceptions and fno-rtti // to improve multilib selection if (getRTTIMode() == ToolChain::RTTIMode::RM_Disabled) diff --git a/clang/test/Driver/baremetal-multilib.yaml b/clang/test/Driver/baremetal-multilib.yaml index c2b37fad97dea..17df2972116b1 100644 --- a/clang/test/Driver/baremetal-multilib.yaml +++ b/clang/test/Driver/baremetal-multilib.yaml @@ -14,6 +14,14 @@ # CHECK-SAME: "-lc" # CHECK-SAME: "-o" "{{.*}}.tmp.out" +# RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -Werror -o %t.out 2>&1 \ +# RUN: --target=thumbv8m.main-none-eabihf --cstdlib=picolibc --sysroot= \ +# RUN: | FileCheck --check-prefix=CHECK-CSTDLIB %s +# CHECK-CSTDLIB: "-cc1" "-triple" "thumbv8m.main-unknown-none-eabihf" +# CHECK-CSTDLIB-SAME: "-internal-isystem" "[[SYSROOT:[^"]*]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/picolibc/include/c++/v1" +# CHECK-CSTDLIB-NEXT: ld{{(.exe)?}}" "-Bstatic" +# CHECK-CSTDLIB-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/picolibc/lib" + # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \ # RUN: --target=thumbv7em-none-eabi -mfpu=fpv4-sp-d16 --sysroot= \ # RUN: | FileCheck --check-prefix=CHECK-NO-MATCH %s @@ -106,6 +114,9 @@ Variants: - Dir: arm-none-eabi/thumb/v8-m.main/fp Flags: [--target=thumbv8m.main-unknown-none-eabihf, -mfpu=fpv5-d16] +- Dir: arm-none-eabi/thumb/v8-m.main/fp/picolibc + Flags: [--target=thumbv8m.main-unknown-none-eabihf, --cstdlib=picolibc, -mfpu=fpv5-d16] + - Dir: arm-none-eabi/thumb/v8.1-m.main/fp Flags: [--target=thumbv8.1m.main-unknown-none-eabihf, -mfpu=fp-armv8-fullfp16-sp-d16] diff --git a/clang/test/Driver/print-multi-selection-flags.c b/clang/test/Driver/print-multi-selection-flags.c index ba7b325892f9c..8d068fdb48a34 100644 --- a/clang/test/Driver/print-multi-selection-flags.c +++ b/clang/test/Driver/print-multi-selection-flags.c @@ -71,6 +71,10 @@ // RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=aarch64-none-elf -mbranch-protection=standard | FileCheck --check-prefix=CHECK-BRANCH-PROTECTION %s // CHECK-BRANCH-PROTECTION: -mbranch-protection=standard +// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi --cstdlib=picolibc | FileCheck --check-prefix=CHECK-CSTDLIB %s +// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi --cstdlib picolibc | FileCheck --check-prefix=CHECK-CSTDLIB %s +// CHECK-CSTDLIB: --cstdlib=picolibc + // RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi -mno-unaligned-access | FileCheck --check-prefix=CHECK-NO-UNALIGNED-ACCESS %s // RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi -mstrict-align | FileCheck --check-prefix=CHECK-NO-UNALIGNED-ACCESS %s // RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi | FileCheck --check-prefix=CHECK-NO-UNALIGNED-ACCESS %s >From 791b7f437114f277a54f14a151c0789a79422712 Mon Sep 17 00:00:00 2001 From: Volodymyr Turanskyy <[email protected]> Date: Fri, 19 Jun 2026 14:09:46 +0100 Subject: [PATCH 2/2] Remove redundant explicit claim() --- clang/lib/Driver/ToolChain.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index a4a4f49036eda..0cae4d806cb20 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -492,11 +492,9 @@ ToolChain::getMultilibFlags(const llvm::opt::ArgList &Args) const { processMultilibCustomFlags(Result, Args); - if (Arg *CStdLibArg = Args.getLastArg(options::OPT_cstdlib_EQ)) { + if (Arg *CStdLibArg = Args.getLastArg(options::OPT_cstdlib_EQ)) Result.push_back(std::string(CStdLibArg->getOption().getPrefixedName()) + CStdLibArg->getValue()); - CStdLibArg->claim(); - } // Include fno-exceptions and fno-rtti // to improve multilib selection _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
