| Age | Commit message (Collapse) | Author | Lines |
|
|
|
Clean up E0719 explanation
r? @Dylan-DPC
|
|
|
|
|
|
Clean up E0727 explanation
r? @Dylan-DPC
|
|
Clean up E0724 explanation
r? @Dylan-DPC
|
|
Internally unify rustc_deprecated and deprecated
This PR intentionally tries to be "featureless" in that the behavior is not altered for either attribute, though it more clearly exposes cases where that is the case in the code.
|
|
|
|
|
|
|
|
|
|
|
|
This has been put in place to patch over an ICE caused when we encounter
a non-static lifetime in a const generic during borrow checking. This
restriction may be relaxed in the future, but we need more discussion
before then, and in the meantime we should still deal with this ICE.
Fixes issue #60814
|
|
They are deprecated so doing extra work for error recovery doesn't make sense
|
|
Clean up E0723 explanation
r? @Dylan-DPC
|
|
forbid generic params in the type of const params
implements and closes #74152
fixes #74101, closes #71169, fixes #73491, closes #62878
@eddyb and I talked [on zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/type.20of.20const.20parameters/near/203405696) about this and we probably want to also forbid generic consts in the default
type of a parameter, e.g. `struct Foo<T, U = [u8; std::mem::size_of::<T>()]>`, this is currently still allowed
and I will probably fix that in a followup PR.
r? @varkor @eddyb
|
|
Clean up E0710 explanation
r? @Dylan-DPC
|
|
Small cleanup for E0705 explanation
r? @Dylan-DPC
|
|
|
|
|
|
Clean up E0716 explanation
r? @Dylan-DPC
|
|
Clean up E0715 explanation
r? @Dylan-DPC
|
|
Detect tuple struct incorrectly used as struct pat
Subpart of #74005.
r? @petrochenkov
|
|
Clean up E0704 error explanation
r? @Dylan-DPC
|
|
Added detailed error code explanation for issue E0688 in Rust compiler.
Added proper error explanation for issue E0688 in the Rust compiler.
Error Code E0688
Sub Part of Issue #61137
r? @GuillaumeGomez
|
|
clean up E0718 explanation
r? @Dylan-DPC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Other terms are more inclusive and precise.
Clippy still has a lint named "blacklisted-name", but renaming it would
be a breaking change, so is left for future work.
The target configuration option "abi-blacklist" has been depreciated and
renamed to "unsupported-abis". The old name continues to work.
|
|
|
|
Update E0432 long description with the separate behaviors of editions 2015 and 2018
Fixes #64668.
I restarted from the work done in #71413.
|
|
|
|
|
|
This commit modifies resolve to disallow `break`/`continue` to labels
through closures or async blocks. This doesn't make sense and should
have been prohibited anyway.
Signed-off-by: David Wood <david@davidtw.co>
|
|
|
|
Clean up E0712 explanation
r? @Dylan-DPC
|
|
Stabilize `#[track_caller]`.
# Stabilization Report
RFC: [2091]
Tracking issue: https://github.com/rust-lang/rust/issues/47809
## Summary
From the [rustc-dev-guide chapter][dev-guide]:
> Take this example program:
```rust
fn main() {
let foo: Option<()> = None;
foo.unwrap(); // this should produce a useful panic message!
}
```
> Prior to Rust 1.42, panics like this `unwrap()` printed a location in libcore:
```
$ rustc +1.41.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```
> As of 1.42, we get a much more helpful message:
```
$ rustc +1.42.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
> These error messages are achieved through a combination of changes to `panic!` internals to make use of `core::panic::Location::caller` and a number of `#[track_caller]` annotations in the standard library which propagate caller information.
The attribute adds an implicit caller location argument to the ABI of annotated functions, but does not affect the type or MIR of the function. We implement the feature entirely in codegen and in the const evaluator.
## Bottom Line
This PR stabilizes the use of `#[track_caller]` everywhere, including traits and extern blocks. It also stabilizes `core::panic::Location::caller`, although the use of that function in a const context remains gated by `#![feature(const_caller_location)]`.
The implementation for the feature already changed the output of panic messages for a number of std functions, as described in the [1.42 release announcement]. The attribute's use in `Index` and `IndexMut` traits is visible to users since 1.44.
## Tests
All of the tests for this feature live under [src/test/ui/rfc-2091-track-caller][tests] in the repo.
Noteworthy cases:
* [use of attr in std]
* validates user-facing benefit of the feature
* [trait attribute inheritance]
* covers subtle behavior designed during implementation and not RFC'd
* [const/codegen equivalence]
* this was the result of a suspected edge case and investigation
* [diverging function support]
* covers an unresolved question from the RFC
* [fn pointers and shims]
* covers important potential sources of unsoundness
## Documentation
The rustc-dev-guide now has a chapter on [Implicit Caller Location][dev-guide].
I have an [open PR to the reference][attr-reference-pr] documenting the attribute.
The intrinsic's [wrapper] includes some examples as well.
## Implementation History
* 2019-10-02: [`#[track_caller]` feature gate (RFC 2091 1/N) #65037](https://github.com/rust-lang/rust/pull/65037)
* Picked up the patch that @ayosec had started on the feature gate.
* 2019-10-13: [Add `Instance::resolve_for_fn_ptr` (RFC 2091 #2/N) #65182](https://github.com/rust-lang/rust/pull/65182)
* 2019-10-20: ~~[WIP Add MIR argument for #[track_caller] (RFC 2091 3/N) #65258](https://github.com/rust-lang/rust/pull/65258)~~
* Abandoned approach to send location as a MIR argument.
* 2019-10-28: [`std::panic::Location` is a lang_item, add `core::intrinsics::caller_location` (RFC 2091 3/N) #65664](https://github.com/rust-lang/rust/pull/65664)
* 2019-12-07: [Implement #[track_caller] attribute. (RFC 2091 4/N) #65881](https://github.com/rust-lang/rust/pull/65881)
* 2020-01-04: [libstd uses `core::panic::Location` where possible. #67137](https://github.com/rust-lang/rust/pull/67137)
* 2020-01-08: [`Option::{expect,unwrap}` and `Result::{expect, expect_err, unwrap, unwrap_err}` have `#[track_caller]` #67887](https://github.com/rust-lang/rust/pull/67887)
* 2020-01-20: [Fix #[track_caller] and function pointers #68302](https://github.com/rust-lang/rust/pull/68302) (fixed #68178)
* 2020-03-23: [#[track_caller] in traits #69251](https://github.com/rust-lang/rust/pull/69251)
* 2020-03-24: [#[track_caller] on core::ops::{Index, IndexMut}. #70234](https://github.com/rust-lang/rust/pull/70234)
* 2020-04-08 [Support `#[track_caller]` on functions in `extern "Rust" { ... }` #70916](https://github.com/rust-lang/rust/pull/70916)
## Unresolveds
### From the RFC
> Currently the RFC simply prohibit applying #[track_caller] to trait methods as a future-proofing
> measure.
**Resolved.** See the dev-guide documentation and the tests section above.
> Diverging functions should be supported.
**Resolved.** See the tests section above.
> The closure foo::{{closure}} should inherit most attributes applied to the function foo, ...
**Resolved.** This unknown was related to specifics of the implementation which were made irrelevant by the final implementation.
### Binary Size
I [instrumented track_caller to use custom sections][measure-size] in a local build and discovered relatively minor binary size usage for the feature overall. I'm leaving the issue open to discuss whether we want to upstream custom section support.
There's an [open issue to discuss mitigation strategies][mitigate-size]. Some decisions remain about the "right" strategies to reduce size without overly constraining the compiler implementation. I'd be excited to see someone carry that work forward but my opinion is that we shouldn't block stabilization on implementing compiler flags for redaction.
### Specialization
There's an [open issue][specialization] on the semantics of the attribute in specialization chains. I'm inclined to move forward with stabilization without an exact resolution here given that specialization is itself unstable, but I also think it should be an easy question to resolve.
### Location only points to the start of a call span
https://github.com/rust-lang/rust/issues/69977 was resolved by https://github.com/rust-lang/rust/pull/73182, and the next step should probably be to [extend `Location` with a notion of the end of a call](https://github.com/rust-lang/rust/issues/73554).
### Regression of std's panic messages
#70963 should be resolved by serializing span hygeine to crate metadata: https://github.com/rust-lang/rust/issues/68686.
[2091]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md
[dev-guide]: https://rustc-dev-guide.rust-lang.org/codegen/implicit-caller-location.html
[specialization]: https://github.com/rust-lang/rust/issues/70293
[measure-size]: https://github.com/rust-lang/rust/issues/70579
[mitigate-size]: https://github.com/rust-lang/rust/issues/70580
[attr-reference-pr]: https://github.com/rust-lang/reference/pull/742
[wrapper]: https://doc.rust-lang.org/nightly/core/panic/struct.Location.html#method.caller
[tests]: https://github.com/rust-lang/rust/tree/master/src/test/ui/rfc-2091-track-caller
[const/codegen equivalence]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
[diverging function support]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/diverging-caller-location.rs
[use of attr in std]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/std-panic-locations.rs
[fn pointers and shims]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
[trait attribute inheritance]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-trait-impls.rs
[1.42 release announcement]: https://blog.rust-lang.org/2020/03/12/Rust-1.42.html#useful-line-numbers-in-option-and-result-panic-messages
|
|
Added detailed error code explanation for issue E0687 in Rust compiler.
Added proper error explanation for issue E0687 in the Rust compiler.
Error Code E0687
Sub Part of Issue #61137
r? @GuillaumeGomez
|
|
|
|
Does not yet make its constness stable, though. Use of
`Location::caller` in const contexts is still gated by
`#![feature(const_caller_location)]`.
|
|
|
|
|
|
Clean up E0701 explanation
r? @Dylan-DPC
|
|
|
|
|
|
|