[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-04-23 Thread Nico Weber via cfe-commits


@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , 
StringRef Component,
   // Check for runtime files in the new layout without the architecture first.
   std::string CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false);
+  SmallString<128> Path;
   for (const auto  : getLibraryPaths()) {
 SmallString<128> P(LibPath);
 llvm::sys::path::append(P, CRTBasename);
 if (getVFS().exists(P))
   return std::string(P);
+if (Path.empty())
+  Path = P;
   }
+  if (getTriple().isOSAIX())
+Path.clear();
 
-  // Fall back to the old expected compiler-rt name if the new one does not
-  // exist.
+  // Check the filename for the old layout if the new one does not exist.
   CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true);
-  SmallString<128> Path(getCompilerRTPath());
-  llvm::sys::path::append(Path, CRTBasename);
+  SmallString<128> OldPath(getCompilerRTPath());
+  llvm::sys::path::append(OldPath, CRTBasename);
+  if (Path.empty() || getVFS().exists(OldPath))
+return std::string(OldPath);
+
+  // If none is found, use a file name from the new layout, which may get
+  // printed in an error message, aiding users in knowing what Clang is
+  // looking for.

nico wrote:

Oh sorry, that comment was for #87866, which I think does change behavior 
outside of warning messages, combined with this change. 
https://crbug.com/335997052 has details. I'll move the comment to that other PR.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-04-22 Thread YunQiang Su via cfe-commits


@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , 
StringRef Component,
   // Check for runtime files in the new layout without the architecture first.
   std::string CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false);
+  SmallString<128> Path;
   for (const auto  : getLibraryPaths()) {
 SmallString<128> P(LibPath);
 llvm::sys::path::append(P, CRTBasename);
 if (getVFS().exists(P))
   return std::string(P);
+if (Path.empty())
+  Path = P;
   }
+  if (getTriple().isOSAIX())
+Path.clear();
 
-  // Fall back to the old expected compiler-rt name if the new one does not
-  // exist.
+  // Check the filename for the old layout if the new one does not exist.
   CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true);
-  SmallString<128> Path(getCompilerRTPath());
-  llvm::sys::path::append(Path, CRTBasename);
+  SmallString<128> OldPath(getCompilerRTPath());
+  llvm::sys::path::append(OldPath, CRTBasename);
+  if (Path.empty() || getVFS().exists(OldPath))
+return std::string(OldPath);
+
+  // If none is found, use a file name from the new layout, which may get
+  // printed in an error message, aiding users in knowing what Clang is
+  // looking for.

wzssyqa wrote:

It is only about warning msg.
Clang will try to find libraries for both new and old style paths.

If you'd like to put the libraries in old style path/filename, you can use 
`-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF`.

Of course, even with the above configure option, if clang cannot find a 
library, it will warn with new style path.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-04-22 Thread Nico Weber via cfe-commits


@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , 
StringRef Component,
   // Check for runtime files in the new layout without the architecture first.
   std::string CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false);
+  SmallString<128> Path;
   for (const auto  : getLibraryPaths()) {
 SmallString<128> P(LibPath);
 llvm::sys::path::append(P, CRTBasename);
 if (getVFS().exists(P))
   return std::string(P);
+if (Path.empty())
+  Path = P;
   }
+  if (getTriple().isOSAIX())
+Path.clear();
 
-  // Fall back to the old expected compiler-rt name if the new one does not
-  // exist.
+  // Check the filename for the old layout if the new one does not exist.
   CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true);
-  SmallString<128> Path(getCompilerRTPath());
-  llvm::sys::path::append(Path, CRTBasename);
+  SmallString<128> OldPath(getCompilerRTPath());
+  llvm::sys::path::append(OldPath, CRTBasename);
+  if (Path.empty() || getVFS().exists(OldPath))
+return std::string(OldPath);
+
+  // If none is found, use a file name from the new layout, which may get
+  // printed in an error message, aiding users in knowing what Clang is
+  // looking for.

nico wrote:

This is a behavior change: In distributed build environments, neither lib file 
exists at compile time. Previously, this would result in the "old" style, now 
it results in the "new" style (which we disable everywhere since it causes all 
kinds of issues – from what I can tell, we're not alone in this).

Is there some way we can tell clang that we always want the old style here, 
independent of what's on disk?

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-26 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay closed 
https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-26 Thread Martin Storsjö via cfe-commits

https://github.com/mstorsjo approved this pull request.

LGTM, thanks.

In principle, we're just trading surprises in one case into surprises in 
another case, but I guess this case is the one with more non-obvious details 
(and this can be argued is the future direction we should be heading towards, 
even if I'm not personally a huge fan of it), so it seems reasonable and 
valuable.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-26 Thread Tobias Hieta via cfe-commits

https://github.com/tru approved this pull request.

This seems good to me, it worked in my internal test as I expected it!

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-23 Thread Fangrui Song via cfe-commits

MaskRay wrote:

@tru After related improvements this uncovered, this patch should be good to 
review.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From c9dc3ca27e6978a3b6595d094e32cbd9cd102f64 Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../x86_64-unknown-linux/libclang_rt.msan.a   |   0
 .../libclang_rt.msan.a.syms   |   0
 .../libclang_rt.msan_cxx.a|   0
 .../libclang_rt.msan_cxx.a.syms   |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  38 +++---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   4 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |  10 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 110 +-
 32 files changed, 114 insertions(+), 104 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a
 

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From cebb8f03af527395ff82880173f4a45353efae75 Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Tue, 20 Feb 2024 13:29:25 -0800
Subject: [PATCH 1/2] [Driver,BareMetal] Replace -lclang_rt.builtins{,-$arch}.a
 with an absolute path

The generic `tools::AddRunTimeLibs` uses an absolute path. Change
BareMetal to match.

I believe users are not supposed to place other files under the
directory containing `libclang_rt.builtins-$arch.a`. If they rely on the
implicit -L, they now need to explicitly specify -L.

Pull Request: https://github.com/llvm/llvm-project/pull/82424
---
 clang/lib/Driver/ToolChains/BareMetal.cpp | 11 +---
 clang/test/Driver/arm-compiler-rt.c   |  2 +-
 clang/test/Driver/baremetal-multilib.yaml |  2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |  2 +-
 clang/test/Driver/baremetal.cpp   | 70 ---
 5 files changed, 27 insertions(+), 60 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp 
b/clang/lib/Driver/ToolChains/BareMetal.cpp
index cd955b6c849456..d5fc1d5dd25a8b 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -368,11 +368,7 @@ void BareMetal::AddLinkRuntimeLib(const ArgList ,
   ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args);
   switch (RLT) {
   case ToolChain::RLT_CompilerRT: {
-const std::string FileName = getCompilerRT(Args, "builtins");
-llvm::StringRef BaseName = llvm::sys::path::filename(FileName);
-BaseName.consume_front("lib");
-BaseName.consume_back(".a");
-CmdArgs.push_back(Args.MakeArgString("-l" + BaseName));
+CmdArgs.push_back(getCompilerRTArgString(Args, "builtins"));
 return;
   }
   case ToolChain::RLT_Libgcc:
@@ -462,11 +458,6 @@ void baremetal::Linker::ConstructJob(Compilation , const 
JobAction ,
   for (const auto  : TC.getLibraryPaths())
 CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath)));
 
-  const std::string FileName = TC.getCompilerRT(Args, "builtins");
-  llvm::SmallString<128> PathBuf{FileName};
-  llvm::sys::path::remove_filename(PathBuf);
-  CmdArgs.push_back(Args.MakeArgString("-L" + PathBuf));
-
   if (TC.ShouldLinkCXXStdlib(Args))
 TC.AddCXXStdlibLibArgs(Args, CmdArgs);
 
diff --git a/clang/test/Driver/arm-compiler-rt.c 
b/clang/test/Driver/arm-compiler-rt.c
index 954947bb890f87..adecacbcaabf9c 100644
--- a/clang/test/Driver/arm-compiler-rt.c
+++ b/clang/test/Driver/arm-compiler-rt.c
@@ -3,7 +3,7 @@
 // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \
 // RUN: -rtlib=compiler-rt -### %s 2>&1 \
 // RUN:   | FileCheck %s -check-prefix ARM-EABI
-// ARM-EABI: "-lclang_rt.builtins-arm"
+// ARM-EABI: "{{[^"]*}}libclang_rt.builtins-arm.a"
 
 // RUN: %clang -target arm-linux-gnueabi \
 // RUN: --sysroot=%S/Inputs/resource_dir_with_arch_subdir \
diff --git a/clang/test/Driver/baremetal-multilib.yaml 
b/clang/test/Driver/baremetal-multilib.yaml
index af26e82621c91e..3f026cbeb437b2 100644
--- a/clang/test/Driver/baremetal-multilib.yaml
+++ b/clang/test/Driver/baremetal-multilib.yaml
@@ -17,7 +17,7 @@
 # CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml"
 # CHECK-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
 # CHECK-SAME: 
"-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib"
-# CHECK-SAME: "-lc" "-lm" "-lclang_rt.builtins"
+# CHECK-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
 # CHECK-SAME: "-o" "{{.*}}.tmp.out"
 
 # RUN: %T/baremetal_multilib/bin/clang -no-canonical-prefixes -x c++ %s -### 
-o %t.out 2>&1 \
diff --git a/clang/test/Driver/baremetal-sysroot.cpp 
b/clang/test/Driver/baremetal-sysroot.cpp
index fc66020772a771..46338185ffd9d5 100644
--- a/clang/test/Driver/baremetal-sysroot.cpp
+++ b/clang/test/Driver/baremetal-sysroot.cpp
@@ -18,5 +18,5 @@
 // CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal-sysroot.cpp"
 // CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" 
"{{.*}}.o" "-Bstatic"
 // CHECK-V6M-C-SAME: 
"-L{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}lib"
-// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m"
+// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins-armv6m.a"
 // CHECK-V6M-C-SAME: "-o" "{{.*}}.o"
diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 7511d7d1adb4dd..8baf388894eb27 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -18,8 +18,7 @@
 // CHECK-V6M-C-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
 // CHECK-V6M-C-SAME: "-T" "semihosted.lds" 
"-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
 // CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
-// CHECK-V6M-C-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
-// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" 
"-o" 

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Fangrui Song via cfe-commits


@@ -44,9 +43,8 @@
 // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
 // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
 // CHECK-V6M-DEFAULTCXX-SAME: 
"-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
-// CHECK-V6M-DEFAULTCXX-SAME: 
"-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
 // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
-// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" 
"--target2=rel" "-o" "a.out"

MaskRay wrote:

Thanks for catching this. I suspect that we should improve BareMetal to not 
rely on the -L and -l for libclang_rt.builtins first. Sent #82424

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Jon Roelofs via cfe-commits


@@ -44,9 +43,8 @@
 // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
 // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
 // CHECK-V6M-DEFAULTCXX-SAME: 
"-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
-// CHECK-V6M-DEFAULTCXX-SAME: 
"-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
 // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
-// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" 
"--target2=rel" "-o" "a.out"

jroelofs wrote:

I'm not as worried about the `-L` as I am the rename 
`"-lclang_rt.builtins-armv6m"` -> `"-lclang_rt.builtins"` and that being 
consistent with the layout that the build system sets up.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Fangrui Song via cfe-commits


@@ -44,9 +43,8 @@
 // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
 // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
 // CHECK-V6M-DEFAULTCXX-SAME: 
"-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
-// CHECK-V6M-DEFAULTCXX-SAME: 
"-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
 // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
-// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" 
"--target2=rel" "-o" "a.out"

MaskRay wrote:

There are a few places where I delete `-L` of the directory containing 
`libclang_rt.*` files. I think it is correct. This `-L` is not useful.

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-20 Thread Jon Roelofs via cfe-commits


@@ -44,9 +43,8 @@
 // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
 // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
 // CHECK-V6M-DEFAULTCXX-SAME: 
"-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
-// CHECK-V6M-DEFAULTCXX-SAME: 
"-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
 // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
-// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" 
"--target2=rel" "-o" "a.out"

jroelofs wrote:

ISTM the more "correct" way to fix this test is to create an empty file 
`libclang_rt.builtins-armv6m.a` in the fake resource dir.  The folder structure 
should match what you get from `clang/cmake/caches/BaremetalARM.cmake` 
(assuming that cache isn't completely bit-rotten)

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

MaskRay wrote:

I added an AIX workaround because AIX hasn't migrated to the new layout and two 
AIX tests would fail without the workaround. 

@daltenty 

https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From 1efa872cbf29fa3ad69a9c56aa7e270d44adbc32 Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../x86_64-unknown-linux/libclang_rt.msan.a   |   0
 .../libclang_rt.msan.a.syms   |   0
 .../libclang_rt.msan_cxx.a|   0
 .../libclang_rt.msan_cxx.a.syms   |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  62 +++---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   4 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |  10 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 110 +-
 32 files changed, 114 insertions(+), 128 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From 101f71337a84d705b15738ddf12ff8df6f06c3bd Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../x86_64-unknown-linux/libclang_rt.msan.a   |   0
 .../libclang_rt.msan.a.syms   |   0
 .../libclang_rt.msan_cxx.a|   0
 .../libclang_rt.msan_cxx.a.syms   |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  62 ---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   4 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |  10 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 104 +-
 32 files changed, 111 insertions(+), 125 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 create mode 100644 

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-driver

Author: Fangrui Song (MaskRay)


Changes

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860

---

Patch is 53.97 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/81037.diff


32 Files Affected:

- (modified) clang/lib/Driver/ToolChain.cpp (+14-4) 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/aarch64-unknown-linux/libclang_rt.hwasan.a
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/aarch64-unknown-linux/libclang_rt.hwasan.a.syms
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/i386-unknown-linux/libclang_rt.asan.a 
() 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/i386-unknown-linux/libclang_rt.asan.a.syms
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/i686-unknown-linux/clang_rt.crtbegin.o
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/i686-unknown-linux/clang_rt.crtend.o 
() 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/clang_rt.crtbegin.o
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/clang_rt.crtend.o
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.asan.a
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.asan.a.syms
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.hwasan.a
 () 
- (renamed) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.hwasan.a.syms
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a.syms
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a.syms
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a
 () 
- (added) 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a.syms
 () 
- (modified) clang/test/Driver/arch-specific-libdir.c (+1-1) 
- (modified) clang/test/Driver/arm-compiler-rt.c (+1-1) 
- (modified) clang/test/Driver/baremetal-sysroot.cpp (+1-1) 
- (modified) clang/test/Driver/baremetal.cpp (+19-43) 
- (modified) clang/test/Driver/compiler-rt-unwind.c (+4-4) 
- (modified) clang/test/Driver/coverage-ld.c (+1-1) 
- (modified) clang/test/Driver/fuchsia.c (+3-3) 
- (modified) clang/test/Driver/instrprof-ld.c (+3-3) 
- (modified) clang/test/Driver/linux-ld.c (+8-8) 
- (modified) clang/test/Driver/print-libgcc-file-name-clangrt.c (+1-1) 
- (modified) clang/test/Driver/sanitizer-ld.c (+52-52) 


``diff
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 657577cea6c7d8..1d2c9447770c48 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , 
StringRef Component,
   // Check for runtime files in the new layout without the architecture first.
   std::string CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false);
+  SmallString<128> Path;
   for (const auto  : getLibraryPaths()) {
 SmallString<128> P(LibPath);
 llvm::sys::path::append(P, CRTBasename);
 if (getVFS().exists(P))
   return std::string(P);
+if (Path.empty())
+  Path = P;
   }
+  if (getTriple().isOSAIX())
+Path.clear();
 
-  // Fall back to the old expected compiler-rt name if the new one does not
-  // exist.
+  // Check the filename for the old layout if the new one does not exist.
   CRTBasename =
   buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true);
-  SmallString<128> Path(getCompilerRTPath());
-  llvm::sys::path::append(Path, CRTBasename);
+  SmallString<128> OldPath(getCompilerRTPath());
+  

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay ready_for_review 
https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From 610b14d9998793f2f04a4334bcae2408d4b55b78 Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../x86_64-unknown-linux/libclang_rt.msan.a   |   0
 .../libclang_rt.msan.a.syms   |   0
 .../libclang_rt.msan_cxx.a|   0
 .../libclang_rt.msan_cxx.a.syms   |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  62 ---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   2 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |   6 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 104 +-
 32 files changed, 108 insertions(+), 122 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 create mode 100644 

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay edited 
https://github.com/llvm/llvm-project/pull/81037
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From f332e700637f9dfec5712100b8608737f75dd255 Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../x86_64-unknown-linux/libclang_rt.msan.a   |   0
 .../libclang_rt.msan.a.syms   |   0
 .../libclang_rt.msan_cxx.a|   0
 .../libclang_rt.msan_cxx.a.syms   |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  62 ---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   2 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |   6 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 104 +-
 32 files changed, 108 insertions(+), 122 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms
 create mode 100644 

[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)

2024-02-19 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay updated 
https://github.com/llvm/llvm-project/pull/81037

>From f246fe8c72f4f3fcb88bdbaaff5c6f23f35d58bf Mon Sep 17 00:00:00 2001
From: Fangrui Song 
Date: Wed, 7 Feb 2024 12:56:05 -0800
Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not
 found

BSD/Linux/OS390x enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default.
When a compiler-rt library is not found, we currently report an
incorrect filename `libclang_rt.XXX-$arch.a`
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or 
directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

With this change, we will correctly report:
```
% /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a
ld.lld: error: cannot open 
/tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No 
such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860
---
 clang/lib/Driver/ToolChain.cpp|  18 ++-
 .../libclang_rt.hwasan.a} |   0
 .../libclang_rt.hwasan.a.syms}|   0
 .../libclang_rt.asan.a}   |   0
 .../libclang_rt.asan.a.syms}  |   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../clang_rt.crtbegin.o}  |   0
 .../clang_rt.crtend.o}|   0
 .../libclang_rt.msan.a}   |   0
 .../libclang_rt.msan.a.syms}  |   0
 .../libclang_rt.msan_cxx.a}   |   0
 .../libclang_rt.msan_cxx.a.syms}  |   0
 .../x86_64-unknown-linux/libclang_rt.tsan.a   |   0
 .../libclang_rt.tsan.a.syms   |   0
 .../libclang_rt.tsan_cxx.a|   0
 .../libclang_rt.tsan_cxx.a.syms   |   0
 clang/test/Driver/arch-specific-libdir.c  |   2 +-
 clang/test/Driver/arm-compiler-rt.c   |   2 +-
 clang/test/Driver/baremetal-sysroot.cpp   |   2 +-
 clang/test/Driver/baremetal.cpp   |  62 ---
 clang/test/Driver/compiler-rt-unwind.c|   8 +-
 clang/test/Driver/coverage-ld.c   |   2 +-
 clang/test/Driver/fuchsia.c   |   6 +-
 clang/test/Driver/instrprof-ld.c  |   6 +-
 clang/test/Driver/linux-ld.c  |  16 +--
 .../Driver/print-libgcc-file-name-clangrt.c   |   2 +-
 clang/test/Driver/sanitizer-ld.c  | 104 +-
 28 files changed, 108 insertions(+), 122 deletions(-)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms 
=> aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms
 => i386-unknown-linux/libclang_rt.asan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms 
=> i686-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms
 => i686-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms 
=> x86_64-unknown-linux/clang_rt.crtbegin.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/clang_rt.crtend.o} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms 
=> x86_64-unknown-linux/libclang_rt.msan.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.msan.a.syms} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms
 => x86_64-unknown-linux/libclang_rt.msan_cxx.a} (100%)
 rename 
clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms
 => x86_64-unknown-linux/libclang_rt.msan_cxx.a.syms} (100%)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a.syms
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a.syms

diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index