Commit Graph

4456 Commits

Author SHA1 Message Date
bjorn3
d0d2e60886 Merge commit '659243d85c7489412bd0faa1c068d904a6042941' into sync_cg_clif-2024-07-13 2024-07-13 18:39:03 +00:00
bjorn3
659243d85c Fix rustc test suite 2024-07-13 18:38:35 +00:00
bjorn3
739dfcab8e Rustup to rustc 1.81.0-nightly (c6727fc9b 2024-07-12) 2024-07-13 18:32:48 +00:00
bjorn3
f5c3195e92 Nicer error message when using raw-dylib
cc rust-lang/rustc_codegen_cranelift#1510
2024-07-13 13:53:14 +00:00
bjorn3
96fa075225 Fix rustc test suite 2024-07-09 10:46:21 +00:00
bjorn3
7292fa2a90 Update dependencies 2024-07-09 10:40:29 +00:00
bjorn3
344e4ef787 Fix rustc test suite 2024-07-09 10:30:12 +00:00
bjorn3
cf25d25de3 Rustup to rustc 1.81.0-nightly (35b658fb1 2024-07-08) 2024-07-09 10:16:04 +00:00
bjorn3
29bc1a5cc0 Sync from rust 35b658fb10 2024-07-09 10:08:02 +00:00
bors
776ab988c1 Auto merge of #113128 - WaffleLapkin:become_trully_unuwuable, r=oli-obk,RalfJung
Support tail calls in mir via `TerminatorKind::TailCall`

This is one of the interesting bits in tail call implementation — MIR support.

This adds a new `TerminatorKind` which represents a tail call:
```rust
    TailCall {
        func: Operand<'tcx>,
        args: Vec<Operand<'tcx>>,
        fn_span: Span,
    },
```

*Structurally* this is very similar to a normal `Call` but is missing a few fields:
- `destination` — tail calls don't write to destination, instead they pass caller's destination to the callee (such that eventual `return` will write to the caller of the function that used tail call)
- `target` — similarly to `destination` tail calls pass the caller's return address to the callee, so there is nothing to do
- `unwind` — I _think_ this is applicable too, although it's a bit confusing
- `call_source` — `become` forbids operators and is not created as a lowering of something else; tail calls always come from HIR (at least for now)

It might be helpful to read the interpreter implementation to understand what `TailCall` means exactly, although I've tried documenting it too.

-----

There are a few `FIXME`-questions still left, ideally we'd be able to answer them during review ':)

-----

r? `@oli-obk`
cc `@scottmcm` `@DrMeepster` `@JakobDegen`
2024-07-08 04:35:04 +00:00
bjorn3
322c2f6b13 Sync ar_archive_writer to LLVM 18.1.3
From LLVM 15.0.0-rc3. This adds support for COFF archives containing
Arm64EC object files and has various fixes for AIX big archive files.
2024-07-07 16:56:35 +00:00
Maybe Waffle
9978261a6e Support tail calls in mir via TerminatorKind::TailCall 2024-07-07 17:11:04 +02:00
bors
8620e85a1c Auto merge of #123781 - RalfJung:miri-fn-identity, r=oli-obk
Miri function identity hack: account for possible inlining

Having a non-lifetime generic is not the only reason a function can be duplicated. Another possibility is that the function may be eligible for cross-crate inlining. So also take into account the inlining attribute in this Miri hack for function pointer identity.

That said, `cross_crate_inlinable` will still sometimes return true even for `inline(never)` functions:
- when they are `DefKind::Ctor(..) | DefKind::Closure` -- I assume those cannot be `InlineAttr::Never` anyway?
- when `cross_crate_inline_threshold == InliningThreshold::Always`

so maybe this is still not quite the right criterion to use for function pointer identity.
2024-07-04 23:45:56 +00:00
bjorn3
253436c04c Better parsing of #[section_name] on Mach-O
This is required by the objc2 crate

Fixes rust-lang/rustc_codegen_cranelift#1504
2024-07-04 21:52:25 +02:00
Michael Goulet
c6b883bb2e Fix spans 2024-07-02 15:48:48 -04:00
Michael Goulet
e4bde05ed6 Give Instance::expect_resolve a span 2024-07-02 15:48:48 -04:00
Ralf Jung
a6056bce92 Miri function identity hack: account for possible inlining 2024-07-02 21:05:30 +02:00
bjorn3
f35bd40d18 Remove unused generic_args arguments from intrinsic codegen functions 2024-07-01 15:56:14 +00:00
bjorn3
126fd7c31d Also mark .debug_line_str as mergeable strings 2024-07-01 08:18:34 +00:00
bjorn3
c9b0075563 Distribute rustc_codegen_cranelift for arm64 macOS 2024-06-30 18:40:09 +00:00
bjorn3
7a1601553d Mark .debug_str as mergeable strings
Fixes rust-lang/rustc_codegen_cranelift#1496
2024-06-30 12:01:15 +00:00
bjorn3
28950f36cc Merge branch 'sync_from_rust' 2024-06-30 11:29:53 +00:00
bjorn3
5adaed06a0 Merge commit '49cd5dd454d0115cfbe9e39102a8b3ba4616aa40' into sync_cg_clif-2024-06-30 2024-06-30 11:28:14 +00:00
bjorn3
49cd5dd454 Rustup to rustc 1.81.0-nightly (ba1d7f4a0 2024-06-29) 2024-06-30 11:20:49 +00:00
bjorn3
45600348c0 Stop pinning XCode 14
The linker issue with XCode 15 has been fixed.
2024-06-29 15:08:04 +00:00
bjorn3
30be8bcb45 Remove --cfg no_unstable_features 2024-06-29 15:06:08 +00:00
bjorn3
3d54358b64 Update object to 0.36.1
This fixes a crash with macOS's ld-prime on arm64.

Fixes rust-lang/rustc_codegen_cranelift#1501
2024-06-29 15:13:34 +02:00
bjorn3
e97cebb2b1 Use dyn Module instead of impl Module where possible 2024-06-28 11:51:17 +00:00
bjorn3
cc05efe29e Introduce UnwindModule wrapper around a Module and UnwindContext
This way all UnwindContext::add_function calls can be done automatically
in a single place.
2024-06-28 11:51:00 +00:00
bjorn3
94c2e7aad3 Fix rustc test suite 2024-06-26 09:33:35 +00:00
bjorn3
476b7bdbe5 Rustup to rustc 1.81.0-nightly (fda509e81 2024-06-25) 2024-06-26 09:13:12 +00:00
bjorn3
8d11939589 Sync from rust fda509e817 2024-06-26 09:11:55 +00:00
Jubilee Young
f1052eb253 cg_clif: Define build opts from FramePointer 2024-06-23 00:36:33 -07:00
bjorn3
aa5d7a0d8a Update platform support table for the new arm64 macOS support
Closes rust-lang/rustc_codegen_cranelift#1248
2024-06-21 12:31:16 +00:00
bjorn3
2a378251fb Update to Cranelift 0.109 2024-06-20 17:05:08 +00:00
bjorn3
cdad523e5f
Merge pull request #1500 from beetrees/mac-arm64-va-call
Fix varargs support on `aarch64-apple-darwin`
2024-06-20 13:45:48 +02:00
beetrees
b0fcf2e27a
Add aarch64-apple-darwin to CI 2024-06-20 00:08:08 +01:00
beetrees
8556604bc6
Fix varargs support on aarch64-apple-darwin 2024-06-20 00:08:08 +01:00
Scott McMurray
e79dc7656a bug! more uses of these in runtime stuff 2024-06-19 10:44:01 -07:00
Guillaume Gomez
1cb728280d
Re-enable tests/run-make/const_fn_mir (#1497) 2024-06-18 18:51:53 +02:00
bjorn3
729cb08d4c Fix rustc tests 2024-06-18 16:23:11 +00:00
bjorn3
c5bd2e3b90 Rustup to rustc 1.81.0-nightly (59e2c01c2 2024-06-17) 2024-06-18 16:14:35 +00:00
bjorn3
88a5f32ed5 Sync from rust 59e2c01c22 2024-06-18 16:04:56 +00:00
Oli Scherer
afef64c1bd Use a dedicated type instead of a reference for the diagnostic context
This paves the way for tracking more state (e.g. error tainting) in the diagnostic context handle
2024-06-18 15:42:11 +00:00
bjorn3
e241176535 Fix rustc tests 2024-06-17 08:27:46 +00:00
bjorn3
a4b36e5adb Rustup to rustc 1.81.0-nightly (d7f6ebace 2024-06-16) 2024-06-17 08:27:46 +00:00
bjorn3
0d1d00478c Sync from rust d7f6ebacee 2024-06-17 07:50:36 +00:00
Michael Goulet
54aa510c32 Rename InstanceDef -> InstanceKind 2024-06-16 21:35:21 -04:00
bors
5c6849b1df Auto merge of #126505 - compiler-errors:no-vtable, r=lcnr
Only compute vtable information during codegen

This PR removes vtable information from the `Object` and `TraitUpcasting` candidate sources in the trait solvers, and defers the computation of relevant information to `Instance::resolve`. This is because vtables really aren't a thing in the trait world -- they're an implementation detail in codegen.

Previously it was just easiest to tangle this information together since we were already doing the work of looking at all the supertraits in the trait solver, and specifically because we use traits to represent when it's possible to call a method via a vtable (`Object` candidate) and do upcasting (`Unsize` candidate). but I am somewhat suspicious we're doing a *lot* of extra work, especially in polymorphic contexts, so let's see what perf says.
2024-06-16 05:33:49 +00:00
Michael Goulet
5ccfa787fd Only compute vtable information during codegen 2024-06-14 20:35:45 -04:00