]> git.lizzy.rs Git - rust.git/commitdiff
added components for testing. added outlives test to the check_crate function of...
authortoidiu <toidiu@protonmail.com>
Thu, 28 Sep 2017 01:01:48 +0000 (21:01 -0400)
committertoidiu <toidiu@protonmail.com>
Mon, 16 Oct 2017 18:26:17 +0000 (14:26 -0400)
src/librustc_typeck/diagnostics.rs
src/librustc_typeck/lib.rs
src/librustc_typeck/outlives/mod.rs
src/librustc_typeck/outlives/test.rs

index 8df973555744b31f8cc9e81a75fa4cc628d002cf..5f74102973170b76ebeb2448e33850bdb549db1f 100644 (file)
@@ -4679,4 +4679,5 @@ pub fn method(&self) {} // It's now public.
     E0627, // yield statement outside of generator literal
     E0632, // cannot provide explicit type parameters when `impl Trait` is used in
            // argument position.
+    E0628, // infer outlives
 }
index 9cf954cecc90e45011793bf1ba65ab4fba238ae1..ea4ce64e487c53877c6fb0f6b74efc5f208c6bd8 100644 (file)
@@ -289,6 +289,7 @@ pub fn provide(providers: &mut Providers) {
     coherence::provide(providers);
     check::provide(providers);
     variance::provide(providers);
+    outlives::provide(providers);
 }
 
 pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>)
@@ -319,10 +320,10 @@ pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>)
              variance::test::test_variance(tcx));
     })?;
 
-//    tcx.sess.track_errors(|| {
-//        time(time_passes, "outlives testing", ||
-//            outlives::test::test_inferred_outlives(tcx));
-//    })?;
+    tcx.sess.track_errors(|| {
+        time(time_passes, "outlives testing", ||
+            outlives::test::test_inferred_outlives(tcx));
+    })?;
 
     time(time_passes, "wf checking", || check::check_wf_new(tcx))?;
 
index d496ed0e46d8617ef4d7be1724d6b0fd9074f222..1127028cbc8c7c052867a20667b29d3791480cb9 100644 (file)
 
 use rustc::hir::def_id::DefId;
 use rustc::ty::{self, TyCtxt};
+use rustc::ty::maps::Providers;
 
 /// Code to write unit test for outlives.
 pub mod test;
 
+pub fn provide(providers: &mut Providers) {
+    *providers = Providers {
+        inferred_outlives_of,
+        ..*providers
+    };
+}
+
 //todo
-pub fn inferred_outlives_of<'a, 'tcx>(_tcx: TyCtxt<'a, 'tcx, 'tcx>,
-                                  _def_id: DefId)
+fn inferred_outlives_of<'a, 'tcx>(_tcx: TyCtxt<'a, 'tcx, 'tcx>, _def_id: DefId)
                                   -> Vec<ty::Predicate<'tcx>> {
     Vec::new()
 }
index 0d45fc58637841adc9592ef2aa7ecd88101751da..665b3d57d9105e9307492962820b3f773366a3dd 100644 (file)
@@ -8,34 +8,34 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-//use rustc::hir;
-//use rustc::hir::itemlikevisit::ItemLikeVisitor;
+use rustc::hir;
+use rustc::hir::itemlikevisit::ItemLikeVisitor;
 use rustc::ty::TyCtxt;
 
-//pub fn test_outlives<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
-//    tcx.hir.krate().visit_all_item_likes(&mut OutlivesTest { tcx });
-//}
+pub fn test_inferred_outlives<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
+    tcx.hir.krate().visit_all_item_likes(&mut OutlivesTest { tcx });
+}
 
 struct OutlivesTest<'a, 'tcx: 'a> {
     tcx: TyCtxt<'a, 'tcx, 'tcx>
 }
 
-//impl<'a, 'tcx> ItemLikeVisitor<'tcx> for OutlivesTest<'a, 'tcx> {
-//    fn visit_item(&mut self, item: &'tcx hir::Item) {
-//        let item_def_id = self.tcx.hir.local_def_id(item.id);
-//
-//        // For unit testing: check for a special "rustc_outlives"
-//        // attribute and report an error with various results if found.
-//        if self.tcx.has_attr(item_def_id, "rustc_outlives") {
-//            let outlives_of = self.tcx.outlives_of(item_def_id);
-//            span_err!(self.tcx.sess,
-//                      item.span,
-//                      E0208,
-//                      "{:?}",
-//                      outlives_of);
-//        }
-//    }
-//
-//    fn visit_trait_item(&mut self, _: &'tcx hir::TraitItem) { }
-//    fn visit_impl_item(&mut self, _: &'tcx hir::ImplItem) { }
-//}
+impl<'a, 'tcx> ItemLikeVisitor<'tcx> for OutlivesTest<'a, 'tcx> {
+    fn visit_item(&mut self, item: &'tcx hir::Item) {
+        let item_def_id = self.tcx.hir.local_def_id(item.id);
+
+        // For unit testing: check for a special "rustc_outlives"
+        // attribute and report an error with various results if found.
+        if self.tcx.has_attr(item_def_id, "rustc_outlives") {
+            let inferred_outlives_of = self.tcx.inferred_outlives_of(item_def_id);
+            span_err!(self.tcx.sess,
+                      item.span,
+                      E0628,
+                      "{:?}",
+                      inferred_outlives_of);
+        }
+    }
+
+    fn visit_trait_item(&mut self, _: &'tcx hir::TraitItem) { }
+    fn visit_impl_item(&mut self, _: &'tcx hir::ImplItem) { }
+}