diff options
author | David Wood <david@davidtw.co> | 2020-06-22 13:33:17 +0100 |
---|---|---|
committer | David Wood <david@davidtw.co> | 2020-07-20 11:23:29 +0100 |
commit | 5bf2c7d4fec536c4237e859390c524837324977f (patch) | |
tree | ac63193af6523748760d9cec54fd8928985ba967 | |
parent | 842fa0ce3e93918fb574dfebc26abdfbed6138ec (diff) | |
download | rust-5bf2c7d4fec536c4237e859390c524837324977f.tar.gz |
debuginfo: no type metadata if substs reqd
This commit skips generating debuginfo type metadata if substitutions
are required by the type. This avoids ICEs that result from layouts
of types with substitutions being computed.
Signed-off-by: David Wood <david@davidtw.co>
-rw-r--r-- | src/librustc_codegen_llvm/debuginfo/mod.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs index 44993d7602f..a01b8553721 100644 --- a/src/librustc_codegen_llvm/debuginfo/mod.rs +++ b/src/librustc_codegen_llvm/debuginfo/mod.rs @@ -26,7 +26,7 @@ use rustc_index::vec::IndexVec; use rustc_middle::mir; use rustc_middle::ty::layout::HasTyCtxt; use rustc_middle::ty::subst::{GenericArgKind, SubstsRef}; -use rustc_middle::ty::{self, Instance, ParamEnv, Ty}; +use rustc_middle::ty::{self, Instance, ParamEnv, Ty, TypeFoldable}; use rustc_session::config::{self, DebugInfo}; use rustc_span::symbol::Symbol; use rustc_span::{self, BytePos, Span}; @@ -470,7 +470,9 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { match impl_self_ty.kind { ty::Adt(def, ..) if !def.is_box() => { // Again, only create type information if full debuginfo is enabled - if cx.sess().opts.debuginfo == DebugInfo::Full { + if cx.sess().opts.debuginfo == DebugInfo::Full + && !impl_self_ty.needs_subst() + { Some(type_metadata(cx, impl_self_ty, rustc_span::DUMMY_SP)) } else { Some(namespace::item_namespace(cx, def.did)) |