diff options
| author | Stuart Cook <Zalathar@users.noreply.github.com> | 2025-07-29 20:19:49 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-29 20:19:49 +1000 |
| commit | b3962e88114a5f633011d8670f318e1c20ba41b6 (patch) | |
| tree | 4c9117ce89c5f0c71e602115ced2020d8660d44d /compiler/rustc_codegen_llvm/src | |
| parent | 9cba49896c2a7d491c92b7c2e6159adfec369af9 (diff) | |
| parent | 49eda8edd5c99e4c65c687fff0b8e194eb339a23 (diff) | |
| download | rust-b3962e88114a5f633011d8670f318e1c20ba41b6.tar.gz rust-b3962e88114a5f633011d8670f318e1c20ba41b6.zip | |
Rollup merge of #144407 - godzie44:godzie44/fix_dwarf_inconsistency, r=wesleywiser
fix(debuginfo): disable overflow check for recursive non-enum types Commit b10edb4 introduce an overflow check when generating debuginfo for expanding recursive types. While this check works correctly for enums, it can incorrectly prune valid debug information for structures. For example see rust-lang/rust#143241 (https://github.com/rust-lang/rust/issues/143241#issuecomment-3073721477). Furthermore, for structures such check does not make sense, since structures with recursively expanding types simply will not compile (there is a `hir_analysis_recursive_generic_parameter` for that). closes rust-lang/rust#143241
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/debuginfo/metadata/type_map.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/metadata/type_map.rs b/compiler/rustc_codegen_llvm/src/debuginfo/metadata/type_map.rs index 56fb12d3c22..d1502d2b1e6 100644 --- a/compiler/rustc_codegen_llvm/src/debuginfo/metadata/type_map.rs +++ b/compiler/rustc_codegen_llvm/src/debuginfo/metadata/type_map.rs @@ -285,8 +285,8 @@ pub(super) fn build_type_with_children<'ll, 'tcx>( // Item(T), // } // ``` - let is_expanding_recursive = - debug_context(cx).adt_stack.borrow().iter().any(|(parent_def_id, parent_args)| { + let is_expanding_recursive = adt_def.is_enum() + && debug_context(cx).adt_stack.borrow().iter().any(|(parent_def_id, parent_args)| { if def_id == *parent_def_id { args.iter().zip(parent_args.iter()).any(|(arg, parent_arg)| { if let (Some(arg), Some(parent_arg)) = (arg.as_type(), parent_arg.as_type()) |
