Nicholas Nethercote
977b6e29a3
Arena-allocate hir::Lifetime
.
...
This shrinks `hir::Ty` from 72 to 48 bytes.
`visit_lifetime` is added to the HIR stats collector because these types
are now stored in memory on their own, instead of being within other
types.
2022-09-08 15:07:19 +10:00
bors
567e1bbca7
Auto merge of #101432 - nnethercote:shrink-PredicateS, r=lcnr
...
Shrink `PredicateS`
r? `@ghost`
2022-09-07 13:49:58 +00:00
Vadim Petrochenkov
9136096629
rustc: Parameterize ty::Visibility
over used ID
...
It allows using `LocalDefId` instead of `DefId` when possible, and also encode cheaper `Visibility<DefIndex>` into metadata.
2022-09-07 13:35:41 +04:00
Jason Newcomb
abd3e7eabb
Allow lint passes to be bound by TyCtxt
2022-09-06 14:23:03 -04:00
Oli Scherer
9cbbd4a80e
Generalize the Assume intrinsic statement to a general Intrinsic statement
2022-09-06 14:18:32 +00:00
Oli Scherer
e1b3483ee8
Lower the assume intrinsic to a MIR statement
2022-09-06 14:18:32 +00:00
bors
ce339b219a
Auto merge of #101241 - camsteffen:refactor-binding-annotations, r=cjgillot
...
`BindingAnnotation` refactor
* `ast::BindingMode` is deleted and replaced with `hir::BindingAnnotation` (which is moved to `ast`)
* `BindingAnnotation` is changed from an enum to a tuple struct e.g. `BindingAnnotation(ByRef::No, Mutability::Mut)`
* Associated constants added for convenience `BindingAnnotation::{NONE, REF, MUT, REF_MUT}`
One goal is to make it more clear that `BindingAnnotation` merely represents syntax `ref mut` and not the actual binding mode. This was especially confusing since we had `ast::BindingMode`->`hir::BindingAnnotation`->`thir::BindingMode`.
I wish there were more symmetry between `ByRef` and `Mutability` (variant) naming (maybe `Mutable::Yes`?), and I also don't love how long the name `BindingAnnotation` is, but this seems like the best compromise. Ideas welcome.
2022-09-06 03:16:29 +00:00
bors
2ccf843471
Auto merge of #101261 - TaKO8Ki:separate-receiver-from-arguments-in-hir, r=cjgillot
...
Separate the receiver from arguments in HIR
Related to #100232
cc `@cjgillot`
2022-09-05 16:21:40 +00:00
Takayuki Maeda
8931da40e3
use propagate_through_exprs
instead of propagate_through_expr
...
fix `ExprKind` static_assert_size
fix hir-stats
2022-09-05 23:11:34 +09:00
bors
5ea99770d8
Auto merge of #101228 - nnethercote:simplify-hir-PathSegment, r=petrochenkov
...
Simplify `hir::PathSegment`
r? `@petrochenkov`
2022-09-05 13:36:54 +00:00
Takayuki Maeda
097ef517fe
refactor: remove unnecessary variables
2022-09-05 22:31:02 +09:00
Takayuki Maeda
4bcaddeeb2
separate the receiver from arguments in HIR under /clippy
2022-09-05 22:25:57 +09:00
Dylan DPC
9ae329232b
Rollup merge of #101142 - nnethercote:improve-hir-stats, r=davidtwco
...
Improve HIR stats
#100398 improve the AST stats collection done by `-Zhir-stats`. This PR does the same for HIR stats collection.
r? `@davidtwco`
2022-09-05 14:15:51 +05:30
Nicholas Nethercote
2d4349c22d
Pack Term
in the same way as GenericArg
.
...
This shrinks the `PredicateS` type, which is instanted frequently.
2022-09-05 15:08:52 +10:00
Nicholas Nethercote
25f6f18834
Make hir::PathSegment::res
non-optional.
2022-09-05 14:20:25 +10:00
Cameron Steffen
e5f30f4dfa
clippy: BindingAnnotation change
2022-09-02 13:03:11 -05:00
bors
5b784f8ed2
Auto merge of #101249 - matthiaskrgr:rollup-wahnoz8, r=matthiaskrgr
...
Rollup of 10 pull requests
Successful merges:
- #100787 (Pretty printing give proper error message without panic)
- #100838 (Suggest moving redundant generic args of an assoc fn to its trait)
- #100844 (migrate rustc_query_system to use SessionDiagnostic)
- #101140 (Update Clippy)
- #101161 (Fix uintended diagnostic caused by `drain(..)`)
- #101165 (Use more `into_iter` rather than `drain(..)`)
- #101229 (Link “? operator” to relevant chapter in The Book)
- #101230 (lint: avoid linting diag functions with diag lints)
- #101236 (Avoid needless buffer zeroing in `std::sys::windows::fs`)
- #101240 (Fix a typo on `wasm64-unknown-unknown` doc)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
2022-08-31 21:45:18 +00:00
Jason Newcomb
7bd5b012c7
Use CountIsStart
in clippy
2022-08-31 09:45:51 -04:00
Jason Newcomb
fb41bfa774
Merge commit 'f51aade56f93175dde89177a92e3669ebd8e7592' into clippyup
2022-08-31 09:24:45 -04:00
Ralf Jung
7298de2568
fix a clippy test
2022-08-31 15:24:40 +02:00
bors
7ba06ec9c5
Auto merge of #98919 - 5225225:stricter-invalid-value, r=RalfJung
...
Strengthen invalid_value lint to forbid uninit primitives, adjust docs to say that's UB
For context: https://github.com/rust-lang/rust/issues/66151#issuecomment-1174477404=
This does not make it a FCW, but it does explicitly state in the docs that uninit integers are UB.
This also doesn't affect any runtime behavior, uninit u32's will still successfully be created through mem::uninitialized.
2022-08-30 20:39:01 +00:00
5225225
98fe5f7c7d
Fix tests due to stricter invalid_value
2022-08-29 21:28:35 +01:00
Nilstrieb
ce847beb47
Revert let_chains stabilization
...
This reverts commit 326646074940222d602f3683d0559088690830f4.
This is the revert against master, the beta revert was already done in #100538 .
2022-08-29 19:34:11 +02:00
Nicholas Nethercote
3ce109e12d
Use &'hir Ty
everywhere.
...
For consistency, and because it makes HIR measurement simpler and more
accurate.
2022-08-29 06:35:14 +10:00
Nicholas Nethercote
3b80e994d5
Use &'hir Expr
everywhere.
...
For consistency, and because it makes HIR measurement simpler and more
accurate.
2022-08-29 06:35:14 +10:00
Tomasz Miąsko
e4eddc611a
Replace Body::basic_blocks()
with field access
2022-08-26 14:27:08 +02:00
Yuki Okushi
2cdc54d265
Rollup merge of #99332 - jyn514:stabilize-label-break-value, r=petrochenkov
...
Stabilize `#![feature(label_break_value)]`
See the stabilization report in https://github.com/rust-lang/rust/issues/48594#issuecomment-1186213313 .
2022-08-25 08:50:54 +09:00
Joshua Nelson
345c42a2d6
Stabilize #![feature(label_break_value)]
...
# Stabilization proposal
The feature was implemented in https://github.com/rust-lang/rust/pull/50045 by est31 and has been in nightly since 2018-05-16 (over 4 years now).
There are [no open issues][issue-label] other than the tracking issue. There is a strong consensus that `break` is the right keyword and we should not use `return`.
There have been several concerns raised about this feature on the tracking issue (other than the one about tests, which has been fixed, and an interaction with try blocks, which has been fixed).
1. nrc's original comment about cost-benefit analysis: https://github.com/rust-lang/rust/issues/48594#issuecomment-422235234
2. joshtriplett's comments about seeing use cases: https://github.com/rust-lang/rust/issues/48594#issuecomment-422281176
3. withoutboats's comments that Rust does not need more control flow constructs: https://github.com/rust-lang/rust/issues/48594#issuecomment-450050630
Many different examples of code that's simpler using this feature have been provided:
- A lexer by rpjohnst which must repeat code without label-break-value: https://github.com/rust-lang/rust/issues/48594#issuecomment-422502014
- A snippet by SergioBenitez which avoids using a new function and adding several new return points to a function: https://github.com/rust-lang/rust/issues/48594#issuecomment-427628251 . This particular case would also work if `try` blocks were stabilized (at the cost of making the code harder to optimize).
- Several examples by JohnBSmith: https://github.com/rust-lang/rust/issues/48594#issuecomment-434651395
- Several examples by Centril: https://github.com/rust-lang/rust/issues/48594#issuecomment-440154733
- An example by petrochenkov where this is used in the compiler itself to avoid duplicating error checking code: https://github.com/rust-lang/rust/issues/48594#issuecomment-443557569
- Amanieu recently provided another example related to complex conditions, where try blocks would not have helped: https://github.com/rust-lang/rust/issues/48594#issuecomment-1184213006
Additionally, petrochenkov notes that this is strictly more powerful than labelled loops due to macros which accidentally exit a loop instead of being consumed by the macro matchers: https://github.com/rust-lang/rust/issues/48594#issuecomment-450246249
nrc later resolved their concern, mostly because of the aforementioned macro problems.
joshtriplett suggested that macros could be able to generate IR directly
(https://github.com/rust-lang/rust/issues/48594#issuecomment-451685983 ) but there are no open RFCs,
and the design space seems rather speculative.
joshtriplett later resolved his concerns, due to a symmetry between this feature and existing labelled break: https://github.com/rust-lang/rust/issues/48594#issuecomment-632960804
withoutboats has regrettably left the language team.
joshtriplett later posted that the lang team would consider starting an FCP given a stabilization report: https://github.com/rust-lang/rust/issues/48594#issuecomment-1111269353
[issue-label]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+label%3AF-label_break_value+
## Report
+ Feature gate:
- d695a497bb/src/test/ui/feature-gates/feature-gate-label_break_value.rs
+ Diagnostics:
- 6b2d3d5f3c/compiler/rustc_parse/src/parser/diagnostics.rs (L2629)
- f65bf0b2bb/compiler/rustc_resolve/src/diagnostics.rs (L749)
- f65bf0b2bb/compiler/rustc_resolve/src/diagnostics.rs (L1001)
- 111df9e6ed/compiler/rustc_passes/src/loops.rs (L254)
- d695a497bb/compiler/rustc_parse/src/parser/expr.rs (L2079)
- d695a497bb/compiler/rustc_parse/src/parser/expr.rs (L1569)
+ Tests:
- https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_continue.rs
- https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_unlabeled_break.rs
- https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_illegal_uses.rs
- https://github.com/rust-lang/rust/blob/master/src/test/ui/lint/unused_labels.rs
- https://github.com/rust-lang/rust/blob/master/src/test/ui/run-pass/for-loop-while/label_break_value.rs
## Interactions with other features
Labels follow the hygiene of local variables.
label-break-value is permitted within `try` blocks:
```rust
let _: Result<(), ()> = try {
'foo: {
Err(())?;
break 'foo;
}
};
```
label-break-value is disallowed within closures, generators, and async blocks:
```rust
'a: {
|| break 'a
//~^ ERROR use of unreachable label `'a`
//~| ERROR `break` inside of a closure
}
```
label-break-value is disallowed on [_BlockExpression_]; it can only occur as a [_LoopExpression_]:
```rust
fn labeled_match() {
match false 'b: { //~ ERROR block label not supported here
_ => {}
}
}
macro_rules! m {
($b:block) => {
'lab: $b; //~ ERROR cannot use a `block` macro fragment here
unsafe $b; //~ ERROR cannot use a `block` macro fragment here
|x: u8| -> () $b; //~ ERROR cannot use a `block` macro fragment here
}
}
fn foo() {
m!({});
}
```
[_BlockExpression_]: https://doc.rust-lang.org/nightly/reference/expressions/block-expr.html
[_LoopExpression_]: https://doc.rust-lang.org/nightly/reference/expressions/loop-expr.html
2022-08-23 21:14:12 -05:00
Nicholas Nethercote
06d7119f40
Remove the symbol from ast::LitKind::Err
.
...
Because it's never used meaningfully.
2022-08-23 16:56:24 +10:00
Matthias Krüger
37eeed701a
Rollup merge of #100018 - nnethercote:clean-up-LitKind, r=petrochenkov
...
Clean up `LitKind`
r? ``@petrochenkov``
2022-08-17 12:32:49 +02:00
Nicholas Nethercote
e92183c286
Rename some things related to literals.
...
- Rename `ast::Lit::token` as `ast::Lit::token_lit`, because its type is
`token::Lit`, which is not a token. (This has been confusing me for a
long time.)
reasonable because we have an `ast::token::Lit` inside an `ast::Lit`.
- Rename `LitKind::{from,to}_lit_token` as
`LitKind::{from,to}_token_lit`, to match the above change and
`token::Lit`.
2022-08-16 13:41:34 +10:00
Nicholas Nethercote
6e5f90ae46
Shrink ast::Attribute
.
2022-08-16 11:10:13 +10:00
bors
86a0a18179
Auto merge of #96745 - ehuss:even-more-attribute-validation, r=cjgillot
...
Visit attributes in more places.
This adds 3 loosely related changes (I can split PRs if desired):
- Attribute checking on pattern struct fields.
- Attribute checking on struct expression fields.
- Lint level visiting on pattern struct fields, struct expression fields, and generic parameters.
There are still some lints which ignore lint levels in various positions. This is a consequence of how the lints themselves are implemented. For example, lint levels on associated consts don't work with `unused_braces`.
2022-08-15 05:50:54 +00:00
Mark Rousskov
1a3192a331
Adjust cfgs
2022-08-12 16:28:15 -04:00
Eric Huss
3c4aec500f
Update clippy for introduction of Node::ExprField
2022-08-11 21:56:33 -07:00
bors
9ac237dce5
Auto merge of #100419 - flip1995:clippyup, r=Manishearth
...
Update Clippy
r? `@Manishearth`
2022-08-12 00:12:51 +00:00
Matthias Krüger
4d8b6d4f24
Rollup merge of #100392 - nnethercote:simplify-visitors, r=cjgillot
...
Simplify visitors
By removing some unused arguments.
r? `@cjgillot`
2022-08-11 22:53:08 +02:00
Philipp Krones
dc29cfb8d5
Merge commit '2b2190cb5667cdd276a24ef8b9f3692209c54a89' into clippyup
2022-08-11 19:42:16 +02:00
Nicholas Nethercote
eb688958d3
Simplify rustc_ast::visit::Visitor::visit_poly_trait_ref
.
...
It is passed an argument that is never used.
2022-08-11 11:10:01 +10:00
Camille GILLOT
cf3f71d2a2
Do not consider method call receiver as an argument in AST.
2022-08-10 18:34:54 +02:00
bors
f719599c0f
Auto merge of #99743 - compiler-errors:fulfillment-context-cleanups, r=jackh726
...
Some `FulfillmentContext`-related cleanups
Use `ObligationCtxt` in some places, remove some `FulfillmentContext`s in others...
r? types
2022-08-06 06:48:15 +00:00
Michael Goulet
ccbc96508a
Add traits::fully_solve_obligation
that acts like traits::fully_normalize
...
It spawns up a trait engine, registers the single obligation, then fully
solves it
2022-08-04 13:50:56 +00:00
Fabian Wolff
f232402057
Warn about dead tuple struct fields
2022-08-03 12:17:23 +02:00
Matthias Krüger
7aaeee734f
Rollup merge of #100053 - flip1995:clippy_backport, r=xFrednet
...
move [`assertions_on_result_states`] to restriction
"Backports" the first commit of https://github.com/rust-lang/rust-clippy/pull/9273 , so that the lint doesn't go into beta as a warn-by-default lint.
The other changes in the linked PR can ride the train as usual.
r? ``@xFrednet`` (only Clippy changes, so we don't need to bother compiler people)
---
For Clippy:
changelog: none
2022-08-02 17:17:36 +02:00
Matthias Krüger
4546f5d1dc
Rollup merge of #99987 - Alexendoo:parse-format-position-span, r=fee1-dead
...
Always include a position span in `rustc_parse_format::Argument`
Moves the spans from the `Position` enum to always be included in the `Argument` struct. Doesn't make any changes to use it in rustc, but it will be useful for some upcoming Clippy lints
2022-08-02 17:17:30 +02:00
tabokie
2fcaac79bc
move [assertions_on_result_states
] to restriction
...
Signed-off-by: tabokie <xy.tao@outlook.com>
2022-08-02 10:13:51 +02:00
Camille GILLOT
119247ad32
Remove DefId from AssocItemContainer.
2022-08-01 21:38:45 +02:00
Camille GILLOT
d17a30a05d
Store associated item defaultness in impl_defaultness.
2022-08-01 21:38:16 +02:00
bors
80a56878cf
Auto merge of #99884 - nnethercote:lexer-improvements, r=matklad
...
Lexer improvements
Some cleanups and small speed improvements.
r? `@matklad`
2022-08-01 12:52:49 +00:00
Nicholas Nethercote
09f9acea0a
Shrink Token
.
...
From 72 bytes to 12 bytes (on x86-64).
There are two parts to this:
- Changing various source code offsets from 64-bit to 32-bit. This is
not a problem because the rest of rustc also uses 32-bit source code
offsets. This means `Token` is no longer `Copy` but this causes no
problems.
- Removing the `RawStrError` from `LiteralKind`. Raw string literal
invalidity is now indicated by a `None` value within
`RawStr`/`RawByteStr`, and the new `validate_raw_str` function can be
used to re-lex an invalid raw string literal to get the `RawStrError`.
There is one very small change in behaviour. Previously, if a raw string
literal matched both the `InvalidStarter` and `TooManyHashes` cases,
the latter would override the former. This has now changed, because
`raw_double_quoted_string` now uses `?` and so returns immediately upon
detecting the `InvalidStarter` case. I think this is a slight
improvement to report the earlier-detected error, and it explains the
change in the `test_too_many_hashes` test.
The commit also removes a couple of comments that refer to #77629 and
say that the size of these types don't affect performance. These
comments are wrong, though the performance effect is small.
2022-08-01 08:53:04 +10:00