| Age | Commit message (Collapse) | Author | Lines |
|
|
|
|
|
|
|
|
|
|
|
This ensures that NLL will infer suitable values for regions in opaque
types when it's possible.
|
|
Also correctly calculate what the upper bounds are.
|
|
* Use better span for member constraint errors
* Avoid a bad suggestion
* Don't report member constraint errors if we have other universal
region errors.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
We want type checking for function bodies to ignore/erase regions. As
such, we need to infer the regions in opaque types in borrow check
instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is to avoid cycles when calling `is_freeze` on an opaque type.
|
|
|
|
|
|
Move resolve_instance to rustc_ty.
r? @Zoxc
|
|
|
|
Construct query job latches on-demand
r? @michaelwoerister
|
|
Rollup of 9 pull requests
Successful merges:
- #68728 (parse: merge `fn` syntax + cleanup item parsing)
- #68938 (fix lifetime shadowing check in GATs)
- #69057 (expand: misc cleanups and simplifications)
- #69108 (Use HirId in TraitCandidate.)
- #69125 (Add comment to SGX entry code)
- #69126 (miri: fix exact_div)
- #69127 (Enable use after scope detection in the new LLVM pass manager)
- #69135 (Spelling error "represening" to "representing")
- #69141 (Don't error on network failures)
Failed merges:
r? @ghost
|
|
Don't error on network failures
This should further reduce spurious failures.
r? @JohnTitor and/or @ehuss
|
|
Spelling error "represening" to "representing"
Small spelling mistake I noticed when looking through the Rust lexer.
|
|
Enable use after scope detection in the new LLVM pass manager
Implementation of 08a1c566a792dcf9657d293155f7ada87746bb65 for the new LLVM pass manager, support for which landed in the meantime.
|
|
miri: fix exact_div
Turns out `exact_div` was relying on the broken behavior of `Rem` for `int_min % -1` that was fixed in https://github.com/rust-lang/rust/pull/69002. This PR fixes `exact_div`.
Inside rustc, `exact_div` is only used in a single place where the divisor is always positive (in `ptr_offset_from`), so we cannot test the fix in rustc. The Miri test suite covers this through the `exact_div` intrinsic, though (and it is how I found out).
One step to https://github.com/rust-lang/rust/issues/69117 (then we also need to address build failures introduced by https://github.com/rust-lang/rust/pull/68969)
r? @oli-obk
|
|
Add comment to SGX entry code
Meant to force push this to be included in #69040, but forgot
r? @nagisa
|
|
Use HirId in TraitCandidate.
I had to duplicate the `TraitMap` type to hold `NodeId`s until AST->HIR lowering is done.
r? @Zoxc
|
|
expand: misc cleanups and simplifications
Some work I did while trying to understand expand for the purposes of https://github.com/rust-lang/rust/issues/64197.
r? @petrochenkov
|
|
fix lifetime shadowing check in GATs
closes #67512
|
|
parse: merge `fn` syntax + cleanup item parsing
Here we continue the work in https://github.com/rust-lang/rust/pull/67131 in particular to merge the grammars of `fn` items in various positions.
A list of *language level* changes (as sanctioned by the language team in https://github.com/rust-lang/rust/issues/65041#issuecomment-538105286 and https://github.com/rust-lang/rust/pull/67131):
- `self` parameters are now *syntactically* allowed as the first parameter irrespective of item context (and in function pointers). Instead, semantic validation (`ast_validation`) is used.
- Syntactically, `fn` items in `extern { ... }` blocks can now have bodies (`fn foo() { ... }` as opposed to `fn foo();`). As above, we use semantic restrictions instead.
- Syntactically, `fn` items in free contexts (directly in a file or a module) can now be without bodies (`fn foo();` as opposed to `fn foo() { ... }`. As above, we use semantic restrictions instead, including for non-ident parameter patterns.
- `const extern fn` feature gating is now done post-expansion such that we do not have conditional compatibilities of function qualifiers *in parsing*.
- The `FnFrontMatter` grammar becomes:
```rust
Extern = "extern" StringLit ;
FnQual = "const"? "async"? "unsafe"? Extern? ;
FnFrontMatter = FnQual "fn" ;
```
That is, all item contexts now *syntactically* allow `const async unsafe extern "C" fn` and use semantic restrictions to rule out combinations previously prevented syntactically. The semantic restrictions include in particular:
- `fn`s in `extern { ... }` can have no qualifiers.
- `const` and `async` cannot be combined.
- To fuse the list-of-items parsing in the 4 contexts that items are allowed, we now must permit inner attributes (`#![attr]`) inside `trait Foo { ... }` definitions. That is, we now allow e.g. `trait Foo { #![attr] }`. This was probably an oversight due to not using a uniform parsing mechanism, which we now do have (`fn parse_item_list`). The semantic support (including e.g. for linting) falls out directly from the attributes infrastructure. To ensure this, we include a test for lints.
Put together, these grammar changes allow us to substantially reduce the complexity of item parsing and its grammar. There are however some other non-language improvements that allow the compression to take place.
A list of *compiler-internal* changes (in particular noting the parser-external data-structure changes):
- We use `enum AllowPlus/RecoverQPath/AllowCVariadic { Yes, No }` in `parser/ty.rs` instead of passing around 3 different `bool`s. I felt this was necessary as it was becoming mentally taxing to track which-is-which.
- `fn visit_trait_item` and `fn visit_impl_item` are merged into `fn visit_assoc_item` which now is passed an `AssocCtxt` to check which one it is.
- We change `FnKind` to:
```rust
pub enum FnKind<'a> {
Fn(FnCtxt, Ident, &'a FnSig, &'a Visibility, Option<&'a Block>),
Closure(&'a FnDecl, &'a Expr),
}
```
with:
```rust
pub enum FnCtxt {
Free,
Foreign,
Assoc(AssocCtxt),
}
```
This is then taken advantage of in tweaking the various semantic restrictions as well as in pretty printing.
- In `ItemKind::Fn`, we change `P<Block>` to `Option<P<Block>>`.
- In `ForeignItemKind::Fn`, we change `P<FnDecl>` to `FnSig` and `P<Block>` to `Option<P<Block>>`.
- We change `ast::{Unsafety, Spanned<Constness>}>` into `enum ast::{Unsafe, Const} { Yes(Span), No }` respectively. This change in formulation allow us to exclude `Span` in the case of `No`, which facilitates parsing. Moreover, we also add a `Span` to `IsAsync` which is renamed to `Async`. The new `Span`s in `Unsafety` and `Async` are then taken advantage of for better diagnostics. A reason this change was made is to have a more uniform and clear naming scheme.
The HIR keeps the structures in AST (with those definitions moved into HIR) for now to avoid regressing perf.
- Various cleanups, bug fixes, and diagnostics improvements are made along the way. It is probably best to understand those via the diffs.
I would recommend reviewing this commit-by-commit with whitespace changes hidden.
r? @estebank @petrochenkov
|
|
[self-profiler] add selfprofiling to llvm
using pass name as event id and add additional data with name of module, function …

r? @michaelwoerister or @wesleywiser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|