File tree 2 files changed +29
-1
lines changed
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> {
391
391
}
392
392
393
393
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
+
394
403
hir:: TyParam {
395
404
id : tp. id ,
396
- name : tp . ident . name ,
405
+ name : name,
397
406
bounds : self . lower_bounds ( & tp. bounds ) ,
398
407
default : tp. default . as_ref ( ) . map ( |x| self . lower_ty ( x) ) ,
399
408
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