| Age | Commit message (Collapse) | Author | Lines |
|
Validation introduced in #113124 allows UnwindAction::Continue and
TerminatorKind::Resume to occur only in functions with ABI that can
unwind. The function ABI depends on the panic strategy, which can vary
across crates.
Usually MIR is built and validated in the same crate. The coroutine drop
glue thus far was an exception. As a result validation could fail when
mixing different panic strategies.
Avoid the problem by executing AbortUnwindingCalls along with the
validation.
|
|
resolve: Feed the `def_kind` query immediately on `DefId` creation
Before this PR the def kind query required building HIR for no good reason, with this PR def kinds are instead assigned immediately when `DefId`s are created.
Some PRs previously refactored things to make all def kinds to be available early enough - https://github.com/rust-lang/rust/pull/118250, https://github.com/rust-lang/rust/pull/118272, https://github.com/rust-lang/rust/pull/118311.
|
|
|
|
|
|
Expand in-place iteration specialization to Flatten, FlatMap and ArrayChunks
This enables the following cases to collect in-place:
```rust
let v = vec![[0u8; 4]; 1024]
let v: Vec<_> = v.into_iter().flatten().collect();
let v: Vec<Option<NonZeroUsize>> = vec![NonZeroUsize::new(0); 1024];
let v: Vec<_> = v.into_iter().flatten().collect();
let v = vec![u8; 4096];
let v: Vec<_> = v.into_iter().array_chunks::<4>().collect();
```
Especially the nicheful-option-flattening should be useful in real code.
|
|
Rollup of 7 pull requests
Successful merges:
- #115331 (optimize str::iter::Chars::advance_by)
- #118236 (Update mod comment)
- #118299 (Update `OnceLock` documentation to give a concrete 'lazy static' example, and expand on the existing example.)
- #118314 (Rename `{collections=>alloc}{tests,benches}`)
- #118341 (Simplify indenting in THIR printing)
- #118366 (Detect and reject malformed `repr(Rust)` hints)
- #118397 (Fix comments for unsigned non-zero `checked_add`, `saturating_add`)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Fix comments for unsigned non-zero `checked_add`, `saturating_add`
While looking at #118313, I happened to notice that two of the expanded comments appear to be slightly inaccurate.
For these two methods, `other` is an ordinary unsigned integer, so it can be zero.
Since the sum of non-zero and zero is always non-zero, the safety argument holds even when `other` is zero.
|
|
r=compiler-errors
Detect and reject malformed `repr(Rust)` hints
Fixes #118334.
|
|
Simplify indenting in THIR printing
This cuts >100kb from a local librustc_driver.so build, and seems just obviously simpler.
|
|
Rename `{collections=>alloc}{tests,benches}`
The crate is named `alloc` so this makes more sense. Ig this is fallout from #42648?
|
|
Update `OnceLock` documentation to give a concrete 'lazy static' example, and expand on the existing example.
|
|
Update mod comment
The comment of `ASCII_CASE_MASK` on line 477 is `If 6th bit is set ascii is lower case.` but the original comment of `*self ^ ((self.is_ascii_lowercase() as u8) * ASCII_CASE_MASK)` was `Toggle the fifth bit if this is a lowercase letter`
|
|
optimize str::iter::Chars::advance_by
```
OLD:
str::iter::chars_advance_by_0001 0.00ns/iter +/- 0.00ns
str::iter::chars_advance_by_0010 13.00ns/iter +/- 1.00ns
str::iter::chars_advance_by_1000 1.20µs/iter +/- 15.00ns
NEW:
str::iter::chars_advance_by_0001 0.00ns/iter +/- 0.00ns
str::iter::chars_advance_by_0010 6.00ns/iter +/- 0.00ns
str::iter::chars_advance_by_1000 75.00ns/iter +/- 1.00ns
```
|
|
effects: Run `enforce_context_effects` for all method calls
So that we also perform checks when overloaded `PartialEq`s are called.
r? `@compiler-errors`
|
|
Rollup of 9 pull requests
Successful merges:
- #111133 (Detect Python-like slicing and suggest how to fix)
- #114708 (Allow setting `rla` labels via `rustbot`)
- #117526 (Account for `!` arm in tail `match` expr)
- #118172 (Add `pretty_terminator` to pretty stable-mir)
- #118202 (Added linker_arg(s) Linker trait methods for link-arg to be prefixed "-Wl," for cc-like linker args and not verbatim)
- #118374 (QueryContext: rename try_collect_active_jobs -> collect_active_jobs, change return type from Option<QueryMap> to QueryMap)
- #118381 (rustc_span: Use correct edit distance start length for suggestions)
- #118382 (Address unused tuple struct fields in the compiler)
- #118384 (Address unused tuple struct fields in rustdoc)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
For these two methods, `other` is an ordinary unsigned integer, so it can be zero.
Since the sum of non-zero and zero is always non-zero, the safety argument
holds even when `other` is zero.
|
|
shepmaster:unused-tuple-struct-field-cleanup-rustdoc, r=GuillaumeGomez
Address unused tuple struct fields in rustdoc
|
|
r=compiler-errors
Address unused tuple struct fields in the compiler
r? `@compiler-errors`
|
|
rustc_span: Use correct edit distance start length for suggestions
Otherwise the suggestions can be off-base for non-ASCII identifiers. For example suggesting that `Ok` is a name similar to `读文`.
Closes https://github.com/rust-lang/rust/issues/72553.
|
|
QueryContext: rename try_collect_active_jobs -> collect_active_jobs, change return type from Option<QueryMap> to QueryMap
As there currently always Some(...) inside.
|
|
Added linker_arg(s) Linker trait methods for link-arg to be prefixed "-Wl," for cc-like linker args and not verbatim
https://github.com/rust-lang/rust/issues/99427#issuecomment-1234443468
> here's one possible improvement to -l link-arg making it more portable between linkers and useful - befriending it with the verbatim modifier (https://github.com/rust-lang/rust/issues/99425).
>
> -l link-arg:-verbatim=-foo would add -Wl,-foo (or equivalent) when C compiler is used as a linker, and just -foo when bare linker is used.
> -l link-arg:+verbatim=-bar on the other hand would always pass just -bar.
|
|
Add `pretty_terminator` to pretty stable-mir
~Because we don't have successors in `stable_mir` this is somewhat lacking but it's better than nothing~, also fixed bug(?) with `Opaque` which printed extra `"` when we try to print opaqued `String`.
**Edit**: Added successors so this covers Terminators as a whole.
r? `@celinval`
|
|
Account for `!` arm in tail `match` expr
On functions with a default return type that influences the coerced type of `match` arms, check if the failing arm is actually of type `!`. If so, suggest changing the return type so the coercion against the prior arms is successful.
```
error[E0308]: `match` arms have incompatible types
--> $DIR/match-tail-expr-never-type-error.rs:9:13
|
LL | fn bar(a: bool) {
| - help: try adding a return type: `-> i32`
LL | / match a {
LL | | true => 1,
| | - this is found to be of type `{integer}`
LL | | false => {
LL | | never()
| | ^^^^^^^
| | |
| | expected integer, found `()`
| | this expression is of type `!`, but it get's coerced to `()` due to its surrounding expression
LL | | }
LL | | }
| |_____- `match` arms have incompatible types
```
Fix #24157.
|
|
Allow setting `rla` labels via `rustbot`
https://github.com/rust-lang/rust-log-analyzer/pull/75 adds a `rla-silenced` label flag that will turn off RLA updates for non-bors tests. Allow setting that labels and others via `rustbot`.
|
|
Detect Python-like slicing and suggest how to fix
Fix #108215
|
|
Update the minimum external LLVM to 16.
With this change, we'll have stable support for LLVM 16 and 17.
For reference, the previous increase to LLVM 15 was #114148
[Relevant zulip discussion](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/riscv.20forced-atomics)
|
|
this avoids part of the char decoding work by not looking at utf8 continuation bytes
|
|
|
|
Don't add redundant help for object safety violations
Fixes #117186
r? WaffleLapkin
|
|
|
|
|
|
|
|
Otherwise the suggestions can be off-base for non-ASCII identifiers. For
example suggesting that `Ok` is a name similar to `读文`.
|
|
r=compiler-errors
Do not erase late bound regions when selecting inherent associated types
In the fix for #97156 we would want the following code:
```rust
#![feature(inherent_associated_types)]
#![allow(incomplete_features)]
struct Foo<T>(T);
impl Foo<fn(&'static ())> {
type Assoc = u32;
}
trait Other {}
impl Other for u32 {}
// FIXME(inherent_associated_types): Avoid emitting two diagnostics (they only differ in span).
// FIXME(inherent_associated_types): Enhancement: Spruce up the diagnostic by saying something like
// "implementation is not general enough" as is done for traits via
// `try_report_trait_placeholder_mismatch`.
fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
//~^ ERROR mismatched types
//~| ERROR mismatched types
fn main() {}
```
to fail with ...
```
error[E0220]: associated type `Assoc` not found for `Foo<for<'a> fn(&'a ())>` in the current scope
--> tests/ui/associated-inherent-types/issue-109789.rs:18:36
|
4 | struct Foo<T>(T);
| ------------- associated item `Assoc` not found for this struct
...
18 | fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
| ^^^^^ associated item not found in `Foo<for<'a> fn(&'a ())>`
|
= note: the associated type was found for
- `Foo<fn(&'static ())>`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0220`.
```
This PR fixes the ICE we are currently getting "was a subtype of Foo<Binder(fn(&ReStatic ()), [])> during selection but now it is not"
Also fixes #112631
r? `@lcnr`
|
|
On functions with a default return type that influences the coerced type
of `match` arms, check if the failing arm is actually of type `!`. If
so, suggest changing the return type so the coercion against the prior
arms is successful.
```
error[E0308]: `match` arms have incompatible types
--> $DIR/match-tail-expr-never-type-error.rs:9:13
|
LL | fn bar(a: bool) {
| - help: try adding a return type: `-> i32`
LL | / match a {
LL | | true => 1,
| | - this is found to be of type `{integer}`
LL | | false => {
LL | | never()
| | ^^^^^^^
| | |
| | expected integer, found `()`
| | this expression is of type `!`, but it get's coerced to `()` due to its surrounding expression
LL | | }
LL | | }
| |_____- `match` arms have incompatible types
```
Fix #24157.
|
|
change it's return type from Option<QueryMap> to QueryMap
As there currently always Some(...) inside
|
|
Rollup of 4 pull requests
Successful merges:
- #118095 (Enable the Arm Cortex-A53 errata mitigation on aarch64-unknown-none)
- #118340 (Use helper functions in `pretty.rs` instead of accessing the `Cell`s manually)
- #118358 (make const tests independent of std debug assertions)
- #118359 (Suggest swapping the order of `ref` and `box`)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
for cc-like linker args and not verbatim
|
|
Suggest swapping the order of `ref` and `box`
It is not valid grammar to write `ref box <ident>` in patterns, but `box ref <ident>` is.
This patch adds a diagnostic to suggest swapping them, analogous to what we do for `mut let`.
|
|
make const tests independent of std debug assertions
Fixes some fallout from https://github.com/rust-lang/rust/pull/110303: `ignore-debug` is bad since it makes it very annoying to develop rustc with debug assertions enabled.
These tests do not really provide any interesting test coverage, we already got plenty of other tests that check that we detect invalid enums. So we can just remove them.
|
|
Use helper functions in `pretty.rs` instead of accessing the `Cell`s manually
Pulled this out of another PR that I never landed.
|
|
Enable the Arm Cortex-A53 errata mitigation on aarch64-unknown-none
Arm Cortex-A53 CPUs have an errata related to a specific sequence of instructions - errata number 843419 (https://documentation-service.arm.com/static/5fa29fddb209f547eebd361d). There is a mitigation that can be applied at link-time which detects the when sequence of instructions exists at a specific alignment. When detected, the linker re-writes those instructions and either changes an ADRP to an ADR, or bounces to a veneer to break the sequence.
The linker argument to enable the mitigation is "--fix-cortex-a53-843419", and this is supported by GNU ld and LLVM lld. The gcc argument to enable the flag is "-mfix-cortex-a53-843419".
Because the aarch64-unknown-none target uses rust-lld directly, this patch causes rustc to emit the "--fix-cortex-a53-843419" argument when calling the linker, just like aarch64-linux-gnu-gcc on Ubuntu 22.04 does.
Failure to enable this mitigation in the linker can cause the production of instruction sequences that do not execute correctly on Arm Cortex-A53.
|
|
|
|
Also addressed merge conflicts upon rebasing.
|
|
|
|
Fix #108215
|
|
|
|
Subtree update of `rust-analyzer`
|
|
|
|
|