@@ -353,28 +353,10 @@ impl<'a, 'gcx, 'tcx> Env<'a, 'gcx, 'tcx> {
353
353
self . infcx . tcx . mk_imm_ref ( r, self . tcx ( ) . types . isize )
354
354
}
355
355
356
- pub fn t_rptr_static ( & self ) -> Ty < ' tcx > {
357
- self . infcx . tcx . mk_imm_ref ( self . infcx . tcx . types . re_static ,
358
- self . tcx ( ) . types . isize )
359
- }
360
-
361
- pub fn t_rptr_empty ( & self ) -> Ty < ' tcx > {
362
- self . infcx . tcx . mk_imm_ref ( self . infcx . tcx . types . re_empty ,
363
- self . tcx ( ) . types . isize )
364
- }
365
-
366
356
pub fn sub ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > ) -> InferResult < ' tcx , ( ) > {
367
357
self . infcx . at ( & ObligationCause :: dummy ( ) , self . param_env ) . sub ( t1, t2)
368
358
}
369
359
370
- pub fn lub ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > ) -> InferResult < ' tcx , Ty < ' tcx > > {
371
- self . infcx . at ( & ObligationCause :: dummy ( ) , self . param_env ) . lub ( t1, t2)
372
- }
373
-
374
- pub fn glb ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > ) -> InferResult < ' tcx , Ty < ' tcx > > {
375
- self . infcx . at ( & ObligationCause :: dummy ( ) , self . param_env ) . glb ( t1, t2)
376
- }
377
-
378
360
/// Checks that `t1 <: t2` is true (this may register additional
379
361
/// region checks).
380
362
pub fn check_sub ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > ) {
@@ -399,37 +381,6 @@ impl<'a, 'gcx, 'tcx> Env<'a, 'gcx, 'tcx> {
399
381
}
400
382
}
401
383
}
402
-
403
- /// Checks that `LUB(t1,t2) == t_lub`
404
- pub fn check_lub ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > , t_lub : Ty < ' tcx > ) {
405
- match self . lub ( t1, t2) {
406
- Ok ( InferOk { obligations, value : t } ) => {
407
- // None of these tests should require nested obligations:
408
- assert ! ( obligations. is_empty( ) ) ;
409
-
410
- self . assert_eq ( t, t_lub) ;
411
- }
412
- Err ( ref e) => panic ! ( "unexpected error in LUB: {}" , e) ,
413
- }
414
- }
415
-
416
- /// Checks that `GLB(t1,t2) == t_glb`
417
- pub fn check_glb ( & self , t1 : Ty < ' tcx > , t2 : Ty < ' tcx > , t_glb : Ty < ' tcx > ) {
418
- debug ! ( "check_glb(t1={}, t2={}, t_glb={})" , t1, t2, t_glb) ;
419
- match self . glb ( t1, t2) {
420
- Err ( e) => panic ! ( "unexpected error computing LUB: {:?}" , e) ,
421
- Ok ( InferOk { obligations, value : t } ) => {
422
- // None of these tests should require nested obligations:
423
- assert ! ( obligations. is_empty( ) ) ;
424
-
425
- self . assert_eq ( t, t_glb) ;
426
-
427
- // sanity check for good measure:
428
- self . assert_subtype ( t, t1) ;
429
- self . assert_subtype ( t, t2) ;
430
- }
431
- }
432
- }
433
384
}
434
385
435
386
#[ test]
@@ -508,169 +459,6 @@ fn sub_free_bound_false_infer() {
508
459
} )
509
460
}
510
461
511
- #[ test]
512
- fn lub_free_bound_infer ( ) {
513
- //! Test result of:
514
- //!
515
- //! LUB(fn(_#1), for<'b> fn(&'b isize))
516
- //!
517
- //! This should yield `fn(&'_ isize)`. We check
518
- //! that it yields `fn(&'x isize)` for some free `'x`,
519
- //! anyhow.
520
-
521
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
522
- env. create_simple_region_hierarchy ( ) ;
523
- let t_infer1 = env. infcx . next_ty_var ( TypeVariableOrigin :: MiscVariable ( DUMMY_SP ) ) ;
524
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
525
- let t_rptr_free1 = env. t_rptr_free ( 1 ) ;
526
- env. check_lub ( env. t_fn ( & [ t_infer1] , env. tcx ( ) . types . isize ) ,
527
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
528
- env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ) ;
529
- } ) ;
530
- }
531
-
532
- #[ test]
533
- fn lub_bound_bound ( ) {
534
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
535
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
536
- let t_rptr_bound2 = env. t_rptr_late_bound ( 2 ) ;
537
- env. check_lub ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
538
- env. t_fn ( & [ t_rptr_bound2] , env. tcx ( ) . types . isize ) ,
539
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ) ;
540
- } )
541
- }
542
-
543
- #[ test]
544
- fn lub_bound_free ( ) {
545
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
546
- env. create_simple_region_hierarchy ( ) ;
547
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
548
- let t_rptr_free1 = env. t_rptr_free ( 1 ) ;
549
- env. check_lub ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
550
- env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ,
551
- env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ) ;
552
- } )
553
- }
554
-
555
- #[ test]
556
- fn lub_bound_static ( ) {
557
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
558
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
559
- let t_rptr_static = env. t_rptr_static ( ) ;
560
- env. check_lub ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
561
- env. t_fn ( & [ t_rptr_static] , env. tcx ( ) . types . isize ) ,
562
- env. t_fn ( & [ t_rptr_static] , env. tcx ( ) . types . isize ) ) ;
563
- } )
564
- }
565
-
566
- #[ test]
567
- fn lub_bound_bound_inverse_order ( ) {
568
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
569
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
570
- let t_rptr_bound2 = env. t_rptr_late_bound ( 2 ) ;
571
- env. check_lub ( env. t_fn ( & [ t_rptr_bound1, t_rptr_bound2] , t_rptr_bound1) ,
572
- env. t_fn ( & [ t_rptr_bound2, t_rptr_bound1] , t_rptr_bound1) ,
573
- env. t_fn ( & [ t_rptr_bound1, t_rptr_bound1] , t_rptr_bound1) ) ;
574
- } )
575
- }
576
-
577
- #[ test]
578
- fn lub_free_free ( ) {
579
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
580
- env. create_simple_region_hierarchy ( ) ;
581
- let t_rptr_free1 = env. t_rptr_free ( 1 ) ;
582
- let t_rptr_free2 = env. t_rptr_free ( 2 ) ;
583
- let t_rptr_static = env. t_rptr_static ( ) ;
584
- env. check_lub ( env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ,
585
- env. t_fn ( & [ t_rptr_free2] , env. tcx ( ) . types . isize ) ,
586
- env. t_fn ( & [ t_rptr_static] , env. tcx ( ) . types . isize ) ) ;
587
- } )
588
- }
589
-
590
- #[ test]
591
- fn lub_returning_scope ( ) {
592
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
593
- env. create_simple_region_hierarchy ( ) ;
594
- let t_rptr_scope10 = env. t_rptr_scope ( 10 ) ;
595
- let t_rptr_scope11 = env. t_rptr_scope ( 11 ) ;
596
- let t_rptr_empty = env. t_rptr_empty ( ) ;
597
- env. check_lub ( env. t_fn ( & [ t_rptr_scope10] , env. tcx ( ) . types . isize ) ,
598
- env. t_fn ( & [ t_rptr_scope11] , env. tcx ( ) . types . isize ) ,
599
- env. t_fn ( & [ t_rptr_empty] , env. tcx ( ) . types . isize ) ) ;
600
- } ) ;
601
- }
602
-
603
- #[ test]
604
- fn glb_free_free_with_common_scope ( ) {
605
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
606
- env. create_simple_region_hierarchy ( ) ;
607
- let t_rptr_free1 = env. t_rptr_free ( 1 ) ;
608
- let t_rptr_free2 = env. t_rptr_free ( 2 ) ;
609
- let t_rptr_scope = env. t_rptr_scope ( 1 ) ;
610
- env. check_glb ( env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ,
611
- env. t_fn ( & [ t_rptr_free2] , env. tcx ( ) . types . isize ) ,
612
- env. t_fn ( & [ t_rptr_scope] , env. tcx ( ) . types . isize ) ) ;
613
- } )
614
- }
615
-
616
- #[ test]
617
- fn glb_bound_bound ( ) {
618
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
619
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
620
- let t_rptr_bound2 = env. t_rptr_late_bound ( 2 ) ;
621
- env. check_glb ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
622
- env. t_fn ( & [ t_rptr_bound2] , env. tcx ( ) . types . isize ) ,
623
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ) ;
624
- } )
625
- }
626
-
627
- #[ test]
628
- fn glb_bound_free ( ) {
629
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |mut env| {
630
- env. create_simple_region_hierarchy ( ) ;
631
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
632
- let t_rptr_free1 = env. t_rptr_free ( 1 ) ;
633
- env. check_glb ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
634
- env. t_fn ( & [ t_rptr_free1] , env. tcx ( ) . types . isize ) ,
635
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ) ;
636
- } )
637
- }
638
-
639
- #[ test]
640
- fn glb_bound_free_infer ( ) {
641
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
642
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
643
- let t_infer1 = env. infcx . next_ty_var ( TypeVariableOrigin :: MiscVariable ( DUMMY_SP ) ) ;
644
-
645
- // compute GLB(fn(_) -> isize, for<'b> fn(&'b isize) -> isize),
646
- // which should yield for<'b> fn(&'b isize) -> isize
647
- env. check_glb ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
648
- env. t_fn ( & [ t_infer1] , env. tcx ( ) . types . isize ) ,
649
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ) ;
650
-
651
- // as a side-effect, computing GLB should unify `_` with
652
- // `&'_ isize`
653
- let t_resolve1 = env. infcx . shallow_resolve ( t_infer1) ;
654
- match t_resolve1. sty {
655
- ty:: TyRef ( ..) => { }
656
- _ => {
657
- panic ! ( "t_resolve1={:?}" , t_resolve1) ;
658
- }
659
- }
660
- } )
661
- }
662
-
663
- #[ test]
664
- fn glb_bound_static ( ) {
665
- test_env ( EMPTY_SOURCE_STR , errors ( & [ ] ) , |env| {
666
- let t_rptr_bound1 = env. t_rptr_late_bound ( 1 ) ;
667
- let t_rptr_static = env. t_rptr_static ( ) ;
668
- env. check_glb ( env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ,
669
- env. t_fn ( & [ t_rptr_static] , env. tcx ( ) . types . isize ) ,
670
- env. t_fn ( & [ t_rptr_bound1] , env. tcx ( ) . types . isize ) ) ;
671
- } )
672
- }
673
-
674
462
/// Test substituting a bound region into a function, which introduces another level of binding.
675
463
/// This requires adjusting the Debruijn index.
676
464
#[ test]
0 commit comments