Conversation
although, not sure why this works - it wasn't needed before
Configure sanitize option when compiling with a sanitizer to make it possible to execute different code depending on whether given sanitizer is enabled or not.
rustc: split FnAbi's into definitions/direct calls ("of_instance") and indirect calls ("of_fn_ptr").
After this PR:
* `InstanceDef::Virtual` is only used for "direct" virtual calls, and shims around those calls use `InstanceDef::ReifyShim` (i.e. for `<dyn Trait as Trait>::f as fn(_)`)
* this could easily be done for intrinsics as well, to allow their reification, but I didn't do it
* `FnAbi::of_instance` is **always** used for declaring/defining an `fn`, and for direct calls to an `fn`
* this is great for e.g. rust-lang#65881 (`#[track_caller]`), which can introduce the "caller location" argument into "codegen signatures" by only changing `FnAbi::of_instance`, after this PR
* `FnAbi::of_fn_ptr` is used primarily for indirect calls, i.e. to `fn` pointers
* *not* virtual calls (which use `FnAbi::of_instance` with `InstanceDef::Virtual`)
* there's also a couple uses where the `rustc_codegen_llvm` needs to declare (i.e. FFI-import) an LLVM function that has no Rust declaration available at all
* at least one of them could probably be a "weak lang item" instead
As there are many steps, this PR is best reviewed commit by commit - some of which arguably should be in their own PRs, I may have gotten carried away a bit.
cc @nagisa @rkruppe @oli-obk @anp
Conditional compilation for sanitizers Configure sanitize option when compiling with a sanitizer to make it possible to execute different code depending on whether given sanitizer is enabled or not.
…oli-obk handle diverging functions forwarding their return place Fixes rust-lang/miri#1075: the shim around diverging closures turned into function pointers actually "obtains" a return place inside a diverging function, but just uses it as the return place for a diverging callee. Handle this by using NULL places. This is kind of a hack as it breaks our invariant that all places are dereferencable, but we'd eventually let raw pointers break that anyway I assume so that seems fine. r? @oli-obk
rustbuild fixes
When upgrading Debian's rustc to 1.38 I needed these patches:
(1) In order to cross-compile rustc 1.38 and take it through the full rustbuild process including install, I needed the first patch.
(2) In order to build rustc 1.38 using rustc 1.38 itself I need to set --cap-lints warn, otherwise I get this error:
~~~~
error: unnecessary `unsafe` block
--> src/bootstrap/builder.rs:148:19
|
148 | name: unsafe { ::std::intrinsics::type_name::<S>() },
| ^^^^^^ unnecessary `unsafe` block
|
note: lint level defined here
--> src/bootstrap/lib.rs:107:9
|
107 | #![deny(warnings, rust_2018_idioms, unused_lifetimes)]
| ^^^^^^^^
= note: `#[deny(unused_unsafe)]` implied by `#[deny(warnings)]`
error: aborting due to previous error
error: could not compile `bootstrap`.
~~~~
In order to set --cap-lints warn however, I need bootstrap.py not to clobber RUSTFLAGS. (This worked previously, not sure if it was broken intentionally but we would like support for it.)
…wjasper rustc_mir: use nicer path printing for #[rustc_regions] NLL tests. Similar to rust-lang#66850, spotted while working on rust-lang#66907. r? @matthewjasper
|
@bors r+ rollup=never p=5 |
|
📌 Commit 76b50ba has been approved by |
|
⌛ Testing commit 76b50ba with merge 8ae5a1b90a620bf9dd5730db14e471ff1253f95e... |
|
The job Click to expand the log.I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
|
💔 Test failed - checks-azure |
|
The job Click to expand the log.I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
Successful merges:
Failed merges:
r? @ghost