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 5 pull requests #130854

Closed
wants to merge 10 commits into from

Commits on Aug 23, 2024

  1. Configuration menu
    Copy the full SHA
    cac4a30 View commit details
    Browse the repository at this point in the history

Commits on Sep 17, 2024

  1. Reorder stack spills so that constants come later.

    Currently constants are "pulled forward" and have their stack spills emitted
    first. This confuses LLVM as to where to place breakpoints at function
    entry, and results in argument values being wrong in the debugger. It's
    straightforward to avoid emitting the stack spills for constants until
    arguments/etc have been introduced in debug_introduce_locals, so do that.
    
    Example LLVM IR (irrelevant IR elided):
    Before:
    
    define internal void @_ZN11rust_1289457binding17h2c78f956ba4bd2c3E(i64 %a, i64 %b, double %c) unnamed_addr #0 !dbg !178 {
    start:
      %c.dbg.spill = alloca [8 x i8], align 8
      %b.dbg.spill = alloca [8 x i8], align 8
      %a.dbg.spill = alloca [8 x i8], align 8
      %x.dbg.spill = alloca [4 x i8], align 4
      store i32 0, ptr %x.dbg.spill, align 4, !dbg !192            ; LLVM places breakpoint here.
        #dbg_declare(ptr %x.dbg.spill, !190, !DIExpression(), !192)
      store i64 %a, ptr %a.dbg.spill, align 8
        #dbg_declare(ptr %a.dbg.spill, !187, !DIExpression(), !193)
      store i64 %b, ptr %b.dbg.spill, align 8
        #dbg_declare(ptr %b.dbg.spill, !188, !DIExpression(), !194)
      store double %c, ptr %c.dbg.spill, align 8
        #dbg_declare(ptr %c.dbg.spill, !189, !DIExpression(), !195)
      ret void, !dbg !196
    }
    
    After:
    define internal void @_ZN11rust_1289457binding17h2c78f956ba4bd2c3E(i64 %a, i64 %b, double %c) unnamed_addr #0 !dbg !178 {
    start:
      %x.dbg.spill = alloca [4 x i8], align 4
      %c.dbg.spill = alloca [8 x i8], align 8
      %b.dbg.spill = alloca [8 x i8], align 8
      %a.dbg.spill = alloca [8 x i8], align 8
      store i64 %a, ptr %a.dbg.spill, align 8
        #dbg_declare(ptr %a.dbg.spill, !187, !DIExpression(), !192)
      store i64 %b, ptr %b.dbg.spill, align 8
        #dbg_declare(ptr %b.dbg.spill, !188, !DIExpression(), !193)
      store double %c, ptr %c.dbg.spill, align 8
        #dbg_declare(ptr %c.dbg.spill, !189, !DIExpression(), !194)
      store i32 0, ptr %x.dbg.spill, align 4, !dbg !195            ; LLVM places breakpoint here.
        #dbg_declare(ptr %x.dbg.spill, !190, !DIExpression(), !195)
      ret void, !dbg !196
    }
    
    Note in particular the position of the "LLVM places breakpoint here" comment
    relative to the stack spills for the function arguments. LLVM assumes that
    the first instruction with with a debug location is the end of the prologue.
    As LLVM does not currently offer front ends any direct control over the
    placement of the prologue end reordering the IR is the only mechanism available
    to fix argument values at function entry in the presence of MIR optimizations
    like SingleUseConsts. Fixes rust-lang#128945
    khuey committed Sep 17, 2024
    Configuration menu
    Copy the full SHA
    652b502 View commit details
    Browse the repository at this point in the history

Commits on Sep 23, 2024

  1. Stabilize const_refs_to_static

    update tests
    
    fix bitwidth-sensitive stderr output
    
    use build-fail for asm tests
    dingxiangfei2009 committed Sep 23, 2024
    Configuration menu
    Copy the full SHA
    84a43d6 View commit details
    Browse the repository at this point in the history

Commits on Sep 25, 2024

  1. Configuration menu
    Copy the full SHA
    8f1ed9b View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d3e59a5 View commit details
    Browse the repository at this point in the history
  3. Rollup merge of rust-lang#129687 - Urgau:rfc3127-sysroot-2, r=jieyouxu

    Implement RFC3137 trim-paths sysroot changes - take 2
    
    This PR is a continuation of rust-lang#118149. Nothing really changed, except for rust-lang#129408 which I was able to trigger locally.
    
    Original description:
    
    > Implement parts of rust-lang#111540
    >
    > Right now, backtraces into sysroot always shows /rustc/$hash in diagnostics, e.g.
    >
    > ```
    > thread 'main' panicked at 'hello world', map-panic.rs:2:50
    > stack backtrace:
    >    0: std::panicking::begin_panic
    >              at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:616:12
    >    1: map_panic::main::{{closure}}
    >              at ./map-panic.rs:2:50
    >    2: core::option::Option<T>::map
    >              at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/option.rs:929:29
    >    3: map_panic::main
    >              at ./map-panic.rs:2:30
    >    4: core::ops::function::FnOnce::call_once
    >              at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5
    > note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    > ```
    >
    > [RFC 3127 said](https://rust-lang.github.io/rfcs/3127-trim-paths.html#changing-handling-of-sysroot-path-in-rustc)
    >
    > > We want to change this behaviour such that, when rust-src source files can be discovered, the virtual path is discarded and therefore the local path will be embedded, unless there is a --remap-path-prefix that causes this local path to be remapped in the usual way.
    >
    > This PR implements this behaviour. When `rust-src` is present at compile time, rustc replaces /rustc/$hash with a real path into local rust-src with best effort. To sanitise this, users must explicitly supply `--remap-path-prefix=<path to rust-src>=foo`.
    
    cc `@cbeuw`
    Fix rust-lang#105907
    Fix rust-lang#85463
    
    try-job: dist-x86_64-linux
    try-job: x86_64-msvc
    try-job: armhf-gnu
    matthiaskrgr authored Sep 25, 2024
    Configuration menu
    Copy the full SHA
    43247de View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#129759 - dingxiangfei2009:stabilize-const-r…

    …efs-to-static, r=RalfJung
    
    Stabilize `const_refs_to_static`
    
    Meanwhile, I am cooking a sub-section in the language reference.
    matthiaskrgr authored Sep 25, 2024
    Configuration menu
    Copy the full SHA
    f83600c View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#130329 - khuey:reorder-constant-spills, r=d…

    …avidtwco
    
    Reorder stack spills so that constants come later.
    
    Currently constants are "pulled forward" and have their stack spills emitted first. This confuses LLVM as to where to place breakpoints at function entry, and results in argument values being wrong in the debugger. It's straightforward to avoid emitting the stack spills for constants until arguments/etc have been introduced in debug_introduce_locals, so do that.
    
    Example LLVM IR (irrelevant IR elided):
    Before:
    ```
    define internal void `@_ZN11rust_1289457binding17h2c78f956ba4bd2c3E(i64` %a, i64 %b, double %c) unnamed_addr #0 !dbg !178 { start:
      %c.dbg.spill = alloca [8 x i8], align 8
      %b.dbg.spill = alloca [8 x i8], align 8
      %a.dbg.spill = alloca [8 x i8], align 8
      %x.dbg.spill = alloca [4 x i8], align 4
      store i32 0, ptr %x.dbg.spill, align 4, !dbg !192            ; LLVM places breakpoint here.
        #dbg_declare(ptr %x.dbg.spill, !190, !DIExpression(), !192)
      store i64 %a, ptr %a.dbg.spill, align 8
        #dbg_declare(ptr %a.dbg.spill, !187, !DIExpression(), !193)
      store i64 %b, ptr %b.dbg.spill, align 8
        #dbg_declare(ptr %b.dbg.spill, !188, !DIExpression(), !194)
      store double %c, ptr %c.dbg.spill, align 8
        #dbg_declare(ptr %c.dbg.spill, !189, !DIExpression(), !195)
      ret void, !dbg !196
    }
    ```
    After:
    ```
    define internal void `@_ZN11rust_1289457binding17h2c78f956ba4bd2c3E(i64` %a, i64 %b, double %c) unnamed_addr #0 !dbg !178 { start:
      %x.dbg.spill = alloca [4 x i8], align 4
      %c.dbg.spill = alloca [8 x i8], align 8
      %b.dbg.spill = alloca [8 x i8], align 8
      %a.dbg.spill = alloca [8 x i8], align 8
      store i64 %a, ptr %a.dbg.spill, align 8
        #dbg_declare(ptr %a.dbg.spill, !187, !DIExpression(), !192)
      store i64 %b, ptr %b.dbg.spill, align 8
        #dbg_declare(ptr %b.dbg.spill, !188, !DIExpression(), !193)
      store double %c, ptr %c.dbg.spill, align 8
        #dbg_declare(ptr %c.dbg.spill, !189, !DIExpression(), !194)
      store i32 0, ptr %x.dbg.spill, align 4, !dbg !195            ; LLVM places breakpoint here.
        #dbg_declare(ptr %x.dbg.spill, !190, !DIExpression(), !195)
      ret void, !dbg !196
    }
    ```
    Note in particular the position of the "LLVM places breakpoint here" comment relative to the stack spills for the function arguments. LLVM assumes that the first instruction with with a debug location is the end of the prologue. As LLVM does not currently offer front ends any direct control over the placement of the prologue end reordering the IR is the only mechanism available to fix argument values at function entry in the presence of MIR optimizations like SingleUseConsts. Fixes rust-lang#128945
    
    r? `@michaelwoerister`
    matthiaskrgr authored Sep 25, 2024
    Configuration menu
    Copy the full SHA
    cfbff09 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#130845 - RalfJung:utf8chunk, r=tgross35

    Utf8Chunks: add link to Utf8Chunk
    
    It is currently surprisingly non-trivial to go from the `utf8_chunks` method to the docs of the `valid`/`invalid` methods used in the example. This should help.
    matthiaskrgr authored Sep 25, 2024
    Configuration menu
    Copy the full SHA
    a2b96db View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#130846 - ChrisDenton:revert-break, r=Noratrieb

    Revert Break into the debugger on panic (129019)
    
    This was talked about a bit at a recent libs meeting. While I think experimenting with this is worthwhile, I am nervous about this new behaviour reaching stable. We've already reverted on one tier 1 platform (Linux, rust-lang#130810) which means we have differing semantics on different tier 1 platforms. Also the fact it triggers even when `catch_unwind` is used to catch the panic means it can be very noisy in some projects.
    
    At the very least I think it could use some more discussion before being instantly stable. I think this could maybe be re-landed with an environment variable to control/override the behaviour. But that part would likely need a libs-api decision.
    
    cc `@workingjubilee` `@kromych`
    matthiaskrgr authored Sep 25, 2024
    Configuration menu
    Copy the full SHA
    58be7fa View commit details
    Browse the repository at this point in the history