summary refs log tree commit diff
path: root/src/librustc_error_codes
AgeCommit message (Collapse)AuthorLines
2020-07-13Rollup merge of #74286 - PankajChaudhary5:E0688, r=GuillaumeGomezManish Goregaokar-1/+37
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
2020-07-13Rollup merge of #74123 - GuillaumeGomez:cleanup-e0718, r=pickfireManish Goregaokar-3/+2
clean up E0718 explanation r? @Dylan-DPC
2020-07-13Merge branch 'master' into E0688Pankaj Chaudhary-197/+948
2020-07-13Added proper explanation of ErrorCode-E0688PankajChaudhary5-1/+37
2020-07-11Improve wordingGuillaume Gomez-1/+1
2020-07-08Avoid "blacklist"Tamir Duberstein-1/+1
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.
2020-07-07clean up E0718 explanationGuillaume Gomez-3/+2
2020-07-07Auto merge of #73562 - poliorcetics:e0432-to-edition2018, r=GuillaumeGomezbors-10/+25
Update E0432 long description with the separate behaviors of editions 2015 and 2018 Fixes #64668. I restarted from the work done in #71413.
2020-07-04Create new E0768 error code for "no valid digits found for number" errorGuillaume Gomez-0/+14
2020-07-02resolve: disallow label use through closure/asyncDavid Wood-0/+21
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>
2020-07-01Rollup merge of #73892 - GuillaumeGomez:cleanup-e0712, r=Dylan-DPCManish Goregaokar-2/+2
Clean up E0712 explanation r? @Dylan-DPC
2020-07-01Rollup merge of #72445 - anp:stabilize-track-caller, r=oli-obkManish Goregaokar-5/+0
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
2020-07-01Rollup merge of #72071 - PankajChaudhary5:ErrorCode-E0687, r=davidtwcoManish Goregaokar-1/+37
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
2020-06-30Stabilize `#[track_caller]`.Adam Perry-5/+0
Does not yet make its constness stable, though. Use of `Location::caller` in const contexts is still gated by `#![feature(const_caller_location)]`.
2020-06-30Clean up E0712 explanationGuillaume Gomez-2/+2
2020-06-25Rollup merge of #73687 - GuillaumeGomez:cleanup-e0701, r=Dylan-DPCManish Goregaokar-1/+1
Clean up E0701 explanation r? @Dylan-DPC
2020-06-25Add E0766 error for unterminated double quote byte stringGuillaume Gomez-0/+14
2020-06-24Clean up E0701 explanationGuillaume Gomez-1/+1
2020-06-23Auto merge of #73643 - Manishearth:rollup-68dr8fz, r=Manishearthbors-8/+11
Rollup of 9 pull requests Successful merges: - #72271 (Improve compiler error message for wrong generic parameter order) - #72493 ( move leak-check to during coherence, candidate eval) - #73398 (A way forward for pointer equality in const eval) - #73472 (Clean up E0689 explanation) - #73496 (Account for multiple impl/dyn Trait in return type when suggesting `'_`) - #73515 (Add second message for LiveDrop errors) - #73567 (Clarify --extern documentation.) - #73572 (Fix typos in doc comments) - #73590 (bootstrap: no `config.toml` exists regression) Failed merges: r? @ghost
2020-06-23Rollup merge of #73472 - GuillaumeGomez:cleanup-e0689, r=Dylan-DPCManish Goregaokar-8/+11
Clean up E0689 explanation r? @Dylan-DPC
2020-06-23Rollup merge of #73610 - GuillaumeGomez:cleanup-e0699, r=Dylan-DPCDylan DPC-2/+4
Clean up E0699 explanation r? @Dylan-DPC
2020-06-23Rollup merge of #73575 - dario23:typo-errorcodes-doc, r=matthewjasperDylan DPC-1/+1
Fix typo in error_codes doc
2020-06-22Clean up E0699 explanationGuillaume Gomez-2/+4
2020-06-21Fix some small mistakesAlexis Bourget-8/+2
2020-06-21Documenting the separate behaviors of edition 2015 and 2018Alexis Bourget-5/+26
2020-06-21Create E0765 error for unterminated double quote stringsGuillaume Gomez-0/+14
2020-06-21Fix typo in error_codes docJohannes Schilling-1/+1
2020-06-20Rollup merge of #73543 - GuillaumeGomez:cleanup-e0695, r=Dylan-DPCRalf Jung-1/+1
Clean up E0695 explanation r? @Dylan-DPC
2020-06-20Clean up E0695 explanationGuillaume Gomez-1/+1
2020-06-19Rollup merge of #73436 - GuillaumeGomez:cleanup-e0670, r=Dylan-DPCManish Goregaokar-1/+1
Clean up E0670 explanation r? @Dylan-DPC
2020-06-19Rollup merge of #73399 - GuillaumeGomez:cleanup-e0668, r=Dylan-DPCManish Goregaokar-5/+8
Clean up E0668 explanation r? @Dylan-DPC
2020-06-19add new error codeChristian Poveda-0/+40
2020-06-19Rollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkovRalf Jung-0/+14
Add E0763
2020-06-18Clean up E0689 explanationGuillaume Gomez-8/+11
2020-06-17Clean up E0670 explanationGuillaume Gomez-1/+1
2020-06-16Create new E0763 error code for unterminated byte constantGuillaume Gomez-0/+14
2020-06-16Clean up E0668 explanationGuillaume Gomez-5/+8
2020-06-15Change E0758 to E0759 to avoid conflict with #72912Esteban Küber-0/+68
2020-06-15Rollup merge of #73351 - gnodarse:patch-1, r=ecstatic-morseRalf Jung-8/+24
Update E0446.md The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself): https://github.com/rust-lang/rust/issues/30905 https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
2020-06-14Update E0446.mdgnodarse-8/+24
The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself): https://github.com/rust-lang/rust/issues/30905 https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
2020-06-14Added proper explanation of ErrorCode-E0687pankajchaudhary5-1/+37
2020-06-13Update incorrect error code docsDylan MacKenzie-6/+6
2020-06-12Rollup merge of #73236 - GuillaumeGomez:cleanup-e0666, r=Dylan-DPCDylan DPC-7/+11
Clean up E0666 explanation r? @Dylan-DPC
2020-06-12Rollup merge of #73163 - ayushmishra2005:61137-add-long-error-code-e0724, ↵Dylan DPC-1/+25
r=davidtwco Add long error explanation for E0724 Add long explanation for the E0724 error code Part of #61137
2020-06-11Add long error explanation for E0724Ayush Kumar Mishra-1/+25
Minor refactoring Minor refactoring Update src/librustc_error_codes/error_codes/E0724.md Co-authored-by: David Wood <Q0KPU0H1YOEPHRY1R2SN5B5RL@david.davidtw.co> Update src/librustc_error_codes/error_codes/E0724.md Co-authored-by: David Wood <Q0KPU0H1YOEPHRY1R2SN5B5RL@david.davidtw.co> Update src/librustc_error_codes/error_codes/E0724.md Co-authored-by: David Wood <Q0KPU0H1YOEPHRY1R2SN5B5RL@david.davidtw.co> Minor refactoring
2020-06-11Rollup merge of #73207 - GuillaumeGomez:cleanup-e0648, r=Dylan-DPCDylan DPC-1/+10
Clean up E0648 explanation r? @Dylan-DPC
2020-06-11Clean up E0666 explanationGuillaume Gomez-7/+11
2020-06-11Rollup merge of #73164 - GuillaumeGomez:add-e0761, r=petrochenkovDylan DPC-0/+14
Add new E0762 error code
2020-06-11Rollup merge of #72976 - GuillaumeGomez:cleanup-e0642, r=Dylan-DPCDylan DPC-1/+1
Clean up E0642 explanation r? @Dylan-DPC
2020-06-10Create new error code E0762 for unterminated char literalsGuillaume Gomez-0/+14