diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index 2352ac2f9dbc..1cfd96c97cb1 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -2622,6 +2622,9 @@ fn parse_from_source_str(f: fn (p: parser) -> T, { let p = new_parser_from_source_str(sess, cfg, name, ss, source); let r = f(p); + if !p.reader.is_eof() { + p.reader.fatal("expected end-of-string"); + } sess.chpos = p.reader.chpos; sess.byte_pos = sess.byte_pos + p.reader.pos; ret r; diff --git a/src/test/compile-fail/qquote.rs b/src/test/compile-fail/qquote-1.rs similarity index 100% rename from src/test/compile-fail/qquote.rs rename to src/test/compile-fail/qquote-1.rs diff --git a/src/test/compile-fail/qquote-2.rs b/src/test/compile-fail/qquote-2.rs new file mode 100644 index 000000000000..a29543e29d82 --- /dev/null +++ b/src/test/compile-fail/qquote-2.rs @@ -0,0 +1,48 @@ +// xfail-pretty + +use std; +use rustc; + +import rustc::*; +import std::io::*; + +import rustc::driver::diagnostic; +import rustc::syntax::ast; +import rustc::syntax::codemap; +import rustc::syntax::parse::parser; +import rustc::syntax::print::*; + +fn new_parse_sess() -> parser::parse_sess { + fail; +} + +iface fake_ext_ctxt { + fn session() -> fake_session; +} + +type fake_options = {cfg: ast::crate_cfg}; + +type fake_session = {opts: @fake_options, + parse_sess: parser::parse_sess}; + +impl of fake_ext_ctxt for fake_session { + fn session() -> fake_session {self} +} + +fn mk_ctxt() -> fake_ext_ctxt { + let opts : fake_options = {cfg: []}; + {opts: @opts, parse_sess: new_parse_sess()} as fake_ext_ctxt +} + + +fn main() { + let ext_cx = mk_ctxt(); + + let stmt = #ast(stmt){let x int = 20;}; //! ERROR expected end-of-string + check_pp(*stmt, pprust::print_stmt, ""); +} + +fn check_pp(expr: T, f: fn(pprust::ps, T), expect: str) { + fail; +} +