diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-11-12 23:26:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-12 23:26:41 +0100 |
| commit | bd79fe7a94b8191ef580db7789fc55291eb825f1 (patch) | |
| tree | ad8fd165e93db6d67b120e58c898ee8fbb21a063 /compiler/rustc_codegen_llvm/src/builder.rs | |
| parent | f7273e0044ad8f35ad27282e4ab776af50b61a54 (diff) | |
| parent | c2102259a04dd9ede1e7faf01daa0dfcb948c214 (diff) | |
| download | rust-bd79fe7a94b8191ef580db7789fc55291eb825f1.tar.gz rust-bd79fe7a94b8191ef580db7789fc55291eb825f1.zip | |
Rollup merge of #132702 - 1c3t3a:issue-132615, r=rcvalle
CFI: Append debug location to CFI blocks Currently we're not appending debug locations to the inserted CFI blocks. This shows up in #132615 and #100783. This change fixes that by passing down the debug location to the CFI type-test generation and appending it to the blocks. Credits also belong to `@jakos-sec` who worked with me on this.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/builder.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/builder.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_llvm/src/builder.rs b/compiler/rustc_codegen_llvm/src/builder.rs index 751b2235dc8..ac76b781218 100644 --- a/compiler/rustc_codegen_llvm/src/builder.rs +++ b/compiler/rustc_codegen_llvm/src/builder.rs @@ -1574,6 +1574,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> { cfi::typeid_for_fnabi(self.tcx, fn_abi, options) }; let typeid_metadata = self.cx.typeid_metadata(typeid).unwrap(); + let dbg_loc = self.get_dbg_loc(); // Test whether the function pointer is associated with the type identifier. let cond = self.type_test(llfn, typeid_metadata); @@ -1582,10 +1583,16 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> { self.cond_br(cond, bb_pass, bb_fail); self.switch_to_block(bb_fail); + if let Some(dbg_loc) = dbg_loc { + self.set_dbg_loc(dbg_loc); + } self.abort(); self.unreachable(); self.switch_to_block(bb_pass); + if let Some(dbg_loc) = dbg_loc { + self.set_dbg_loc(dbg_loc); + } } } |
