Commit Graph

285461 Commits

Author SHA1 Message Date
Michael Goulet
3524e6ab0f ensure_ok().query doesn't need cache_on_disk 2025-04-02 04:01:15 +00:00
Michael Goulet
444a7eb5aa Use return_result_from_ensure_ok a bit more 2025-04-02 04:01:15 +00:00
Michael Goulet
a3e6b69471 cache_on_disk_if false is a noop 2025-04-02 03:59:48 +00:00
bors
70dab5a27c Auto merge of #138478 - nnethercote:rm-NtExpr-NtLiteral, r=petrochenkov
Remove `NtExpr` and `NtLiteral`

The next part of #124141.

r? `@petrochenkov`
2025-04-02 00:36:04 +00:00
bors
9b7d5ac818 Auto merge of #139220 - matthiaskrgr:rollup-v1un5wz, r=matthiaskrgr
Rollup of 8 pull requests

Successful merges:

 - #110406 (rustdoc-json: Add test for #[automatically_derived] attribute)
 - #138790 (Note potential but private items in show_candidates)
 - #139002 (Add release notes for 1.86.0)
 - #139022 (increment depth of nested obligations)
 - #139129 (Add tests for slice bounds check optimization)
 - #139188 (PassWrapper: adapt for llvm/llvm-project@94122d58fc77079a291a3d008914…)
 - #139193 (Feed HIR for by-move coroutine body def, since the inliner tries to read its attrs)
 - #139202 (Improve docs of ValTreeKind)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-01 21:28:39 +00:00
Nicholas Nethercote
592d113ff2 Fix problem causing rusqlite compilation to OOM.
This makes the expression re-parsing more like how it's originally done
in `parse_nonterminal`.
2025-04-02 06:21:18 +11:00
Nicholas Nethercote
81afdbc161 Fix a problem with metavars and inner attributes. 2025-04-02 06:21:18 +11:00
Nicholas Nethercote
d59b17c5cd Remove Token::uninterpolated_span.
In favour of the similar method on `Parser`, which works on things
other than identifiers and lifetimes.
2025-04-02 06:21:16 +11:00
Nicholas Nethercote
49ed25b5d2 Remove NtExpr and NtLiteral.
Notes about tests:
- tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs: some messages are
  now duplicated due to repeated parsing.

- tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.rs: ditto.

- `tests/ui/proc-macro/macro-rules-derive-cfg.rs`: the diff looks large
  but the only difference is the insertion of a single
  invisible-delimited group around a metavar.

- `tests/ui/attributes/nonterminal-expansion.rs`: a slight span
  degradation, somehow related to the recent massive attr parsing
  rewrite (#135726). I couldn't work out exactly what is going wrong,
  but I don't think it's worth holding things up for a single slightly
  suboptimal error message.
2025-04-02 06:20:35 +11:00
Matthias Krüger
99826dd9c7
Rollup merge of #139202 - bjorn3:improve_comment, r=jieyouxu
Improve docs of ValTreeKind
2025-04-01 20:25:25 +02:00
Matthias Krüger
aafb17ddca
Rollup merge of #139193 - compiler-errors:inline-synthetic, r=eholk
Feed HIR for by-move coroutine body def, since the inliner tries to read its attrs

See the comments in the test.

I'm surprised that nobody found this[^1] (edit: nvm haha), but you have to go out of your way to construct the by-move body and then inline it w/ a poll call, so I guess the inliner just never really gets into this situation before.

Fixes #134335

r? oli-obk

[^1]: Well, ````@eholk```` found this when working on the `iter! {}` macro, since it more dramatically affects those.
2025-04-01 20:25:24 +02:00
Matthias Krüger
2a557ec9b8
Rollup merge of #139188 - durin42:llvm-21-LintPass, r=dianqk
PassWrapper: adapt for llvm/llvm-project@94122d58fc77079a291a3d008914…

…006cb509d9db

We also have to remove the LLVM argument in cast-target-abi.rs for LLVM
21. I'm not really sure what the best approach here is since that test already uses revisions. We could also fork the test into a copy for LLVM 19-20 and another for LLVM 21, but what I did for now was drop the lint-abort-on-error flag to LLVM figuring that some coverage was better than none, but I'm happy to change this if that was a bad direction.

r? dianqk
````@rustbot```` label llvm-main
2025-04-01 20:25:23 +02:00
Matthias Krüger
a04b0e3cd3
Rollup merge of #139129 - reez12g:add-tests-for-slice-bounds-check-optimization, r=fee1-dead
Add tests for slice bounds check optimization

Closes https://github.com/rust-lang/rust/issues/134466
2025-04-01 20:25:23 +02:00
Matthias Krüger
000d018110
Rollup merge of #139022 - lcnr:incr-obligation-depth, r=oli-obk
increment depth of nested obligations

properly fixes the root cause of #109268. While we didn't get hangs here before, I ended up encountering its root cause again with #138785.

r? types
2025-04-01 20:25:22 +02:00
Matthias Krüger
0cae6f5ce0
Rollup merge of #139002 - cuviper:relnotes-1.86.0, r=BoxyUwU
Add release notes for 1.86.0

Closes #138795 (the draft)

cc ````@rust-lang/release````
````@rustbot```` ping relnotes-interest-group
2025-04-01 20:25:21 +02:00
Matthias Krüger
068594e365
Rollup merge of #138790 - xizheyin:issue-138626, r=compiler-errors
Note potential but private items in show_candidates

Closes #138626 .
We should add potential private items to give ample hints.
And for the other seemingly false positive ` pub use crate:1️⃣:Foo;` should be kept because we don't know if the user wants to import other module's items or not, and therefore should be given the full option to do so.
r? compiler
2025-04-01 20:25:21 +02:00
Matthias Krüger
cdd69d6dc3
Rollup merge of #110406 - aDotInTheVoid:rdj-derived-impl-attr, r=GuillaumeGomez
rustdoc-json: Add test for #[automatically_derived] attribute

~~Will fail CI due to https://github.com/freestrings/jsonpath/issues/91, but I wrote the test and don't want to forget it.~~

~~We should look into fixing the freestrings impl, or moving to a different one, so we can test things like this. [Zulip Disussion](https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/jsonpath-plus.20integration)~~

FIXED!!! By #138763

r? ````@ghost````

````@rustbot```` blocked
2025-04-01 20:25:20 +02:00
bors
e2014e876e Auto merge of #138928 - ChrisDenton:fix-uwp, r=tgross35
Fix UWP reparse point check

Fixes #138921
2025-04-01 18:22:03 +00:00
bors
0b4a81a4ef Auto merge of #138492 - lcnr:rm-inline_const_pat, r=oli-obk
remove `feature(inline_const_pat)`

Summarizing https://rust-lang.zulipchat.com/#narrow/channel/144729-t-types/topic/remove.20feature.28inline_const_pat.29.20and.20shared.20borrowck.

With https://github.com/rust-lang/types-team/issues/129 we will start to borrowck items together with their typeck parent. This is necessary to correctly support opaque types, blocking the new solver and TAIT/ATPIT stabilization with the old one. This means that we cannot really support `inline_const_pat` as they are implemented right now:

- we want to typeck inline consts together with their parent body to allow inference to flow both ways and to allow the const to refer to local regions of its parent.This means we also need to borrowck the inline const together with its parent as that's necessary to properly support opaque types
- we want the inline const pattern to participate in exhaustiveness checking
- to participate in exhaustiveness checking we need to evaluate it, which requires borrowck, which now relies on borrowck of the typeck root, which ends up checking exhaustiveness again. **This is a query cycle**.

There are 4 possible ways to handle this:
- stop typechecking inline const patterns together with their parent
  - causes inline const patterns to be different than inline const exprs
  - prevents bidirectional inference, we need to either fail to compile `if let const { 1 } = 1u32` or `if let const { 1u32 } = 1`
  - region inference for inline consts will be harder, it feels non-trivial to support inline consts referencing local regions from the parent fn
- inline consts no longer participate in exhaustiveness checking. Treat them like `pat if pat == const { .. }`  instead. We then only evaluate them after borrowck
  - difference between `const { 1 }`  and `const FOO: usize = 1; match x { FOO => () }`. This is confusing
  - do they carry their weight if they are now just equivalent to using an if-guard
- delay exhaustiveness checking until after borrowck
  - should be possible in theory, but is a quite involved change and may have some unexpected challenges
- remove this feature for now

I believe we should either delay exhaustiveness checking or remove the feature entirely. As moving exhaustiveness checking to after borrow checking is quite complex I think the right course of action is to fully remove the feature for now and to add it again once/if we've got that implementation figured out.

`const { .. }`-expressions remain stable. These seem to have been the main motivation for https://github.com/rust-lang/rfcs/issues/2920.

r? types

cc `@rust-lang/types` `@rust-lang/lang` #76001
2025-04-01 14:20:46 +00:00
bors
8c35f4a85e Auto merge of #137535 - Kobzol:split-metadata, r=petrochenkov
Introduce `-Zembed-metadata` to allow omitting full metadata from rlibs and dylibs

This is a continuation of https://github.com/rust-lang/rust/pull/120855 (I was mentored by `@bjorn3` to move it forward). Most of the original code was written by bjorn3, I tried to clean it up a bit and add some documentation and tests.

This PR introduces a new unstable compiler flag called `-Zembed-metadata=[no|yes]`, with the default being `yes` (see https://github.com/rust-lang/rust/issues/57076 for context). When set to `no`, rustc will only store a small metadata stub inside rlibs/dylibs instead of the full metadata, to keep their size smaller. It should be used in combination with `--emit=metadata`, so that the users of such a compiled library can still read the metadata from the corresponding `.rmeta` file. [This comment](https://github.com/rust-lang/rust/pull/120855#issuecomment-1937018169) shows an example of binary/artifact size wins that can be achieved using this approach.

Contrary to https://github.com/rust-lang/rust/pull/120855, this PR only introduces the new flag, along with a couple of run-make tests and documentation, but does not yet use it in bootstrap to actually compile rustc. I plan to do that as a follow-up step (along with integration in Cargo, which should ideally just always pass this flag to reduce the size of target directories).

Fixes https://github.com/rust-lang/rust/issues/23366
Closes https://github.com/rust-lang/rust/issues/29511
Fixes https://github.com/rust-lang/rust/issues/57076

Another attempt of https://github.com/rust-lang/rust/pull/93945 and https://github.com/rust-lang/rust/pull/120855.

r? `@petrochenkov`
2025-04-01 10:40:06 +00:00
bjorn3
f153685fd0 Improve docs of ValTreeKind 2025-04-01 10:50:02 +02:00
bors
ed201574c5 Auto merge of #138740 - nnethercote:ast-ItemKind-idents, r=fmease
Move `ast::Item::ident` into `ast::ItemKind`

The follow-up to #138384, which did the same thing for `hir::ItemKind`.

r? `@fmease`
2025-04-01 07:21:28 +00:00
Jakub Beránek
f0efb9748e Support metadata version 10 in proc-macro-srv 2025-04-01 08:59:04 +02:00
Jakub Beránek
cb7ebf6f05
Bump metadata version 2025-04-01 07:57:05 +02:00
Nicholas Nethercote
ec10833609 Address review comments. 2025-04-01 16:07:23 +11:00
bors
97ea17b71a Auto merge of #139194 - matthiaskrgr:rollup-2mhep38, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #138426 (Fix `armv7-sony-vita-newlibeabihf` LLVM target triple)
 - #138840 (rustc_resolve: Test the order that preludes are resolved)
 - #139039 (Reduce kw::Empty usage, part 4)
 - #139151 (tidy: properly check for orphaned unstable_book pages)
 - #139176 (Remove fragile equal-pointers-unequal/*/print3.rs tests.)
 - #139179 (Remove me from vacation)
 - #139181 (Fix invalid link in docs)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-01 04:15:11 +00:00
Nicholas Nethercote
df247968f2 Move ast::Item::ident into ast::ItemKind.
`ast::Item` has an `ident` field.

- It's always non-empty for these item kinds: `ExternCrate`, `Static`,
  `Const`, `Fn`, `Mod`, `TyAlias`, `Enum`, `Struct`, `Union`,
  `Trait`, `TraitAlias`, `MacroDef`, `Delegation`.

- It's always empty for these item kinds: `Use`, `ForeignMod`,
  `GlobalAsm`, `Impl`, `MacCall`, `DelegationMac`.

There is a similar story for `AssocItemKind` and `ForeignItemKind`.

Some sites that handle items check for an empty ident, some don't. This
is a very C-like way of doing things, but this is Rust, we have sum
types, we can do this properly and never forget to check for the
exceptional case and never YOLO possibly empty identifiers (or possibly
dummy spans) around and hope that things will work out.

The commit is large but it's mostly obvious plumbing work. Some notable
things.

- `ast::Item` got 8 bytes bigger. This could be avoided by boxing the
  fields within some of the `ast::ItemKind` variants (specifically:
  `Struct`, `Union`, `Enum`). I might do that in a follow-up; this
  commit is big enough already.

- For the visitors: `FnKind` no longer needs an `ident` field because
  the `Fn` within how has one.

- In the parser, the `ItemInfo` typedef is no longer needed. It was used
  in various places to return an `Ident` alongside an `ItemKind`, but
  now the `Ident` (if present) is within the `ItemKind`.

- In a few places I renamed identifier variables called `name` (or
  `foo_name`) as `ident` (or `foo_ident`), to better match the type, and
  because `name` is normally used for `Symbol`s. It's confusing to see
  something like `foo_name.name`.
2025-04-01 14:08:57 +11:00
Nicholas Nethercote
43018eacb6 Ignore #[test_case] on anything other than fn/const/static.
`expand_test_case` looks for any item with a `#[test_case]` attribute
and adds a `test_path_symbol` attribute to it while also fiddling with
the item's ident's span.

This is pretty weird, because `#[test_case]` is only valid on
`fn`/`const`/`static` items, as far as I can tell. But you don't
currently get an error or warning if you use it on other kinds of items.

This commit changes things so that a `#[test_case]` item is modified
only if it is `fn`/`const`/`static`. This is relevant for moving idents
from `Item` to `ItemKind`, because some item kinds don't have an ident,
e.g. `impl` blocks.

The commit also does the following.
- Renames a local variable `test_id` as `test_ident`.
- Changes a `const` to `static` in
  `tests/ui/custom_test_frameworks/full.rs` to give the `static` case
  some test coverage.
- Adds a `struct` and `impl` to the same test to give some test coverage
  to the non-affected item kinds. These have a `FIXME` comment
  identifying the weirdness here. Hopefully this will be useful
  breadcrumbs for somebody else in the future.
2025-04-01 13:42:00 +11:00
Nicholas Nethercote
deed0f2480 Remove useless Option<Ident> arg.
`FmtVisitor::visit_mac` has an `Option<Ident>` arg which is always
either `None` or `Some(kw::Empty)`, because `ItemKind::MacCall` always
has an empty ident. This value is passed through various functions until
it reaches `rewrite_macro_name`, which treats `None` and
`Some(kw::Empty)` the same.

In other words, the argument is useless. This commit removes it. There
is no change in behaviour. The commit also changes a few `symbol::Ident`
occurrences to `Ident` in `macros.rs`; `Symbol` is imported in that file
so `Ident` might as well be, too.

(This is a good example of why it's a bad idea for `Itemt` to have an
`ident` field when various item kinds don't have an identifier. It's
easy to get confused when "empty identifier" is used to mean "no
identifier". This will be fixed in a subsequent commit.)
2025-04-01 13:42:00 +11:00
Nicholas Nethercote
4c551bcacd Simplify ItemVisitorKind.
Instead of putting the item inside it, just pass the ident and
visibility (the only things needed) alongside it where necessary.

This helps with the next commit, which will move the ident's location.
Specifically, it gets rid of the `match visitor_kind` in
`rewrite_type_alias`.
2025-04-01 13:41:57 +11:00
Nicholas Nethercote
59307fd9fd Factor out some shared code.
`global_allocator_spans` and `alloc_error_handler_span` are identical
except for `name`.
2025-04-01 13:34:21 +11:00
lcnr
654b7b5413 increment depth of nested obligations 2025-03-31 23:58:17 +02:00
Michael Goulet
e2d5033bce Feed HIR for by-move coroutine body def, since the inliner tries to read its attrs 2025-03-31 21:10:56 +00:00
Matthias Krüger
d492348ec8
Rollup merge of #139181 - tiif:doc, r=Noratrieb
Fix invalid link in docs
2025-03-31 23:05:47 +02:00
Matthias Krüger
745657d05d
Rollup merge of #139179 - ChrisDenton:unvacate, r=ChrisDenton
Remove me from vacation
2025-03-31 23:05:47 +02:00
Matthias Krüger
5b46e2462a
Rollup merge of #139176 - m-ou-se:print3, r=compiler-errors
Remove fragile equal-pointers-unequal/*/print3.rs tests.

These tests were added in #127003

The print3.rs tests stop working when I change implementation details of format_args!(). (For example, in https://github.com/rust-lang/rust/pull/139175 and https://github.com/rust-lang/rust/pull/139135). These tests shouldn't rely on such implementation details. It gets in the way for format_args!() improvements.

If they test anything that aren't already covered by the other tests in this directory, they should be expressed in a less fragile way that doesn't rely on internal details of format_args!().

cc ``@GrigorenkoPV,`` author of these tests.
2025-03-31 23:05:46 +02:00
Matthias Krüger
d78704a253
Rollup merge of #139151 - mejrs:underscore_to_dash, r=onur-ozkan
tidy: properly check for orphaned unstable_book pages

This also recommends using underscores - something that took me a little bit too long to figure out.

Note: this PR deletes the page `src/doc/unstable-book/src/library-features/c-variadic.md`. The page `src/doc/unstable-book/src/lang-features/c-variadic.md` remains.
2025-03-31 23:05:45 +02:00
Matthias Krüger
2f5d548002
Rollup merge of #139039 - nnethercote:less-kw-Empty-4, r=petrochenkov
Reduce kw::Empty usage, part 4

Another step towards #137978.

r? `@petrochenkov`
2025-03-31 23:05:45 +02:00
Matthias Krüger
50485342a0
Rollup merge of #138840 - jyn514:precedence-order, r=wesleywiser
rustc_resolve: Test the order that preludes are resolved

This test is exhaustive. See attached truth table:
![image](https://github.com/user-attachments/assets/11fe703c-e114-48df-84f8-426b63395784)

Companion PR to https://github.com/rust-lang/reference/pull/1765.
2025-03-31 23:05:44 +02:00
Matthias Krüger
32574153d9
Rollup merge of #138426 - madsmtm:vita-llvm-target, r=jieyouxu
Fix `armv7-sony-vita-newlibeabihf` LLVM target triple

It was previously normalized by LLVM to `thumbv7a-vita-unknown-eabihf` (can be seen with `clang -target thumbv7a-vita-eabihf -v`), which seems wrong, as Vita is the OS name.

Motivation: To make it easier to verify that [`cc-rs`' conversion from `rustc` to Clang/LLVM triples](https://github.com/rust-lang/cc-rs/issues/1431) is correct.

CC target maintainers ``@nikarh,`` ``@pheki`` and ``@ZetaNumbers.``
r? jieyouxu
2025-03-31 23:05:43 +02:00
Alona Enraght-Moony
7feac15ca7 rustdoc-json: Add test for #[automatically_derived] attribute 2025-03-31 20:42:49 +00:00
Nicholas Nethercote
2785063163 Avoid kw::Empty use for AuxParamsAttr.
By changing two of the fields to use `Option<Ident>` instead of `Ident`.
As a result, `None` now means "no identifier", which is much clearer
than using an empty identifier.
2025-04-01 07:34:23 +11:00
Nicholas Nethercote
929749d801 Improve is_doc_keyword.
This is part of the implementation of `#[doc(keyword = "match")]`
attributes used by `std` to provide documentation for keywords.

`is_doc_keyword` currently does a crude keyword range test that's
intended to catch all keywords but misses `kw::Yeet`. This commit
changes it to use `Symbol` methods, including the new `is_weak` method
(required for `union`). `Symbol` methods are much less prone to falling
out of date if new keywords are added.
2025-04-01 07:34:23 +11:00
Nicholas Nethercote
9fb0defa52 Tweak check_doc_keyword.
To use one `kw::Empty` instead of two. It's a little more direct this
way, and avoids `kw::Empty` being used for both "no string" and "empty
string".
2025-04-01 07:34:23 +11:00
Nicholas Nethercote
a6a6d01bbc Use sym::dummy in one more place.
It makes it clearer that the symbol is unused and doesn't matter.
2025-04-01 07:34:23 +11:00
Augie Fackler
b14a0ce7f6 PassWrapper: adapt for llvm/llvm-project@94122d58fc
We also have to remove the LLVM argument in cast-target-abi.rs for LLVM
21. I'm not really sure what the best approach here is since that test
already uses revisions. We could also fork the test into a copy for LLVM
19-20 and another for LLVM 21, but what I did for now was drop the
lint-abort-on-error flag to LLVM figuring that some coverage was better
than none, but I'm happy to change this if that was a bad direction.

The above also applies for ffi-out-of-bounds-loads.rs.

r? dianqk
@rustbot label llvm-main
2025-03-31 15:47:26 -04:00
tiif
753968162a Fix invalid link 2025-03-31 16:42:01 +00:00
Chris Denton
3ef1a3f1c5
Remove ChrisDenton from on vacation 2025-03-31 16:10:02 +00:00
bors
0b45675cfc Auto merge of #139169 - matthiaskrgr:rollup-nfy4aew, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #138176 (Prefer built-in sized impls (and only sized impls) for rigid types always)
 - #138749 (Fix closure recovery for missing block when return type is specified)
 - #138842 (Emit `unused_attributes` for `#[inline]` on exported functions)
 - #139153 (Encode synthetic by-move coroutine body with a different `DefPathData`)
 - #139157 (Remove mention of `exhaustive_patterns` from `never` docs)
 - #139167 (Remove Amanieu from the libs review rotation)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-03-31 15:10:21 +00:00
reez12g
dea9472127 Add tests for LLVM 20 slice bounds check optimization 2025-03-31 22:38:53 +09:00