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 7 pull requests #135613

Closed
wants to merge 21 commits into from

Conversation

matthiaskrgr
Copy link
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lqd and others added 21 commits January 12, 2025 07:29
in NLLs some locals are marked live at all points if one of their
regions escapes the function but that doesn't work in a flow-sensitive
setting like polonius
we're in in the endgame now

set up the location-sensitive analysis end to end:
- stop recording inflowing loans and loan liveness in liveness
- replace location-insensitive liveness data with live loans computed by
  reachability
- remove equivalence between polonius scopes and NLL scopes, and only
  run one scope computation
it's a bit mind-bending
this addresses review comments while:
- keeping the symmetry between the NLL and Polonius out of scope
  precomputers
- keeping the unstable `calculate_borrows_out_of_scope_at_location`
  function to avoid churn for consumers
Currently we both pass and return `i128` indirectly on Windows for MSVC
and MinGW, but this will be adjusted. Introduce a test verifying the
current state.
```
error[E0308]: `if` and `else` have incompatible types
  --> $DIR/if-else-chain-missing-else.rs:12:12
   |
LL |        let x = if let Ok(x) = res {
   |  ______________-
LL | |          x
   | |          - expected because of this
LL | |      } else if let Err(e) = res {
   | | ____________^
LL | ||         return Err(e);
LL | ||     };
   | ||     ^
   | ||_____|
   |  |_____`if` and `else` have incompatible types
   |        expected `i32`, found `()`
   |
   = note: `if` expressions without `else` evaluate to `()`
   = note: consider adding an `else` block that evaluates to the expected type
```

We probably want a longer explanation and fewer spans on this case.

Partially address rust-lang#133316.
Clang and GCC both return `i128` in xmm0 on windows-msvc and
windows-gnu. Currently, Rust returns the type on the stack. Add a
calling convention adjustment so we also return scalar `i128`s using the
vector ABI, which makes our `i128` compatible with C.

In the future, Clang may change to return `i128` on the stack for its
`-msvc` targets (more at [1]). If this happens, the change here will
need to be adjusted to only affect MinGW.

Link: rust-lang#134288
constants and statics are nullary functions, and struct fields are unary functions.

functions (along with methods and trait methods) are prioritized over other
items, like fields and constants.
…-func, r=notriddle

Treat other items as functions for the purpose of type-based search

specifically, constants and statics are nullary functions, and struct fields are unary functions.

fixes rust-lang#130204

r? `@notriddle`
…bjorn3,wesleywiser

Windows x86: Change i128 to return via the vector ABI

Clang and GCC both return `i128` in xmm0 on windows-msvc and windows-gnu. Currently, Rust returns the type on the stack. Add a calling convention adjustment so we also return scalar `i128`s using the vector ABI, which makes our `i128` compatible with C.

In the future, Clang may change to return `i128` on the stack for its `-msvc` targets (more at [1]). If this happens, the change here will need to be adjusted to only affect MinGW.

Link: rust-lang#134288 (does not fix) [1]

try-job: x86_64-msvc
try-job: x86_64-msvc-ext1
try-job: x86_64-mingw-1
try-job: x86_64-mingw-2
…kh726

Location-sensitive polonius prototype: endgame

This PR sets up the naive location-sensitive analysis end-to-end, and replaces the location-insensitive analysis. It's roughly all the in-progress work I wanted to land for the prototype, modulo cleanups I still want to do after the holidays, or the polonius debugger, and so on.

Here, we traverse the localized constraint graph, have to deal with kills and time-traveling (👌), and record that as loan liveness for the existing scope and active loans computations.

Then the near future looks like this, especially if the 2025h1 project goal is accepted:
- gradually bringing it up to completion
- analyzing and fixing the few remaining test failures
- going over the *numerous* fixmes in this prototype (one of which is similar to a hang on one test's millions and millions of constraints)
- trying to see how to lower the impact of the lack of NLL liveness optimization on diagnostics, and their categorization of local variables and temporaries (the vast majority of blessed expectations differences), as well as the couple ICEs trying to find an NLL constraint to blame for errors.
- dealing with the theoretical weakness around kills, conflating reachability for the two TCS, etc that is described ad nauseam in the code.
- switching the compare mode to the in-tree implementation, and blessing the diagnostics
- apart from the hang, it's not catastrophically slower on our test suite, so then we can try to enable it on CI
- checking crater, maybe trying to make it faster :3, etc.

I've tried to gradually introduce this PR's work over 4 commits, because it's kind of subtle/annoying, and Niko/I are not completely convinced yet. That one comment explaining the situation is maybe 30% of the PR 😓. Who knew that spacetime reachability and time-traveling could be mind bending.

I kinda found this late and the impact on this part of the computation was a bit unexpected to us. A bit more care/thought will be needed here. I've described my plan in the comments though. In any case, I believe we have the current implementation is a conservative approximation that shouldn't result in unsoundness but false positives at worst. So it feels fine for now.

r? `@jackh726`

---

Fixes rust-lang#127628 -- which was a assertion triggered for a difference in loan computation between NLLs and the location-insensitive analysis. That doesn't exist anymore so I've removed this crash test.
Detect if-else chains with a missing final else in type errors

```
error[E0308]: `if` and `else` have incompatible types
  --> $DIR/if-else-chain-missing-else.rs:12:12
   |
LL |        let x = if let Ok(x) = res {
   |  ______________-
LL | |          x
   | |          - expected because of this
LL | |      } else if let Err(e) = res {
   | | ____________^
LL | ||         return Err(e);
LL | ||     };
   | ||     ^
   | ||_____|
   |  |_____`if` and `else` have incompatible types
   |        expected `i32`, found `()`
   |
   = note: `if` expressions without `else` evaluate to `()`
   = note: consider adding an `else` block that evaluates to the expected type
```

We probably want a longer explanation and fewer spans on this case.

Partially address rust-lang#133316.
…, r=notriddle

fix error for when results in a rustdoc-js test are in the wrong order

see rust-lang#131806 (comment)
…=jieyouxu

Fix suggestion to convert dereference of raw pointer to ref

Fix rust-lang#135580
Expand docs for `E0207` with additional example

Add an example to E0207 docs showing how to tie the lifetime of the self type to an associated type in an impl when the trait *doesn't* have a lifetime to begin with.

CC rust-lang#135589.
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jan 17, 2025
@matthiaskrgr
Copy link
Member Author

@bors r+ rollup=never p=7

@bors
Copy link
Contributor

bors commented Jan 17, 2025

📌 Commit 479e0c1 has been approved by matthiaskrgr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 17, 2025
@bors
Copy link
Contributor

bors commented Jan 17, 2025

⌛ Testing commit 479e0c1 with merge 14d68e9...

bors added a commit to rust-lang-ci/rust that referenced this pull request Jan 17, 2025
…iaskrgr

Rollup of 7 pull requests

Successful merges:

 - rust-lang#131806 (Treat other items as functions for the purpose of type-based search)
 - rust-lang#134290 (Windows x86: Change i128 to return via the vector ABI)
 - rust-lang#134980 (Location-sensitive polonius prototype: endgame)
 - rust-lang#135558 (Detect if-else chains with a missing final else in type errors)
 - rust-lang#135594 (fix error for when results in a rustdoc-js test are in the wrong order)
 - rust-lang#135601 (Fix suggestion to convert dereference of raw pointer to ref)
 - rust-lang#135604 (Expand docs for `E0207` with additional example)

r? `@ghost`
`@rustbot` modify labels: rollup
@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-nopt failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
test [codegen] tests/codegen/zip.rs ... ok

failures:

---- [codegen] tests/codegen/i128-x86-callconv.rs#MINGW stdout ----

error in revision `MINGW`: verification with 'FileCheck' failed
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll" "/checkout/tests/codegen/i128-x86-callconv.rs" "--check-prefix=CHECK" "--check-prefix" "MINGW" "--allow-unused-prefixes" "--dump-input-context" "100" "--check-prefix=WIN"
--- stderr -------------------------------
--- stderr -------------------------------
/checkout/tests/codegen/i128-x86-callconv.rs:44:10: error: WIN: expected string not found in input
 // WIN: [[LOADED:%[_0-9]+]] = load <16 x i8>, ptr %arg1
         ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll:17:54: note: scanning from here
define <16 x i8> @ret(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 {
                                                     ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll:22:2: note: possible intended match here
 %1 = load <16 x i8>, ptr %_0, align 16
 ^
/checkout/tests/codegen/i128-x86-callconv.rs:54:10: error: WIN: expected string not found in input
 // WIN: [[RETURNED:%[_0-9]+]] = tail call <16 x i8> @extern_ret()
         ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll:27:31: note: scanning from here
define void @forward(ptr %dst) unnamed_addr #0 {
                              ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll:31:2: note: possible intended match here
 %2 = call <16 x i8> @extern_ret() #2


Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MINGW/i128-x86-callconv.ll
Check file: /checkout/tests/codegen/i128-x86-callconv.rs

-dump-input=help explains the following input dump.
Input was:
<<<<<<
<<<<<<
            1: ; ModuleID = 'i128_x86_callconv.eb563b6b493dca9c-cgu.0' 
            2: source_filename = "i128_x86_callconv.eb563b6b493dca9c-cgu.0" 
            3: target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 
            5:  
            5:  
            6: ; Function Attrs: nounwind uwtable 
            7: define void @pass(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
            9:  %0 = alloca [16 x i8], align 16 
            9:  %0 = alloca [16 x i8], align 16 
           10:  %1 = load i128, ptr %arg1, align 16 
           11:  store i128 %1, ptr %0, align 16 
           12:  call void @extern_call(ptr align 16 %0) #2 
           13:  ret void 
           14: } 
           15:  
           16: ; Function Attrs: nounwind uwtable 
           17: define <16 x i8> @ret(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
check:44'0                                                          X~~~~~~~~~~~~~~~~~~ error: no match found
check:44'0     ~~~~~~~
           19:  %_0 = alloca [16 x i8], align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           20:  %0 = load i128, ptr %arg1, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           21:  store i128 %0, ptr %_0, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           22:  %1 = load <16 x i8>, ptr %_0, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:44'1      ?                                       possible intended match
           23:  ret <16 x i8> %1 
check:44'0     ~~~~~~~~~~~~~~~~~~
           24: } 
check:44'0     ~~
check:44'0     ~
check:44'0     ~
           26: ; Function Attrs: nounwind uwtable 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           27: define void @forward(ptr %dst) unnamed_addr #0 { 
check:44'0     ~~~~~~~~~~~~~~~~~~~~
check:54'0                                   X~~~~~~~~~~~~~~~~~~ error: no match found
check:54'0     ~~~~~~~
           29:  %0 = alloca [16 x i8], align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           30:  %1 = alloca [16 x i8], align 16 
           30:  %1 = alloca [16 x i8], align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           31:  %2 = call <16 x i8> @extern_ret() #2 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:54'1      ?                                     possible intended match
           32:  store <16 x i8> %2, ptr %0, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           33:  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %1, ptr align 16 %0, i64 16, i1 false) 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           34:  %_2 = load i128, ptr %1, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           35:  store i128 %_2, ptr %dst, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           36:  ret void 
check:54'0     ~~~~~~~~~~
           37: } 
check:54'0     ~~
check:54'0     ~
check:54'0     ~
           39: ; Function Attrs: nounwind uwtable 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           40: define void @ret_aggregate(ptr sret([32 x i8]) align 16 %_0, i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
           42:  store i32 1, ptr %_0, align 16 
           42:  store i32 1, ptr %_0, align 16 
           43:  %0 = load i128, ptr %arg1, align 16 
           44:  %1 = getelementptr inbounds i8, ptr %_0, i64 16 
           45:  store i128 %0, ptr %1, align 16 
           46:  ret void 
           47: } 
           48:  
           49: ; Function Attrs: nounwind uwtable 
           50: declare void @extern_call(ptr align 16) unnamed_addr #0 
           51:  
           52: ; Function Attrs: nounwind uwtable 
           53: declare <16 x i8> @extern_ret() unnamed_addr #0 
           54:  
           55: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) 
           56: declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1 
           57:  
           58: attributes #0 = { nounwind uwtable "target-cpu"="x86-64" "target-features"="+cx16,+sse3,+sahf,+x87,+sse2" } 
           59: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } 
           60: attributes #2 = { nounwind } 
           61:  
           62: !llvm.module.flags = !{!0} 
           63: !llvm.ident = !{!1} 
           64:  
           65: !0 = !{i32 8, !"PIC Level", i32 2} 
           66: !1 = !{!"rustc version 1.86.0-nightly (14d68e9d8 2025-01-17)"} 
------------------------------------------



---- [codegen] tests/codegen/i128-x86-callconv.rs#MSVC stdout ----

error in revision `MSVC`: verification with 'FileCheck' failed
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll" "/checkout/tests/codegen/i128-x86-callconv.rs" "--check-prefix=CHECK" "--check-prefix" "MSVC" "--allow-unused-prefixes" "--dump-input-context" "100" "--check-prefix=WIN"
--- stderr -------------------------------
--- stderr -------------------------------
/checkout/tests/codegen/i128-x86-callconv.rs:44:10: error: WIN: expected string not found in input
 // WIN: [[LOADED:%[_0-9]+]] = load <16 x i8>, ptr %arg1
         ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll:17:54: note: scanning from here
define <16 x i8> @ret(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 {
                                                     ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll:22:2: note: possible intended match here
 %1 = load <16 x i8>, ptr %_0, align 16
 ^
/checkout/tests/codegen/i128-x86-callconv.rs:54:10: error: WIN: expected string not found in input
 // WIN: [[RETURNED:%[_0-9]+]] = tail call <16 x i8> @extern_ret()
         ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll:27:31: note: scanning from here
define void @forward(ptr %dst) unnamed_addr #0 {
                              ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll:31:2: note: possible intended match here
 %2 = call <16 x i8> @extern_ret() #2


Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/i128-x86-callconv.MSVC/i128-x86-callconv.ll
Check file: /checkout/tests/codegen/i128-x86-callconv.rs

-dump-input=help explains the following input dump.
Input was:
<<<<<<
<<<<<<
            1: ; ModuleID = 'i128_x86_callconv.eb563b6b493dca9c-cgu.0' 
            2: source_filename = "i128_x86_callconv.eb563b6b493dca9c-cgu.0" 
            3: target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 
            5:  
            5:  
            6: ; Function Attrs: nounwind uwtable 
            7: define void @pass(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
            9:  %0 = alloca [16 x i8], align 16 
            9:  %0 = alloca [16 x i8], align 16 
           10:  %1 = load i128, ptr %arg1, align 16 
           11:  store i128 %1, ptr %0, align 16 
           12:  call void @extern_call(ptr align 16 %0) #2 
           13:  ret void 
           14: } 
           15:  
           16: ; Function Attrs: nounwind uwtable 
           17: define <16 x i8> @ret(i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
check:44'0                                                          X~~~~~~~~~~~~~~~~~~ error: no match found
check:44'0     ~~~~~~~
           19:  %_0 = alloca [16 x i8], align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           20:  %0 = load i128, ptr %arg1, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           21:  store i128 %0, ptr %_0, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           22:  %1 = load <16 x i8>, ptr %_0, align 16 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:44'1      ?                                       possible intended match
           23:  ret <16 x i8> %1 
check:44'0     ~~~~~~~~~~~~~~~~~~
           24: } 
check:44'0     ~~
check:44'0     ~
check:44'0     ~
           26: ; Function Attrs: nounwind uwtable 
check:44'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           27: define void @forward(ptr %dst) unnamed_addr #0 { 
check:44'0     ~~~~~~~~~~~~~~~~~~~~
check:54'0                                   X~~~~~~~~~~~~~~~~~~ error: no match found
check:54'0     ~~~~~~~
           29:  %0 = alloca [16 x i8], align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           30:  %1 = alloca [16 x i8], align 16 
           30:  %1 = alloca [16 x i8], align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           31:  %2 = call <16 x i8> @extern_ret() #2 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:54'1      ?                                     possible intended match
           32:  store <16 x i8> %2, ptr %0, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           33:  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %1, ptr align 16 %0, i64 16, i1 false) 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           34:  %_2 = load i128, ptr %1, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           35:  store i128 %_2, ptr %dst, align 16 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           36:  ret void 
check:54'0     ~~~~~~~~~~
           37: } 
check:54'0     ~~
check:54'0     ~
check:54'0     ~
           39: ; Function Attrs: nounwind uwtable 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           40: define void @ret_aggregate(ptr sret([32 x i8]) align 16 %_0, i32 %_arg0, ptr align 16 %arg1) unnamed_addr #0 { 
check:54'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
           42:  store i32 1, ptr %_0, align 16 
           42:  store i32 1, ptr %_0, align 16 
           43:  %0 = load i128, ptr %arg1, align 16 
           44:  %1 = getelementptr inbounds i8, ptr %_0, i64 16 
           45:  store i128 %0, ptr %1, align 16 
           46:  ret void 
           47: } 
           48:  
           49: ; Function Attrs: nounwind uwtable 
           50: declare void @extern_call(ptr align 16) unnamed_addr #0 
           51:  
           52: ; Function Attrs: nounwind uwtable 
           53: declare <16 x i8> @extern_ret() unnamed_addr #0 
           54:  
           55: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) 
           56: declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1 
           57:  
           58: attributes #0 = { nounwind uwtable "target-cpu"="x86-64" "target-features"="+cx16,+sse3,+sahf,+x87,+sse2" } 
           59: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } 
           60: attributes #2 = { nounwind } 
           61:  
           62: !llvm.module.flags = !{!0} 
           63: !llvm.ident = !{!1} 
           64:  
           65: !0 = !{i32 8, !"PIC Level", i32 2} 
           66: !1 = !{!"rustc version 1.86.0-nightly (14d68e9d8 2025-01-17)"} 
------------------------------------------



@bors
Copy link
Contributor

bors commented Jan 17, 2025

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jan 17, 2025
@matthiaskrgr matthiaskrgr deleted the rollup-4m1o3zz branch January 25, 2025 09:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
rollup A PR which is a rollup S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants