Skip to content

Commit cb7c223

Browse files
authored
[clang][driver] Fix -fveclib=ArmPL issue: with -nostdlib do not link against libm (#133578)
Although combining -fveclib=ArmPL with -nostdlib is a rare situation, it should still be supported correctly and should effect in avoidance of linking against libm.
1 parent eefefb5 commit cb7c223

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -515,17 +515,19 @@ void tools::AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
515515
//
516516
// 1. On Linux, link only when actually needed.
517517
//
518-
// 2. Prefer libm functions over libamath.
518+
// 2. Prefer libm functions over libamath (when no -nostdlib in use).
519519
//
520520
// 3. Link against libm to resolve libamath dependencies.
521521
//
522522
if (Triple.isOSLinux()) {
523523
CmdArgs.push_back(Args.MakeArgString("--push-state"));
524524
CmdArgs.push_back(Args.MakeArgString("--as-needed"));
525525
}
526-
CmdArgs.push_back(Args.MakeArgString("-lm"));
526+
if (!Args.hasArg(options::OPT_nostdlib))
527+
CmdArgs.push_back(Args.MakeArgString("-lm"));
527528
CmdArgs.push_back(Args.MakeArgString("-lamath"));
528-
CmdArgs.push_back(Args.MakeArgString("-lm"));
529+
if (!Args.hasArg(options::OPT_nostdlib))
530+
CmdArgs.push_back(Args.MakeArgString("-lm"));
529531
if (Triple.isOSLinux())
530532
CmdArgs.push_back(Args.MakeArgString("--pop-state"));
531533
addArchSpecificRPath(TC, Args, CmdArgs);

clang/test/Driver/fveclib.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,17 @@
116116
/// Verify that vectorized routines library is being linked in.
117117
// RUN: %clang -### --target=aarch64-pc-windows-msvc -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-MSVC %s
118118
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-LINUX %s
119+
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -nostdlib 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-LINUX %s
119120
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX %s
120121
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-DARWIN %s
122+
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN %s
121123
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN %s
122124
// CHECK-LINKING-ARMPL-LINUX: "--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
125+
// CHECK-LINKING-ARMPL-NOSTDLIB-LINUX: "--push-state" "--as-needed" "-lamath" "--pop-state"
126+
// CHECK-LINKING-ARMPL-NOSTDLIB-LINUX-NOT: "-lm"
123127
// CHECK-LINKING-ARMPL-DARWIN: "-lm" "-lamath" "-lm"
128+
// CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN: "-lamath"
129+
// CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN-NOT: "-lm"
124130
// CHECK-LINKING-ARMPL-MSVC: "--dependent-lib=amath"
125131
// CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX: "-lamath" {{.*}}"--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
126132
// CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN: "-lamath" {{.*}}"-lm" "-lamath" "-lm"

flang/test/Driver/fveclib.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,17 @@
3333

3434
! RUN: %flang -### --target=aarch64-pc-windows-msvc -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-MSVC %s
3535
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-LINUX %s
36+
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-LINUX %s
3637
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX %s
3738
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-DARWIN %s
39+
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN %s
3840
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN %s
3941
! CHECK-LINKING-ARMPL-LINUX: "--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
42+
! CHECK-LINKING-ARMPL-NOSTDLIB-LINUX: "--push-state" "--as-needed" "-lamath" "--pop-state"
43+
! CHECK-LINKING-ARMPL-NOSTDLIB-LINUX-NOT: "-lm"
4044
! CHECK-LINKING-ARMPL-DARWIN: "-lm" "-lamath" "-lm"
45+
! CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN: "-lamath"
46+
! CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN-NOT: "-lm"
4147
! CHECK-LINKING-ARMPL-MSVC: "--dependent-lib=amath"
4248
! CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX: "-lamath" {{.*}}"--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
4349
! CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN: "-lamath" {{.*}}"-lm" "-lamath" "-lm"

0 commit comments

Comments
 (0)