// compile-flags: -Z unstable-options #![feature(rustc_private)] #![deny(rustc::ty_pass_by_reference)] #![allow(unused)] extern crate rustc_middle; use rustc_middle::ty::{Ty, TyCtxt}; fn ty_by_ref( ty_val: Ty<'_>, ty_ref: &Ty<'_>, //~ ERROR passing `Ty<'_>` by reference ty_ctxt_val: TyCtxt<'_>, ty_ctxt_ref: &TyCtxt<'_>, //~ ERROR passing `TyCtxt<'_>` by reference ) { } fn ty_multi_ref(ty_multi: &&Ty<'_>, ty_ctxt_multi: &&&&TyCtxt<'_>) {} //~^ ERROR passing `Ty<'_>` by reference //~^^ ERROR passing `TyCtxt<'_>` by reference trait T { fn ty_by_ref_in_trait( ty_val: Ty<'_>, ty_ref: &Ty<'_>, //~ ERROR passing `Ty<'_>` by reference ty_ctxt_val: TyCtxt<'_>, ty_ctxt_ref: &TyCtxt<'_>, //~ ERROR passing `TyCtxt<'_>` by reference ); fn ty_multi_ref_in_trait(ty_multi: &&Ty<'_>, ty_ctxt_multi: &&&&TyCtxt<'_>); //~^ ERROR passing `Ty<'_>` by reference //~^^ ERROR passing `TyCtxt<'_>` by reference } struct Foo; impl T for Foo { fn ty_by_ref_in_trait( ty_val: Ty<'_>, ty_ref: &Ty<'_>, ty_ctxt_val: TyCtxt<'_>, ty_ctxt_ref: &TyCtxt<'_>, ) { } fn ty_multi_ref_in_trait(ty_multi: &&Ty<'_>, ty_ctxt_multi: &&&&TyCtxt<'_>) {} } impl Foo { fn ty_by_ref_assoc( ty_val: Ty<'_>, ty_ref: &Ty<'_>, //~ ERROR passing `Ty<'_>` by reference ty_ctxt_val: TyCtxt<'_>, ty_ctxt_ref: &TyCtxt<'_>, //~ ERROR passing `TyCtxt<'_>` by reference ) { } fn ty_multi_ref_assoc(ty_multi: &&Ty<'_>, ty_ctxt_multi: &&&&TyCtxt<'_>) {} //~^ ERROR passing `Ty<'_>` by reference //~^^ ERROR passing `TyCtxt<'_>` by reference } fn main() {}