]>
git.proxmox.com Git - rustc.git/blob - src/librustc_typeck/variance/test.rs
1 use rustc_errors
::struct_span_err
;
3 use rustc_hir
::itemlikevisit
::ItemLikeVisitor
;
4 use rustc_middle
::ty
::TyCtxt
;
5 use rustc_span
::symbol
::sym
;
7 pub fn test_variance(tcx
: TyCtxt
<'_
>) {
8 tcx
.hir().krate().visit_all_item_likes(&mut VarianceTest { tcx }
);
11 struct VarianceTest
<'tcx
> {
15 impl ItemLikeVisitor
<'tcx
> for VarianceTest
<'tcx
> {
16 fn visit_item(&mut self, item
: &'tcx hir
::Item
<'tcx
>) {
17 let item_def_id
= self.tcx
.hir().local_def_id(item
.hir_id
);
19 // For unit testing: check for a special "rustc_variance"
20 // attribute and report an error with various results if found.
21 if self.tcx
.has_attr(item_def_id
.to_def_id(), sym
::rustc_variance
) {
22 let variances_of
= self.tcx
.variances_of(item_def_id
);
23 struct_span_err
!(self.tcx
.sess
, item
.span
, E0208
, "{:?}", variances_of
).emit();
27 fn visit_trait_item(&mut self, _
: &'tcx hir
::TraitItem
<'tcx
>) {}
28 fn visit_impl_item(&mut self, _
: &'tcx hir
::ImplItem
<'tcx
>) {}