about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-05-10 18:22:25 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-05-10 18:22:25 -0700
commitadc18eb7cfd0315a5bdba54ecc0d926176c4cd80 (patch)
treed4e6ddc644f7d7130bc9b7cce3751282d12a7ce4
parent33cde4aac2ec1b0a493d0acaa4c4fb45de0c6e94 (diff)
downloadrust-adc18eb7cfd0315a5bdba54ecc0d926176c4cd80.tar.gz
rust-adc18eb7cfd0315a5bdba54ecc0d926176c4cd80.zip
Avoid ICE by using delay_span_bug
-rw-r--r--src/librustc_typeck/check/mod.rs5
-rw-r--r--src/test/ui/issues/issue-53498.rs17
-rw-r--r--src/test/ui/issues/issue-53498.stderr9
3 files changed, 29 insertions, 2 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 64c8ff8ff86..09ce9516fef 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -5653,10 +5653,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
             match self.at(&self.misc(span), self.param_env).sup(impl_ty, self_ty) {
                 Ok(ok) => self.register_infer_ok_obligations(ok),
                 Err(_) => {
-                    span_bug!(span,
+                    self.tcx.sess.delay_span_bug(span, &format!(
                         "instantiate_value_path: (UFCS) {:?} was a subtype of {:?} but now is not?",
                         self_ty,
-                        impl_ty);
+                        impl_ty,
+                    ));
                 }
             }
         }
diff --git a/src/test/ui/issues/issue-53498.rs b/src/test/ui/issues/issue-53498.rs
new file mode 100644
index 00000000000..c87d4236492
--- /dev/null
+++ b/src/test/ui/issues/issue-53498.rs
@@ -0,0 +1,17 @@
+pub mod test {
+    pub struct A;
+    pub struct B;
+    pub struct Foo<T>(T);
+
+    impl Foo<A> {
+        fn foo() {}
+    }
+
+    impl Foo<B> {
+        fn foo() {}
+    }
+}
+
+fn main() {
+    test::Foo::<test::B>::foo(); //~ ERROR method `foo` is private
+}
diff --git a/src/test/ui/issues/issue-53498.stderr b/src/test/ui/issues/issue-53498.stderr
new file mode 100644
index 00000000000..3fd48233dae
--- /dev/null
+++ b/src/test/ui/issues/issue-53498.stderr
@@ -0,0 +1,9 @@
+error[E0624]: method `foo` is private
+  --> $DIR/issue-53498.rs:16:5
+   |
+LL |     test::Foo::<test::B>::foo();
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0624`.