[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