]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_typeck/src/variance/test.rs
New upstream version 1.57.0+dfsg1
[rustc.git] / compiler / rustc_typeck / src / variance / test.rs
CommitLineData
dfeec247
XL
1use rustc_errors::struct_span_err;
2use rustc_hir as hir;
3use rustc_hir::itemlikevisit::ItemLikeVisitor;
ba9703b0 4use rustc_middle::ty::TyCtxt;
dfeec247 5use rustc_span::symbol::sym;
60c5eb7d 6
416331ca 7pub fn test_variance(tcx: TyCtxt<'_>) {
c295e0f8 8 tcx.hir().visit_all_item_likes(&mut VarianceTest { tcx });
7cac9316
XL
9}
10
dc9dc135
XL
11struct VarianceTest<'tcx> {
12 tcx: TyCtxt<'tcx>,
7cac9316
XL
13}
14
dc9dc135 15impl ItemLikeVisitor<'tcx> for VarianceTest<'tcx> {
dfeec247 16 fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
7cac9316
XL
17 // For unit testing: check for a special "rustc_variance"
18 // attribute and report an error with various results if found.
6a06907d
XL
19 if self.tcx.has_attr(item.def_id.to_def_id(), sym::rustc_variance) {
20 let variances_of = self.tcx.variances_of(item.def_id);
dfeec247 21 struct_span_err!(self.tcx.sess, item.span, E0208, "{:?}", variances_of).emit();
7cac9316
XL
22 }
23 }
24
dfeec247
XL
25 fn visit_trait_item(&mut self, _: &'tcx hir::TraitItem<'tcx>) {}
26 fn visit_impl_item(&mut self, _: &'tcx hir::ImplItem<'tcx>) {}
fc512014 27 fn visit_foreign_item(&mut self, _: &'tcx hir::ForeignItem<'tcx>) {}
7cac9316 28}