Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 11 pull requests #130247

Closed
wants to merge 33 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
5396124
Update compiler-builtins to 0.1.125
alexcrichton Sep 5, 2024
7ed9f94
Don't leave debug locations for constants sitting on the builder inde…
khuey Sep 6, 2024
f98ca32
Fix linking error when compiling for 32-bit watchOS
madsmtm Sep 7, 2024
0b20ffc
Remove needless returns detected by clippy in the compiler
eduardosm Sep 9, 2024
ce47935
remove dead code in CGREP script
jyn514 Dec 24, 2023
6ce3c6c
give a better error for tuple structs in `derive(Diagnostic)`
jyn514 Dec 24, 2023
b58c2fb
show linker warnings even if it returns 0
jyn514 Dec 24, 2023
6b77d59
don't show the full linker args unless `--verbose` is passed
jyn514 Dec 25, 2023
56b8c94
don't pass `-L .../auxiliary` unless it exists
Jan 28, 2024
2f1e1be
maint: update docs for change_time ext and doc links
juliusl Sep 9, 2024
a0a89e5
chore: removing supporting links in favor of existing doc-comment style
juliusl Sep 9, 2024
713828d
Add test for S_OBJNAME and update test for LF_BUILDINFO cl and cmd for
nebulark Sep 6, 2024
180eace
these tests seem to work fine on i586 these days
RalfJung Aug 31, 2024
c40ee79
move float tests into their own dir
workingjubilee Sep 10, 2024
3daa951
enable and extend float-classify test
RalfJung Aug 31, 2024
e556c13
clean up internal comments about float semantics
RalfJung Aug 31, 2024
b44f1dd
update stdarch
RalfJung Aug 28, 2024
542a6c6
miri: support vector index arguments in simd_shuffle
RalfJung Sep 11, 2024
5b7be14
Revert warning empty patterns as unreachable
Nadrieril Aug 28, 2024
6c84238
docs: remove struct info
juliusl Sep 11, 2024
3842ea6
miri: fix overflow detection for unsigned pointer offset
RalfJung Sep 11, 2024
5527076
chore: remove struct details
juliusl Sep 11, 2024
ac27367
Rollup merge of #119286 - jyn514:linker-output, r=bjorn3
workingjubilee Sep 11, 2024
70b92e3
Rollup merge of #129103 - Nadrieril:dont-warn-empty-unreachable, r=co…
workingjubilee Sep 11, 2024
bf9a415
Rollup merge of #129696 - RalfJung:stdarch, r=Amanieu
workingjubilee Sep 11, 2024
fbb73c4
Rollup merge of #129835 - RalfJung:float-tests, r=workingjubilee
workingjubilee Sep 11, 2024
c266516
Rollup merge of #129992 - alexcrichton:update-compiler-builtins, r=tg…
workingjubilee Sep 11, 2024
a498fdc
Rollup merge of #130052 - khuey:clear-dilocation-after-const-emission…
workingjubilee Sep 11, 2024
2994fde
Rollup merge of #130077 - madsmtm:watchos-arm-unwind, r=workingjubilee
workingjubilee Sep 11, 2024
9e42180
Rollup merge of #130114 - eduardosm:needless-returns, r=compiler-errors
workingjubilee Sep 11, 2024
d86d1ad
Rollup merge of #130156 - nebulark:test_buildinfo, r=jieyouxu
workingjubilee Sep 11, 2024
0ad8638
Rollup merge of #130168 - juliusl:pr/fix-win-fs-change-time-links, r=…
workingjubilee Sep 11, 2024
b867f89
Rollup merge of #130239 - RalfJung:miri-ptr-offset-unsigned, r=compil…
workingjubilee Sep 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Don't leave debug locations for constants sitting on the builder inde…
…finitely.

Because constants are currently emitted *before* the prologue, leaving the
debug location on the IRBuilder spills onto other instructions in the prologue
and messes up both line numbers as well as the point LLVM chooses to be the
prologue end.

Example LLVM IR (irrelevant IR elided):
Before:

define internal { i64, i64 } @_ZN3tmp3Foo18var_return_opt_try17he02116165b0fc08cE(ptr align 8 %self) !dbg !347 {
start:
  %self.dbg.spill = alloca [8 x i8], align 8
  %_0 = alloca [16 x i8], align 8
  %residual.dbg.spill = alloca [0 x i8], align 1
    #dbg_declare(ptr %residual.dbg.spill, !353, !DIExpression(), !357)
  store ptr %self, ptr %self.dbg.spill, align 8, !dbg !357
    #dbg_declare(ptr %self.dbg.spill, !350, !DIExpression(), !358)

After:

define internal { i64, i64 } @_ZN3tmp3Foo18var_return_opt_try17h00b17d08874ddd90E(ptr align 8 %self) !dbg !347 {
start:
  %self.dbg.spill = alloca [8 x i8], align 8
  %_0 = alloca [16 x i8], align 8
  %residual.dbg.spill = alloca [0 x i8], align 1
    #dbg_declare(ptr %residual.dbg.spill, !353, !DIExpression(), !357)
  store ptr %self, ptr %self.dbg.spill, align 8
    #dbg_declare(ptr %self.dbg.spill, !350, !DIExpression(), !358)

Note in particular how !357 from %residual.dbg.spill's dbg_declare no longer
falls through onto the store to %self.dbg.spill. This fixes argument values
at entry when the constant is a ZST (e.g. <Option as Try>::Residual). This
fixes #130003 (but note that it does *not* fix issues with argument values and
non-ZST constants, which emit their own stores that have debug info on them,
like #128945).
  • Loading branch information
khuey committed Sep 6, 2024
commit 7ed9f945a22a6e9cfb75405698e0eaa163c12beb
4 changes: 4 additions & 0 deletions compiler/rustc_codegen_gcc/src/debuginfo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ impl<'a, 'gcc, 'tcx> DebugInfoBuilderMethods for Builder<'a, 'gcc, 'tcx> {
fn set_dbg_loc(&mut self, dbg_loc: Self::DILocation) {
self.location = Some(dbg_loc);
}

fn clear_dbg_loc(&mut self) {
self.location = None;
}
}

/// Generate the `debug_context` in an MIR Body.
Expand Down
8 changes: 7 additions & 1 deletion compiler/rustc_codegen_llvm/src/debuginfo/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#![doc = include_str!("doc.md")]

use std::cell::{OnceCell, RefCell};
use std::iter;
use std::ops::Range;
use std::{iter, ptr};

use libc::c_uint;
use rustc_codegen_ssa::debuginfo::type_names;
Expand Down Expand Up @@ -209,6 +209,12 @@ impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
}
}

fn clear_dbg_loc(&mut self) {
unsafe {
llvm::LLVMSetCurrentDebugLocation2(self.llbuilder, ptr::null());
}
}

fn insert_reference_to_gdb_debug_scripts_section_global(&mut self) {
gdb::insert_reference_to_gdb_debug_scripts_section_global(self)
}
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_codegen_llvm/src/llvm/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1041,7 +1041,7 @@ unsafe extern "C" {
pub fn LLVMDisposeBuilder<'a>(Builder: &'a mut Builder<'a>);

// Metadata
pub fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: &'a Metadata);
pub fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: *const Metadata);

// Terminators
pub fn LLVMBuildRetVoid<'a>(B: &Builder<'a>) -> &'a Value;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_ssa/src/mir/debuginfo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
self.set_debug_loc(bx, var.source_info);
let base =
Self::spill_operand_to_stack(operand, Some(var.name.to_string()), bx);
bx.clear_dbg_loc();

bx.dbg_var_addr(
dbg_var,
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_ssa/src/traits/debuginfo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ pub trait DebugInfoBuilderMethods: BackendTypes {
fragment: Option<Range<Size>>,
);
fn set_dbg_loc(&mut self, dbg_loc: Self::DILocation);
fn clear_dbg_loc(&mut self);
fn insert_reference_to_gdb_debug_scripts_section_global(&mut self);
fn set_var_name(&mut self, value: Self::Value, name: &str);
}
72 changes: 72 additions & 0 deletions tests/debuginfo/zst-interferes-with-prologue.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
//@ min-lldb-version: 310

//@ compile-flags:-g

// === GDB TESTS ===================================================================================

// gdb-command:break zst_interferes_with_prologue::Foo::var_return_opt_try
// gdb-command:run

// gdb-command:print self
// gdb-command:next
// gdb-command:print self
// gdb-command:print $1 == $2
// gdb-check:true

// === LLDB TESTS ==================================================================================

// lldb-command:b "zst_interferes_with_prologue::Foo::var_return_opt_try"
// lldb-command:run

// lldb-command:expr self
// lldb-command:next
// lldb-command:expr self
// lldb-command:print $0 == $1
// lldb-check:true

struct Foo {
a: usize,
}

impl Foo {
#[inline(never)]
fn get_a(&self) -> Option<usize> {
Some(self.a)
}

#[inline(never)]
fn var_return(&self) -> usize {
let r = self.get_a().unwrap();
r
}

#[inline(never)]
fn var_return_opt_unwrap(&self) -> Option<usize> {
let r = self.get_a().unwrap();
Some(r)
}

#[inline(never)]
fn var_return_opt_match(&self) -> Option<usize> {
let r = match self.get_a() {
None => return None,
Some(a) => a,
};
Some(r)
}

#[inline(never)]
fn var_return_opt_try(&self) -> Option<usize> {
let r = self.get_a()?;
Some(r)
}
}

fn main() {
let f1 = Foo{ a: 1 };
let f2 = Foo{ a: 1 };
f1.var_return();
f1.var_return_opt_unwrap();
f1.var_return_opt_match();
f2.var_return_opt_try();
}
Loading