summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-06-05 15:59:34 -0700
committerFangrui Song <maskray@google.com>2020-06-16 22:31:33 -0700
commitdc94773a91c85a05f4f249153cb1e9522b3beb5e (patch)
treee361498b056e775ee4f624e7d5bf7712a6d4db6f
parent4d0626a822be3cfe1809d9b3ba976e5bda0b02e4 (diff)
downloadbcm5719-llvm-dc94773a91c85a05f4f249153cb1e9522b3beb5e.tar.gz
bcm5719-llvm-dc94773a91c85a05f4f249153cb1e9522b3beb5e.zip
[ELF] Don't cause assertion failure if --dynamic-list or --version-script takes an empty file
Fixes PR46184 Report line 1 of the last memory buffer. (cherry picked from commit ac6abc99e2794e4674a8498f817fda19b176bbfe)
-rw-r--r--lld/ELF/ScriptLexer.cpp6
-rw-r--r--lld/test/ELF/invalid-dynamic-list.test4
-rw-r--r--lld/test/ELF/version-script-err.s5
3 files changed, 14 insertions, 1 deletions
diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp
index e0ff56fec3f..1fed3d06227 100644
--- a/lld/ELF/ScriptLexer.cpp
+++ b/lld/ELF/ScriptLexer.cpp
@@ -52,6 +52,8 @@ StringRef ScriptLexer::getLine() {
// Returns 1-based line number of the current token.
size_t ScriptLexer::getLineNumber() {
+ if (pos == 0)
+ return 1;
StringRef s = getCurrentMB().getBuffer();
StringRef tok = tokens[pos - 1];
return s.substr(0, tok.data() - s.data()).count('\n') + 1;
@@ -292,7 +294,9 @@ static bool encloses(StringRef s, StringRef t) {
MemoryBufferRef ScriptLexer::getCurrentMB() {
// Find input buffer containing the current token.
- assert(!mbs.empty() && pos > 0);
+ assert(!mbs.empty());
+ if (pos == 0)
+ return mbs.back();
for (MemoryBufferRef mb : mbs)
if (encloses(mb.getBuffer(), tokens[pos - 1]))
return mb;
diff --git a/lld/test/ELF/invalid-dynamic-list.test b/lld/test/ELF/invalid-dynamic-list.test
index f560ceed0f8..3a2f9de6f5c 100644
--- a/lld/test/ELF/invalid-dynamic-list.test
+++ b/lld/test/ELF/invalid-dynamic-list.test
@@ -9,6 +9,10 @@
# RUN: mkdir -p %t.dir
+# RUN: echo > %tempty.list
+# RUN: not ld.lld --dynamic-list %tempty.list 2>&1 | FileCheck --check-prefix=EMPTY %s
+# EMPTY: error: {{.*}}.list:1: unexpected EOF
+
# RUN: echo foobar > %t1
# RUN: not ld.lld --dynamic-list %t1 2>&1 | FileCheck -check-prefix=ERR1 %s
# ERR1: {{.*}}:1: { expected, but got foobar
diff --git a/lld/test/ELF/version-script-err.s b/lld/test/ELF/version-script-err.s
index bd786d91336..b7039444cd9 100644
--- a/lld/test/ELF/version-script-err.s
+++ b/lld/test/ELF/version-script-err.s
@@ -8,3 +8,8 @@
// RUN: not ld.lld --version-script %terr1.script -shared %t.o -o %t.so 2>&1 | \
// RUN: FileCheck -check-prefix=ERR1 %s
// ERR1: {{.*}}:1: unclosed quote
+
+// RUN: echo > %tempty.ver
+// RUN: not ld.lld --version-script %tempty.ver 2>&1 | \
+// RUN: FileCheck --check-prefix=ERR2 %s
+// ERR2: error: {{.*}}.ver:1: unexpected EOF
OpenPOWER on IntegriCloud