Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 12 pull requests #73884

Closed
wants to merge 28 commits into from

Commits on Jun 24, 2020

  1. Update Box::from_raw example to generalize better

    I know very little about rust, so I saw this example and tried to generalize it by writing,
    ```
        let layout = Layout::new::<T>();
        let new_obj = unsafe {
            let ptr = alloc(layout) as *mut T;
            *ptr = obj;
            Box::from_raw(ptr)
        };
    ```
    for some more complicated `T`, which ended up crashing with SIGSEGV,
    because it tried to `drop_in_place` the previous object in `ptr` which is
    of course garbage. I also added a comment that explains why `.write`
    is used, but I think adding that comment is optional and may be too verbose
    here. I do however think that changing this example is a good idea to
    suggest the correct generalization. `.write` is also used in most of the rest
    of the documentation here, even if the example is `i32`, so it would additionally
    be more consistent.
    Keno authored Jun 24, 2020
    Configuration menu
    Copy the full SHA
    0c88dd6 View commit details
    Browse the repository at this point in the history

Commits on Jun 25, 2020

  1. Configuration menu
    Copy the full SHA
    2bbc2b3 View commit details
    Browse the repository at this point in the history

Commits on Jun 26, 2020

  1. Merge pull request rust-lang#2 from rust-lang/master

    update master
    TyPR124 authored Jun 26, 2020
    Configuration menu
    Copy the full SHA
    00ef461 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    b71a3e1 View commit details
    Browse the repository at this point in the history
  3. Update psm version

    This new version includes a fix for building on aarch64 windows.
    nagisa committed Jun 26, 2020
    Configuration menu
    Copy the full SHA
    df88972 View commit details
    Browse the repository at this point in the history

Commits on Jun 27, 2020

  1. Recover extra trailing angle brackets in struct definition

    This commit applies the existing 'extra angle bracket recovery' logic
    when parsing fields in struct definitions. This allows us to continue
    parsing the struct's fields, avoiding spurious 'missing field' errors in
    code that tries to use the struct.
    Aaron1011 committed Jun 27, 2020
    Configuration menu
    Copy the full SHA
    765bd47 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    3fc5593 View commit details
    Browse the repository at this point in the history

Commits on Jun 28, 2020

  1. Configuration menu
    Copy the full SHA
    14d0370 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    7231e57 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    4595fa8 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    e611a3f View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    dfd454b View commit details
    Browse the repository at this point in the history
  6. Fix small nits

    poliorcetics committed Jun 28, 2020
    Configuration menu
    Copy the full SHA
    4224313 View commit details
    Browse the repository at this point in the history
  7. Fix markdown rendering in librustc_lexer docs

    Use back-ticks instead of quotation marks in docs for the block comment
    variant of TokenKind.
    pierwill committed Jun 28, 2020
    Configuration menu
    Copy the full SHA
    49c1018 View commit details
    Browse the repository at this point in the history

Commits on Jun 29, 2020

  1. add spans to injected coverage counters

    added regions with counter expressions and counters.
    
    Added codegen_llvm/coverageinfo mod for upcoming coverage map
    
    Move coverage region collection to CodegenCx finalization
    
    Moved from `query coverageinfo` (renamed from `query coverage_data`),
    as discussed in the PR at:
    
    rust-lang#73684 (comment)
    
    Address merge conflict in MIR instrument_coverage test
    
    The MIR test output format changed for int types.
    
    moved debug messages out of block.rs
    
    This makes the block.rs calls to add coverage mapping data to the
    CodegenCx much more concise and readable.
    
    move coverage intrinsic handling into llvm impl
    
    I realized that having half of the coverage intrinsic handling in
    `rustc_codegen_ssa` and half in `rustc_codegen_llvm` meant that any
    non-llvm backend would be bound to the same decisions about how the
    coverage-related MIR terminators should be handled.
    
    To fix this, I moved the non-codegen portion of coverage intrinsic
    handling into its own trait, and implemented it in `rustc_codegen_llvm`
    alongside `codegen_intrinsic_call`.
    
    I also added the (required?) stubs for the new intrinsics to
    `IntrepretCx::emulate_intrinsic()`, to ensure calls to this function do
    not fail if called with these new but known intrinsics.
    
    address PR Feedback on 28 June 2020 2:48pm PDT
    richkadel committed Jun 29, 2020
    Configuration menu
    Copy the full SHA
    5239a68 View commit details
    Browse the repository at this point in the history

Commits on Jun 30, 2020

  1. Stabilize #[track_caller].

    Does not yet make its constness stable, though. Use of
    `Location::caller` in const contexts is still gated by
    `#![feature(const_caller_location)]`.
    anp committed Jun 30, 2020
    Configuration menu
    Copy the full SHA
    135ca38 View commit details
    Browse the repository at this point in the history
  2. Rollup merge of rust-lang#72445 - anp:stabilize-track-caller, r=oli-obk

    Stabilize `#[track_caller]`.
    
    # Stabilization Report
    
    RFC: [2091]
    Tracking issue: rust-lang#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) rust-lang#65037](rust-lang#65037)
      * Picked up the patch that @ayosec had started on the feature gate.
    * 2019-10-13: [Add `Instance::resolve_for_fn_ptr` (RFC 2091 rust-lang#2/N) rust-lang#65182](rust-lang#65182)
    * 2019-10-20: ~~[WIP Add MIR argument for #[track_caller] (RFC 2091 3/N) rust-lang#65258](rust-lang#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) rust-lang#65664](rust-lang#65664)
    * 2019-12-07: [Implement #[track_caller] attribute. (RFC 2091 4/N) rust-lang#65881](rust-lang#65881)
    * 2020-01-04: [libstd uses `core::panic::Location` where possible. rust-lang#67137](rust-lang#67137)
    * 2020-01-08: [`Option::{expect,unwrap}` and `Result::{expect, expect_err, unwrap, unwrap_err}` have `#[track_caller]` rust-lang#67887](rust-lang#67887)
    * 2020-01-20: [Fix #[track_caller] and function pointers rust-lang#68302](rust-lang#68302) (fixed rust-lang#68178)
    * 2020-03-23: [#[track_caller] in traits rust-lang#69251](rust-lang#69251)
    * 2020-03-24: [#[track_caller] on core::ops::{Index, IndexMut}. rust-lang#70234](rust-lang#70234)
    * 2020-04-08 [Support `#[track_caller]` on functions in `extern "Rust" { ... }` rust-lang#70916](rust-lang#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
    
    rust-lang#69977 was resolved by rust-lang#73182, and the next step should probably be to [extend `Location` with a notion of the end of a call](rust-lang#73554).
    
    ### Regression of std's panic messages
    
    rust-lang#70963 should be resolved by serializing span hygeine to crate metadata: rust-lang#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]: rust-lang#70293
    [measure-size]: rust-lang#70579
    [mitigate-size]: rust-lang#70580
    [attr-reference-pr]: rust-lang/reference#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
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    8e47182 View commit details
    Browse the repository at this point in the history
  3. Rollup merge of rust-lang#73678 - Keno:patch-1, r=LukasKalbertodt

    Update Box::from_raw example to generalize better
    
    I know very little about rust, so I saw the example here
    ```
    use std::alloc::{alloc, Layout};
    
    unsafe {
        let ptr = alloc(Layout::new::<i32>()) as *mut i32;
        *ptr = 5;
        let x = Box::from_raw(ptr);
    }
    ```
    and tried to generalize it by writing,
    ```
        let layout = Layout::new::<T>();
        let new_obj = unsafe {
            let ptr = alloc(layout) as *mut T;
            *ptr = obj;
            Box::from_raw(ptr)
        };
    ```
    for some more complicated `T`, which ended up crashing with SIGSEGV,
    because it tried to `drop_in_place` the previous object in `ptr` which is
    of course garbage. I think that changing this example to use `.write` instead
    would be a good idea to suggest the correct generalization. It is also more
    consistent with other documentation items in this file, which use `.write`.
    I also added a comment to explain it, but I'm not too attached to that,
    and can see it being too verbose in this place.
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    103b189 View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#73684 - richkadel:llvm-coverage-map-gen-2, …

    …r=wesleywiser
    
    add spans to injected coverage counters, extract with CoverageData query
    
    This is the next iteration on the Rust Coverage implementation, and follows PR rust-lang#73488
    
    @tmandry @wesleywiser
    
    I came up with an approach for coverage spans, pushing them through the Call terminator as additional args so they can be extracted by the CoverageData query.
    
    I'm using an IndexVec to store them in CoverageData such that there can be only one per index (even if parts of the MIR get duplicated during optimization).
    
    If this approach works for you, I can quickly expand on this to build a separate IndexVec for counter expressions, using a separate call that will be ignored during code generation, but from which I can extract the counter expression values.
    
    Let me know your thoughts. Thanks!
    
    r? @tmandry
    
    Rust compiler MCP rust-lang/compiler-team#278
    Relevant issue: rust-lang#34701 - Implement support for LLVMs code coverage instrumentation
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    4c6c430 View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#73716 - poliorcetics:static-keyword, r=Luka…

    …sKalbertodt
    
    Document the static keyword
    
    Partial fix of rust-lang#34601.
    
    This documents the `static` keyword. It's basically a simplified version of the reference with more examples.
    
    @rustbot modify labels: T-doc,C-enhancement
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    25af6d5 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#73752 - TyPR124:invalid-parameter-error, r=…

    …LukasKalbertodt
    
    Remap Windows ERROR_INVALID_PARAMETER to ErrorKind::InvalidInput from Other
    
    I don't know if this is acceptable or how likely it is to break existing code, but it seem to me ERROR_INVALID_PARAMETER "The parameter is incorrect" should map to ErrorKind::InvalidInput "A parameter was incorrect". Previously this value fell through to ErrorKind::Other.
    
    I can't speak for anyone but myself, but I instinctively thought it would be InvalidInput.
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    ef0b6f7 View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#73781 - nagisa:psm-up, r=Mark-Simulacrum

    Update psm version
    
    This new version includes a fix for building on aarch64 windows.
    
    cc rust-lang#72881
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    0ef0a56 View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#73803 - Aaron1011:feature/angle-field-recov…

    …ery, r=matthewjasper
    
    Recover extra trailing angle brackets in struct definition
    
    This commit applies the existing 'extra angle bracket recovery' logic
    when parsing fields in struct definitions. This allows us to continue
    parsing the struct's fields, avoiding spurious 'missing field' errors in
    code that tries to use the struct.
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    ff9b043 View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#73805 - poliorcetics:type-keyword, r=kennytm

    Document the type keyword
    
    Partial fix of rust-lang#34601.
    
    Two small examples, one clarifying that `type` only defines an alias, not a completely new type, the other explaining the use in traits.
    
    @rustbot modify labels: T-doc,C-enhancement
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    6999ead View commit details
    Browse the repository at this point in the history
  10. Rollup merge of rust-lang#73828 - nop:fix/parameter-name-help, r=este…

    …bank
    
    Fix wording for anonymous parameter name help
    
    ```
     --> exercises/functions/functions2.rs:8:15
      |
    8 | fn call_me(num) {
      |               ^ expected one of `:`, `@`, or `|`
      |
      = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
    help: if this is a `self` type, give it a parameter name
      |
    8 | fn call_me(self: num) {
      |            ^^^^^^^^^
    help: if this was a parameter name, give it a type
      |
    8 | fn call_me(num: TypeName) {
      |            ^^^^^^^^^^^^^
    help: if this is a type, explicitly ignore the parameter name
      |
    8 | fn call_me(_: num) {
      |
    ```
    This commit changes "if this was a parameter name" to "if this is a parameter name" to match the wording of similar errors.
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    c522336 View commit details
    Browse the repository at this point in the history
  11. Rollup merge of rust-lang#73841 - tmiasko:print-region-graph, r=Mark-…

    …Simulacrum
    
    Remove defunct `-Z print-region-graph`
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    d535184 View commit details
    Browse the repository at this point in the history
  12. Rollup merge of rust-lang#73846 - pierwill:pierwill-patch-2, r=joshtr…

    …iplett
    
    Fix comma in debug_assert! docs
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    32f7440 View commit details
    Browse the repository at this point in the history
  13. Rollup merge of rust-lang#73848 - pierwill:pierwill-lexer-block-doc, …

    …r=jonas-schievink
    
    Fix markdown rendering in librustc_lexer docs
    
    Use back-ticks instead of quotation marks in docs for the block comment variant of TokenKind.
    
    ## [Before](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/enum.TokenKind.html#variant.BlockComment) and after
    
    <img width="1103" alt="Screen Shot 2020-06-28 at 1 22 30 PM" src="https://user-images.githubusercontent.com/19642016/85957562-446a8380-b943-11ea-913a-442cf7744083.png">
    
    <img width="1015" alt="Screen Shot 2020-06-28 at 1 28 29 PM" src="https://user-images.githubusercontent.com/19642016/85957566-4af8fb00-b943-11ea-8fef-a09c1d586772.png">
    
    ## Question
    
    For visual consistency, should we use back-ticks throughout the docs for these enum variants?
    Manishearth authored Jun 30, 2020
    Configuration menu
    Copy the full SHA
    f2cfc88 View commit details
    Browse the repository at this point in the history