Skip to content

Commit

Permalink
Preserve escape sequences in documentation comments on macro expansion
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
barosl committed Jul 9, 2015
1 parent 92a95fe commit 5c60d1d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/libsyntax/ast.rs
Expand Up @@ -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,
}))
}
Expand Down
25 changes: 25 additions & 0 deletions 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() { }

0 comments on commit 5c60d1d

Please sign in to comment.