add test
This commit is contained in:
parent
67f319c30b
commit
8fc782afc2
3 changed files with 59 additions and 0 deletions
|
@ -191,6 +191,12 @@ fn is_ty_or_ty_ctxt(cx: &LateContext<'_>, ty: &Ty<'_>) -> Option<String> {
|
||||||
Res::SelfTy(None, Some((did, _))) => {
|
Res::SelfTy(None, Some((did, _))) => {
|
||||||
if let ty::Adt(adt, substs) = cx.tcx.type_of(did).kind() {
|
if let ty::Adt(adt, substs) = cx.tcx.type_of(did).kind() {
|
||||||
if cx.tcx.is_diagnostic_item(sym::Ty, adt.did) {
|
if cx.tcx.is_diagnostic_item(sym::Ty, adt.did) {
|
||||||
|
// NOTE: This path is currently unreachable as `Ty<'tcx>` is
|
||||||
|
// defined as a type alias meaning that `impl<'tcx> Ty<'tcx>`
|
||||||
|
// is not actually allowed.
|
||||||
|
//
|
||||||
|
// I(@lcnr) still kept this branch in so we don't miss this
|
||||||
|
// if we ever change it in the future.
|
||||||
return Some(format!("Ty<{}>", substs[0]));
|
return Some(format!("Ty<{}>", substs[0]));
|
||||||
} else if cx.tcx.is_diagnostic_item(sym::TyCtxt, adt.did) {
|
} else if cx.tcx.is_diagnostic_item(sym::TyCtxt, adt.did) {
|
||||||
return Some(format!("TyCtxt<{}>", substs[0]));
|
return Some(format!("TyCtxt<{}>", substs[0]));
|
||||||
|
|
33
src/test/ui-fulldeps/internal-lints/pass_ty_by_ref_self.rs
Normal file
33
src/test/ui-fulldeps/internal-lints/pass_ty_by_ref_self.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// NOTE: This test doesn't actually require `fulldeps`
|
||||||
|
// so we could instead use it as an `ui` test.
|
||||||
|
//
|
||||||
|
// Considering that all other `internal-lints` are tested here
|
||||||
|
// this seems like the cleaner solution though.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
|
#![deny(rustc::ty_pass_by_reference)]
|
||||||
|
#![allow(unused)]
|
||||||
|
|
||||||
|
#[rustc_diagnostic_item = "TyCtxt"]
|
||||||
|
struct TyCtxt<'tcx> {
|
||||||
|
inner: &'tcx (),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'tcx> TyCtxt<'tcx> {
|
||||||
|
fn by_value(self) {} // OK
|
||||||
|
fn by_ref(&self) {} //~ ERROR passing `TyCtxt<'tcx>` by reference
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct TyS<'tcx> {
|
||||||
|
inner: &'tcx (),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rustc_diagnostic_item = "Ty"]
|
||||||
|
type Ty<'tcx> = &'tcx TyS<'tcx>;
|
||||||
|
|
||||||
|
impl<'tcx> TyS<'tcx> {
|
||||||
|
fn by_value(self: Ty<'tcx>) {}
|
||||||
|
fn by_ref(self: &Ty<'tcx>) {} //~ ERROR passing `Ty<'tcx>` by reference
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,20 @@
|
||||||
|
error: passing `TyCtxt<'tcx>` by reference
|
||||||
|
--> $DIR/pass_ty_by_ref_self.rs:17:15
|
||||||
|
|
|
||||||
|
LL | fn by_ref(&self) {}
|
||||||
|
| ^^^^^ help: try passing by value: `TyCtxt<'tcx>`
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/pass_ty_by_ref_self.rs:7:9
|
||||||
|
|
|
||||||
|
LL | #![deny(rustc::ty_pass_by_reference)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: passing `Ty<'tcx>` by reference
|
||||||
|
--> $DIR/pass_ty_by_ref_self.rs:30:21
|
||||||
|
|
|
||||||
|
LL | fn by_ref(self: &Ty<'tcx>) {}
|
||||||
|
| ^^^^^^^^^ help: try passing by value: `Ty<'tcx>`
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue