about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/comp/syntax/parse/lexer.rs7
-rw-r--r--src/test/compile-fail/unbalanced-doublequote.rs8
2 files changed, 15 insertions, 0 deletions
diff --git a/src/comp/syntax/parse/lexer.rs b/src/comp/syntax/parse/lexer.rs
index e36b26c559e..f10701ceba5 100644
--- a/src/comp/syntax/parse/lexer.rs
+++ b/src/comp/syntax/parse/lexer.rs
@@ -490,8 +490,15 @@ fn next_token_inner(rdr: reader) -> token::token {
         ret token::LIT_CHAR(c2);
       }
       '"' {
+        let n = rdr.get_chpos();
         rdr.bump();
         while rdr.curr() != '"' {
+            if rdr.is_eof() {
+                rdr.err(#fmt["unterminated double quote string: %s",
+                             rdr.get_str_from(n)]);
+                fail;
+            }
+
             let ch = rdr.curr();
             rdr.bump();
             alt ch {
diff --git a/src/test/compile-fail/unbalanced-doublequote.rs b/src/test/compile-fail/unbalanced-doublequote.rs
new file mode 100644
index 00000000000..38df31a2b64
--- /dev/null
+++ b/src/test/compile-fail/unbalanced-doublequote.rs
@@ -0,0 +1,8 @@
+// -*- rust -*-
+
+// error-pattern: unterminated double quote string
+
+
+fn main() {
+    "
+}