about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2019-03-08 09:41:52 +0100
committerGitHub <noreply@github.com>2019-03-08 09:41:52 +0100
commit4083c698e5efdfbe7df69fd5103ce790b3fb0800 (patch)
tree101522801349ea274aff7c8e506f5fa68dfcef24
parent4bff63f05ff0108d5dd083d6a865003cb69e075b (diff)
parent41e60d1562738c0295c4344339c6368e9446e936 (diff)
downloadrust-4083c698e5efdfbe7df69fd5103ce790b3fb0800.tar.gz
rust-4083c698e5efdfbe7df69fd5103ce790b3fb0800.zip
Rollup merge of #58906 - Nemo157:generator-state-debug-info, r=Zoxc
Monomorphize generator field types for debuginfo

Fixes #58888

r? @Zoxc
-rw-r--r--src/librustc_codegen_ssa/mir/mod.rs1
-rw-r--r--src/test/run-pass/generator/issue-58888.rs27
2 files changed, 28 insertions, 0 deletions
diff --git a/src/librustc_codegen_ssa/mir/mod.rs b/src/librustc_codegen_ssa/mir/mod.rs
index 870b97401f4..a90dc356c92 100644
--- a/src/librustc_codegen_ssa/mir/mod.rs
+++ b/src/librustc_codegen_ssa/mir/mod.rs
@@ -679,6 +679,7 @@ fn arg_local_refs<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
                         .zip(state_tys)
                         .enumerate()
                         .filter_map(move |(i, (decl, ty))| {
+                            let ty = fx.monomorphize(&ty);
                             decl.name.map(|name| (i + upvar_count + 1, name, false, ty))
                         })
                 }).into_iter().flatten();
diff --git a/src/test/run-pass/generator/issue-58888.rs b/src/test/run-pass/generator/issue-58888.rs
new file mode 100644
index 00000000000..43b37a9afc2
--- /dev/null
+++ b/src/test/run-pass/generator/issue-58888.rs
@@ -0,0 +1,27 @@
+// run-pass
+// compile-flags: -g
+
+#![feature(generators, generator_trait)]
+
+use std::ops::Generator;
+
+struct Database;
+
+impl Database {
+    fn get_connection(&self) -> impl Iterator<Item = ()> {
+        Some(()).into_iter()
+    }
+
+    fn check_connection(&self) -> impl Generator<Yield = (), Return = ()> + '_ {
+        move || {
+            let iter = self.get_connection();
+            for i in iter {
+                yield i
+            }
+        }
+    }
+}
+
+fn main() {
+    Database.check_connection();
+}