File tree Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -391,9 +391,18 @@ impl<'a> LoweringContext<'a> {
391391 }
392392
393393 fn lower_ty_param ( & mut self , tp : & TyParam ) -> hir:: TyParam {
394+ let mut name = tp. ident . name ;
395+
396+ // Don't expose `Self` (recovered "keyword used as ident" parse error).
397+ // `rustc::ty` expects `Self` to be only used for a trait's `Self`.
398+ // Instead, use gensym("Self") to create a distinct name that looks the same.
399+ if name == token:: keywords:: SelfType . name ( ) {
400+ name = token:: gensym ( "Self" ) ;
401+ }
402+
394403 hir:: TyParam {
395404 id : tp. id ,
396- name : tp . ident . name ,
405+ name : name,
397406 bounds : self . lower_bounds ( & tp. bounds ) ,
398407 default : tp. default . as_ref ( ) . map ( |x| self . lower_ty ( x) ) ,
399408 span : tp. span ,
Original file line number Diff line number Diff line change 1+ // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // compile-flags: -Z continue-parse-after-error
12+
13+ struct Foo < Self > ( Self ) ;
14+ //~^ ERROR expected identifier, found keyword `Self`
15+
16+ trait Bar < Self > { }
17+ //~^ ERROR expected identifier, found keyword `Self`
18+
19+ fn main ( ) { }
You can’t perform that action at this time.
0 commit comments