diff options
| author | Barosl Lee <vcs@barosl.com> | 2015-07-02 03:55:18 +0900 |
|---|---|---|
| committer | Barosl Lee <vcs@barosl.com> | 2015-07-10 01:30:52 +0900 |
| commit | 5c60d1d902da615a770ef211217a46d92b3aaae7 (patch) | |
| tree | 76dc3b63f7892c17d5a28159eabf5edec77a9a82 | |
| parent | 92a95fe5507a41bdfb055913bec1be24509a5146 (diff) | |
| download | rust-5c60d1d902da615a770ef211217a46d92b3aaae7.tar.gz rust-5c60d1d902da615a770ef211217a46d92b3aaae7.zip | |
Preserve escape sequences in documentation comments on macro expansion
Escape sequences in documentation comments must not be parsed as a normal string when expanding a macro, otherwise some innocent but invalid-escape-sequence-looking comments will trigger an ICE. Although this commit replaces normal string literals with raw string literals in macro expansion, this shouldn't be much a problem considering documentation comments are converted into attributes before being passed to a macro anyways. Fixes #25929. Fixes #25943.
| -rw-r--r-- | src/libsyntax/ast.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/macro-doc-escapes.rs | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index e844b206cc0..a944acad84d 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1104,7 +1104,7 @@ impl TokenTree { tts: vec![TtToken(sp, token::Ident(token::str_to_ident("doc"), token::Plain)), TtToken(sp, token::Eq), - TtToken(sp, token::Literal(token::Str_(name), None))], + TtToken(sp, token::Literal(token::StrRaw(name, 0), None))], close_span: sp, })) } diff --git a/src/test/run-pass/macro-doc-escapes.rs b/src/test/run-pass/macro-doc-escapes.rs new file mode 100644 index 00000000000..ea92f0ffebe --- /dev/null +++ b/src/test/run-pass/macro-doc-escapes.rs @@ -0,0 +1,25 @@ +// Copyright 2015 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// When expanding a macro, documentation attributes (including documentation comments) must be +// passed "as is" without being parsed. Otherwise, some text will be incorrectly interpreted as +// escape sequences, leading to an ICE. +// +// Related issues: #25929, #25943 + +macro_rules! homura { + (#[$x:meta]) => () +} + +homura! { + /// \madoka \x41 +} + +fn main() { } |
