Commit Graph

259311 Commits

Author SHA1 Message Date
Matthias Krüger
f8f67b2969
Rollup merge of #126883 - dtolnay:breakvalue, r=fmease
Parenthesize break values containing leading label

The AST pretty printer previously produced invalid syntax in the case of `break` expressions with a value that begins with a loop or block label.

```rust
macro_rules! expr {
    ($e:expr) => {
        $e
    };
}

fn main() {
    loop {
        break expr!('a: loop { break 'a 1; } + 1);
    };
}
```

`rustc -Zunpretty=expanded main.rs `:

```console
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
macro_rules! expr { ($e:expr) => { $e }; }

fn main() { loop { break 'a: loop { break 'a 1; } + 1; }; }
```

The expanded code is not valid Rust syntax. Printing invalid syntax is bad because it blocks `cargo expand` from being able to format the output as Rust syntax using rustfmt.

```console
error: parentheses are required around this expression to avoid confusion with a labeled break expression
 --> <anon>:9:26
  |
9 | fn main() { loop { break 'a: loop { break 'a 1; } + 1; }; }
  |                          ^^^^^^^^^^^^^^^^^^^^^^^^
  |
help: wrap the expression in parentheses
  |
9 | fn main() { loop { break ('a: loop { break 'a 1; }) + 1; }; }
  |                          +                        +
```

This PR updates the AST pretty-printer to insert parentheses around the value of a `break` expression as required to avoid this edge case.
2024-07-02 17:47:45 +02:00
David Tolnay
06982239a6
Parenthesize break values containing leading label 2024-07-01 17:19:58 -07:00
bors
7d97c59438 Auto merge of #126941 - GuillaumeGomez:migrate-run-make-llvm-ident, r=Kobzol
Migrate `run-make/llvm-ident` to `rmake.rs`

Part of https://github.com/rust-lang/rust/issues/121876.

r? `@Kobzol`

try-job: armhf-gnu
2024-07-01 21:55:41 +00:00
bors
cf2df68d1f Auto merge of #127216 - GuillaumeGomez:rollup-iw9f2ed, r=GuillaumeGomez
Rollup of 8 pull requests

Successful merges:

 - #126732 (Stabilize `PanicInfo::message()` and `PanicMessage`)
 - #126753 (Add nightly style guide section for `precise_capturing` `use<>` syntax)
 - #126832 (linker: Refactor interface for passing arguments to linker)
 - #126880 (Migrate `volatile-intrinsics`, `weird-output-filenames`, `wasm-override-linker`, `wasm-exceptions-nostd` to `rmake`)
 - #127128 (Stabilize `duration_abs_diff`)
 - #127129 (Use full expr span for return suggestion on type error/ambiguity)
 - #127188 ( improve the way bootstrap handles rustlib components)
 - #127201 (Improve run-make-support API)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-07-01 19:33:14 +00:00
Guillaume Gomez
a509b5a0ba
Rollup merge of #127201 - GuillaumeGomez:improve-run-make-support, r=Kobzol
Improve run-make-support API

I think I'll slowly continue this work. Makes things a bit nicer for contributors, so why not. :D

r? ``@Kobzol``
2024-07-01 20:29:59 +02:00
Guillaume Gomez
cb81d0dd05
Rollup merge of #127188 - onur-ozkan:rustc-src-fix, r=Kobzol
improve the way bootstrap handles rustlib components

When CI rustc is enabled, bootstrap tries to symlink the rust source (project root) into target sysroot right before copying it from the CI rustc's sysroot. This becomes a problem in CI builders (which we currently don't see because they don't use CI rustc) because the copying part will fail as [they run on read-only mode](ef3d6fd700/src/ci/docker/run.sh (L233)).

This change fixes the problem by copying `rustc-src` from the CI rustc sysroot and only symlinking `rustc-src` from the rust source when download-rustc is not enabled.

r? ``@Kobzol`` (we talked about this already on Zulip, he knows the context)

Blocker for https://github.com/rust-lang/rust/pull/122709
2024-07-01 20:29:59 +02:00
Guillaume Gomez
61fe6b6c0c
Rollup merge of #127129 - compiler-errors:full-expr-span, r=jieyouxu
Use full expr span for return suggestion on type error/ambiguity

We sometimes use parts of an expression rather than the whole thing for an obligation span. For example, a method obligation will just point to the path segment corresponding to the `method` in `rcvr.method(args)`.

So let's not use that assuming it'll point to the *whole* expression span, which we can access from the expr hir id we store in `ObligationCauseCode::WhereClauseInExpr`.

Fixes #127109
2024-07-01 20:29:58 +02:00
Guillaume Gomez
f5810c4a51
Rollup merge of #127128 - elomatreb:elomatreb/stabilize-duration_abs_diff, r=joboet
Stabilize `duration_abs_diff`

Stabilize `duration_abs_diff` following FCP in #117618. Closes #117618.
2024-07-01 20:29:58 +02:00
Guillaume Gomez
61e7f05895
Rollup merge of #126880 - Rejyr:migrate-rmake-vw, r=Kobzol
Migrate `volatile-intrinsics`, `weird-output-filenames`, `wasm-override-linker`, `wasm-exceptions-nostd` to `rmake`

Also refactors `wasm-abi` and `compressed-debuginfo`.

Part of #121876.

r? ``@jieyouxu``

try-job: x86_64-gnu-debug
try-job: dist-various-2
2024-07-01 20:29:57 +02:00
Guillaume Gomez
6b2e644218
Rollup merge of #126832 - petrochenkov:linkarg, r=jieyouxu
linker: Refactor interface for passing arguments to linker

Separate arguments into passed to the underlying linker, to cc wrapper, or supported by both.
Also avoid allocations in all the argument passing functions.

The interfaces would look nicer if not the limitations on returning `&mut Self` in `dyn`-compatible traits, and unnecessary conflicts between `Trait` and `dyn Trait` methods.

try-job: armhf-gnu
try-job: aarch64-gnu
try-job: dist-x86_64-linux
try-job: x86_64-msvc
try-job: i686-msvc
try-job: dist-x86_64-apple
try-job: test-various
2024-07-01 20:29:56 +02:00
Guillaume Gomez
c4baa3f2f4
Rollup merge of #126753 - compiler-errors:use-style-guide, r=joshtriplett,calebcartwright
Add nightly style guide section for `precise_capturing` `use<>` syntax

r? style

Tracking:

- https://github.com/rust-lang/rust/issues/123432
2024-07-01 20:29:56 +02:00
Guillaume Gomez
61db24d15d
Rollup merge of #126732 - StackOverflowExcept1on:master, r=m-ou-se
Stabilize `PanicInfo::message()` and `PanicMessage`

Resolves #66745

This stabilizes the [`PanicInfo::message()`](https://doc.rust-lang.org/nightly/core/panic/struct.PanicInfo.html#method.message) and [`PanicMessage`](https://doc.rust-lang.org/nightly/core/panic/struct.PanicMessage.html).

Demonstration of [custom panic handler](https://github.com/StackOverflowExcept1on/panicker):
```rust
#![no_std]
#![no_main]

extern crate libc;

#[no_mangle]
extern "C" fn main() -> libc::c_int {
    panic!("I just panic every time");
}

#[panic_handler]
fn my_panic(panic_info: &core::panic::PanicInfo) -> ! {
    use arrayvec::ArrayString;
    use core::fmt::Write;

    let message = panic_info.message();
    let location = panic_info.location().unwrap();

    let mut debug_msg = ArrayString::<1024>::new();
    let _ = write!(&mut debug_msg, "panicked with '{message}' at '{location}'");

    if debug_msg.try_push_str("\0").is_ok() {
        unsafe {
            libc::puts(debug_msg.as_ptr() as *const _);
        }
    }

    unsafe { libc::exit(libc::EXIT_FAILURE) }
}
```
```
$ cargo +stage1 run --release
panicked with 'I just panic every time' at 'src/main.rs:8:5'
```

- [x] FCP: https://github.com/rust-lang/rust/issues/66745#issuecomment-2198143725

r? libs-api
2024-07-01 20:29:55 +02:00
bors
221e2741c3 Auto merge of #127113 - scottmcm:retune-inlining-again, r=oli-obk
Avoid MIR bloat in inlining

In #126578 we ended up with more binary size increases than expected.

This change attempts to avoid inlining large things into small things, to avoid that kind of increase, in cases when top-down inlining will still be able to do that inlining later.

r? ghost
2024-07-01 14:09:39 +00:00
Guillaume Gomez
7276499dc9 Migrate run-make/llvm-ident to rmake.rs 2024-07-01 15:12:13 +02:00
Guillaume Gomez
fc8b6c6657 Add input_file method on LlvmFileCheck 2024-07-01 15:10:13 +02:00
Scott McMurray
23c8ed14c9 Avoid MIR bloat in inlining
In 126578 we ended up with more binary size increases than expected.

This change attempts to avoid inlining large things into small things, to avoid that kind of increase, in cases when top-down inlining will still be able to do that inlining later.
2024-07-01 05:17:13 -07:00
Vadim Petrochenkov
5f9a0d3844 linker: Bail out of rpath logic early if the target doesn't support rpath 2024-07-01 14:19:51 +03:00
Vadim Petrochenkov
af31c338fc linker: Refactor interface for passing arguments to linker 2024-07-01 14:19:51 +03:00
onur-ozkan
97415ce6e7 fail on component linking errors
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-07-01 13:16:46 +03:00
onur-ozkan
fe6f3fa107 improve the way bootstrap handles rustlib components
When CI rustc is enabled, bootstrap tries to symlink the rust source (project root)
into target sysroot right before copying it from the CI rustc's sysroot. This becomes
a problem in CI builders (which we currently don't see because they don't use CI rustc)
because the copying part will fail as they run on read-only mode.

This change fixes the problem by copying `rustc-src` from the CI rustc sysroot and only symlinking
`rustc-src` from the rust source when download-rustc is not enabled.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-07-01 13:10:46 +03:00
Guillaume Gomez
fcfac05657 Improve target method API in run-make-support 2024-07-01 10:55:57 +02:00
Guillaume Gomez
b5b97dccae Improve run-make-support API for assert* functions 2024-07-01 10:55:57 +02:00
bors
c3774be741 Auto merge of #127197 - matthiaskrgr:rollup-aqpvn5q, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #126923 (test: dont optimize to invalid bitcasts)
 - #127090 (Reduce merge conflicts from rustfmt's wrapping)
 - #127105 (Only update `Eq` operands in GVN if it can update both sides)
 - #127150 (Fix x86_64 code being produced for bare-metal LoongArch targets' `compiler_builtins`)
 - #127181 (Introduce a `rustc_` attribute to dump all the `DefId` parents of a `DefId`)
 - #127182 (Fix error in documentation for IpAddr::to_canonical and Ipv6Addr::to_canonical)
 - #127191 (Ensure `out_of_scope_macro_calls` lint is registered)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-07-01 08:51:46 +00:00
Matthias Krüger
f5ef1cd17c
Rollup merge of #127191 - beetrees:register-out-of-scope-macro-calls, r=compiler-errors
Ensure `out_of_scope_macro_calls` lint is registered

Fixes part of https://github.com/rust-lang/rust/issues/126984#issuecomment-2198792687.
2024-07-01 08:53:09 +02:00
Matthias Krüger
c9276ad27d
Rollup merge of #127182 - danielhuang:patch-4, r=Nilstrieb
Fix error in documentation for IpAddr::to_canonical and Ipv6Addr::to_canonical
2024-07-01 08:53:08 +02:00
Matthias Krüger
b067ee82f8
Rollup merge of #127181 - BoxyUwU:dump_def_parents, r=compiler-errors
Introduce a `rustc_` attribute to dump all the `DefId` parents of a `DefId`

We've run into a bunch of issues with anon consts having the wrong generics and it would have been incredibly helpful to be able to quickly slap a `rustc_` attribute to check what `tcx.parent(` will return on the relevant DefIds.

I wasn't sure of a better way to make this work for anon consts than requiring the attribute to be on the enclosing item and then walking the inside of it to look for any anon consts. This particular method will honestly break at some point when we stop having a `DefId` available for anon consts in hir but that's for another day...

r? ``@compiler-errors``
2024-07-01 08:53:07 +02:00
Matthias Krüger
c7e64dcbf1
Rollup merge of #127150 - xen0n:issue125908, r=Kobzol
Fix x86_64 code being produced for bare-metal LoongArch targets' `compiler_builtins`

Formerly the `loongarch*-*-none*` targets were added to the `dist-various-2` CI job, but no corresponding toolchain was added along with them. This meant the `compiler_builtins` for the targets were built with the host toolchain.

As the other `dist-various` toolchains are mostly pre-built so far, to avoid burdening them with crosstool-ng builds, simply move the two bare-metal LoongArch targets to the `dist-loongarch64-linux` job which has a ready-to-use LoongArch toolchain. With the proper CFLAGS applied it is possible to build artifacts suitable for bare-metal. I verified that the `compiler_builtins` objects are now correctly produced regarding architecture and ABI, with the changes here applied.

Fixes #125908.

cc ``@heiher``

try-job: dist-loongarch64-linux
try-job: dist-various-2
2024-07-01 08:53:07 +02:00
Matthias Krüger
6938b4b640
Rollup merge of #127105 - scottmcm:issue-127089, r=cjgillot
Only update `Eq` operands in GVN if it can update both sides

Otherwise the types might not match

Fixes #127089

r? mir-opt
2024-07-01 08:53:06 +02:00
Matthias Krüger
04a3969af7
Rollup merge of #127090 - kornelski:wrap-conflicts, r=fee1-dead
Reduce merge conflicts from rustfmt's wrapping

Imports in this file are changed by many different features. Rustfmt insists on reformatting and rewrapping the imports every time they change, which causes chronic merge conflicts.

I've split the big import into multiple smaller ones, so that different features will conflict less often.
2024-07-01 08:53:06 +02:00
Matthias Krüger
c471e07156
Rollup merge of #126923 - workingjubilee:regression-tests-for-simd-invalid-bitcast, r=calebzulawski
test: dont optimize to invalid bitcasts

Regression tests to prevent regressing.
2024-07-01 08:53:05 +02:00
bors
7b21c18fe4 Auto merge of #126996 - oli-obk:do_not_count_errors, r=nnethercote
Automatically taint InferCtxt when errors are emitted

r? `@nnethercote`

Basically `InferCtxt::dcx` now returns a `DiagCtxt` that refers back to the `Cell<Option<ErrorGuaranteed>>` of the `InferCtxt` and thus when invoking `Diag::emit`, and the diagnostic is an error, we taint the `InferCtxt` directly.

That change on its own has no effect at all, because `InferCtxt` already tracks whether errors have been emitted by recording the global error count when it gets opened, and checking at the end whether the count changed. So I removed that error count check, which had a bit of fallout that I immediately fixed by invoking `InferCtxt::dcx` instead of `TyCtxt::dcx` in a bunch of places.

The remaining new errors are because an error was reported in another query, and never bubbled up. I think they are minor enough for this to be ok, and sometimes it actually improves diagnostics, by not silencing useful diagnostics anymore.

fixes #126485 (cc `@olafes)`

There are more improvements we can do (like tainting in hir ty lowering), but I would rather do that in follow up PRs, because it requires some refactorings.
2024-07-01 06:35:58 +00:00
bors
f92a6c41e6 Auto merge of #127176 - fee1-dead-contrib:fx-requires-next-solver, r=compiler-errors
Make `feature(effects)` require `-Znext-solver`

Per https://github.com/rust-lang/rust/pull/120639#pullrequestreview-2144804638

I made this a hard error because otherwise it should be a lint and that seemed more complicated. Not sure if this is the best place to put the error though.

r? project-const-traits
2024-07-01 04:21:13 +00:00
Michael Goulet
583b5fcad7 Use full expr span for return suggestion on type error/ambiguity 2024-06-30 23:11:54 -04:00
bors
ad12a2a5fc Auto merge of #127082 - GuillaumeGomez:help-gui-test, r=notriddle
Add back `help-page.goml` rustdoc GUI test

Since https://github.com/rust-lang/rust/pull/127010 was merged, let's see if we can revert https://github.com/rust-lang/rust/pull/126445...

r? `@notriddle`
2024-07-01 00:52:41 +00:00
beetrees
4c919ac50b
Ensure out_of_scope_macro_calls lint is registered 2024-07-01 00:25:25 +01:00
bors
b8d7dd8d69 Auto merge of #127026 - Urgau:cleanup-bootstrap-check-cfg, r=Kobzol
Cleanup bootstrap check-cfg

This PR cleanup many custom `check-cfg` in bootstrap that have been accumulated over the years.

As well as updating some outdated comments.
2024-06-30 22:27:29 +00:00
bors
6868c831a1 Auto merge of #127174 - matthiaskrgr:rollup-q87j6cn, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #126018 (Remove the `box_pointers` lint.)
 - #126895 (Fix simd_gather documentation)
 - #126981 (Replace some magic booleans in match-lowering with enums)
 - #127038 (Update test comment)
 - #127053 (Update the LoongArch target documentation)
 - #127069 (small correction to fmt::Pointer impl)
 - #127157 (coverage: Avoid getting extra unexpansion info when we don't need it)
 - #127160 (Add a regression test for #123630)
 - #127161 (Improve `run-make-support` library `args` API)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-30 20:14:40 +00:00
Daniel Huang
af3d7f869b
Update ip_addr.rs 2024-06-30 14:54:05 -04:00
Boxy
552794410a add rustc_dump_def_parents attribute 2024-06-30 19:31:21 +01:00
Scott McMurray
f6942112eb Add a GVN test for 127089 that doesn't optimize to a constant 2024-06-30 11:30:54 -07:00
Deadbeef
daff015314 Migrate tests to use -Znext-solver 2024-06-30 17:08:45 +00:00
Deadbeef
34ae56de35 Make feature(effects) require -Znext-solver 2024-06-30 17:08:10 +00:00
Matthias Krüger
4037197353
Rollup merge of #127161 - GuillaumeGomez:improve-run-make-args, r=Kobzol
Improve `run-make-support` library `args` API

It allows to pass both `Vec` and slices, which makes it much better (for me at least 😉).

r? ``@Kobzol``
2024-06-30 18:25:35 +02:00
Matthias Krüger
6335b83703
Rollup merge of #127160 - pacak:123630-test, r=Nadrieril
Add a regression test for #123630

Fixes #123630

compiler should not suggest nonsensical signatures, original suggestion was

```
error[E0308]: mismatched types
 --> src/lib.rs:3:31
  |
3 | fn select<F, I>(filter: F) -> Select<F, I> {
  |    ------                     ^^^^^^^^^^^^ expected `Select<F, I>`, found `()`
  |    |
  |    implicitly returns `()` as its body has no tail or `return` expression
  |
  = note: expected struct `Select<F, I>`
          found unit type `()`

error[E0282]: type annotations needed for `Select<{closure@src/lib.rs:8:22: 8:25}, I>`
 --> src/lib.rs:8:9
  |
8 |     let lit = select(|x| match x {
  |         ^^^
  |
help: consider giving `lit` an explicit type, where the type for type parameter `I` is specified
  |
8 |     let lit: Select<{closure@src/lib.rs:8:22: 8:25}, I> = select(|x| match x {
  |            ++++++++++++++++++++++++++++++++++++++++++++

Some errors have detailed explanations: E0282, E0308. For more information about an error, try `rustc --explain E0282`.
```
2024-06-30 18:25:35 +02:00
Matthias Krüger
b2aebc1b76
Rollup merge of #127157 - Zalathar:unexpand, r=cjgillot
coverage: Avoid getting extra unexpansion info when we don't need it

Several callers of `unexpand_into_body_span_with_visible_macro` would immediately discard the additional macro-related information, which is wasteful. We can avoid this by having them instead call a simpler method that just returns the span they care about.

This PR also moves the relevant functions out of `coverage::spans::from_mir` and into a new submodule `coverage::unexpand`, so that calling them from `coverage::mappings` is less awkward.

There should be no actual changes to coverage-instrumentation output, as demonstrated by the absence of test updates.
2024-06-30 18:25:34 +02:00
Matthias Krüger
7a43417c36
Rollup merge of #127069 - Sky9x:fmt-pointer-use-addr, r=Nilstrieb
small correction to fmt::Pointer impl

~~The `addr` method does not require `T: Sized`, and is preferred for use over `expose_provenance`.~~
`expose_provenance` does not require `T: Sized`.
2024-06-30 18:25:34 +02:00
Matthias Krüger
7e05bc3854
Rollup merge of #127053 - xen0n:update-loong-docs, r=Nilstrieb,heiher
Update the LoongArch target documentation

The docs for the LoongArch targets are a bit dated since their introduction, and the prose has some room for improvement as well. Streamline a bit, referring to the neighboring targets' docs, and provide up-to-date information as much as I can come up with.

cc fellow target maintainer `@heiher` for review of target-specific bits
2024-06-30 18:25:33 +02:00
Matthias Krüger
1fac8de919
Rollup merge of #127038 - BoxyUwU:reword_comment, r=camelid
Update test comment

r? `@camelid`

Rewrote this comment since it mixed up a/b in one place and was generally a bit confusing
2024-06-30 18:25:33 +02:00
Matthias Krüger
d404ce7015
Rollup merge of #126981 - Zalathar:enums, r=Nadrieril
Replace some magic booleans in match-lowering with enums

This PR takes some boolean arguments used by the match-lowering code, and replaces them with dedicated enums that more clearly express their effect, while also making it much easier to find how each value is ultimately used.
2024-06-30 18:25:32 +02:00
Matthias Krüger
5f43a89815
Rollup merge of #126895 - betelgeuse:improve_simd_gather_documentation, r=Amanieu
Fix simd_gather documentation

There is no idx in the function signature.
2024-06-30 18:25:32 +02:00