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 10 pull requests #82847

Closed
wants to merge 35 commits into from

Commits on Feb 13, 2021

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

Commits on Mar 1, 2021

  1. Change built-in kernel targets to be os = none throughout

    Whether for Rust's own `target_os`, LLVM's triples, or GNU config's, the
    OS-related have fields have been for code running *on* that OS, not code
    that is *part* of the OS.
    
    The difference is huge, as syscall interfaces are nothing like
    freestanding interfaces. Kernels are (hypervisors and other more exotic
    situations aside) freestanding programs that use the interfaces provided
    by the hardware. It's *those* interfaces, the ones external to the
    program being built and its software dependencies, that are the content
    of the target.
    
    For the Linux Kernel in particular, `target_env: "gnu"` is removed for
    the same reason: that `-gnu` refers to glibc or GNU/linux, neither of
    which applies to the kernel itself.
    
    Relates to rust-lang#74247
    
    Thanks @ojeda for catching some things.
    Ericson2314 committed Mar 1, 2021
    Configuration menu
    Copy the full SHA
    9d25ccf View commit details
    Browse the repository at this point in the history

Commits on Mar 2, 2021

  1. Clean up error reporting for deprecated passes

    - Use spans for deprecated attributes
    - Use a proper diagnostic for unknown passes, instead of error logging
    - Add tests for unknown passes
    - Improve some wording in diagnostics
    jyn514 committed Mar 2, 2021
    Configuration menu
    Copy the full SHA
    44c2794 View commit details
    Browse the repository at this point in the history
  2. Report that doc(plugins) doesn't work using diagnostics instead of …

    …`println!`
    
    This also adds a test for the output and fixes `rustc_attr` to properly
    know that `plugins` is a valid attribute.
    jyn514 committed Mar 2, 2021
    Configuration menu
    Copy the full SHA
    d5c300b View commit details
    Browse the repository at this point in the history

Commits on Mar 3, 2021

  1. Fix diagnostic suggests adding type [type error]

    Fixes rust-lang#79040
    
    Unresolved questions:
    
    Why does this change output the diagnostic twice?
    
    Why does the CI fail when the errors are pointed out (UI tests)?
    henryboisdequin committed Mar 3, 2021
    Configuration menu
    Copy the full SHA
    d9d6921 View commit details
    Browse the repository at this point in the history
  2. rustc_target: add "unwind" payloads to Abi

     ### Overview
    
        This commit begins the implementation work for RFC 2945. For more
        information, see the rendered RFC [1] and tracking issue [2].
    
        A boolean `unwind` payload is added to the `C`, `System`, `Stdcall`,
        and `Thiscall` variants, marking whether unwinding across FFI
        boundaries is acceptable. The cases where each of these variants'
        `unwind` member is true correspond with the `C-unwind`,
        `system-unwind`, `stdcall-unwind`, and `thiscall-unwind` ABI strings
        introduced in RFC 2945 [3].
    
     ### Feature Gate and Unstable Book
    
        This commit adds a `c_unwind` feature gate for the new ABI strings.
        Tests for this feature gate are included in `src/test/ui/c-unwind/`,
        which ensure that this feature gate works correctly for each of the
        new ABIs.
    
        A new language features entry in the unstable book is added as well.
    
     ### Further Work To Be Done
    
        This commit does not proceed to implement the new unwinding ABIs,
        and is intentionally scoped specifically to *defining* the ABIs and
        their feature flag.
    
     ### One Note on Test Churn
    
        This will lead to some test churn, in re-blessing hash tests, as the
        deleted comment in `src/librustc_target/spec/abi.rs` mentioned,
        because we can no longer guarantee the ordering of the `Abi`
        variants.
    
        While this is a downside, this decision was made bearing in mind
        that RFC 2945 states the following, in the "Other `unwind` Strings"
        section [3]:
    
        >  More unwind variants of existing ABI strings may be introduced,
        >  with the same semantics, without an additional RFC.
    
        Adding a new variant for each of these cases, rather than specifying
        a payload for a given ABI, would quickly become untenable, and make
        working with the `Abi` enum prone to mistakes.
    
        This approach encodes the unwinding information *into* a given ABI,
        to account for the future possibility of other `-unwind` ABI
        strings.
    
     ### Ignore Directives
    
        `ignore-*` directives are used in two of our `*-unwind` ABI test
        cases.
    
        Specifically, the `stdcall-unwind` and `thiscall-unwind` test cases
        ignore architectures that do not support `stdcall` and
        `thiscall`, respectively.
    
        These directives are cribbed from
        `src/test/ui/c-variadic/variadic-ffi-1.rs` for `stdcall`, and
        `src/test/ui/extern/extern-thiscall.rs` for `thiscall`.
    
        This would otherwise fail on some targets, see:
        rust-lang-ci@fcf697f
    
     ### Footnotes
    
    [1]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md
    [2]: rust-lang#74990
    [3]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md#other-unwind-abi-strings
    katelyn a. martin committed Mar 3, 2021
    Configuration menu
    Copy the full SHA
    5461ee0 View commit details
    Browse the repository at this point in the history
  3. implement unwinding abi's (RFC 2945)

     ### Changes
    
        This commit implements unwind ABI's, specified in RFC 2945.
    
        We adjust the `rustc_middle::ty::layout::fn_can_unwind` function,
        used to compute whether or not a `FnAbi` object represents a
        function that should be able to unwind when `panic=unwind` is in
        use.
    
        Changes are also made to
        `rustc_mir_build::build::should_abort_on_panic` so that the
        function ABI is used to determind whether it should abort, assuming
        that the `panic=unwind` strategy is being used, and no explicit
        unwind attribute was provided.
    
     ### Tests
    
        Unit tests, checking that the behavior is correct for `C-unwind`,
        `stdcall-unwind`, `system-unwind`, and `thiscall-unwind`, are
        included. These alternative `unwind` ABI strings are specified in
        RFC 2945, in the "_Other `unwind` ABI strings_" section.
    
        Additionally, a test case is included to assert that the LLVM IR
        generated for an external function defined with the `C-unwind` ABI
        will be appropriately labeled with the `nounwind` LLVM attribute
        when the `panic=abort` compilation flag is used.
    
     ### Ignore Directives
    
        This commit uses `ignore-*` directives in two of our `*-unwind` ABI
        test cases.
    
        Specifically, the `stdcall-unwind` and `thiscall-unwind` test cases
        ignore architectures that do not support `stdcall` and `thiscall`,
        respectively.
    
        These directives are cribbed from
        `src/test/ui/c-variadic/variadic-ffi-1.rs` for `stdcall`, and
        `src/test/ui/extern/extern-thiscall.rs` for `thiscall`.
    katelyn a. martin committed Mar 3, 2021
    Configuration menu
    Copy the full SHA
    9a007cf View commit details
    Browse the repository at this point in the history
  4. add integration tests, unwind across FFI boundary

     ### Integration Tests
    
        This commit introduces some new fixtures to the `run-make-fulldeps`
        test suite.
    
            * c-unwind-abi-catch-panic: Exercise unwinding a panic. This
              catches a panic across an FFI boundary and downcasts it into
              an integer.
    
            * c-unwind-abi-catch-lib-panic: This is similar to the previous
             `*catch-panic` test, however in this case the Rust code that
             panics resides in a separate crate.
    
     ### Add `rust_eh_personality` to `#[no_std]` alloc tests
    
        This commit addresses some test failures that now occur in the
        following two tests:
    
            * no_std-alloc-error-handler-custom.rs
            * no_std-alloc-error-handler-default.rs
    
        Each test now defines a `rust_eh_personality` extern function, in
        the same manner as shown in the "Writing an executable without
        stdlib" section of the `lang_items` documentation here:
        https://doc.rust-lang.org/unstable-book/language-features/lang-items.html#writing-an-executable-without-stdlib
    
        Without this change, these tests would fail to compile due to a
        linking error explaining that there was an "undefined reference
        to `rust_eh_personality'."
    
     ### Updated hash
    
        * update 32-bit hash in `impl1` test
    
     ### Panics
    
        This commit uses `panic!` macro invocations that return a string,
        rather than using an integer as a panic payload.
    
        Doing so avoids the following warnings that were observed during
        rollup for the `*-msvc-1` targets:
    
        ```
        warning: panic message is not a string literal
          --> panic.rs:10:16
           |
        10 |         panic!(x); // That is too big!
           |                ^
           |
           = note: `#[warn(non_fmt_panic)]` on by default
           = note: this is no longer accepted in Rust 2021
        help: add a "{}" format string to Display the message
           |
        10 |         panic!("{}", x); // That is too big!
           |                ^^^^^
        help: or use std::panic::panic_any instead
           |
        10 |         std::panic::panic_any(x); // That is too big!
           |         ^^^^^^^^^^^^^^^^^^^^^
    
        warning: 1 warning emitted
        ```
    
        See: https://github.com/rust-lang-ci/rust/runs/1992118428
    
        As these errors imply, panicking without a format string will be
        disallowed in Rust 2021, per rust-lang#78500.
    katelyn a. martin committed Mar 3, 2021
    Configuration menu
    Copy the full SHA
    0fd2fd9 View commit details
    Browse the repository at this point in the history
  5. address pr review comments

     ### Add debug assertion to check `AbiDatas` ordering
    
        This makes a small alteration to `Abi::index`, so that we include a
        debug assertion to check that the index we are returning corresponds
        with the same abi in our data array.
    
        This will help prevent ordering bugs in the future, which can
        manifest in rather strange errors.
    
     ### Using exhaustive ABI matches
    
        This slightly modifies the changes from our previous commits,
        favoring exhaustive matches in place of `_ => ...` fall-through
        arms.
    
        This should help with maintenance in the future, when additional
        ABI's are added, or when existing ABI's are modified.
    
     ### List all `-unwind` ABI's in unstable book
    
        This updates the `c-unwind` page in the unstable book to list _all_
        of the other ABI strings that are introduced by this feature gate.
    
        Now, all of the ABI's specified by RFC 2945 are shown.
    
    Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
    Co-authored-by: Niko Matsakis <niko@alum.mit.edu>
    3 people committed Mar 3, 2021
    Configuration menu
    Copy the full SHA
    d8bfdc8 View commit details
    Browse the repository at this point in the history

Commits on Mar 4, 2021

  1. Don't require a DocContext for report_diagnostic

    This is needed for the next commit, which needs access to the `cx` from
    within the `decorate` closure.
    
    - Change `as_local_hir_id` to an associated function, since it only
      needs a `TyCtxt`
    - Change `source_span_for_markdown_range` to only take a `TyCtxt`
    jyn514 committed Mar 4, 2021
    Configuration menu
    Copy the full SHA
    b3c4e25 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    675edd0 View commit details
    Browse the repository at this point in the history
  3. expand: Remove obsolete DirectoryOwnership::UnownedViaMod

    This ownership kind is only constructed in the case of path attributes like `#[path = ".."]` without a file name segment, which always represent some kind of directories and will produce and error on attempt to parse them as a module file.
    petrochenkov committed Mar 4, 2021
    Configuration menu
    Copy the full SHA
    bc18eb4 View commit details
    Browse the repository at this point in the history
  4. expand: Move module file path stack from global session to expansion …

    …data
    
    Also don't push the paths on the stack directly in `fn parse_external_mod`, return them instead.
    petrochenkov committed Mar 4, 2021
    Configuration menu
    Copy the full SHA
    39052c5 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    5bdf81d View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    3d0b622 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    46b67aa View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    da3419e View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    29a9ef2 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    1e1d574 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    1fe2eb8 View commit details
    Browse the repository at this point in the history

Commits on Mar 5, 2021

  1. Prevent Zip specialization from calling __iterator_get_unchecked twic…

    …e with the same index after calling next_back
    SkiFire13 committed Mar 5, 2021
    Configuration menu
    Copy the full SHA
    2371914 View commit details
    Browse the repository at this point in the history
  2. Add relevant test

    SkiFire13 committed Mar 5, 2021
    Configuration menu
    Copy the full SHA
    c1bfb9a View commit details
    Browse the repository at this point in the history

Commits on Mar 6, 2021

  1. address comments

    henryboisdequin committed Mar 6, 2021
    Configuration menu
    Copy the full SHA
    7d3a6f1 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    fbc1741 View commit details
    Browse the repository at this point in the history
  3. Make some Option, Result methods unstably const

    The following functions are now unstably const:
    
    - Option::transpose
    - Option::flatten
    - Result::transpose
    jhpratt committed Mar 6, 2021
    Configuration menu
    Copy the full SHA
    79c2b75 View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#76570 - cratelyn:implement-rfc-2945-c-unwin…

    …d-abi, r=Amanieu
    
    Implement RFC 2945: "C-unwind" ABI
    
    ## Implement RFC 2945: "C-unwind" ABI
    
    This branch implements [RFC 2945]. The tracking issue for this RFC is rust-lang#74990.
    
    The feature gate for the issue is `#![feature(c_unwind)]`.
    
    This RFC was created as part of the ffi-unwind project group tracked at rust-lang/lang-team#19.
    
    ### Changes
    
    Further details will be provided in commit messages, but a high-level overview
    of the changes follows:
    
    * A boolean `unwind` payload is added to the `C`, `System`, `Stdcall`,
    and `Thiscall` variants, marking whether unwinding across FFI boundaries is
    acceptable. The cases where each of these variants' `unwind` member is true
    correspond with the `C-unwind`, `system-unwind`, `stdcall-unwind`, and
    `thiscall-unwind` ABI strings introduced in RFC 2945 [3].
    
    * This commit adds a `c_unwind` feature gate for the new ABI strings.
    Tests for this feature gate are included in `src/test/ui/c-unwind/`, which
    ensure that this feature gate works correctly for each of the new ABIs.
    A new language features entry in the unstable book is added as well.
    
    * We adjust the `rustc_middle::ty::layout::fn_can_unwind` function,
    used to compute whether or not a `FnAbi` object represents a function that
    should be able to unwind when `panic=unwind` is in use.
    
    * Changes are also made to
    `rustc_mir_build::build::should_abort_on_panic` so that the function ABI is
    used to determind whether it should abort, assuming that the `panic=unwind`
    strategy is being used, and no explicit unwind attribute was provided.
    
    [RFC 2945]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    c940b1d View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#77916 - QuiltOS:kernel-code-targets-os-none…

    …, r=joshtriplett
    
    Change built-in kernel targets to be os = none throughout
    
    Whether for Rust's own `target_os`, LLVM's triples, or GNU config's, the
    OS-related have fields have been for code running *on* that OS, not code
    hat is *part* of the OS.
    
    The difference is huge, as syscall interfaces are nothing like
    freestanding interfaces. Kernels are (hypervisors and other more exotic
    situations aside) freestanding programs that use the interfaces provided
    by the hardware. It's *those* interfaces, the ones external to the
    program being built and its software dependencies, that are the content
    of the target.
    
    For the Linux Kernel in particular, `target_env: "gnu"` is removed for
    the same reason: that `-gnu` refers to glibc or GNU/linux, neither of
    which applies to the kernel itself.
    
    Relates to rust-lang#74247
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    a9875b5 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#82047 - the8472:fast-rename, r=davidtwco

    bypass auto_da_alloc for metadata files
    
    This saves about 0.7% when rerunning the UI test suite. I.e. when the metadata files exist and will be overwritten. No improvements expected for a clean build. So it might show up in incr-patched perf results.
    ```
    regular rename:
    
    Benchmark rust-lang#1: touch src/tools/compiletest/src/main.rs ; RUSTC_WRAPPER="" schedtool -B -e ./x.py test src/test/ui
      Time (mean ± σ):     47.305 s ±  0.170 s    [User: 1631.540 s, System: 412.648 s]
      Range (min … max):   47.125 s … 47.856 s    20 runs
    
    non-durable rename:
    
    Benchmark rust-lang#1: touch src/tools/compiletest/src/main.rs ; RUSTC_WRAPPER="" schedtool -B -e ./x.py test src/test/ui
      Time (mean ± σ):     46.930 s ±  0.064 s    [User: 1634.344 s, System: 396.038 s]
      Range (min … max):   46.759 s … 47.043 s    20 runs
    ```
    
    There are more places that trigger auto_da_alloc behavior by overwriting existing files with O_TRUNC, but those are much harder to locate because `O_TRUNC` is set on `open()` but the writeback is triggered on `close()`. The latter is the part which shows up in profiles.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    2b80d79 View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#82130 - jhpratt:const-option-result, r=Ralf…

    …Jung
    
    Make some Option, Result methods unstably const
    
    The following methods are now unstably const:
    
    - Option::transpose
    - Option::flatten
    - Result::flatten
    
    While some methods for could likely be made `const` in the future, nearly all of them require something to be dropped at compile-time, which isn't currently supported. The functions listed above should have a trivial path to stabilization.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    d25eccb View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#82292 - SkiFire13:fix-issue-82291, r=m-ou-se

    Prevent specialized ZipImpl from calling `__iterator_get_unchecked` twice with the same index
    
    Fixes rust-lang#82291
    
    It's open for review, but conflicts with rust-lang#82289, wait before merging. The conflict involves only the new test, so it should be rather trivial to fix.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    4c7e3ce View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#82402 - jyn514:module-cache-refcell, r=Guil…

    …laumeGomez
    
    Remove RefCell around `module_trait_cache`
    
    This builds on rust-lang#82018 and should not be merged before.
    
    ## Don't require a `DocContext` for `report_diagnostic`
    
    This is needed for the next commit, which needs mutable access to the `cx` from
    within the `decorate` closure.
    
    - Change `as_local_hir_id` to an associated function, since it only
      needs a `TyCtxt`
    - Change `source_span_for_markdown_range` to only take a `TyCtxt`
    
    ##  Remove RefCell around module_trait_cache
    
    This is mostly just changing lots of functions from `&DocContext` to `&mut DocContext`.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    17132ce View commit details
    Browse the repository at this point in the history
  10. Rollup merge of rust-lang#82415 - petrochenkov:modin3, r=davidtwco

    expand: Refactor module loading
    
    This is an accompanying PR to rust-lang#82399, but they can be landed independently.
    See individual commits for more details.
    
    Anyone should be able to review this equally well because all people actually familiar with this code left the project.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    0005a16 View commit details
    Browse the repository at this point in the history
  11. Rollup merge of rust-lang#82592 - Lonami:patch-1, r=RalfJung

    Improve transmute docs with further clarifications
    
    Closes rust-lang#82493.
    
    Please let me know if any of the new wording sounds off, English is not my mother tongue.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    ad34174 View commit details
    Browse the repository at this point in the history
  12. Rollup merge of rust-lang#82651 - jyn514:rustdoc-warnings, r=Guillaum…

    …eGomez
    
    Cleanup rustdoc warnings
    
    ## Clean up error reporting for deprecated passes
    
    Using `error!` here goes all the way back to the original commit, rust-lang#8540. I don't see any reason to use logging; rustdoc should use diagnostics wherever possible. See rust-lang#81932 (comment) for further context.
    
    - Use spans for deprecated attributes
    - Use a proper diagnostic for unknown passes, instead of error logging
    - Add tests for unknown passes
    - Improve some wording in diagnostics
    
    ##  Report that `doc(plugins)` doesn't work using diagnostics instead of `eprintln!`
    
    This also adds a test for the output.
    
    This was added in rust-lang#52194. I don't see any particular reason not to use diagnostics here, I think it was just missed in rust-lang#50541.
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    44bd3de View commit details
    Browse the repository at this point in the history
  13. Rollup merge of rust-lang#82720 - henryboisdequin:fix-79040, r=oli-obk

    Fix diagnostic suggests adding type `[type error]`
    
    Fixes rust-lang#79040
    
    ### Unresolved questions:
    
    <del>Why does this change output the diagnostic twice (`src/test/ui/79040.rs`)?</del> Thanks ````@oli-obk````
    Dylan-DPC authored Mar 6, 2021
    Configuration menu
    Copy the full SHA
    44cb131 View commit details
    Browse the repository at this point in the history