1. 09 8月, 2023 17 次提交
    • B
      Auto merge of #99747 - ankane:float_gamma, r=workingjubilee · 8838c73e
      bors 提交于
      Add gamma function to f32 and f64
      
      Adds the [gamma function](https://en.wikipedia.org/wiki/Gamma_function) to `f32` and `f64` (`tgamma` and `tgammaf` from C).
      
      Refs:
      - https://github.com/rust-lang/rfcs/issues/864
      - https://github.com/rust-lang/rust/issues/18271
      8838c73e
    • B
      Auto merge of #114470 - pnkfelix:dont-export-no-mangle-from-proc-macros-issue-99978, r=bjorn3 · a946c1e0
      bors 提交于
      Restrict linker version script of proc-macro crates to just its two symbols
      
      Restrict linker version script of proc-macro crates to just the two symbols of each proc-macro crate.
      
      The main known effect of doing this is to stop including `#[no_mangle]` symbols in the linker version script.
      
      Background:
      
      The combination of a proc-macro crate with an import of another crate that itself exports a no_mangle function was broken for a period of time, because:
      
      * In PR #99944 we stopped exporting no_mangle symbols from proc-macro crates; proc-macro crates have a very limited interface and are meant to be treated as a blackbox to everything except rustc itself. However: he constructed linker version script still referred to them, but resolving that discrepancy was left as a FIXME in the code, tagged with issue #99978.
      * In PR #108017 we started telling the linker to check (via the`--no-undefined-version` linker invocation flag) that every symbol referenced in the "linker version script" is provided as linker input. So the unresolved discrepancy from #99978 started surfacing as a compile-time error (e.g. #111888).
      
      Fix #111888
      Fix #99978.
      a946c1e0
    • B
      Auto merge of #114637 - matthiaskrgr:rollup-544y8p5, r=matthiaskrgr · e3590fcc
      bors 提交于
      Rollup of 11 pull requests
      
      Successful merges:
      
       - #106425 (Make ExitStatus implement Default)
       - #113480 (add aarch64-unknown-teeos target)
       - #113586 (Mention style for new syntax in tracking issue template)
       - #113593 (CFI: Fix error compiling core with LLVM CFI enabled)
       - #114612 (update llvm-wrapper include to silence deprecation warning)
       - #114613 (Prevent constant rebuilds of `rustc-main` (and thus everything else))
       - #114615 (interpret: remove incomplete protection against invalid where clauses)
       - #114628 (Allowing re-implementation of mir_drops_elaborated query)
       - #114629 (tests: Uncomment now valid GAT code behind FIXME)
       - #114630 (Migrate GUI colors test to original CSS color format)
       - #114631 (add provisional cache test for new solver)
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      e3590fcc
    • M
      Rollup merge of #114631 - lcnr:chalk-cycle-test, r=compiler-errors · a5e91eda
      Matthias Krüger 提交于
      add provisional cache test for new solver
      
      wrote it for chalk in https://github.com/rust-lang/chalk/pull/788 and never added it to the new solver.
      
      r? ``@compiler-errors``
      a5e91eda
    • M
      Rollup merge of #114630 - GuillaumeGomez:migrate-gui-test-color-30, r=notriddle · c84732cb
      Matthias Krüger 提交于
      Migrate GUI colors test to original CSS color format
      
      Follow-up of https://github.com/rust-lang/rust/pull/111459.
      
      r? `@notriddle`
      c84732cb
    • M
      Rollup merge of #114629 - Enselic:uncomment-gat-code, r=compiler-errors · 61d7a4b6
      Matthias Krüger 提交于
      tests: Uncomment now valid GAT code behind FIXME
      
      The code fails to parse with `nightly-2021-02-05`:
      
          $ cargo +nightly-2021-02-05 build
          error: generic associated types in trait paths are currently not implemented
           --> src/main.rs:9:42
            |
          9 | fn _bar<T: for<'a> StreamingIterator<Item<'a> = &'a [i32]>>(_iter: T) { /* ... */
            |                                          ^^^^
      
      but parses with `nightly-2021-02-06`:
      
          $ cargo +nightly-2021-02-06 build
          warning: the feature `generic_associated_types` is incomplete and may not be safe to use and/or cause compiler crashes
          warning: 1 warning emitted
      
      because it was (with high probability) fixed by #79554 which was merged within that nightly range.
      
      This PR is part of #44366 which is E-help-wanted.
      61d7a4b6
    • M
      Rollup merge of #114628 - cedihegi:master, r=oli-obk · acf3791c
      Matthias Krüger 提交于
      Allowing re-implementation of mir_drops_elaborated query
      
      For our use case of the rust compiler interface (a rust verifier called [Prusti](https://github.com/viperproject/prusti-dev/)), it would be extremely useful if we were able to "copy" the implementation of the `mir_drops_elaborated_and_const_checked` query to override it. This would mean that the following items would need to be made public:
      >https://github.com/rust-lang/rust/blob/6d55184d05c9bd3c46b294dcad3bfb1d0907e871/compiler/rustc_mir_transform/src/lib.rs#L434
      >https://github.com/rust-lang/rust/blob/6d55184d05c9bd3c46b294dcad3bfb1d0907e871/compiler/rustc_mir_transform/src/inline.rs#L32
      (for the latter its module needs to be public or it needs to be re-exported)
      
      To explain why (we think) this is necessary: I am currently working on a new feature, where we try to modify the generated executables by inserting certain additional checks, and potentially perform some optimizations based on verification results.
      We are using the rust compiler interface and most of our goals can be achieved by overriding queries, in our case this is currently `mir_drops_elaborated_and_const_checked`.
      
      However, at the moment this approach is somewhat limited. When overriding queries, we can call and steal the base-query and then modify the results before allocating and returning those.
      The problem is that the verification works with a copy of `mir_promoted`. For the modifications we want to make to the mir, we would often want to rely on results of the verifier that refer to Locations in the `mir_promoted`. We can not modify the `mir_promoted` query using these results, because to run the verification we also need the results of `mir_borrowck()`, which means `mir_promoted` will already be constructed and cached.
      The Locations we get from the verifier are also no longer usable to modify `mir_drops_elaborated_and_const_checked`, because the MIR obviously changes between those 2 phases. Tracking all Locations between the two seems to be pretty much unfeasible, and would also be extremely unstable.
      
      By being able to override the query with its original implementation, we could modify the MIR before drop elaboration and the various other passes are performed.
      
      I have spent quite a bit of time investigating other solutions, and didn't find any other way solving this problem. If I still missed something I would of course be happy to hear any suggestions that do not require exposing more internal compiler functionality. However, I think being able to re-implement certain queries could also benefit other use cases in the future, for example in PR #108328 one of the approaches discussed involved doing the same thing for `mir_promoted`.
      acf3791c
    • M
      Rollup merge of #114615 - RalfJung:interpret-invalid-where, r=lcnr · 5c5ae6c5
      Matthias Krüger 提交于
      interpret: remove incomplete protection against invalid where clauses
      
      Cc https://github.com/rust-lang/rust/issues/97477, https://github.com/rust-lang/project-const-generics/issues/37
      
      r? ``@lcnr``
      5c5ae6c5
    • M
      Rollup merge of #114613 - ferrocene:pa-fix-rebuild, r=lqd · 4f82fb81
      Matthias Krüger 提交于
      Prevent constant rebuilds of `rustc-main` (and thus everything else)
      
      PR #114305 changed bootstrap to run `strip -g` on `librustc_driver.so` and `libllvm.so` on Linux when no debuginfo was requested. Unfortunately, that PR resulted in bootstrap always rebuilding everything starting from stage 1 `rustc-main` (including stage 1 libraries and tests) when invoking bootstrap multiple times.
      
      We noticed this because Ferrocene's CI times increased to between 2x and 3x total execution time, but the regression can also be reproduced locally by running `./x build library/sysroot --stage 1` twice.
      
      The explanation of the problem is in the code comments.
      
      r? ```@lqd```
      cc ```@ozkanonur```
      4f82fb81
    • M
      Rollup merge of #114612 - lqd:east-17-warning, r=nikic · 54a9c2cb
      Matthias Krüger 提交于
      update llvm-wrapper include to silence deprecation warning
      
      Includes of `include/llvm/Support/Host.h` now emit a deprecated warning: `warning: This header is deprecated, please use llvm/TargetParser/Host.h`.
      
      I don't believe we are using this include.
      
      I don't believe we need to bump the `download-ci-llvm` stamp since these warnings are emitted while building the `llvm-wrapper`.
      
      r? ```@nikic```
      54a9c2cb
    • M
      Rollup merge of #113593 - rcvalle:rust-cfi-fix-90546, r=wesleywiser · c097e480
      Matthias Krüger 提交于
      CFI: Fix error compiling core with LLVM CFI enabled
      
      Fix #90546 by filtering out global value function pointer types from the type tests, and adding the LowerTypeTests pass to the rustc LTO optimization pipelines.
      c097e480
    • M
      Rollup merge of #113586 - compiler-errors:style, r=joshtriplett · 095619aa
      Matthias Krüger 提交于
      Mention style for new syntax in tracking issue template
      
      `@rust-lang/style` would like the specification of new syntax in the style guide to be part of the feature stabilization process, in order to avoid situations where new syntax is stabilized and it never has style specified or formatting implemented for it. This most recently occurred with [let-else](https://blog.rust-lang.org/2023/07/01/rustfmt-supports-let-else-statements.html). We've made a lot of progress with the [nightly style procedure](https://github.com/rust-lang/style-team/blob/master/nightly-style-procedure.md) to unblock rustfmt from experimenting with formatting for new syntax, and T-style's existence means we actually have people who are willing and qualified to make decisions about formatting specification.
      
      This check-box should also perhaps include "formatting support implemented in rustfmt", but that's really up to `@rust-lang/rustfmt,` so I'm not volunteering them for any new responsibilities in this PR just yet.
      
      Putting this up mostly to discuss with T-lang, though feedback welcome from anyone.
      
      ---
      
      As more of an implementation detail: alternatively, instead of a this could be just added to the existing rustc-dev-guide chapter(s) on stabilization.
      
      r? `@ghost`
      095619aa
    • M
      Rollup merge of #113480 - Sword-Destiny:master, r=petrochenkov · 08876364
      Matthias Krüger 提交于
      add aarch64-unknown-teeos target
      
      TEEOS is a mini os run in TrustZone, for trusted/security apps. The libc of TEEOS is a part of musl. The kernel of TEEOS is micro kernel.
      
      This MR is to add a target for teeos.
      
      MRs for libc and rust-std are in progress.
      
      Compiler team MCP: [MCP](https://github.com/rust-lang/compiler-team/issues/652)
      08876364
    • M
      Rollup merge of #106425 - ijackson:exit-status-default, r=dtolnay · b3550891
      Matthias Krüger 提交于
      Make ExitStatus implement Default
      
      And, necessarily, make it inhabited even on platforms without processes.
      
      I noticed while preparing https://github.com/rust-lang/rfcs/pull/3362 that there was no way for anyone to construct an `ExitStatus`.
      
      This would be insta-stable so needs an FCP.
      b3550891
    • B
      Auto merge of #114545 - fee1-dead-contrib:lower-impl-effect, r=oli-obk · f88a8b71
      bors 提交于
      correctly lower `impl const` to bind to host effect param
      
      r? `@oli-obk`
      f88a8b71
    • G
      381ef832
    • L
      add test from chalk#788 for new solver · 95d1f6ba
      lcnr 提交于
      95d1f6ba
  2. 08 8月, 2023 23 次提交
    • B
      Auto merge of #114439 - Kobzol:remark-pgo-hotness, r=tmiasko · f525bb4e
      bors 提交于
      Add hotness data to LLVM remarks
      
      Slight improvement of https://github.com/rust-lang/rust/pull/113040. This makes sure that if PGO is used, remarks generated using `-Zremark-dir` will include the `Hotness` attribute.
      
      r? `@tmiasko`
      f525bb4e
    • F
      fix proc-macro test added here to solely be exercised as a build product for the host. · a2a7f27f
      Felix S. Klock II 提交于
      thus we should no longer see test failures for e.g. wasm32 target.
      a2a7f27f
    • C
      Added comment on reason for method being public · 0166092f
      cedihegi 提交于
      0166092f
    • M
      tests: Uncomment now valid GAT code behind FIXME · ff574b77
      Martin Nordholts 提交于
      The code fails to parse with `nightly-2021-02-05`:
      
          $ cargo +nightly-2021-02-05 build
          error: generic associated types in trait paths are currently not implemented
           --> src/main.rs:9:42
            |
          9 | fn _bar<T: for<'a> StreamingIterator<Item<'a> = &'a [i32]>>(_iter: T) { /* ... */
            |                                          ^^^^
      
      but parses with `nightly-2021-02-06`:
      
          $ cargo +nightly-2021-02-06 build
          warning: the feature `generic_associated_types` is incomplete and may not be safe to use and/or cause compiler crashes
          warning: 1 warning emitted
      
      because it was (with high probability) fixed by PR 79554 which was merged
      within that nightly range.
      ff574b77
    • C
      Allow reimplementation of drops_elaborated query · 15d408c6
      cedihegi 提交于
      Make module inner and function run_analysis_to_runtime_passes in
      rustc_mir_transform public to allow re-implementing the query from the
      rust compiler interface.
      15d408c6
    • J
      9d417d7c
    • B
      Auto merge of #114602 - compiler-errors:rpit-outlives-sadness, r=oli-obk · bf62436b
      bors 提交于
      Map RPIT duplicated lifetimes back to fn captured lifetimes
      
      Use the [`lifetime_mapping`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir/struct.OpaqueTy.html#structfield.lifetime_mapping) to map an RPIT's captured lifetimes back to the early- or late-bound lifetimes from its parent function. We may be going thru several layers of mapping, since opaques can be nested, so we introduce `TyCtxt::map_rpit_lifetime_to_fn_lifetime` to loop through several opaques worth of mapping, and handle turning it into a `ty::Region` as well.
      
      We can then use this instead of the identity substs for RPITs in `check_opaque_meets_bounds` to address #114285.
      
      We can then also use `map_rpit_lifetime_to_fn_lifetime` to properly install bidirectional-outlives predicates for both RPITs and RPITITs. This addresses #114601.
      
      I based this on #114574, but I don't actually know how much of that PR we still need, so some code may be redundant now... 🤷
      
      ---
      
      Fixes #114597
      Fixes #114579
      Fixes #114285
      
      Also fixes #114601, since it turns out we had other bugs with RPITITs and their duplicated lifetime params 😅.
      
      Supersedes #114574
      
      r? `@oli-obk`
      bf62436b
    • R
      remove llvm-wrapper include to silence deprecation warning · bcf7bfc9
      Rémy Rakic 提交于
      Includes of `include/llvm/Support/Host.h` now emit a deprecated warning:
      `warning: This header is deprecated, please use llvm/TargetParser/Host.h`.
      bcf7bfc9
    • B
      Auto merge of #114339 - ttsugriy:unsafe-utf8, r=davidtwco · 617821ab
      bors 提交于
      [rustc_data_structures][base_n][perf] Remove unnecessary utf8 check.
      
      Since all output characters taken from `BASE_64` are valid UTF8 chars there is no need to waste cycles on validation.
      
      Even though it's obviously a perf win, I've also used a [benchmark](https://gist.github.com/ttsugriy/e1e63c07927d8f31e71695a9c617bbf3) on M1 MacBook Air with following results:
      ```
      Running benches/base_n_benchmark.rs (target/release/deps/base_n_benchmark-825fe5895b5c2693)
      push_str/old            time:   [14.670 µs 14.852 µs 15.074 µs]
      Found 11 outliers among 100 measurements (11.00%)
        4 (4.00%) high mild
        7 (7.00%) high severe
      push_str/new            time:   [12.573 µs 12.674 µs 12.801 µs]
      Found 11 outliers among 100 measurements (11.00%)
        7 (7.00%) high mild
        4 (4.00%) high severe
      ```
      617821ab
    • P
    • M
      add'l test · 0adf7048
      Michael Goulet 提交于
      0adf7048
    • M
      Simplify via map_rpit_lifetime_to_fn_lifetime · ef2a6118
      Michael Goulet 提交于
      ef2a6118
    • O
      Stop using identity args for opaque type wf checks and instead load the args... · 67703b91
      Oli Scherer 提交于
      Stop using identity args for opaque type wf checks and instead load the args from the single use of a RPIT in its parent function's return type
      67703b91
    • M
    • R
      a7132bf3
    • B
      Auto merge of #114520 - RalfJung:unsized-valtrees, r=oli-obk · 6d55184d
      bors 提交于
      simplify handling of valtrees for unsized types
      6d55184d
    • B
      Auto merge of #114578 - petrochenkov:noplugin, r=cjgillot · 6742e2b1
      bors 提交于
      rustc_interface: Dismantle `register_plugins` query
      
      It did three independent things:
      - Constructed `LintStore`
      - Prepared incremental directories and dep graph
      - Initialized some fields in `Session`
      
      The `LintStore` construction (now `passes::create_lint_store`)  is more or less left in place.
      
      The incremental stuff is now moved into `fn dep_graph_future`.
      This helps us to start loading the dep graph a bit earlier.
      
      The `Session` field initialization is moved to tcx construction point.
      Now that tcx is constructed early these fields don't even need to live in `Session`, they can live in tcx instead and be initialized at its creation (see the FIXME).
      
      Three previously existing `rustc_interface` queries are de-querified (`register_plugins`, `dep_graph_future`, `dep_graph`) because they are only used locally in `fn global_ctxt` and their results don't need to be saved elsewhere.
      
      On the other hand, `crate_types` and `stable_crate_id` are querified.
      They are used from different places and their use is very similar to the existing `crate_name` query in this regard.
      6742e2b1
    • M
      Unconditionally record lifetime mapping · 8dcb8e07
      Michael Goulet 提交于
      8dcb8e07
    • B
      Auto merge of #114604 - matthiaskrgr:rollup-o1jltfn, r=matthiaskrgr · 8e7fd551
      bors 提交于
      Rollup of 7 pull requests
      
      Successful merges:
      
       - #114376 (Avoid exporting __rust_alloc_error_handler_should_panic more than once.)
       - #114413 (Warn when #[macro_export] is applied on decl macros)
       - #114497 (Revert #98333 "Re-enable atomic loads and stores for all RISC-V targets")
       - #114500 (Remove arm crypto target feature)
       - #114566 (Store the laziness of type aliases in their `DefKind`)
       - #114594 (Structurally normalize weak and inherent in new solver)
       - #114596 (Rename method in `opt-dist`)
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      8e7fd551
    • M
      Rollup merge of #114596 - Kobzol:opt-dist-host, r=lqd · 07b2c971
      Matthias Krüger 提交于
      Rename method in `opt-dist`
      
      This makes it clearer that the LLVM is the host one (it doesn't necessarily have to be downloaded). On Linux, it comes from the Dockerfile, on Windows it's downloaded.
      
      Suggested here: https://github.com/rust-lang/rust/pull/114344#discussion_r1285596217
      
      r? `@lqd`
      07b2c971
    • M
      Rollup merge of #114594 - compiler-errors:new-solver-resolve-aliases, r=lcnr · 418b91a3
      Matthias Krüger 提交于
      Structurally normalize weak and inherent in new solver
      
      It seems pretty obvious to me that we should be normalizing weak and inherent aliases too, since they can always be normalized. This PR still leaves open the question of what to do with opaques, though 💀
      
      **Also**, we need to structurally resolve the target of a coercion, for the UI test to work.
      
      r? `@lcnr`
      418b91a3
    • M
      Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk · 3cd0a109
      Matthias Krüger 提交于
      Store the laziness of type aliases in their `DefKind`
      
      Previously, we would treat paths referring to type aliases as *lazy* type aliases if the current crate had lazy type aliases enabled independently of whether the crate which the alias was defined in had the feature enabled or not.
      
      With this PR, the laziness of a type alias depends on the crate it is defined in. This generally makes more sense to me especially if / once lazy type aliases become the default in a new edition and we need to think about *edition interoperability*:
      
      Consider the hypothetical case where the dependency crate has an older edition (and thus eager type aliases), it exports a type alias with bounds & a where-clause (which are void but technically valid), the dependent crate has the latest edition (and thus lazy type aliases) and it uses that type alias. Arguably, the bounds should *not* be checked since at any time, the dependency crate should be allowed to change the bounds at will with a *non*-major version bump & without negatively affecting downstream crates.
      
      As for the reverse case (dependency: lazy type aliases, dependent: eager type aliases), I guess it rules out anything from slight confusion to mild annoyance from upstream crate authors that would be caused by the compiler ignoring the bounds of their type aliases in downstream crates with older editions.
      
      ---
      
      This fixes #114468 since before, my assumption that the type alias associated with a given weak projection was lazy (and therefore had its variances computed) did not necessarily hold in cross-crate scenarios (which [I kinda had a hunch about](https://github.com/rust-lang/rust/pull/114253#discussion_r1278608099)) as outlined above. Now it does hold.
      
      `@rustbot` label F-lazy_type_alias
      r? `@oli-obk`
      3cd0a109
    • M
      Rollup merge of #114500 - taiki-e:arm-crypto, r=Amanieu · 28ee1a91
      Matthias Krüger 提交于
      Remove arm crypto target feature
      
      Follow-up to https://github.com/rust-lang/stdarch/pull/1407.
      
      LLVM has moved away from a combined `crypto` feature on both aarch64 and arm, and we did the same on aarch64, but were deferred from doing the same on arm due to compatibility with older LLVM.
      
      As the minimum LLVM version has increased, we can now remove this (unstable) target feature on arm.
      
      r? `@Amanieu`
      28ee1a91