Author: Volodymyr Turanskyy
Date: 2026-06-25T09:23:06+01:00
New Revision: 3fd56af03613059ba3edd30d7c60aaf50956e951

URL: 
https://github.com/llvm/llvm-project/commit/3fd56af03613059ba3edd30d7c60aaf50956e951
DIFF: 
https://github.com/llvm/llvm-project/commit/3fd56af03613059ba3edd30d7c60aaf50956e951.diff

LOG: [clang][Driver] Pass --cstdlib through to multilibs (#203884)

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.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChain.cpp
    clang/test/Driver/baremetal-multilib.yaml
    clang/test/Driver/print-multi-selection-flags.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 328f4f8c8f420..726c8a6ad229a 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -504,6 +504,10 @@ 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());
+
   // 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 e5a116234c321..0d71a52d553bb 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


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to