Commit graph

28559 commits

Author SHA1 Message Date
bors
4a4098a00e Auto merge of #117703 - compiler-errors:recursive-async, r=lcnr
Support async recursive calls (as long as they have indirection)

Before #101692, we stored coroutine witness types directly inside of the coroutine. That means that a coroutine could not contain itself (as a witness field) without creating a cycle in the type representation of the coroutine, which we detected with the `OpaqueTypeExpander`, which is used to detect cycles when expanding opaque types after that are inferred to contain themselves.

After `-Zdrop-tracking-mir` was stabilized, we no longer store these generator witness fields directly, but instead behind a def-id based query. That means there is no technical obstacle in the compiler preventing coroutines from containing themselves per se, other than the fact that for a coroutine to have a non-infinite layout, it must contain itself wrapped in a layer of allocation indirection (like a `Box`).

This means that it should be valid for this code to work:

```
async fn async_fibonacci(i: u32) -> u32 {
    if i == 0 || i == 1 {
        i
    } else {
        Box::pin(async_fibonacci(i - 1)).await
          + Box::pin(async_fibonacci(i - 2)).await
    }
}
```

Whereas previously, you'd need to coerce the future to `Pin<Box<dyn Future<Output = ...>>` before `await`ing it, to prevent the async's desugared coroutine from containing itself across as await point.

This PR does two things:
1. Only report an error if an opaque expansion cycle is detected *not* through coroutine witness fields.
    * Instead, if we find an opaque cycle through coroutine witness fields, we compute the layout of the coroutine. If that results in a cycle error, we report it as a recursive async fn.
4. Reworks the way we report layout errors having to do with coroutines, to make up for the diagnostic regressions introduced by (1.). We actually do even better now, pointing out the call sites of the recursion!
2024-01-09 07:20:50 +00:00
Laurențiu Nicola
f52f2f9c3c Merge branch 'master' into sync-from-rust 2024-01-09 08:46:16 +02:00
Laurențiu Nicola
c6a02e375b Merge branch 'release' into sync-from-rust 2024-01-09 08:45:49 +02:00
bors
b6fecc5531 Auto merge of #119760 - matthiaskrgr:rollup-ti2xpp7, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #117744 (Add -Zuse-sync-unwind)
 - #118649 (Make inductive cycles in coherence ambiguous always)
 - #118979 (Use `assert_unsafe_precondition` for `char::from_u32_unchecked`)
 - #119619 (mir-opt and custom target fixes)
 - #119632 (Fix broken build for ESP IDF due to #119026)
 - #119712 (Adding alignment to the cases to test for specific error messages.)
 - #119734 (Miri subtree update)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-01-09 04:58:53 +00:00
Matthias Krüger
115b930f8b
Rollup merge of #119712 - madsravn:parsing-errors, r=estebank
Adding alignment to the cases to test for specific error messages.

Adding alignment to the list of cases to test for specific error message. Covers `>`, `^` and `<`.

Pinging people who chimed in last time ( https://github.com/rust-lang/rust/pull/106805 ): ``@estebank`` , ``@compiler-errors`` and ``@Nilstrieb``
2024-01-09 05:33:22 +01:00
Matthias Krüger
8a02a02916
Rollup merge of #119619 - onur-ozkan:panic-abort-mir-opt, r=oli-obk
mir-opt and custom target fixes

From https://github.com/rust-lang/rust/issues/115642#issuecomment-1879589022

> > Could you please test the last two commits from https://github.com/onur-ozkan/rust/commits/panic-abort-mir-opt when you have the time? The first commit should resolve the error of using the nightly flag with a stable compiler, and the second one should resolve the custom target issue.

> I tested with the two commits and the errors of using nightly flag and custom target specs were not seen.
Testing was completed for the test suites like ui, run-pass-valgrind, coverage, mir-opt, codegen, assembly, incremental.

Fixes #115642
2024-01-09 05:33:22 +01:00
Matthias Krüger
19111746c4
Rollup merge of #118979 - ChrisDenton:unwrap-const, r=Nilstrieb,dtolnay
Use `assert_unsafe_precondition` for `char::from_u32_unchecked`

Use `assert_unsafe_precondition` in `char::from_u32_unchecked` so that it can be stabilized as `const`.
2024-01-09 05:33:21 +01:00
Matthias Krüger
962404f6c0
Rollup merge of #117744 - quininer:add-z-sync-uw, r=bjorn3
Add -Zuse-sync-unwind

Currently Rust uses async unwind by default, but async unwind will bring non-negligible size overhead. it would be nice to allow users to choose this.

In addition, async unwind currently prevents LLVM from generate compact unwind for MachO, if one wishes to generate compact unwind for MachO, then also needs this flag.
2024-01-09 05:33:20 +01:00
bors
777e084d01 Auto merge of #119732 - lnicola:sync-from-ra, r=lnicola
Subtree update of `rust-analyzer`

r? ghost
2024-01-09 03:01:30 +00:00
bors
12e7aa3132 Auto merge of #16313 - Urhengulas:tidy-syntax-docs, r=lnicola
minor: Remove newline and add dot in syntax docs

While reading through the docs I came across these two small typos.
2024-01-08 17:21:48 +00:00
Johann Hemmann
d94f572fe2 Remove newline and add dot 2024-01-08 18:10:48 +01:00
bors
598511b4e8 Auto merge of #16308 - Veykril:builtin-macro-hygiene, r=lnicola
Builtin derives are hygienic

Closes https://github.com/rust-lang/rust-analyzer/issues/16295
2024-01-08 17:10:32 +00:00
bors
c1c242180e Auto merge of #16307 - Veykril:vfs2, r=lnicola
internal: VFS no longer stores all source files in memory

Turns out there is no need to keep the files around. We either upload them to salsa once processed, or we need to keep them around for the `DidChangeTextDocumentNotification`, but that notification is only valid for opened documents, so instead we can just keep the files around in the `MemDocs`!

Fixes https://github.com/rust-lang/rust-analyzer/issues/16301
2024-01-08 16:56:44 +00:00
dfireBird
df5c647982
add notable_trait predicate to CompletionRelevance
implement the predicate set on the case function from traits
2024-01-08 20:34:11 +05:30
Lukas Wirth
f972da70d4 Remove rustc_dependencies crate 2024-01-08 15:39:35 +01:00
Lukas Wirth
e25e0dd0ad Split out rustc_parse_format from rustc_dependencies 2024-01-08 15:30:26 +01:00
Lukas Wirth
b97ab00bd4 Split out rustc_lexer from rustc_dependencies 2024-01-08 15:24:46 +01:00
Lukas Wirth
72200641c1 fix: Fix incorrect parsing error on method call on range 2024-01-08 15:09:26 +01:00
Lukas Wirth
1c40ac79c8 VFS no longer stores all source files in memory 2024-01-08 12:51:16 +01:00
Lukas Wirth
7dd9f20ce3 Builtin derives are hygienic 2024-01-08 12:50:11 +01:00
Laurențiu Nicola
3afeb24198 Merge commit 'af40101841c45aa75b56f4e9ca745369da8fb4ba' into sync-from-ra 2024-01-08 11:29:25 +02:00
Laurențiu Nicola
1ba5646613 Merge commit 'af40101841c45aa75b56f4e9ca745369da8fb4ba' into sync-from-ra 2024-01-08 11:29:25 +02:00
bors
af40101841 Auto merge of #16302 - homersimpsons:patch-1, r=lnicola
line-index: Create README.md

Fixes #16180
2024-01-07 14:41:45 +00:00
homersimpsons
0f69276e60
line-index: Update README.md with suggestions
Co-authored-by: Laurențiu Nicola <lnicola@users.noreply.github.com>
2024-01-07 15:38:40 +01:00
homersimpsons
747fa7dd6e
line-index: Create README.md 2024-01-07 14:25:42 +01:00
bors
c49e0c402e Auto merge of #119556 - onur-ozkan:optimized-compiler-builtins, r=onur-ozkan
Reland optimized-compiler-builtins config

Copy of #102579 PR.

From #102579:

> No concerns on my side. Currently, Jyn isn't actively working on the project. I will close this PR; open another one to cherry-pick the commits, resolve conflicts, and then r+ it.

> Fixes https://github.com/rust-lang/rust/issues/102560. Fixes https://github.com/rust-lang/rust/issues/101172. Helps with https://github.com/rust-lang/rust/issues/105065 (although there's some weirdness there - it's still broken when optimized-compiler-builtins is set to true).

Fixes https://github.com/rust-lang/rust/issues/102560. Fixes https://github.com/rust-lang/rust/issues/101172. Helps with https://github.com/rust-lang/rust/issues/105065

r? ghost
2024-01-07 11:20:08 +00:00
bors
6ce3f44597 Auto merge of #16298 - riverbl:exclusive-range-hint, r=Veykril
feat: Add inlay hint for exclusive ranges

Adds an inlay hint containing a '<' character to exclusive range expressions and patterns that specify an upper bound.

![2024-01-07-095056_257x415_scrot](https://github.com/rust-lang/rust-analyzer/assets/94326797/d6bbc0de-52a5-4af4-b53c-a034749b6cab)

Inspired by [this comment](https://github.com/rust-lang/rust/issues/37854#issuecomment-1865124907) noting that IntelliJ Rust has this feature.
2024-01-07 10:21:39 +00:00
bors
1c5fa447d9 Auto merge of #16294 - matthiaskrgr:less_alloc, r=Veykril
minor: some minor clippy::perf fixes

can be read commit by commit if you want 🤷
2024-01-07 10:02:38 +00:00
riverbl
3c378b9c70 Add inlay hint for exclusive ranges
Adds an inlay hint containing a '<' character to exclusive range expressions and patterns that specify an upper bound.
2024-01-07 09:33:56 +00:00
Matthias Krüger
3fb2cd2002 autofix remaining perf findings 2024-01-07 01:20:20 +01:00
Matthias Krüger
196650dfaf don't to_string() format args 2024-01-07 01:11:57 +01:00
Matthias Krüger
b22bd36f6e remove more redundant clones manually 2024-01-07 00:26:49 +01:00
Matthias Krüger
476e10e961 remove redundant clones 2024-01-07 00:17:48 +01:00
bors
7d9d7822b8 Auto merge of #119599 - marthadev:position, r=the8472
Rewrite Iterator::position default impl

Storing the accumulating value outside the fold in an attempt to improve code generation has shown speedups on various handwritten benchmarks, see discussion at #119551.
2024-01-06 22:34:53 +00:00
bors
f595e60b6d Auto merge of #16290 - Veykril:chalk, r=Veykril
internal: Reduce vec cloning in mir lowering/eval
2024-01-06 22:13:09 +00:00
bors
e9ae0b7ab4 Auto merge of #16285 - lnicola:repr-packed-unaligned, r=Veykril
fix: Fix panic on unaligned packed attribute

Closes #16284
2024-01-06 20:35:56 +00:00
Lukas Wirth
5ac0c14384 Remove some vec clones in const-eval 2024-01-06 21:33:47 +01:00
Laurențiu Nicola
d17156a774 Add some repr(packed) tests 2024-01-06 21:24:01 +02:00
bors
f8eab9b7d2 Auto merge of #16279 - Veykril:ide-tuple-fields, r=Veykril
feat: IDE features for primitive tuple fields

Fixes https://github.com/rust-lang/rust-analyzer/issues/13018
2024-01-06 18:30:10 +00:00
Laurențiu Nicola
30e17e377c Fix panic on unaligned packed attribute 2024-01-06 19:54:57 +02:00
Lukas Wirth
5125063a21 Remove unnecessary cloning 2024-01-06 17:48:07 +01:00
Lukas Wirth
c9c4053eed More aliases 2024-01-06 16:58:15 +01:00
Lukas Wirth
963568b46f feat: IDE features for primitive tuple fields 2024-01-06 15:04:58 +01:00
roife
ba952e65ff Transform paths before make::fn_ 2024-01-06 20:09:51 +08:00
roife
872951d2d9 Replace 'postorder' with 'reverse of preorder' to traverse the AST in path_transform 2024-01-06 20:07:38 +08:00
bors
eb49490f13 Auto merge of #119499 - cjgillot:dtm-opt, r=nnethercote
Two small bitset optimisations
2024-01-06 11:54:15 +00:00
bors
208a110137 Auto merge of #119478 - bjorn3:no_serialize_specialization, r=wesleywiser
Avoid specialization in the metadata serialization code

With the exception of a perf-only specialization for byte slices and byte vectors.

This uses the same trick of introducing a new trait and having the Encodable and Decodable derives add a bound to it as used for TyEncoder/TyDecoder. The new code is clearer about which encoder/decoder uses which impl and it reduces the dependency of rustc on specialization, making it easier to remove support for specialization entirely or turn it into a construct that is only allowed for perf optimizations if we decide to do this.
2024-01-06 09:56:00 +00:00
davidsemakula
89d6b011c4 remove unnecessary ast::Path::segments alternatives 2024-01-06 12:53:56 +03:00
davidsemakula
6403dbf011 fix ast::Path::segments callers that implicitly relied on behavior of previous implementation 2024-01-06 12:52:33 +03:00
davidsemakula
08c44a6c24 fix ast::Path::segments implementation 2024-01-06 08:41:11 +03:00