From 5a7af5480c5f9a7d1b5964e3c77ef18326a3a67b Mon Sep 17 00:00:00 2001 From: Tyler Mandry Date: Tue, 2 Apr 2019 16:04:51 -0700 Subject: Support variantful generators This allows generators to overlap fields using variants. --- src/librustc_codegen_llvm/debuginfo/metadata.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/librustc_codegen_llvm/debuginfo') diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs index 31348b99c5a..bbcd3c220d6 100644 --- a/src/librustc_codegen_llvm/debuginfo/metadata.rs +++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs @@ -691,9 +691,12 @@ pub fn type_metadata( usage_site_span).finalize(cx) } ty::Generator(def_id, substs, _) => { - let upvar_tys : Vec<_> = substs.field_tys(def_id, cx.tcx).map(|t| { + // TODO handle variant fields + let upvar_tys : Vec<_> = substs.prefix_tys(def_id, cx.tcx).map(|t| { cx.tcx.normalize_erasing_regions(ParamEnv::reveal_all(), t) }).collect(); + // TODO use prepare_enum_metadata and update it to handle multiple + // fields in the outer layout. prepare_tuple_metadata(cx, t, &upvar_tys, @@ -1818,6 +1821,7 @@ fn prepare_enum_metadata( }; // The variant part must be wrapped in a struct according to DWARF. + // TODO create remaining fields here, if any. let type_array = create_DIArray(DIB(cx), &[Some(variant_part)]); let struct_wrapper = unsafe { llvm::LLVMRustDIBuilderCreateStructType( -- cgit 1.4.1-3-g733a5