diff options
| author | bors <bors@rust-lang.org> | 2024-08-21 17:18:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-21 17:18:07 +0000 |
| commit | 6b678c57b63b3062fb97130b3617b82657f59c80 (patch) | |
| tree | cdb3668b09860967f31162df4cb1c915fc62ccb8 /compiler/rustc_codegen_llvm/src/debuginfo/mod.rs | |
| parent | 982c6f8721416431ec62bb0b9105c0578a9fc603 (diff) | |
| parent | 9fd2832a7ee414c8baf8ab1d3963443cd9b9fff3 (diff) | |
| download | rust-6b678c57b63b3062fb97130b3617b82657f59c80.tar.gz rust-6b678c57b63b3062fb97130b3617b82657f59c80.zip | |
Auto merge of #129359 - matthiaskrgr:rollup-nyre44t, r=matthiaskrgr
Rollup of 10 pull requests Successful merges: - #128627 (Special case DUMMY_SP to emit line 0/column 0 locations on DWARF platforms.) - #128843 (Minor Refactor: Remove a Redundant Conditional Check) - #129179 (CFI: Erase regions when projecting ADT to its transparent non-1zst field) - #129281 (Tweak unreachable lint wording) - #129312 (Fix stability attribute of `impl !Error for &str`) - #129332 (Avoid extra `cast()`s after `CStr::as_ptr()`) - #129339 (Make `ArgAbi::make_indirect_force` more specific) - #129344 (Use `bool` in favor of `Option<()>` for diagnostics) - #129345 (Use shorthand field initialization syntax more aggressively in the compiler) - #129355 (fix comment on PlaceMention semantics) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/debuginfo/mod.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/debuginfo/mod.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs index b23e05182ca..eb446d2d7b2 100644 --- a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs +++ b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs @@ -109,7 +109,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { llvm::LLVMRustAddModuleFlagU32( self.llmod, llvm::LLVMModFlagBehavior::Warning, - c"Dwarf Version".as_ptr().cast(), + c"Dwarf Version".as_ptr(), dwarf_version, ); } else { @@ -117,7 +117,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { llvm::LLVMRustAddModuleFlagU32( self.llmod, llvm::LLVMModFlagBehavior::Warning, - c"CodeView".as_ptr().cast(), + c"CodeView".as_ptr(), 1, ) } @@ -126,7 +126,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { llvm::LLVMRustAddModuleFlagU32( self.llmod, llvm::LLVMModFlagBehavior::Warning, - c"Debug Info Version".as_ptr().cast(), + c"Debug Info Version".as_ptr(), llvm::LLVMRustDebugMetadataVersion(), ); } @@ -570,7 +570,17 @@ impl<'ll, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { inlined_at: Option<&'ll DILocation>, span: Span, ) -> &'ll DILocation { - let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo()); + // When emitting debugging information, DWARF (i.e. everything but MSVC) + // treats line 0 as a magic value meaning that the code could not be + // attributed to any line in the source. That's also exactly what dummy + // spans are. Make that equivalence here, rather than passing dummy spans + // to lookup_debug_loc, which will return line 1 for them. + let (line, col) = if span.is_dummy() && !self.sess().target.is_like_msvc { + (0, 0) + } else { + let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo()); + (line, col) + }; unsafe { llvm::LLVMRustDIBuilderCreateDebugLocation(line, col, scope, inlined_at) } } |
