| Age | Commit message (Collapse) | Author | Lines |
|
docs: std::convert::From: Fix typo
Fix a minor typo
|
|
`coerce_inner`: use initial `expected_ty`
Fixes #67273.
Follow-up to #59439.
r? @oli-obk
|
|
be explicit that mem::uninitialized is the same as MaybeUninit::uninit().assume_init()
Cc @Centril @nikomatsakis
|
|
Reduce allocs for validation errors
This probably doesn't really matter, but I just felt like I had to do this...
r? @oli-obk
|
|
dont ICE in case of invalid drop fn
Fixes https://github.com/rust-lang/miri/issues/1112
r? @oli-obk
|
|
VecDeque: drop remaining items on destructor panic
Closes https://github.com/rust-lang/rust/issues/67232
|
|
r=varkor,Centril,estebank
Improve diagnostics and code for exhaustiveness of empty matches
There was a completely separate check and diagnostics for the case of an empty match. This led to slightly different error messages and duplicated code.
This improves code reuse and generally clarifies what happens for empty matches. This also clarifies the action of the `exhaustive_patterns` feature, and ensures that this feature doesn't change diagnostics in places it doesn't need to.
|
|
Fix a minor typo
|
|
|
|
MaybeUninit::uninit().assume_init()
|
|
rustc: Link LLVM directly into rustc again (take two)
This is a continuation of PR https://github.com/rust-lang/rust/pull/65703
|
|
Remove `NodeState::{Waiting,Done}`
An optimization, and then some clean-ups.
r? @nikomatsakis
|
|
parser: recover on `&'lifetime mut? $pat`.
r? @estebank
|
|
Require `allow_internal_unstable` for stable min_const_fn using unsta…
…ble features
r? @Centril
cc @ecstatic-morse @RalfJung
|
|
nnethercote:rm-DelimSpan-from-NamedMatch-MatchedSeq, r=Centril
Remove the `DelimSpan` from `NamedMatch::MatchedSeq`.
Because it's unused. This then allows the removal of
`MatcherPos::sp_open`. It's a tiny perf win, reducing instruction counts
by 0.1% - 0.2% on a few benchmarks.
r? @Centril
|
|
Don't suggest wrong snippet in closure
Fixes #67190
r? @estebank
|
|
LinkedList: drop remaining items when drop panics
https://github.com/rust-lang/rust/pull/67235, but for `LinkedList`, which has the same issue.
I've also copied over the other drop-related tests from `VecDeque` since AFAICT `LinkedList` didn't have any.
|
|
Match `VecDeque::extend` to `Vec::extend_desugared`
Currently, `VecDeque::extend` [does not reserve at all](https://github.com/rust-lang/rust/pull/65069#discussion_r333166522). This implementation still runs a check every iteration of the loop, but should reallocate at most once for the common cases where the `size_hint` lower bound is exact. Further optimizations in the future could improve this for some common cases, but given the complexity of the `Vec::extend` implementation it's not immediately clear that this would be worthwhile.
|
|
|
|
|
|
|
|
Because I am tired of looking at them.
|
|
In particular, it has bugged me for some time that `process_cycles` is
currently located before `mark_still_waiting_nodes` despite being called
afterwards.
|
|
`NodeState` has two states, `Success` and `Done`, that are only used
within `ObligationForest` methods. This commit removes them, and renames
the existing `Waiting` state as `Success`.
We are left with three states: `Pending`, `Success`, and `Error`.
`Success` is augmented with a new `WaitingState`, which indicates when
(if ever) it was last waiting on one or more `Pending` nodes. This
notion of "when" requires adding a "process generation" to
`ObligationForest`; it is incremented on each call to
`process_obligtions`.
This commit is a performance win.
- Most of the benefit comes from `mark_as_waiting` (which the commit
renames as `mark_still_waiting_nodes`). This function used to do two
things: (a) change all `Waiting` nodes to `Success`, and (b) mark all
nodes that depend on a pending node as `Waiting`. In practice, many
nodes went from `Waiting` to `Success` and then immediately back to
`Waiting`. The use of generations lets us skip step (a).
- A smaller benefit comes from not having to change nodes to the `Done`
state in `process_cycles`.
|
|
Bootstrap: change logic for choosing linker and rpath
This is a follow-up from #66957 and #67023. Apparently there was one more location with a hard-coded list of targets to influence linking.
I've filed #67171 to track this madness.
r? @alexcrichton
|
|
rustllvm relies on the `LLVMRustStringWriteImpl` symbol existing, but
this symbol was previously defined in a *downstream* crate
(rustc_codegen_llvm, which depends on rustc_llvm.
While this somehow worked under the old 'separate bootstrap step for
codegen' scheme, it meant that rustc_llvm could not actually be built by
itself, since it relied linking to the downstream rustc_codegen_llvm
crate.
Now that librustc_codegen_llvm is just a normal crate, we actually try
to build a standalone rustc_llvm when we run tests. This commit moves
`LLVMRustStringWriteImpl` into rustc_llvm (technically the rustllvm
directory, which has its contents built by rustc_llvm). This ensures
that we can build each crate in the graph by itself, without requiring
that any downstream crates be linked in as well.
|
|
|
|
|
|
Remove the borrow check::nll submodule
NLL is the only borrow checker now, so no need to have a separate submodule.
@rustbot modify labels: +S-blocked
Waiting on #66815
|
|
|
|
r=nikomatsakis
Optimize `shallow_resolve_changed`
r? @nikomatsakis
|
|
features
|
|
Because it's unused. This then allows the removal of
`MatcherPos::sp_open`. It's a tiny perf win, reducing instruction counts
by 0.1% - 0.2% on a few benchmarks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rollup of 8 pull requests
Successful merges:
- #62514 (Clarify `Box<T>` representation and its use in FFI)
- #66983 (Fix `unused_parens` triggers on macro by example code)
- #67215 (Fix `-Z print-type-sizes`'s handling of zero-sized fields.)
- #67230 (Remove irelevant comment on `register_dtor`)
- #67236 (resolve: Always resolve visibilities on impl items)
- #67237 (Some small readability improvements)
- #67238 (Small std::borrow::Cow improvements)
- #67239 (Make TinyList::remove iterate instead of recurse)
Failed merges:
r? @ghost
|
|
Make TinyList::remove iterate instead of recurse
Most of the diff is from from rustfmt, the actual change is in line 91..79 (or 79..89 in the "after" diff).
I had converted the other methods to iterate instead of recurse already, so this is the last recursive function on `TinyList`.
|
|
Small std::borrow::Cow improvements
This is a small set of improvements (+ one more tested code path) for `Cow`.
|
|
Some small readability improvements
|
|
resolve: Always resolve visibilities on impl items
Fixes https://github.com/rust-lang/rust/issues/64705.
Similarly to https://github.com/rust-lang/rust/pull/67106 this was an issue with visitor discipline.
Impl items were visited as a part of visiting `ast::ItemKind::Impl`, but they should be visit-able in isolation from their parents as well, because that's how they are visited when they are expanded from macros.
I've checked that all the remaining `resolve_visibility` calls are used correctly.
r? @matthewjasper
|
|
Remove irelevant comment on `register_dtor`
Fixes #66572.
|
|
r=pnkfelix
Fix `-Z print-type-sizes`'s handling of zero-sized fields.
Currently, the type `struct S { x: u32, y: u32, tag: () }` is
incorrectly described like this:
```
print-type-size type: `S`: 8 bytes, alignment: 4 bytes
print-type-size field `.x`: 4 bytes
print-type-size field `.tag`: 0 bytes, offset: 0 bytes, alignment: 1 bytes
print-type-size padding: 4 bytes
print-type-size field `.y`: 4 bytes, alignment: 4 bytes
```
Specifically:
- The `padding` line is wrong. (There is no padding.)
- The `offset` and `alignment` on the `.tag` line shouldn't be printed.
The problem is that multiple fields can end up with the same offset, and
the printing code doesn't handle this correctly.
This commit fixes it by adjusting the field sorting so that zero-sized fields
are dealt with before non-zero-sized fields. With that in place, the
printing code works correctly.
The commit also corrects the "something is very wrong" comment.
The new output looks like this:
```
print-type-size type: `S`: 8 bytes, alignment: 4 bytes
print-type-size field `.tag`: 0 bytes
print-type-size field `.x`: 4 bytes
print-type-size field `.y`: 4 bytes
```
r? @pnkfelix
|
|
Fix `unused_parens` triggers on macro by example code
Fix #66295
Unfortunately this does also break [an existing test](https://github.com/rust-lang/rust/blob/4787e97475de6be9487e3d9255a9c2d3c0bf9252/src/test/ui/lint/issue-47775-nested-macro-unnecessary-parens-arg.rs#L22). I'm not sure how to handle that, because that seems to be quite similar to the allowed cases
If this gets accepted it would be great to backport this fix to beta.
|
|
Clarify `Box<T>` representation and its use in FFI
This officializes what was only shown as a code example in [the unsafe code guidelines](https://rust-lang.github.io/unsafe-code-guidelines/layout/function-pointers.html?highlight=box#use) and follows [the discussion](https://github.com/rust-lang/unsafe-code-guidelines/issues/157) in the corresponding repository.
It is also related to [the issue](https://github.com/rust-lang/rust/issues/52976) regarding marking `Box<T>` `#[repr(transparent)]`.
If the statement this PR adds is incorrect or a more in-depth discussion is warranted, I apologize. Should it be the case, the example in the unsafe code guidelines should be amended and some document should make it clear that it is not sound/supported.
|
|
|