summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-06-20 14:02:22 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-06-20 14:02:22 +0000
commitffe2e06f710e9edfc89b5afeeb33a3d32cd75f57 (patch)
treee0aae83487257ab524d94703ae50c71c87b8a8e5
parent35728c34658c2d99fbe3a033d323a8bb42d8b2a1 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--lld/test/ELF/Inputs/version-script-err.script4
-rw-r--r--lld/test/ELF/version-script-err.s5
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 }
OpenPOWER on IntegriCloud