Fix missing syntax context in lifetime hygiene debug output
`-Zunpretty=expanded,hygiene` was not printing the syntax context for lifetimes. For example, two macro-generated lifetimes `'a` with different hygiene would both print as `/* 2538 */` instead of `/* 2538#0 */` and `/* 2538#1 */`, making it impossible to distinguish them. This was fixed by changing `print_lifetime` to call `ann_post()` with the full `Ident`, matching how regular identifiers are handled in `print_ident`.
This commit is contained in:
parent
ba284f468c
commit
a333f6f93c
3 changed files with 51 additions and 1 deletions
|
|
@ -1961,7 +1961,8 @@ impl<'a> State<'a> {
|
|||
}
|
||||
|
||||
fn print_lifetime(&mut self, lifetime: ast::Lifetime) {
|
||||
self.print_name(lifetime.ident.name)
|
||||
self.word(lifetime.ident.name.to_string());
|
||||
self.ann_post(lifetime.ident)
|
||||
}
|
||||
|
||||
fn print_lifetime_bounds(&mut self, bounds: &ast::GenericBounds) {
|
||||
|
|
|
|||
18
tests/ui/hygiene/unpretty-debug-lifetimes.rs
Normal file
18
tests/ui/hygiene/unpretty-debug-lifetimes.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
//@ check-pass
|
||||
//@ compile-flags: -Zunpretty=expanded,hygiene
|
||||
|
||||
// Regression test for lifetime hygiene annotations in -Zunpretty=expanded,hygiene
|
||||
// Previously, lifetimes were missing the #N syntax context suffix.
|
||||
|
||||
// Don't break whenever Symbol numbering changes
|
||||
//@ normalize-stdout: "\d+#" -> "0#"
|
||||
|
||||
#![feature(decl_macro)]
|
||||
#![feature(no_core)]
|
||||
#![no_core]
|
||||
|
||||
macro lifetime_hygiene($f:ident<$a:lifetime>) {
|
||||
fn $f<$a, 'a>() {}
|
||||
}
|
||||
|
||||
lifetime_hygiene!(f<'a>);
|
||||
31
tests/ui/hygiene/unpretty-debug-lifetimes.stdout
Normal file
31
tests/ui/hygiene/unpretty-debug-lifetimes.stdout
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
//@ check-pass
|
||||
//@ compile-flags: -Zunpretty=expanded,hygiene
|
||||
|
||||
// Regression test for lifetime hygiene annotations in -Zunpretty=expanded,hygiene
|
||||
// Previously, lifetimes were missing the #N syntax context suffix.
|
||||
|
||||
// Don't break whenever Symbol numbering changes
|
||||
//@ normalize-stdout: "\d+#" -> "0#"
|
||||
|
||||
#![feature /* 0#0 */(decl_macro)]
|
||||
#![feature /* 0#0 */(no_core)]
|
||||
#![no_core /* 0#0 */]
|
||||
|
||||
macro lifetime_hygiene
|
||||
/*
|
||||
0#0
|
||||
*/ {
|
||||
($f:ident<$a:lifetime>) => { fn $f<$a, 'a>() {} }
|
||||
}
|
||||
fn f /* 0#0 */<'a /* 0#0 */, 'a /* 0#1 */>() {}
|
||||
|
||||
|
||||
/*
|
||||
Expansions:
|
||||
crate0::{{expn0}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
crate0::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "lifetime_hygiene")
|
||||
|
||||
SyntaxContexts:
|
||||
#0: parent: #0, outer_mark: (crate0::{{expn0}}, Opaque)
|
||||
#1: parent: #0, outer_mark: (crate0::{{expn1}}, Opaque)
|
||||
*/
|
||||
Loading…
Add table
Add a link
Reference in a new issue