diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-03-08 20:54:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-08 20:54:31 +0100 |
| commit | e2617a98c0683561d31a9d19f98b9ba792f7161e (patch) | |
| tree | 643f712bfc90076508fe2a78a435ff1d81487772 /src/librustc_codegen_llvm/debuginfo | |
| parent | 5e9888eec5f5e5d41be0d6ccd0b55bbd536f44e9 (diff) | |
| parent | 30650f867bb0a94b3378942487e78f3eb7eb868f (diff) | |
| download | rust-e2617a98c0683561d31a9d19f98b9ba792f7161e.tar.gz rust-e2617a98c0683561d31a9d19f98b9ba792f7161e.zip | |
Rollup merge of #69734 - tmiasko:di-enumerator, r=ecstatic-morse
Change DIBuilderCreateEnumerator signature to match LLVM 9 * Change DIBuilderCreateEnumerator signature to match LLVM 9 C API. * Use provided is unsigned flag when emitting enumerators.
Diffstat (limited to 'src/librustc_codegen_llvm/debuginfo')
| -rw-r--r-- | src/librustc_codegen_llvm/debuginfo/metadata.rs | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs index 9e52598f2e0..19bd0b6f7e6 100644 --- a/src/librustc_codegen_llvm/debuginfo/metadata.rs +++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs @@ -1779,13 +1779,20 @@ fn prepare_enum_metadata( .discriminants(cx.tcx) .zip(&def.variants) .map(|((_, discr), v)| { - let name = SmallCStr::new(&v.ident.as_str()); + let name = v.ident.as_str(); + let is_unsigned = match discr.ty.kind { + ty::Int(_) => false, + ty::Uint(_) => true, + _ => bug!("non integer discriminant"), + }; unsafe { Some(llvm::LLVMRustDIBuilderCreateEnumerator( DIB(cx), - name.as_ptr(), + name.as_ptr().cast(), + name.len(), // FIXME: what if enumeration has i128 discriminant? - discr.val as u64, + discr.val as i64, + is_unsigned, )) } }) @@ -1794,13 +1801,15 @@ fn prepare_enum_metadata( .as_generator() .variant_range(enum_def_id, cx.tcx) .map(|variant_index| { - let name = SmallCStr::new(&substs.as_generator().variant_name(variant_index)); + let name = substs.as_generator().variant_name(variant_index); unsafe { Some(llvm::LLVMRustDIBuilderCreateEnumerator( DIB(cx), - name.as_ptr(), - // FIXME: what if enumeration has i128 discriminant? - variant_index.as_usize() as u64, + name.as_ptr().cast(), + name.len(), + // Generators use u32 as discriminant type. + variant_index.as_u32().into(), + true, // IsUnsigned )) } }) |
