diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-20 14:02:22 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-20 14:02:22 +0000 |
commit | ffe2e06f710e9edfc89b5afeeb33a3d32cd75f57 (patch) | |
tree | e0aae83487257ab524d94703ae50c71c87b8a8e5 | |
parent | 35728c34658c2d99fbe3a033d323a8bb42d8b2a1 (diff) | |
download | bcm5719-llvm-ffe2e06f710e9edfc89b5afeeb33a3d32cd75f57.tar.gz bcm5719-llvm-ffe2e06f710e9edfc89b5afeeb33a3d32cd75f57.zip |
Don't go on an infinite loop on a missing ";".
Thanks to Will Dietz for reporting the issue.
llvm-svn: 273157
-rw-r--r-- | lld/ELF/SymbolListFile.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/Inputs/version-script-err.script | 4 | ||||
-rw-r--r-- | lld/test/ELF/version-script-err.s | 5 |
3 files changed, 10 insertions, 1 deletions
diff --git a/lld/ELF/SymbolListFile.cpp b/lld/ELF/SymbolListFile.cpp index 2d5d1c52371..86e77edcae1 100644 --- a/lld/ELF/SymbolListFile.cpp +++ b/lld/ELF/SymbolListFile.cpp @@ -115,7 +115,7 @@ void VersionScriptParser::parseVersionSymbols(StringRef Version) { for (;;) { StringRef Cur = peek(); - if (Cur == "}" || Cur == "local:") + if (Cur == "}" || Cur == "local:" || Error) return; next(); Globals->push_back(Cur); diff --git a/lld/test/ELF/Inputs/version-script-err.script b/lld/test/ELF/Inputs/version-script-err.script new file mode 100644 index 00000000000..37de5980466 --- /dev/null +++ b/lld/test/ELF/Inputs/version-script-err.script @@ -0,0 +1,4 @@ +{ + global: + foo +}; diff --git a/lld/test/ELF/version-script-err.s b/lld/test/ELF/version-script-err.s new file mode 100644 index 00000000000..d0813427158 --- /dev/null +++ b/lld/test/ELF/version-script-err.s @@ -0,0 +1,5 @@ +// REQUIRES: x86 + +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +// RUN: not ld.lld -shared %t.o -o %t.so --version-script %p/Inputs/version-script-err.script 2>&1 | FileCheck %s +// CHECK: ; expected, but got } |