From e6b032a9efa4df2932bd6999c4c9dc7a74a12e24 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Thu, 27 Feb 2014 12:16:18 +1100 Subject: [PATCH] Fix a pretty printer crash on `/***`. The pretty printer was treating block comments with more than two asterisks after the first slash (e.g. `/***`) as doc comments (which are attributes), whereas in actual fact they are just regular comments. --- src/libsyntax/parse/comments.rs | 2 +- .../pretty/block-comment-multiple-asterisks.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/test/pretty/block-comment-multiple-asterisks.rs diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs index e0ae9ce281214..bd1c4f9babb81 100644 --- a/src/libsyntax/parse/comments.rs +++ b/src/libsyntax/parse/comments.rs @@ -260,7 +260,7 @@ fn read_block_comment(rdr: &StringReader, let mut curr_line = ~"/*"; // doc-comments are not really comments, they are attributes - if rdr.curr_is('*') || rdr.curr_is('!') { + if (rdr.curr_is('*') && !nextch_is(rdr, '*')) || rdr.curr_is('!') { while !(rdr.curr_is('*') && nextch_is(rdr, '/')) && !is_eof(rdr) { curr_line.push_char(rdr.curr.get().unwrap()); bump(rdr); diff --git a/src/test/pretty/block-comment-multiple-asterisks.rs b/src/test/pretty/block-comment-multiple-asterisks.rs new file mode 100644 index 0000000000000..f9f657fa8e207 --- /dev/null +++ b/src/test/pretty/block-comment-multiple-asterisks.rs @@ -0,0 +1,14 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// pp-exact +/*** +More than two asterisks means that it isn't a doc comment. +*/