[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.
This commit is contained in:
parent
2ba016cd5c
commit
ac6abc99e2
|
|
@ -52,6 +52,8 @@ StringRef ScriptLexer::getLine() {
|
||||||
|
|
||||||
// Returns 1-based line number of the current token.
|
// Returns 1-based line number of the current token.
|
||||||
size_t ScriptLexer::getLineNumber() {
|
size_t ScriptLexer::getLineNumber() {
|
||||||
|
if (pos == 0)
|
||||||
|
return 1;
|
||||||
StringRef s = getCurrentMB().getBuffer();
|
StringRef s = getCurrentMB().getBuffer();
|
||||||
StringRef tok = tokens[pos - 1];
|
StringRef tok = tokens[pos - 1];
|
||||||
return s.substr(0, tok.data() - s.data()).count('\n') + 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() {
|
MemoryBufferRef ScriptLexer::getCurrentMB() {
|
||||||
// Find input buffer containing the current token.
|
// 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)
|
for (MemoryBufferRef mb : mbs)
|
||||||
if (encloses(mb.getBuffer(), tokens[pos - 1]))
|
if (encloses(mb.getBuffer(), tokens[pos - 1]))
|
||||||
return mb;
|
return mb;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,10 @@
|
||||||
|
|
||||||
# RUN: mkdir -p %t.dir
|
# 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: echo foobar > %t1
|
||||||
# RUN: not ld.lld --dynamic-list %t1 2>&1 | FileCheck -check-prefix=ERR1 %s
|
# RUN: not ld.lld --dynamic-list %t1 2>&1 | FileCheck -check-prefix=ERR1 %s
|
||||||
# ERR1: {{.*}}:1: { expected, but got foobar
|
# ERR1: {{.*}}:1: { expected, but got foobar
|
||||||
|
|
|
||||||
|
|
@ -8,3 +8,8 @@
|
||||||
// RUN: not ld.lld --version-script %terr1.script -shared %t.o -o /dev/null 2>&1 | \
|
// RUN: not ld.lld --version-script %terr1.script -shared %t.o -o /dev/null 2>&1 | \
|
||||||
// RUN: FileCheck -check-prefix=ERR1 %s
|
// RUN: FileCheck -check-prefix=ERR1 %s
|
||||||
// ERR1: {{.*}}:1: unclosed quote
|
// 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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue