]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agoupdate Miri
Ralf Jung [Fri, 22 Jul 2022 16:18:52 +0000 (12:18 -0400)]
update Miri

2 years agomiri: make --stage 0 testing work
Ralf Jung [Fri, 22 Jul 2022 11:49:20 +0000 (07:49 -0400)]
miri: make --stage 0 testing work

2 years agoAuto merge of #99592 - Dylan-DPC:rollup-xlw4wax, r=Dylan-DPC
bors [Fri, 22 Jul 2022 07:12:19 +0000 (07:12 +0000)]
Auto merge of #99592 - Dylan-DPC:rollup-xlw4wax, r=Dylan-DPC

Rollup of 6 pull requests

Successful merges:

 - #98174 (Rename `<*{mut,const} T>::as_{const,mut}` to `cast_`)
 - #98868 (Fix unreachable coverage generation for inlined functions)
 - #99393 (feat: omit suffixes in const generics (e.g. `1_i32`))
 - #99423 (Group CSS font rule)
 - #99539 (Improve suggestions for returning binding)
 - #99579 (Add same warning to Result::expect as Result::unwrap)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoRollup merge of #99579 - CleanCut:expect-warning, r=joshtriplett
Dylan DPC [Fri, 22 Jul 2022 06:23:43 +0000 (11:53 +0530)]
Rollup merge of #99579 - CleanCut:expect-warning, r=joshtriplett

Add same warning to Result::expect as Result::unwrap

I was reading a recent blog post by Jimmy Hartzell and [he noted](https://www.thecodedmessage.com/posts/2022-07-14-programming-unwrap/#context):

> I will however note that the documentation of `unwrap` comes with [a warning not to use it](https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap). The warning is framed in terms of the fact that `unwrap` may panic, but the [documentation of `expect`](https://doc.rust-lang.org/std/result/enum.Result.html#method.expect), where this is equally true, does not come with such a warning.

It _is_ equally true. Let's add the same warning to `expect`. This PR is a copy-and-paste of the warning text from the docstring for `unwrap`.

2 years agoRollup merge of #99539 - compiler-errors:bidirectional-block-suggestions, r=fee1...
Dylan DPC [Fri, 22 Jul 2022 06:23:42 +0000 (11:53 +0530)]
Rollup merge of #99539 - compiler-errors:bidirectional-block-suggestions, r=fee1-dead

Improve suggestions for returning binding

Fixes #99525

Also reworks the cause codes for match and if a bit, I think cleaning them up in a positive way.
We no longer need to call `could_remove_semicolon` in successful code, which might save a few cycles?

2 years agoRollup merge of #99423 - GuillaumeGomez:group-css-font-rule, r=notriddle
Dylan DPC [Fri, 22 Jul 2022 06:23:41 +0000 (11:53 +0530)]
Rollup merge of #99423 - GuillaumeGomez:group-css-font-rule, r=notriddle

Group CSS font rule

Another CSS cleanup I came by when working on something else.

r? ``@notriddle``

2 years agoRollup merge of #99393 - Logarithmus:feature/99255-omit-const-generic-suffixes, r...
Dylan DPC [Fri, 22 Jul 2022 06:23:40 +0000 (11:53 +0530)]
Rollup merge of #99393 - Logarithmus:feature/99255-omit-const-generic-suffixes, r=petrochenkov

feat: omit suffixes in const generics (e.g. `1_i32`)

Closes #99255

2 years agoRollup merge of #98868 - tmiasko:unreachable-coverage, r=wesleywiser
Dylan DPC [Fri, 22 Jul 2022 06:23:40 +0000 (11:53 +0530)]
Rollup merge of #98868 - tmiasko:unreachable-coverage, r=wesleywiser

Fix unreachable coverage generation for inlined functions

To generate a function coverage we need at least one coverage counter,
so a coverage from unreachable blocks is retained only when some live
counters remain.

The previous implementation incorrectly retained unreachable coverage,
because it didn't account for the fact that those live counters can
belong to another function due to inlining.

Fixes #98833.

2 years agoRollup merge of #98174 - Kixunil:rename_ptr_as_mut_const_to_cast, r=scottmcm
Dylan DPC [Fri, 22 Jul 2022 06:23:39 +0000 (11:53 +0530)]
Rollup merge of #98174 - Kixunil:rename_ptr_as_mut_const_to_cast, r=scottmcm

Rename `<*{mut,const} T>::as_{const,mut}` to `cast_`

This renames the methods to use the `cast_` prefix instead of `as_` to
make it more readable and avoid confusion with `<*mut T>::as_mut()`
which is `unsafe` and returns a reference.

Sorry, didn't notice ACP process exists, opened https://github.com/rust-lang/libs-team/issues/51

See #92675

2 years agoAuto merge of #99420 - RalfJung:vtable, r=oli-obk
bors [Fri, 22 Jul 2022 01:33:49 +0000 (01:33 +0000)]
Auto merge of #99420 - RalfJung:vtable, r=oli-obk

make vtable pointers entirely opaque

This implements the scheme discussed in https://github.com/rust-lang/unsafe-code-guidelines/issues/338: vtable pointers should be considered entirely opaque and not even readable by Rust code, similar to function pointers.

- We have a new kind of `GlobalAlloc` that symbolically refers to a vtable.
- Miri uses that kind of allocation when generating a vtable.
- The codegen backends, upon encountering such an allocation, call `vtable_allocation` to obtain an actually dataful allocation for this vtable.
- We need new intrinsics to obtain the size and align from a vtable (for some `ptr::metadata` APIs), since direct accesses are UB now.

I had to touch quite a bit of code that I am not very familiar with, so some of this might not make much sense...
r? `@oli-obk`

2 years agoadd same warning to Result::expect as Result::unwrap
Nathan Stocks [Fri, 22 Jul 2022 00:15:24 +0000 (18:15 -0600)]
add same warning to Result::expect as Result::unwrap

2 years agoAuto merge of #99530 - RalfJung:miri, r=oli-obk
bors [Thu, 21 Jul 2022 22:24:06 +0000 (22:24 +0000)]
Auto merge of #99530 - RalfJung:miri, r=oli-obk

update Miri

Fixes https://github.com/rust-lang/rust/issues/99461
r? `@oli-obk` because of lockfile changes (seems like serde is getting implicitly bumped)

2 years agoupdate Miri
Ralf Jung [Thu, 21 Jul 2022 20:04:37 +0000 (16:04 -0400)]
update Miri

2 years agoAuto merge of #99501 - lcnr:check-regions-infcx, r=oli-obk
bors [Thu, 21 Jul 2022 19:43:21 +0000 (19:43 +0000)]
Auto merge of #99501 - lcnr:check-regions-infcx, r=oli-obk

move `considering_regions` to the infcx

it seems weird to prove some obligations which constrain inference vars while ignoring regions  in a context which considers regions. This is especially weird because even for a fulfillment context with ignored regions, we still added region outlives bounds when directly relating regions.

tbh our handling of regions is still very weird, but at least this is a step in the right direction imo.

r? rust-lang/types

2 years agoAuto merge of #99567 - matthiaskrgr:rollup-08hh3r4, r=matthiaskrgr
bors [Thu, 21 Jul 2022 17:02:31 +0000 (17:02 +0000)]
Auto merge of #99567 - matthiaskrgr:rollup-08hh3r4, r=matthiaskrgr

Rollup of 11 pull requests

Successful merges:

 - #98707 (std: use futex-based locks on Fuchsia)
 - #99413 (Add `PhantomData` marker for dropck to `BTreeMap`)
 - #99454 (Add map_continue and continue_value combinators to ControlFlow)
 - #99523 (Fix the stable version of `AsFd for Arc<T>` and `Box<T>`)
 - #99526 (Normalize the arg spans to be within the call span)
 - #99528 (couple of clippy::perf fixes)
 - #99549 (Add regression test for #52304)
 - #99552 (Rewrite `orphan_check_trait_ref` to use a `TypeVisitor`)
 - #99557 (Edit `rustc_index::vec::IndexVec::pick3_mut` docs)
 - #99558 (Fix `remap_constness`)
 - #99559 (Remove unused field in ItemKind::KeywordItem)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoAddress more nits
Michael Goulet [Thu, 21 Jul 2022 16:12:57 +0000 (16:12 +0000)]
Address more nits

2 years agoRollup merge of #99559 - GuillaumeGomez:rm-unused-field-keyword, r=notriddle
Matthias Krüger [Thu, 21 Jul 2022 16:42:12 +0000 (18:42 +0200)]
Rollup merge of #99559 - GuillaumeGomez:rm-unused-field-keyword, r=notriddle

Remove unused field in ItemKind::KeywordItem

For the keyword name, we use `Item::name` directly everywhere so there is no point into keeping it.

r? ``@notriddle``

2 years agoRollup merge of #99558 - fee1-dead-contrib:remap_constness_fix, r=oli-obk
Matthias Krüger [Thu, 21 Jul 2022 16:42:11 +0000 (18:42 +0200)]
Rollup merge of #99558 - fee1-dead-contrib:remap_constness_fix, r=oli-obk

Fix `remap_constness`

`~const Drop` was renamed to `~const Destruct` and this special case should
be removed

2 years agoRollup merge of #99557 - pierwill:patch-6, r=tmiasko
Matthias Krüger [Thu, 21 Jul 2022 16:42:10 +0000 (18:42 +0200)]
Rollup merge of #99557 - pierwill:patch-6, r=tmiasko

Edit `rustc_index::vec::IndexVec::pick3_mut` docs

Clarify when this method will panic.

Part of #93792.

2 years agoRollup merge of #99552 - lcnr:orphan_check-rework, r=oli-obk
Matthias Krüger [Thu, 21 Jul 2022 16:42:09 +0000 (18:42 +0200)]
Rollup merge of #99552 - lcnr:orphan_check-rework, r=oli-obk

Rewrite `orphan_check_trait_ref` to use a `TypeVisitor`

The current impl is far more confusing than it has any right to be :sparkles:

r? rust-lang/types

2 years agoRollup merge of #99549 - JohnTitor:issue-52304, r=compiler-errors
Matthias Krüger [Thu, 21 Jul 2022 16:42:08 +0000 (18:42 +0200)]
Rollup merge of #99549 - JohnTitor:issue-52304, r=compiler-errors

Add regression test for #52304

Closes #52304
r? ```@compiler-errors```

Signed-off-by: Yuki Okushi <jtitor@2k36.org>
2 years agoRollup merge of #99528 - matthiaskrgr:2022_07_perf, r=estebank
Matthias Krüger [Thu, 21 Jul 2022 16:42:07 +0000 (18:42 +0200)]
Rollup merge of #99528 - matthiaskrgr:2022_07_perf, r=estebank

couple of clippy::perf fixes

2 years agoRollup merge of #99526 - compiler-errors:normalize-arg-spans, r=oli-obk
Matthias Krüger [Thu, 21 Jul 2022 16:42:06 +0000 (18:42 +0200)]
Rollup merge of #99526 - compiler-errors:normalize-arg-spans, r=oli-obk

Normalize the arg spans to be within the call span

Makes more sense to point out the arg's span, and not the expression inside the macro

2 years agoRollup merge of #99523 - cuviper:asfd_ptrs-1.64, r=jyn514
Matthias Krüger [Thu, 21 Jul 2022 16:42:05 +0000 (18:42 +0200)]
Rollup merge of #99523 - cuviper:asfd_ptrs-1.64, r=jyn514

Fix the stable version of `AsFd for Arc<T>` and `Box<T>`

These merged in #97437 for 1.64.0, apart from the main `io_safety`
feature that stabilized in 1.63.0.

2 years agoRollup merge of #99454 - benluelo:control-flow/continue-combinators, r=scottmcm
Matthias Krüger [Thu, 21 Jul 2022 16:42:04 +0000 (18:42 +0200)]
Rollup merge of #99454 - benluelo:control-flow/continue-combinators, r=scottmcm

Add map_continue and continue_value combinators to ControlFlow

As suggested in this comment: https://github.com/rust-lang/rust/issues/75744#issuecomment-1188549494

Related tracking issue: https://github.com/rust-lang/rust/issues/75744

r? ``````@scottmcm``````

2 years agoRollup merge of #99413 - steffahn:btree_dropck, r=m-ou-se
Matthias Krüger [Thu, 21 Jul 2022 16:42:02 +0000 (18:42 +0200)]
Rollup merge of #99413 - steffahn:btree_dropck, r=m-ou-se

Add `PhantomData` marker for dropck to `BTreeMap`

closes #99408

2 years agoRollup merge of #98707 - joboet:fuchsia_locks, r=m-ou-se
Matthias Krüger [Thu, 21 Jul 2022 16:42:02 +0000 (18:42 +0200)]
Rollup merge of #98707 - joboet:fuchsia_locks, r=m-ou-se

std: use futex-based locks on Fuchsia

This switches `Condvar` and `RwLock` to the futex-based implementation currently used on Linux and some BSDs. Additionally, `Mutex` now has its own, priority-inheriting implementation based on the mutex in Fuchsia's `libsync`. It differs from the original in that it panics instead of aborting when reentrant locking is detected.

````@rustbot```` ping fuchsia
r? ````@m-ou-se````

2 years agoRename `<*{mut,const} T>::as_{const,mut}` to `cast_`
Martin Habovstiak [Thu, 16 Jun 2022 17:47:24 +0000 (19:47 +0200)]
Rename `<*{mut,const} T>::as_{const,mut}` to `cast_`

This renames the methods to use the `cast_` prefix instead of `as_` to
make it more readable and avoid confusion with `<*mut T>::as_mut()`
which is `unsafe` and returns a reference.

See #92675

2 years agoUpdate compiler/rustc_mir_transform/src/simplify.rs
Wesley Wiser [Thu, 21 Jul 2022 15:51:40 +0000 (11:51 -0400)]
Update compiler/rustc_mir_transform/src/simplify.rs

2 years agoGeneralize same_type_modulo_infer
Michael Goulet [Thu, 21 Jul 2022 15:45:35 +0000 (15:45 +0000)]
Generalize same_type_modulo_infer

2 years agoRemove unused field in ItemKind::KeywordItem
Guillaume Gomez [Thu, 21 Jul 2022 14:05:17 +0000 (16:05 +0200)]
Remove unused field in ItemKind::KeywordItem

2 years agoFix `remap_constness`
Deadbeef [Thu, 21 Jul 2022 14:02:38 +0000 (14:02 +0000)]
Fix `remap_constness`

`~const Drop` was renamed to `~const Destruct` and this special case should
be removed

2 years agoEdit `rustc_index::vec::IndexVec::pick3_mut` docs
pierwill [Thu, 21 Jul 2022 13:49:53 +0000 (08:49 -0500)]
Edit `rustc_index::vec::IndexVec::pick3_mut` docs

Clarify when this method will panic.

Also fix formatting for `pick2_mut`.

2 years agoAuto merge of #99059 - Amanieu:fix-96797, r=Mark-Simulacrum
bors [Thu, 21 Jul 2022 13:40:28 +0000 (13:40 +0000)]
Auto merge of #99059 - Amanieu:fix-96797, r=Mark-Simulacrum

Add test for #96797

This was fixed in LLVM which was updated in #98285.

https://reviews.llvm.org/D127751

Fixes #96797

2 years agoAdd test for #96797
Amanieu d'Antras [Wed, 8 Jun 2022 22:58:11 +0000 (23:58 +0100)]
Add test for #96797

This was fixed in LLVM which was updated in #98285.

https://reviews.llvm.org/D127751

Fixes #96797

2 years ago`region_outlives_predicate` no snapshot
lcnr [Wed, 20 Jul 2022 09:49:20 +0000 (11:49 +0200)]
`region_outlives_predicate` no snapshot

2 years agomove `considering_regions` to the infcx
lcnr [Wed, 20 Jul 2022 09:40:15 +0000 (11:40 +0200)]
move `considering_regions` to the infcx

2 years agoAuto merge of #98162 - nextsilicon:support_lto_embed_bitcode, r=davidtwco
bors [Thu, 21 Jul 2022 10:13:59 +0000 (10:13 +0000)]
Auto merge of #98162 - nextsilicon:support_lto_embed_bitcode, r=davidtwco

Allow to disable thinLTO buffer to support lto-embed-bitcode lld feature

Hello
This change is to fix issue (https://github.com/rust-lang/rust/issues/84395) in which passing "-lto-embed-bitcode=optimized" to lld when linking rust code via linker-plugin-lto doesn't produce the expected result.

Instead of emitting a single unified module into a llvmbc section of the linked elf, it emits multiple submodules.
This is caused because rustc emits the BC modules after running llvm `createWriteThinLTOBitcodePass` pass.
Which in turn triggers a thinLTO linkage and causes the said issue.

This patch allows via compiler flag (-Cemit-thin-lto=<bool>) to select between running `createWriteThinLTOBitcodePass` and `createBitcodeWriterPass`.
Note this pattern of selecting between those 2 passes is common inside of LLVM code.
The default is to match the old behavior.

2 years agoremove unused import
joboet [Thu, 21 Jul 2022 09:51:26 +0000 (11:51 +0200)]
remove unused import

2 years agorewrite the orphan check to use a type visitor
lcnr [Thu, 21 Jul 2022 09:51:09 +0000 (11:51 +0200)]
rewrite the orphan check to use a type visitor

2 years agoorphan check: opaque types are an error
lcnr [Thu, 21 Jul 2022 08:53:54 +0000 (10:53 +0200)]
orphan check: opaque types are an error

2 years agoAdd regression test for #52304
Yuki Okushi [Thu, 21 Jul 2022 08:08:41 +0000 (17:08 +0900)]
Add regression test for #52304

Signed-off-by: Yuki Okushi <jtitor@2k36.org>
2 years agoAnd for patterns too
Michael Goulet [Thu, 21 Jul 2022 01:26:00 +0000 (01:26 +0000)]
And for patterns too

2 years agoDo if-expression obligation stuff less eagerly
Michael Goulet [Thu, 21 Jul 2022 00:03:02 +0000 (00:03 +0000)]
Do if-expression obligation stuff less eagerly

2 years agoResolve vars in same_type_modulo_infer
Michael Goulet [Wed, 20 Jul 2022 23:42:24 +0000 (23:42 +0000)]
Resolve vars in same_type_modulo_infer

2 years agoAuto merge of #93718 - thomcc:used-macho, r=pnkfelix
bors [Thu, 21 Jul 2022 06:59:32 +0000 (06:59 +0000)]
Auto merge of #93718 - thomcc:used-macho, r=pnkfelix

Only compile #[used] as llvm.compiler.used for ELF targets

This returns `#[used]` to how it worked prior to the LLVM 13 update. The intention is not that this is a stable promise.

I'll add tests later today. The tests will test things that we don't actually promise, though.

It's a deliberately small patch, mostly comments. And assuming it's reviewed and lands in time, IMO it should at least be considered for uplifting to beta (so that it can be in 1.59), as the change broke many crates in the ecosystem, even if they are relying on behavior that is not guaranteed.

# Background

LLVM has two ways of preventing removal of an unused variable: `llvm.compiler.used`, which must be present in object files, but allows the linker to remove the value, and `llvm.used` which is supposed to apply to the linker as well, if possible.

Prior to LLVM 13, `llvm.used` and `llvm.compiler.used` were the same on ELF targets, although they were different elsewhere. Prior to our update to LLVM 13, we compiled `#[used]` using `llvm.used` unconditionally, even though we only ever promised behavior like `llvm.compiler.used`.

In LLVM 13, ELF targets gained some support for preventing linker removal of `llvm.used` via the SHF_RETAIN section flag. This has some compatibility issues though: Concretely: some older versions `ld.gold` (specifically ones prior to v2.36, released in Jan 2021) had a bug where it would fail to place a `#[used] #[link_section = ".init_array"]` static in between `__init_array_start`/`__init_array_end`, leading to code that does this failing to run a static constructor. This is technically not a thing we guarantee will work, is a common use case, and is needed in `libstd` (for example, to get access to `std::env::args()` even if Rust does not control `main`, such as when in a `cdylib` crate).

As a result, when updating to LLVM 13, we unconditionally switched to using `llvm.compiler.used`, which mirror the guarantees we make for `#[used]` and doesn't require the latest ld.gold. Unfortunately, this happened to break quite a bit of things in the ecosystem, as non-ELF targets had come to rely on `#[used]` being slightly stronger. In particular, there are cases where it will even break static constructors on these targets[^initinit] (and in fact, breaks way more use cases, as Mach-O uses special sections as an interface to the OS/linker/loader in many places).

As a result, we only switch to `llvm.compiler.used` on ELF[^elfish] targets. The rationale here is:

1. It is (hopefully) identical to the semantics we used prior to the LLVM13 update as prior to that update we unconditionally used `llvm.used`, but on ELF `llvm.used` was the same as `llvm.compiler.used`.

2. It seems to be how Clang compiles this, and given that they have similar (but stronger) compatibility promises, that makes sense.

[^initinit]: For Mach-O targets: It is not always guaranteed that `__DATA,__mod_init_func` is a GC root if it does not have the `S_MOD_INIT_FUNC_POINTERS` flag which we cannot add. In most cases, when ld64 transformed this section into `__DATA_CONST,__mod_init_func` it gets applied, but it's not clear that that is intentional (let alone guaranteed), and the logic is complex enough that it probably happens sometimes, and people in the wild report it occurring.

[^elfish]: Actually, there's not a great way to tell if it's ELF, so I've approximated it.

This is pretty ad-hoc and hacky! We probably should have a firmer set of guarantees here, but this change should relax the pressure on coming up with that considerably, returning it to previous levels.

---

Unsure who should review so leaving it open, but for sure CC `@nikic`

2 years agoAuto merge of #99540 - Mark-Simulacrum:bump-beta, r=jyn514
bors [Thu, 21 Jul 2022 03:17:38 +0000 (03:17 +0000)]
Auto merge of #99540 - Mark-Simulacrum:bump-beta, r=jyn514

Bump to latest beta bootstrap compiler

Hopefully this will address https://github.com/rust-lang/rust/issues/99538, but I'm not sure we can confirm that without rolling it out. Should be safe in general, so likely little risk to just landing this.

2 years agoBump to latest beta
Mark Rousskov [Thu, 21 Jul 2022 01:36:08 +0000 (01:36 +0000)]
Bump to latest beta

2 years agodetect bad vptrs on dyn calls
Ralf Jung [Wed, 20 Jul 2022 22:33:51 +0000 (18:33 -0400)]
detect bad vptrs on dyn calls

2 years agoAuto merge of #99058 - michaelwoerister:remove-stable-set-and-map, r=nagisa
bors [Wed, 20 Jul 2022 22:19:30 +0000 (22:19 +0000)]
Auto merge of #99058 - michaelwoerister:remove-stable-set-and-map, r=nagisa

Remove the unused StableSet and StableMap types from rustc_data_structures.

The current implementation is not "stable" in the same sense that `HashStable` and `StableHasher` are stable, i.e. across compilation sessions. So, in my opinion, it's better to remove those types (which are basically unused anyway) than to give the wrong impression that these are safe for incr. comp.

I plan to provide new "stable" collection types soon that can be used to replace `FxHashMap` and `FxHashSet` in query results (see [draft](https://github.com/michaelwoerister/rust/commit/69d03ac7a7d651a397ab793e9d78f8fce3edf7a6)). It's unsound that `HashMap` and `HashSet` implement `HashStable` (see https://github.com/rust-lang/rust/issues/98890 for a recent P-critical bug caused by this) -- so we should make some progress there.

2 years agodetect bad vtables on an upcast
Ralf Jung [Wed, 20 Jul 2022 15:36:19 +0000 (11:36 -0400)]
detect bad vtables on an upcast

2 years agovarious nits from review
Ralf Jung [Wed, 20 Jul 2022 14:47:49 +0000 (10:47 -0400)]
various nits from review

2 years agoadd range metadata to alignment loads
Ralf Jung [Wed, 20 Jul 2022 14:45:09 +0000 (10:45 -0400)]
add range metadata to alignment loads

2 years agoMove vtable_size and vtable_align impls to cg_ssa
bjorn3 [Wed, 20 Jul 2022 13:40:30 +0000 (13:40 +0000)]
Move vtable_size and vtable_align impls to cg_ssa

2 years agoImplement vtable_size and vtable_align intrinsics for cg_clif
bjorn3 [Wed, 20 Jul 2022 13:36:58 +0000 (13:36 +0000)]
Implement vtable_size and vtable_align intrinsics for cg_clif

2 years agobless some tests
Ralf Jung [Wed, 20 Jul 2022 00:49:16 +0000 (20:49 -0400)]
bless some tests

2 years agoslightly cleaner, if more verbose, vtable handling in codegen backends
Ralf Jung [Wed, 20 Jul 2022 00:19:15 +0000 (20:19 -0400)]
slightly cleaner, if more verbose, vtable handling in codegen backends

2 years agoconsistently use VTable over Vtable (matching stable stdlib API RawWakerVTable)
Ralf Jung [Tue, 19 Jul 2022 23:57:44 +0000 (19:57 -0400)]
consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable)

2 years agouse extern type for extra opaqueness
Ralf Jung [Tue, 19 Jul 2022 23:57:25 +0000 (19:57 -0400)]
use extern type for extra opaqueness

2 years agoincorporate some review feedback
Ralf Jung [Tue, 19 Jul 2022 23:50:04 +0000 (19:50 -0400)]
incorporate some review feedback

2 years agoadd intrinsic to access vtable size and align
Ralf Jung [Mon, 18 Jul 2022 13:48:20 +0000 (09:48 -0400)]
add intrinsic to access vtable size and align

2 years agowe seem to monomorphize fewer vtables by default now, so adjust some tests
Ralf Jung [Sun, 17 Jul 2022 20:17:25 +0000 (16:17 -0400)]
we seem to monomorphize fewer vtables by default now, so adjust some tests

2 years agomake use of symbolic vtables in interpreter
Ralf Jung [Sun, 17 Jul 2022 20:02:49 +0000 (16:02 -0400)]
make use of symbolic vtables in interpreter

2 years agorename get_global_alloc to try_get_global_alloc
Ralf Jung [Sun, 17 Jul 2022 15:40:34 +0000 (11:40 -0400)]
rename get_global_alloc to try_get_global_alloc

2 years agoNormalize the arg spans to be within the call span
Michael Goulet [Wed, 20 Jul 2022 03:05:14 +0000 (03:05 +0000)]
Normalize the arg spans to be within the call span

2 years agoadd a Vtable kind of symbolic allocations
Ralf Jung [Sun, 17 Jul 2022 15:36:37 +0000 (11:36 -0400)]
add a Vtable kind of symbolic allocations

2 years agoAdd map_continue and continue_value combinators to ControlFlow
benluelo [Tue, 19 Jul 2022 07:16:07 +0000 (03:16 -0400)]
Add map_continue and continue_value combinators to ControlFlow

Fix type error

Fix continue_value doc comment

2 years agoAuto merge of #99520 - matthiaskrgr:rollup-05uuv5s, r=matthiaskrgr
bors [Wed, 20 Jul 2022 19:37:17 +0000 (19:37 +0000)]
Auto merge of #99520 - matthiaskrgr:rollup-05uuv5s, r=matthiaskrgr

Rollup of 9 pull requests

Successful merges:

 - #99212 (introduce `implied_by` in `#[unstable]` attribute)
 - #99352 (Use `typeck_results` to avoid duplicate `ast_ty_to_ty` call)
 - #99355 (better error for bad depth parameter on macro metavar expr)
 - #99480 (Diagnostic width span is not added when '0$' is used as width in format strings)
 - #99488 (compiletest: Allow using revisions with debuginfo tests.)
 - #99489 (rustdoc UI fixes)
 - #99508 (Avoid `Symbol` to `String` conversions)
 - #99510 (adapt assembly/static-relocation-model test for LLVM change)
 - #99516 (Use new tracking issue for proc_macro::tracked_*.)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoFix the stable version of `AsFd for Arc<T>` and `Box<T>`
Josh Stone [Wed, 20 Jul 2022 19:09:49 +0000 (12:09 -0700)]
Fix the stable version of `AsFd for Arc<T>` and `Box<T>`

These merged in #97437 for 1.64.0, apart from the main `io_safety`
feature that stabilized in 1.63.0.

2 years agoRollup merge of #99516 - m-ou-se:proc-macro-tracked-tracking-issue, r=Mark-Simulacrum
Matthias Krüger [Wed, 20 Jul 2022 16:58:22 +0000 (18:58 +0200)]
Rollup merge of #99516 - m-ou-se:proc-macro-tracked-tracking-issue, r=Mark-Simulacrum

Use new tracking issue for proc_macro::tracked_*.

2 years agoRollup merge of #99510 - krasimirgg:movb, r=nikic
Matthias Krüger [Wed, 20 Jul 2022 16:58:21 +0000 (18:58 +0200)]
Rollup merge of #99510 - krasimirgg:movb, r=nikic

adapt assembly/static-relocation-model test for LLVM change

After https://github.com/llvm/llvm-project/commit/f0dd12ec5c0169ba5b4363b62d59511181cf954a LLVM emits `movzbl` instead. Adapted this test case accordingly.

Discovered in our experimental rust + llvm at head ci:
https://buildkite.com/llvm-project/rust-llvm-integrate-prototype/builds/12104#0182195b-8791-4f88-853c-bb23a1e4b54c

2 years agoRollup merge of #99508 - TaKO8Ki:avoid-symbol-to-string-conversion-in-BuiltinLintDiag...
Matthias Krüger [Wed, 20 Jul 2022 16:58:20 +0000 (18:58 +0200)]
Rollup merge of #99508 - TaKO8Ki:avoid-symbol-to-string-conversion-in-BuiltinLintDiagnostics, r=compiler-errors

Avoid `Symbol` to `String` conversions

follow-up to #99342

2 years agoRollup merge of #99489 - GuillaumeGomez:gui-fixes, r=notriddle
Matthias Krüger [Wed, 20 Jul 2022 16:58:19 +0000 (18:58 +0200)]
Rollup merge of #99489 - GuillaumeGomez:gui-fixes, r=notriddle

rustdoc UI fixes

The first commit fixes this bug:

![Screenshot from 2022-07-20 02-54-26](https://user-images.githubusercontent.com/3050060/179879053-fc34f27a-6248-4f5c-9fcb-80adbfc1598c.png)
![Screenshot from 2022-07-20 03-00-03](https://user-images.githubusercontent.com/3050060/179879056-1c0973a0-d535-44e7-a48e-bad692034467.png)

The second one fixes the missing change of border color when the search input is focused.

cc `@jsha`
r? `@notriddle`

2 years agoRollup merge of #99488 - luqmana:debuginfo-revisions, r=tmiasko
Matthias Krüger [Wed, 20 Jul 2022 16:58:18 +0000 (18:58 +0200)]
Rollup merge of #99488 - luqmana:debuginfo-revisions, r=tmiasko

compiletest: Allow using revisions with debuginfo tests.

A small wart that came up in https://github.com/rust-lang/rust/pull/95685#issuecomment-1089184951.

2 years agoRollup merge of #99480 - miam-miam100:arg-format, r=oli-obk
Matthias Krüger [Wed, 20 Jul 2022 16:58:17 +0000 (18:58 +0200)]
Rollup merge of #99480 - miam-miam100:arg-format, r=oli-obk

Diagnostic width span is not added when '0$' is used as width in format strings

When the following code is run rustc does not add diagnostic spans for the width argument. Such spans are necessary for a clippy lint that I am currently writing.

```rust
println!("Hello {1:0$}!", 5, "x");
//                 ^^
// Should have a span here
```

2 years agoRollup merge of #99355 - compiler-errors:macro-metavar-less-than-zero, r=petrochenkov
Matthias Krüger [Wed, 20 Jul 2022 16:58:16 +0000 (18:58 +0200)]
Rollup merge of #99355 - compiler-errors:macro-metavar-less-than-zero, r=petrochenkov

better error for bad depth parameter on macro metavar expr

Fixes #99060

2 years agoRollup merge of #99352 - compiler-errors:tighter-spans-on-generic-call, r=spastorino
Matthias Krüger [Wed, 20 Jul 2022 16:58:15 +0000 (18:58 +0200)]
Rollup merge of #99352 - compiler-errors:tighter-spans-on-generic-call, r=spastorino

Use `typeck_results` to avoid duplicate `ast_ty_to_ty` call

Comes with a bunch of improvements in spans :heart_eyes:

2 years agoRollup merge of #99212 - davidtwco:partial-stability-implies, r=michaelwoerister
Matthias Krüger [Wed, 20 Jul 2022 16:58:14 +0000 (18:58 +0200)]
Rollup merge of #99212 - davidtwco:partial-stability-implies, r=michaelwoerister

introduce `implied_by` in `#[unstable]` attribute

Requested by the library team [on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/better.20support.20for.20partial.20stabilizations/near/285581519).

If part of a feature is stabilized and a new feature is added for the remaining parts, then the `implied_by` meta-item can be added to `#[unstable]` to indicate which now-stable feature was used previously.

```diagnostic
error: the feature `foo` has been partially stabilized since 1.62.0 and is succeeded by the feature `foobar`
  --> $DIR/stability-attribute-implies-using-unstable.rs:3:12
   |
LL | #![feature(foo)]
   |            ^^^
   |
note: the lint level is defined here
  --> $DIR/stability-attribute-implies-using-stable.rs:2:9
   |
LL | #![deny(stable_features)]
   |         ^^^^^^^^^^^^^^^
help: if you are using features which are still unstable, change to using `foobar`
   |
LL | #![feature(foobar)]
   |            ~~~~~~
help: if you are using features which are now stable, remove this line
   |
LL - #![feature(foo)]
   |
```

When a `#![feature(..)]` attribute still exists for the now-stable attribute, then there this has two effects:

- There will not be an stability error for uses of items from the implied feature which are still unstable (until the `#![feature(..)]` is removed or updated to the new feature).
- There will be an improved diagnostic for the remaining use of the feature attribute for the now-stable feature.

```rust
        /// If part of a feature is stabilized and a new feature is added for the remaining parts,
        /// then the `implied_by` attribute is used to indicate which now-stable feature previously
        /// contained a item.
        ///
        /// ```pseudo-Rust
        /// #[unstable(feature = "foo", issue = "...")]
        /// fn foo() {}
        /// #[unstable(feature = "foo", issue = "...")]
        /// fn foobar() {}
        /// ```
        ///
        /// ...becomes...
        ///
        /// ```pseudo-Rust
        /// #[stable(feature = "foo", since = "1.XX.X")]
        /// fn foo() {}
        /// #[unstable(feature = "foobar", issue = "...", implied_by = "foo")]
        /// fn foobar() {}
        /// ```
```

In the Zulip discussion, this was envisioned as `implies` on `#[stable]` but I went with `implied_by` on `#[unstable]` because it means that only the unstable attribute needs to be changed in future, not the new stable attribute, which seems less error-prone. It also isn't particularly feasible for me to detect whether items from the implied feature are used and then only suggest updating _or_ removing the `#![feature(..)]` as appropriate, so I always do both.

There's some new information in the cross-crate metadata as a result of this change, that's a little unfortunate, but without requiring that the `#[unstable]` and `#[stable]` attributes both contain the implication information, it's necessary:

```rust
    /// This mapping is necessary unless both the `#[stable]` and `#[unstable]` attributes should
    /// specify their implications (both `implies` and `implied_by`). If only one of the two
    /// attributes do (as in the current implementation, `implied_by` in `#[unstable]`), then this
    /// mapping is necessary for diagnostics. When a "unnecessary feature attribute" error is
    /// reported, only the `#[stable]` attribute information is available, so the map is necessary
    /// to know that the feature implies another feature. If it were reversed, and the `#[stable]`
    /// attribute had an `implies` meta item, then a map would be necessary when avoiding a "use of
    /// unstable feature" error for a feature that was implied.
```

I also change some comments to documentation comments in the compiler, add a helper for going from a `Span` to a `Span` for the entire line, and fix a incorrect part of the pre-existing stability attribute diagnostics.

cc `@yaahc`

2 years agoAuto merge of #99472 - RalfJung:provenance, r=oli-obk
bors [Wed, 20 Jul 2022 16:56:31 +0000 (16:56 +0000)]
Auto merge of #99472 - RalfJung:provenance, r=oli-obk

interpret: rename Tag/PointerTag to Prov/Provenance

We were pretty inconsistent with calling this the "tag" vs the "provenance" of the pointer; I think we should consistently call it "provenance".

r? `@oli-obk`

2 years agoUse new tracking issue for proc_macro::tracked_*.
Mara Bos [Wed, 20 Jul 2022 15:35:06 +0000 (17:35 +0200)]
Use new tracking issue for proc_macro::tracked_*.

2 years agopasses: check implied feature exists
David Wood [Wed, 20 Jul 2022 13:52:23 +0000 (14:52 +0100)]
passes: check implied feature exists

Add a check confirming that features referenced in `implied_by` meta
items actually exist.

Signed-off-by: David Wood <david.wood@huawei.com>
2 years agoowner is not micro (correct typo)
joboet [Wed, 20 Jul 2022 14:11:31 +0000 (16:11 +0200)]
owner is not micro (correct typo)

2 years agopasses: improved partial stabilization diagnostic
David Wood [Wed, 13 Jul 2022 14:10:19 +0000 (15:10 +0100)]
passes: improved partial stabilization diagnostic

Improves the diagnostic when a feature attribute is specified
unnecessarily but the feature implies another (i.e. it was partially
stabilized) to refer to the implied feature.

Signed-off-by: David Wood <david.wood@huawei.com>
2 years agospan: add `span_extend_to_line` helper
David Wood [Wed, 13 Jul 2022 14:02:23 +0000 (15:02 +0100)]
span: add `span_extend_to_line` helper

Adds a simple helper function to the `SourceMap` for extending a `Span`
to encompass the entire line it is on - useful for suggestions where
removing a line is the suggested action.

Signed-off-by: David Wood <david.wood@huawei.com>
2 years agomiddle: add `implies_by` to `#[unstable]`
David Wood [Wed, 13 Jul 2022 12:10:37 +0000 (13:10 +0100)]
middle: add `implies_by` to `#[unstable]`

If part of a feature is stabilized and a new feature is added for the
remaining parts, then the `implied_by` attribute can be used to indicate
which now-stable feature previously contained a item. If the now-stable
feature is still active (if the user has only just updated rustc, for
example) then there will not be an stability error for uses of the item
from the implied feature.

Signed-off-by: David Wood <david.wood@huawei.com>
2 years agoAuto merge of #99506 - Dylan-DPC:rollup-q3msucx, r=Dylan-DPC
bors [Wed, 20 Jul 2022 13:36:59 +0000 (13:36 +0000)]
Auto merge of #99506 - Dylan-DPC:rollup-q3msucx, r=Dylan-DPC

Rollup of 7 pull requests

Successful merges:

 - #98101 (stdlib support for Apple WatchOS)
 - #99345 (Do not allow typeck children items to constrain outer RPITs)
 - #99383 (Formalize defining_use_anchor)
 - #99436 (Add flag to configure `noalias` on `Box<T>`)
 - #99483 (Fix a numerical underflow in tuple wrap suggestion)
 - #99485 (Stop injecting `#[allow(unused_qualifications)]` in generated `derive` implementations)
 - #99486 (Refactor: remove a string comparison between types in `check_str_addition`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoadapt assembly/static-relocation-model test for LLVM change
Krasimir Georgiev [Wed, 20 Jul 2022 12:56:42 +0000 (12:56 +0000)]
adapt assembly/static-relocation-model test for LLVM change

After
https://github.com/llvm/llvm-project/commit/f0dd12ec5c0169ba5b4363b62d59511181cf954a,
LLVM emits `movzbl` instead. Adapted this test case accordingly.

Discovered in our experimental rust + llvm at head ci:
https://buildkite.com/llvm-project/rust-llvm-integrate-prototype/builds/12104#0182195b-8791-4f88-853c-bb23a1e4b54c

2 years agoFix off by one error and add ui test.
miam-miam100 [Wed, 20 Jul 2022 12:40:45 +0000 (13:40 +0100)]
Fix off by one error and add ui test.

2 years agoAdd diagnostic width span when '0$' is used as width.
miam-miam100 [Tue, 19 Jul 2022 21:25:26 +0000 (22:25 +0100)]
Add diagnostic width span when '0$' is used as width.

2 years agoRemove unused StableMap and StableSet types from rustc_data_structures
Michael Woerister [Fri, 8 Jul 2022 16:06:18 +0000 (18:06 +0200)]
Remove unused StableMap and StableSet types from rustc_data_structures

2 years agoRollup merge of #99486 - TaKO8Ki:remove-type-string-comparison-in-check-str-addition...
Dylan DPC [Wed, 20 Jul 2022 10:47:23 +0000 (16:17 +0530)]
Rollup merge of #99486 - TaKO8Ki:remove-type-string-comparison-in-check-str-addition, r=compiler-errors

Refactor: remove a string comparison between types in `check_str_addition`

This patch removes remove a string of types comparison.

2 years agoRollup merge of #99485 - mdholloway:unused-qualifications-in-derive, r=oli-obk
Dylan DPC [Wed, 20 Jul 2022 10:47:22 +0000 (16:17 +0530)]
Rollup merge of #99485 - mdholloway:unused-qualifications-in-derive, r=oli-obk

Stop injecting `#[allow(unused_qualifications)]` in generated `derive` implementations

Currently, the `#[derive]` attribute always injects an `#[allow(unused_qualifications)]` attribute in the generated implementation. This results in an error when a derive is used in combination with `#![forbid(unused_qualifications)]`, because the `forbid` rule by definition cannot be overridden by `allow`.

It appears that the original issue that prompted the inclusion of `#[allow(unused_qualifications)]` (#19102) is no longer present in the current stable release, and the associated [test case](https://github.com/rust-lang/rust/blob/master/src/test/ui/issues/issue-19102.rs) still passes, so the `allow` is simply removed here.

Fixes #71898.

2 years agoRollup merge of #99483 - compiler-errors:issue-99482, r=jyn514
Dylan DPC [Wed, 20 Jul 2022 10:47:21 +0000 (16:17 +0530)]
Rollup merge of #99483 - compiler-errors:issue-99482, r=jyn514

Fix a numerical underflow in tuple wrap suggestion

Fixes #99482

I'm a clown, I rewrote the arg mismatch algo to use well-typed indices to avoid things like this, but then I added my own indexing bug, lol.

2 years agoRollup merge of #99436 - Nilstrieb:toggle-box-noalias, r=fee1-dead
Dylan DPC [Wed, 20 Jul 2022 10:47:20 +0000 (16:17 +0530)]
Rollup merge of #99436 - Nilstrieb:toggle-box-noalias, r=fee1-dead

Add flag to configure `noalias` on `Box<T>`

The aliasing rules of `Box<T>` are still not decided, but currently, `Box<T>` is unique and gets `noalias`. To aid making an informed decision about the future of `Box<T>`, this PR adds a flag `-Zbox-noalias` to configure `noalias` for `Box<T>` (for example, for benchmarking). The same flag already exists for `&mut T` `noalias`, where it was added because it was the problem of various miscompilations in LLVM.

For more information, see rust-lang/unsafe-code-guidelines#326

2 years agoRollup merge of #99383 - ouz-a:issue_57961, r=oli-obk
Dylan DPC [Wed, 20 Jul 2022 10:47:19 +0000 (16:17 +0530)]
Rollup merge of #99383 - ouz-a:issue_57961, r=oli-obk

Formalize defining_use_anchor

This tackles issue #57961

Introduces new enum called `DefiningAnchor` that replaces `Option<LocalDefId>` of `defining_use_anchor`. Now every use of it is explicit and exhaustively matched, catching errors like one in the linked issue. This is not a perfect fix but it's a step in the right direction.

r? `@oli-obk`

2 years agoRollup merge of #99345 - compiler-errors:issue-99073-redux, r=oli-obk
Dylan DPC [Wed, 20 Jul 2022 10:47:18 +0000 (16:17 +0530)]
Rollup merge of #99345 - compiler-errors:issue-99073-redux, r=oli-obk

Do not allow typeck children items to constrain outer RPITs

Fixes #99073 in a simpler and more conservative way than #99079. Simply raise a mismatched types error if we try to constrain an RPIT in an item that isn't the RPIT's parent.

r? `@oli-obk`

2 years agoRollup merge of #98101 - vladimir-ea:stdlib_watch_os, r=thomcc
Dylan DPC [Wed, 20 Jul 2022 10:47:17 +0000 (16:17 +0530)]
Rollup merge of #98101 - vladimir-ea:stdlib_watch_os, r=thomcc

stdlib support for Apple WatchOS

This is a follow-up to https://github.com/rust-lang/rust/pull/95243 (Add Apple WatchOS compiler targets) that adds stdlib support for Apple WatchOS.

`@deg4uss3r`
`@nagisa`

2 years agoUse FxIndexMap instead of otherwise unused StableMap for WEAK_ITEMS_REFS.
Michael Woerister [Fri, 8 Jul 2022 15:45:55 +0000 (17:45 +0200)]
Use FxIndexMap instead of otherwise unused StableMap for WEAK_ITEMS_REFS.

2 years agoAuto merge of #99495 - oli-obk:revert_98582, r=oli-obk
bors [Wed, 20 Jul 2022 10:34:42 +0000 (10:34 +0000)]
Auto merge of #99495 - oli-obk:revert_98582, r=oli-obk

Revert "Rollup merge of #98582 - oli-obk:unconstrained_opaque_type, r…

…=estebank"

This reverts commit 6f8fb911ad504b77549cf3256a09465621beab9d, reversing
changes made to 7210e46dc69a4b197a313d093fe145722c248b7d.

r? `@ghost`

rebase of https://github.com/rust-lang/rust/pull/99368

2 years agoattr: fix expected meta-item for `#[stable]`
David Wood [Wed, 13 Jul 2022 09:36:12 +0000 (10:36 +0100)]
attr: fix expected meta-item for `#[stable]`

When an unexpected meta item is provided to `#[stable]`, the diagnostic
lists "since" and "note" as expected meta-items, however the surrounding
code actually expects "feature" and "since".

Signed-off-by: David Wood <david.wood@huawei.com>