about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-11-24 17:12:28 -0800
committerAlexander Regueiro <alexreg@me.com>2018-11-30 03:12:10 +0000
commitc144dc07e35c1ef4a25bc321dce07565952121aa (patch)
tree2ceb9228144827c808c71708b3875fc47928c7e5
parent3e90a12a8a95933604a8b609197fce61bb24a38c (diff)
downloadrust-c144dc07e35c1ef4a25bc321dce07565952121aa.tar.gz
rust-c144dc07e35c1ef4a25bc321dce07565952121aa.zip
Fix ICE with feature self_struct_ctor
-rw-r--r--src/librustc/middle/reachable.rs1
-rw-r--r--src/test/ui/issues/issue-56202.rs15
-rw-r--r--src/test/ui/issues/issue-56202.stderr7
3 files changed, 23 insertions, 0 deletions
diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs
index 0009a517dd1..cf81729bdab 100644
--- a/src/librustc/middle/reachable.rs
+++ b/src/librustc/middle/reachable.rs
@@ -116,6 +116,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ReachableContext<'a, 'tcx> {
             Some(Def::Local(node_id)) | Some(Def::Upvar(node_id, ..)) => {
                 self.reachable_symbols.insert(node_id);
             }
+            Some(Def::Err) => {}  // #56202: calling `def.def_id()` would be an error
             Some(def) => {
                 let def_id = def.def_id();
                 if let Some(node_id) = self.tcx.hir.as_local_node_id(def_id) {
diff --git a/src/test/ui/issues/issue-56202.rs b/src/test/ui/issues/issue-56202.rs
new file mode 100644
index 00000000000..c80c372c9e2
--- /dev/null
+++ b/src/test/ui/issues/issue-56202.rs
@@ -0,0 +1,15 @@
+#![feature(self_struct_ctor)]
+
+trait FooTrait {}
+
+trait BarTrait {
+    fn foo<T: FooTrait>(_: T) -> Self;
+}
+
+struct FooStruct(u32);
+
+impl BarTrait for FooStruct {
+    fn foo<T: FooTrait>(_: T) -> Self {
+        Self(u32::default())
+    }
+}
diff --git a/src/test/ui/issues/issue-56202.stderr b/src/test/ui/issues/issue-56202.stderr
new file mode 100644
index 00000000000..3007b084502
--- /dev/null
+++ b/src/test/ui/issues/issue-56202.stderr
@@ -0,0 +1,7 @@
+error[E0601]: `main` function not found in crate `issue_56202`
+   |
+   = note: consider adding a `main` function to `$DIR/issue-56202.rs`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0601`.