Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lld
diff options
context:
space:
mode:
authorHans Wennborg <hans@chromium.org>2022-11-05 06:37:45 +0300
committerHans Wennborg <hans@chromium.org>2022-11-07 20:28:33 +0300
commit19a7939404a3b932c26cd2a6a29f0669acebd702 (patch)
treea226d0e78a793ed5c24ea5f190a29fa7c78c5a7e /lld
parent265a73043d34af25d88a238b84ed9c0c34321348 (diff)
[lld] Check errors from expanding response files
Previously the response file expansion code would print the error, but lld would not exit, which was odd. lld does response file expansion in the different drivers, but it's also done in main() first, so it's enough to check there. By checking for these errors we would have caught when D136090 introduced a bug that made lld print errors for response files which contained "-rpath @foo". Differental revision: https://reviews.llvm.org/D137477
Diffstat (limited to 'lld')
-rw-r--r--lld/test/ELF/basic.s6
-rw-r--r--lld/tools/lld/lld.cpp4
2 files changed, 9 insertions, 1 deletions
diff --git a/lld/test/ELF/basic.s b/lld/test/ELF/basic.s
index 33c01944b7c1..587fd1641500 100644
--- a/lld/test/ELF/basic.s
+++ b/lld/test/ELF/basic.s
@@ -218,6 +218,12 @@ _start:
# RUN: --check-prefix=INVRSP
# INVRSP: invalid response file quoting: patatino
+## Test erroring on a recursive response file, but only once.
+# RUN: echo @%t.responsefile > %t.responsefile
+# RUN: not ld.lld %t @%t.responsefile 2>&1 | FileCheck %s --check-prefix=RECRSP
+# RECRSP: recursive expansion of: '{{.*}}.responsefile'
+# RECRSP-NOT: recursive expansion of
+
# RUN: not ld.lld %t.foo -o /dev/null 2>&1 | \
# RUN: FileCheck -DMSG=%errc_ENOENT --check-prefix=MISSING %s
# MISSING: cannot open {{.*}}.foo: [[MSG]]
diff --git a/lld/tools/lld/lld.cpp b/lld/tools/lld/lld.cpp
index b0e28d15fa29..700c0b770e20 100644
--- a/lld/tools/lld/lld.cpp
+++ b/lld/tools/lld/lld.cpp
@@ -89,7 +89,9 @@ static bool isPETarget(std::vector<const char *> &v) {
SmallVector<const char *, 256> expandedArgs(v.data(), v.data() + v.size());
BumpPtrAllocator a;
StringSaver saver(a);
- cl::ExpandResponseFiles(saver, getDefaultQuotingStyle(), expandedArgs);
+ cl::ExpansionContext ECtx(saver.getAllocator(), getDefaultQuotingStyle());
+ if (Error Err = ECtx.expandResponseFiles(expandedArgs))
+ die(toString(std::move(Err)));
for (auto it = expandedArgs.begin(); it + 1 != expandedArgs.end(); ++it) {
if (StringRef(*it) != "-m")
continue;