Commit Graph

15106 Commits

Author SHA1 Message Date
Dylan DPC
943152008f
Rollup merge of #98882 - compiler-errors:explain-doc-comments-in-macros, r=davidtwco
explain doc comments in macros a bit

Open to suggestions on improving this... macro parsing is very foreign to me.

Should we have a structured suggestion to turn them into their regular non-doc comments?

Fixes #92846
Fixes #97850
2022-07-11 15:19:29 +05:30
Takayuki Maeda
018155c3a2 rename a method 2022-07-11 16:51:19 +09:00
Michael Goulet
913023b6b4 Use Visibility::is_accessible_from to make suggestion more specific 2022-07-11 07:06:18 +00:00
Nicholas Nethercote
10144e29af Handle tags better.
Currently, for the enums and comparison traits we always check the tag
for equality before doing anything else. This is a bit clumsy. This
commit changes things so that the tags are handled very much like a
zeroth field in the enum.

For `eq`/ne` this makes the code slightly cleaner.

For `partial_cmp` and `cmp` it's a more notable change: in the case
where the tags aren't equal, instead of having a tag equality check
followed by a tag comparison, it just does a single tag comparison.

The commit also improves how `Hash` works for enums: instead of having
duplicated code to hash the tag for every arm within the match, we do
it just once before the match.

All this required replacing the `EnumNonMatchingCollapsed` value with a
new `EnumTag` value.

For fieldless enums the new code is particularly improved. All the code
now produced is close to optimal, being very similar to what you'd write
by hand.
2022-07-11 16:58:32 +10:00
Michael Goulet
f2d8af10c2 Do not mention private Self types from other crates 2022-07-11 06:57:48 +00:00
Michael Goulet
680fef4d04 Mention similarly named associated type even if it's not clearly in supertrait 2022-07-11 06:53:11 +00:00
Michael Goulet
88f2140d87 Do not suggest same trait over again 2022-07-11 05:23:08 +00:00
Michael Goulet
0c39762dd6 Use fake substs to check for Self: Sized predicates on method receivers 2022-07-11 05:21:02 +00:00
Joshua Nelson
033a025b10 Don't rerun the build script for the compiler each time on linux
In practice, this doesn't matter very much because the script takes ~no time to run.
But this makes `CARGO_LOG=info` easier to read, and theoretically saves a few milliseconds.
2022-07-10 23:57:25 -05:00
Nicholas Nethercote
4bcbd76bc9 Move the no-variants handling code earlier in expand_enum_method_body.
To avoid computing a bunch of stuff that it doesn't need.
2022-07-11 14:09:53 +10:00
Nicholas Nethercote
f1d9e2b50c Avoid some unnecessary blocks in derive output. 2022-07-11 14:09:37 +10:00
Nicholas Nethercote
56178d4259 Rename tag-related things.
Use `tag` in names of things referring to tags, instead of the
mysterious `vi`.

Also change `arg_N` in output to `argN`, which has the same length as
`self` and so results in nicer vertical alignments.
2022-07-11 14:09:17 +10:00
Nicholas Nethercote
96f09d73cd Remove unnecessary &* sigil pairs in derived code.
By producing `&T` expressions for fields instead of `T`. This matches
what the existing comments (e.g. on `FieldInfo`) claim is happening, and
it's also what most of the trait-specific code needs.

The exception is `PartialEq`, which needs `T` expressions for lots of
special case error messaging to work. So we now convert the `&T` back to
a `T` for `PartialEq`.
2022-07-11 14:07:33 +10:00
Nicholas Nethercote
277bc9641d Remove unnecessary sigils and refs in derived code.
E.g. improving code like this:
```
match &*self {
    &Enum1::Single { x: ref __self_0 } => {
        ::core:#️⃣:Hash::hash(&*__self_0, state)
    }
}
```
to this:
```
match self {
    Enum1::Single { x: __self_0 } => {
        ::core:#️⃣:Hash::hash(&*__self_0, state)
    }
}
```
by removing the `&*`, the `&`, and the `ref`.

I suspect the current generated code predates deref-coercion.

The commit also gets rid of `use_temporaries`, instead passing around
`always_copy`, which makes things a little clearer. And it fixes up some
comments.
2022-07-11 14:04:42 +10:00
Takayuki Maeda
12d11e9a35 implement is_accessible_span 2022-07-11 11:36:15 +09:00
Michael Goulet
a1634642e0 Deny floats even when adt_const_params is enabled 2022-07-11 00:04:00 +00:00
Michael Goulet
d2e5a929b9 use subdiagnostic for message 2022-07-10 23:43:46 +00:00
Michael Goulet
2a973e2abc explain doc comments in macros a bit 2022-07-10 23:42:50 +00:00
Matthias Krüger
16d0d0b7f1
Rollup merge of #99095 - rhysd:issue-99092, r=compiler-errors
Remove duplicate notes from error on inter-crate ambiguous impl of traits

Fixes #99092
2022-07-11 00:33:49 +02:00
Matthias Krüger
2cb7d1c933
Rollup merge of #98713 - nikomatsakis:issue-98693, r=jackh726
promote placeholder bounds to 'static obligations

In NLL, when we are promoting a bound out from a closure, if we have a requirement that `T: 'a` where `'a` is in a higher universe, we were previously ignoring that, which is totally wrong. We should be promoting those constraints to `'static`, since universes are not expressible across closure boundaries.

Fixes #98693

~~(Marking as WIP because I'm still running tests, haven't add the new test, etc)~~

r? ``@jackh726``
2022-07-11 00:33:47 +02:00
Nicholas Nethercote
f314ece275 Remove mutbl argument from create_struct_patterns.
It's always `ast::Mutability::Not`.
2022-07-11 07:30:27 +10:00
Joshua Nelson
b30315d64f Fix drop-tracking ICE when a struct containing a field with a Drop impl is used across an await
Previously, drop-tracking would incorrectly assume the struct would be dropped immediately, which
was not true: when the field had a type with a manual `Drop` impl, the drop becomes observable and
has to be dropped after the await instead.

For reasons I don't understand, this also fixes another error crater popped up related to type parameters.

 #98476
2022-07-10 15:39:07 -05:00
Jack Huey
a479f23f37 Don't pass InferCtxt to WfPredicates 2022-07-10 15:52:19 -04:00
Jack Huey
2d15f1ca42 Don't try to resolve inference variables in WF computation, just register 2022-07-10 15:25:33 -04:00
Takayuki Maeda
1599c5a821 remove a string matching about methods 2022-07-11 02:19:45 +09:00
bors
c6ff90b00e Auto merge of #98785 - compiler-errors:no-check-expr-in-check-compatible, r=estebank
Do not call `check_expr` in `check_compatible`, since it has side-effects

Fixes a weird suggestion in #98784

found later:
Fixes #98894
Fixes #98897
2022-07-10 16:45:17 +00:00
bors
29554c0a12 Auto merge of #98463 - mystor:expand_expr_bool, r=eddyb
proc_macro: Fix expand_expr expansion of bool literals

Previously, the expand_expr method would expand bool literals as a
`Literal` token containing a `LitKind::Bool`, rather than as an `Ident`.
This is not a valid token, and the `LitKind::Bool` case needs to be
handled seperately.

Tests were added to more deeply compare the streams in the expand-expr
test suite to catch mistakes like this in the future.
2022-07-10 14:02:45 +00:00
Matthias Krüger
86af7135ae
Rollup merge of #99103 - TaKO8Ki:avoid-&str-to-string-conversions, r=oli-obk
Avoid some `&str` to `String` conversions

This patch removes some `&str` to `String` conversions.
2022-07-10 11:52:17 +02:00
rhysd
d5aed20f47 Remove duplicate notes from error on inter-crate ambiguous impl of traits (fix #99092) 2022-07-10 16:39:12 +09:00
bors
95e77648e4 Auto merge of #97522 - xfix:stabilize-slice-from-raw-parts, r=dtolnay
Partially stabilize const_slice_from_raw_parts

This doesn't stabilize methods working on mutable pointers.

This pull request continues from #94946.

Pinging `@rust-lang/wg-const-eval` this because I use `rustc_allow_const_fn_unstable`. I believe this is justifiable as it's already possible to use `slice::from_raw_parts` in stable by abusing `transmute`. The stable alternative to this would be to provide a stable const implementation of `std::ptr::from_raw_parts` (as it can already be implemented in stable).

```rust
use std::mem;

#[repr(C)]
struct Slice<T> {
    data: *const T,
    len: usize,
}

fn main() {
    let data: *const i32 = [1, 2, 3, 4].as_ptr();
    let len = 4;
    println!("{:?}", unsafe {
        mem::transmute::<Slice<i32>, &[i32]>(Slice { data, len })
    });
}
```

`@rustbot` modify labels: +T-libs-api
2022-07-10 06:26:03 +00:00
Konrad Borowski
0753fd117b Partially stabilize const_slice_from_raw_parts
This doesn't stabilize methods working on mutable pointers.
2022-07-09 23:20:02 +02:00
Michael Goulet
6858fbc101 Do not call check_expr in check_compatible, since it has side-effects and we've already checked all args 2022-07-09 20:50:23 +00:00
bors
6dba4ed215 Auto merge of #99056 - lcnr:higher_ranked_sub, r=oli-obk
don't use `commit_if_ok` during `higher_ranked_sub`

This snapshot doesn't really do anything useful for us, especially once we deal with placeholder outlive bounds during trait solving.

I guess that currently the idea is that `higher_ranked_sub` could cause a later `leak_check` to fail even if the combine operation isn't actually relevant. But really, using combine outside of snapshot and ignoring its result is wrong anyways, as it can constrain inference variables.

r? rust-lang/types
2022-07-09 19:57:13 +00:00
Takayuki Maeda
bda83e6543 avoid some &str to String conversions 2022-07-10 03:18:56 +09:00
bors
f893495e3d Auto merge of #98957 - RalfJung:zst-are-different, r=lcnr,oli-obk
don't allow ZST in ScalarInt

There are several indications that we should not ZST as a ScalarInt:
- We had two ways to have ZST valtrees, either an empty `Branch` or a `Leaf` with a ZST in it.
  `ValTree::zst()` used the former, but the latter could possibly arise as well.
- Likewise, the interpreter had `Immediate::Uninit` and `Immediate::Scalar(Scalar::ZST)`.
- LLVM codegen already had to special-case ZST ScalarInt.

So I propose we stop using ScalarInt to represent ZST (which are clearly not integers). Instead, we can add new ZST variants to those types that did not have other variants which could be used for this purpose.

Based on https://github.com/rust-lang/rust/pull/98831. Only the commits starting from "don't allow ZST in ScalarInt" are new.

r? `@oli-obk`
2022-07-09 17:16:00 +00:00
Ralf Jung
4e7aaf1f44 tweak names and output and bless 2022-07-09 07:43:56 -04:00
Ralf Jung
ac265cdc19 review feedback 2022-07-09 07:27:29 -04:00
Ralf Jung
052651dd13 fix cranelift and gcc backends 2022-07-09 07:27:29 -04:00
Ralf Jung
a422b42159 don't allow ZST in ScalarInt
There are several indications that we should not ZST as a ScalarInt:
- We had two ways to have ZST valtrees, either an empty `Branch` or a `Leaf` with a ZST in it.
  `ValTree::zst()` used the former, but the latter could possibly arise as well.
- Likewise, the interpreter had `Immediate::Uninit` and `Immediate::Scalar(Scalar::ZST)`.
- LLVM codegen already had to special-case ZST ScalarInt.

So instead add new ZST variants to those types that did not have other variants
which could be used for this purpose.
2022-07-09 07:27:29 -04:00
Matthias Krüger
140250c487
Rollup merge of #99050 - JakobDegen:storage-docs, r=tmiasko
Clarify MIR semantics of storage statements

Seems worthwhile to start closing out some of the less controversial open questions about MIR semantics. Hopefully this is fairly non-controversial - it's what we implement already, and I see no reason to do anything more restrictive. cc ``@tmiasko`` who commented on this when it was discussed in the original PR that added these docs.
2022-07-09 12:52:51 +02:00
Matthias Krüger
416dc43124
Rollup merge of #99022 - pierwill:always-storage-live-locals, r=pierwill
MIR dataflow: Rename function to `always_storage_live_locals`

Related to #99021.

r?  ```@JakobDegen``` (as discussed on Zulip)
2022-07-09 12:52:50 +02:00
bors
c4693bc946 Auto merge of #99078 - Dylan-DPC:rollup-gnw6cli, r=Dylan-DPC
Rollup of 7 pull requests

Successful merges:

 - #98350 (Implement support for DWARF version 5.)
 - #98915 (Clarify deriving code)
 - #98980 (fix ICE in ConstProp)
 - #99008 (Adding suggestion for E0530)
 - #99043 (Collapse some weirdly-wrapping derives)
 - #99048 (Remove a string comparison about types)
 - #99070 (Update integer_atomics tracking issue)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-09 07:15:34 +00:00
Dylan DPC
3c35da224b
Rollup merge of #99070 - tamird:update-tracking-issue, r=RalfJung
Update integer_atomics tracking issue

Updates #32976.
Updates #99069.

r? ``@RalfJung``
2022-07-09 11:28:09 +05:30
Dylan DPC
80a74bf580
Rollup merge of #99048 - TaKO8Ki:remove-type-string-comparison, r=compiler-errors
Remove a string comparison about types
2022-07-09 11:28:08 +05:30
Dylan DPC
6497130baa
Rollup merge of #99043 - compiler-errors:derive-nit, r=cjgillot
Collapse some weirdly-wrapping derives

self-explanatory
2022-07-09 11:28:07 +05:30
Dylan DPC
d75a5723db
Rollup merge of #99008 - obeis:issue-98974, r=compiler-errors
Adding suggestion for E0530

Closes #98974
2022-07-09 11:28:06 +05:30
Dylan DPC
a6c6166d7b
Rollup merge of #98980 - RalfJung:const-prop-ice, r=oli-obk
fix ICE in ConstProp

Fixes https://github.com/rust-lang/rust/issues/96169
2022-07-09 11:28:05 +05:30
Dylan DPC
5e6812b597
Rollup merge of #98915 - nnethercote:clarify-deriving-code, r=Mark-Simulacrum
Clarify deriving code

A number of clarifications to the deriving code.

r? ``@Mark-Simulacrum``
2022-07-09 11:28:04 +05:30
Dylan DPC
fd4f11dd76
Rollup merge of #98350 - pcwalton:dwarf5, r=michaelwoerister
Implement support for DWARF version 5.

DWARF version 5 brings a number of improvements over version 4. Quoting from
the announcement [1]:

> Version 5 incorporates improvements in many areas: better data compression,
> separation of debugging data from executable files, improved description of
> macros and source files, faster searching for symbols, improved debugging
> optimized code, as well as numerous improvements in functionality and
> performance.

On platforms where DWARF version 5 is supported (Linux, primarily), this commit
adds support for it behind a new `-Z dwarf-version=5` flag.

[1]: https://dwarfstd.org/Public_Review.php

r? ``@michaelwoerister``
2022-07-09 11:28:03 +05:30
bors
86b8dd5389 Auto merge of #99028 - tmiasko:inline, r=estebank
Miscellaneous inlining improvements

Add `#[inline]` to a few trivial non-generic methods from a perf report
that otherwise wouldn't be candidates for inlining.
2022-07-09 04:34:51 +00:00
bors
db78ab70a8 Auto merge of #98961 - zeevm:issue-98958-fix, r=oli-obk
Only enable ConstProp on opt level >= 1

r? `@JakobDegen`
2022-07-09 02:04:17 +00:00
Daniel Xu
34e9e6dff1 Fix duplicated type annotation suggestion
Before, there was more or less duplicated suggestions to add type hints.
Fix by clearing more generic suggestions when a more specific suggestion
is possible.

This fixes #93506 .
2022-07-08 21:03:03 -05:00
Nicholas Nethercote
0578697a63 Minor updates based on review comments. 2022-07-09 10:04:09 +10:00
Jakob Degen
4939f6c64b Clarify MIR semantics of storage statements 2022-07-08 16:58:24 -07:00
bors
47575bb066 Auto merge of #98816 - estebank:implicit-sized, r=oli-obk
Track implicit `Sized` obligations in type params

When we evaluate `ty::GenericPredicates` we introduce the implicit
`Sized` predicate of type params, but we do so with only the `Predicate`
its `Span` as context, we don't have an `Obligation` or
`ObligationCauseCode` we could influence. To try and carry this
information through, we add a new field to `ty::GenericPredicates` that
tracks both which predicates come from a type param and whether that
param has any bounds already (to use in suggestions).

We also suggest adding a `?Sized` bound if appropriate on E0599.

Address part of #98539.
2022-07-08 23:17:34 +00:00
Nicholas Nethercote
16a286b003 Simplify cs_fold.
`cs_fold` has four distinct cases, covered by three different function
arguments:

- first field
- combine current field with previous results
- no fields
- non-matching enum variants

This commit clarifies things by replacing the three function arguments
with one that takes a new `CsFold` type with four slightly different)
cases

- single field
- combine result for current field with results for previous fields
- no fields
- non-matching enum variants

This makes the code shorter and clearer.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
559398fa78 Fix some inconsistencies.
This makes `cs_cmp`, `cs_partial_cmp`, and `cs_op` (for `PartialEq`)
more similar. It also fixes some out of date comments.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
65d0bfbca5 Cut down large comment about zero-variant enums.
When deriving functions for zero-variant enums, we just generated a
function body that calls `std::instrincs::unreachable`. There is a large
comment with some not-very-useful historical discussion about
alternatives, including some discussion of feature-gating zero-variant
enums, which is clearly irrelevant today.

This commit cuts the comment down greatly.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
7f1dfcab67 Avoid transposes in deriving code.
The deriving code has some complex parts involving iterations over
selflike args and also fields within structs and enum variants.

The return types for a few functions demonstrate this:

- `TraitDef::create_{struct_pattern,enum_variant_pattern}` returns a
  `(P<ast::Pat>, Vec<(Span, Option<Ident>, P<Expr>)>)`
- `TraitDef::create_struct_field_accesses` returns a `Vec<(Span,
  Option<Ident>, P<Expr>)>`.

This results in per-field data stored within per-selflike-arg data, with
lots of repetition within the per-field data elements. This then has to
be "transposed" in two places (`expand_struct_method_body` and
`expand_enum_method_body`) into per-self-like-arg data stored within
per-field data. It's all quite clumsy and confusing.

This commit rearranges things greatly. Data is obtained in the needed
form up-front, avoiding the need for transposition. Also, various
functions are split, removed, and added, to make things clearer and
avoid tuple return values.

The diff is hard to read, which reflects the messiness of the original
code -- there wasn't an easy way to break these changes into small
pieces. (Sorry!) It's a net reduction of 35 lines and a readability
improvement. The generated code is unchanged.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
27571da5fa Remove FieldInfo::attrs.
It's unused. This also removes the need for the lifetime on `FieldInfo`,
which is nice.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
d3057b5ca7 Rename FieldInfo fields.
Use `self_exprs` and `other_selflike_exprs` in a manner similar to the
previous commit.
2022-07-09 09:02:50 +10:00
Nicholas Nethercote
32c9ffb9cc Clarify args terminology.
The deriving code has inconsistent terminology to describe args.

In some places it distinguishes between:
- the `&self` arg (if present), versus
- all other args.

In other places it distinguishes between:
- the `&self` arg (if present) and any other arguments with the same
  type (in practice there is at most one, e.g. in `PartialEq::eq`),
  versus
- all other args.

The terms "self_args" and "nonself_args" are sometimes used for the
former distinction, and sometimes for the latter. "args" is also
sometimes used for "all other args".

This commit makes the code consistently uses "self_args"/"nonself_args"
for the former and "selflike_args"/"nonselflike_args" for the latter.
This change makes the code easier to read.

The commit also adds a panic on an impossible path (the `Self_` case) in
`extract_arg_details`.
2022-07-09 09:02:49 +10:00
Tamir Duberstein
a491d4582d
Update integer_atomics tracking issue
Updates #32976.
Updates #99069.
2022-07-08 17:52:04 -04:00
Jane Losare-Lusby
e4e6b1ebc6 fixes post rebase 2022-07-08 21:18:16 +00:00
Jane Lusby
b55453dbad add opt in attribute for stable-in-unstable items 2022-07-08 21:18:15 +00:00
Jane Lusby
a13f30036a clarify comment 2022-07-08 21:18:15 +00:00
Jane Lusby
67fe8423a3 update comment 2022-07-08 21:18:15 +00:00
Jane Lusby
e7fe5456c5 Support unstable moves via stable in unstable items 2022-07-08 21:18:13 +00:00
Patrick Walton
1e0ad0c1d4 Implement support for DWARF version 5.
DWARF version 5 brings a number of improvements over version 4. Quoting from
the announcement [1]:

> Version 5 incorporates improvements in many areas: better data compression,
> separation of debugging data from executable files, improved description of
> macros and source files, faster searching for symbols, improved debugging
> optimized code, as well as numerous improvements in functionality and
> performance.

On platforms where DWARF version 5 is supported (Linux, primarily), this commit
adds support for it behind a new `-Z dwarf-version=5` flag.

[1]: https://dwarfstd.org/Public_Review.php
2022-07-08 11:31:08 -07:00
bors
052495d001 Auto merge of #98614 - oli-obk:take_unsound_opaque_types, r=wesleywiser
don't succeed `evaluate_obligation` query if new opaque types were registered

fixes #98608
fixes #98604

The root cause of all this is that in type flag computation we entirely ignore nongeneric things like struct fields and the signature of function items. So if a flag had to be set for a struct if it is set for a field, that will only happen if the field is generic, as only the generic parameters are checked.

I now believe we cannot use type flags to handle opaque types. They seem like the wrong tool for this.

Instead, this PR replaces the previous logic by adding a new variant of `EvaluatedToOk`: `EvaluatedToOkModuloOpaqueTypes`, which says that there were some opaque types that got hidden types bound, but that binding may not have been legal (because we don't know if the opaque type was in its defining scope or not).
2022-07-08 17:55:26 +00:00
bors
45263fc66d Auto merge of #99054 - Dylan-DPC:rollup-0zuhhds, r=Dylan-DPC
Rollup of 4 pull requests

Successful merges:

 - #98533 (Add a `-Zdump-drop-tracking-cfg` debugging flag)
 - #98654 (An optimization for `pest-2.1.3`)
 - #98657 (Migrate some diagnostics from `rustc_const_eval` to `SessionDiagnostic`)
 - #98794 (Highlight conflicting param-env candidates)

Failed merges:

 - #98957 ( don't allow ZST in ScalarInt )

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-08 15:24:57 +00:00
Takayuki Maeda
01893d880f remove a string comparison about types 2022-07-09 00:07:52 +09:00
Oli Scherer
69b1b3c011 Create a custom layout path for UnsafeCell instead of piggy backing on the layout_scalar_valid_range logic 2022-07-08 14:48:38 +00:00
lcnr
aea2d7e20a don't use commit_if_ok during higher_ranked_sub 2022-07-08 16:33:59 +02:00
Oli Scherer
d6b93eb793 Only register hidden types for opaque types from the current crate, nothing else would work anyway. 2022-07-08 13:59:44 +00:00
Dylan DPC
54dde8678b
Rollup merge of #98794 - compiler-errors:conflicting-param-env, r=michaelwoerister
Highlight conflicting param-env candidates

This could probably be further improved by noting _why_ equivalent param-env candidates (modulo regions) leads to ambiguity.

Fixes #98786
2022-07-08 18:25:51 +05:30
Dylan DPC
dbae8309a0
Rollup merge of #98657 - compiler-errors:rustc-const-eval-session-diagnostic-1, r=davidtwco
Migrate some diagnostics from `rustc_const_eval` to `SessionDiagnostic`

I'm still trying to get the hang of this, so it doesn't migrate _all_ of `rustc_const_eval`. Working on that later.

r? `@davidtwco`
2022-07-08 18:25:50 +05:30
Dylan DPC
fe87923b54
Rollup merge of #98654 - nnethercote:pest-2.1.3-opt, r=pnkfelix
An optimization for `pest-2.1.3`

An easy win I found while looking at a profile of `pest-2.1.3`. It's also a small code cleanup.

r? `@pnkfelix`
2022-07-08 18:25:49 +05:30
Dylan DPC
1ce8de3087
Rollup merge of #98533 - jyn514:drop-tracking-debugging, r=eholk
Add a `-Zdump-drop-tracking-cfg` debugging flag

This is useful for debugging drop-tracking; previously, you had to recompile
rustc from source and manually add a call to `write_graph_to_file`. This
makes the option more discoverable and configurable at runtime.

I also took the liberty of making the labels for the CFG nodes much easier to read:
previously, they looked like `id(2), local_id: 48`, now they look like
```
expr from_config (hir_id=HirId { owner: DefId(0:10 ~ default_struct_update[79f9]::foo), local_id: 2})
```

r? ``@eholk``
2022-07-08 18:25:48 +05:30
bors
fbdb07f4e7 Auto merge of #98758 - nnethercote:more-derive-output-improvements, r=Mark-Simulacrum
More derive output improvements

This PR includes:
- Some test improvements.
- Some cosmetic changes to derive output that make the code look more like what a human would write.
- Some more fundamental improvements to `cmp` and `partial_cmp` generation.

r? `@Mark-Simulacrum`
2022-07-08 12:44:14 +00:00
Obei Sideg
1b32eb34b3 Update ui test for the new E0530 suggestion 2022-07-08 14:54:11 +03:00
Ralf Jung
cf9186ec69 interpret: only to track_caller in debug builds due to perf 2022-07-08 07:33:19 -04:00
Obei Sideg
c2436d54d0 Check if E0530 is rustc_resolve::late::PatternSource::Match to emit suggestion 2022-07-08 14:06:50 +03:00
Caio
1c3bab2fc9 Fix last let_chains blocker 2022-07-08 07:25:50 -03:00
Obei Sideg
ea46e7a47e Check if E0530 is tuple variant or tuple struct to emit suggestion 2022-07-08 13:20:05 +03:00
bors
1dcff2d507 Auto merge of #98638 - bjorn3:less_string_interning, r=tmiasko
Use less string interning

This removes string interning in a couple of places where doing so won't result in perf improvements. I also switched one place to use pre-interned symbols.
2022-07-08 10:03:27 +00:00
Matthias Krüger
e58c2d4f52
Rollup merge of #99019 - pierwill:doc-mir-statement, r=cjgillot
Add doc comments in `rustc_middle::mir`
2022-07-08 08:00:40 +02:00
Matthias Krüger
5dcd28cd19
Rollup merge of #98795 - jackh726:lexical_region_resolve_cleanup, r=compiler-errors
A few cleanups

Each commit is (mostly) self-explanatory. These changes have come as I try to remove `ReEmpty` (#98559).
2022-07-08 08:00:38 +02:00
Matthias Krüger
b36e58a458
Rollup merge of #95635 - davidtwco:terminal-width-stabilization, r=oli-obk
sess: stabilize `--terminal-width` as `--diagnostic-width`

Formerly `-Zterminal-width`, `--terminal-width` allows the user or build
tool to inform rustc of the width of the terminal so that diagnostics
can be truncated.

Pending agreement to stabilize, see tracking issue at #84673.

r? ```@oli-obk```
2022-07-08 08:00:36 +02:00
Michael Goulet
69ac8a68af Collapse some weirdly-wrapping derives 2022-07-08 04:36:30 +00:00
Michael Goulet
08135254dc Highlight conflicting param-env candidates 2022-07-08 03:51:08 +00:00
Michael Goulet
2058333780 simplify plurals in fluent messages using hir::ConstContext 2022-07-08 03:48:10 +00:00
Michael Goulet
f97f2a47ff Migrate MutDeref, TransientMutBorrow diagnostics 2022-07-08 03:48:10 +00:00
Michael Goulet
584e5d4c4f Migrate PanicNonStr, RawPtrComparison, RawPtrToInt diagnostics 2022-07-08 03:47:59 +00:00
Michael Goulet
c48f482813 Migrate StaticAccess diagnostic 2022-07-08 03:47:46 +00:00
Michael Goulet
ff9fd36aa4 Implement IntoDiagnosticArg for hir::ConstContext 2022-07-08 03:47:31 +00:00
Michael Goulet
1c4afbd1de Migrate NonConstOp diagnostic 2022-07-08 03:47:28 +00:00
Michael Goulet
934079fd9e Migrate unstable-in-stable diagnostic 2022-07-08 03:39:08 +00:00
Michael Goulet
34d6f08f4d Use dashes instead of underscores in fluent names 2022-07-08 03:37:36 +00:00
bors
eba361ae36 Auto merge of #98482 - cjgillot:short-struct-span-closure, r=estebank
Shorten def_span of closures to just their header

Continuation of https://github.com/rust-lang/rust/pull/93967.
2022-07-08 03:05:15 +00:00
Jack Huey
ad9e1e377f Use map_bound 2022-07-07 22:14:01 -04:00
Jack Huey
9935796645 Add bound_const_param_default 2022-07-07 22:14:01 -04:00
Jack Huey
f16584357d Move EarlyBinder calls in rustc_typeck::outlives a bit further up 2022-07-07 22:09:16 -04:00
Jack Huey
31e1a777e7 Move code from rustc_trait_selection/opaque_types to better places 2022-07-07 21:45:40 -04:00
Jack Huey
2471431017 Move is_free and is_free_or_static to Region, change resolve_var to resolve_region, and remove RootEmptyRegion 2022-07-07 20:48:51 -04:00
bors
9b21131278 Auto merge of #98360 - estebank:uninit-binding, r=oli-obk
On partial uninit error point at where we need init

When a binding is declared without a value, borrowck verifies that all
codepaths have *one* assignment to them to initialize them fully. If
there are any cases where a condition can be met that leaves the binding
uninitialized or we attempt to initialize a field of an uninitialized
binding, we emit E0381.

We now look at all the statements that initialize the binding, and use
them to explore branching code paths that *don't* and point at them. If
we find *no* potential places where an assignment to the binding might
be missing, we display the spans of all the existing initializers to
provide some context.

Fix https://github.com/rust-lang/rust/issues/97956.
2022-07-07 23:36:21 +00:00
Michael Howell
6713dde898 diagnostics: suggest naming a field after failing to parse 2022-07-07 15:20:08 -07:00
Michael Howell
d496a4f8bb diagnostics: mention the : token when struct fields fail to parse 2022-07-07 14:59:54 -07:00
bors
1517f5de01 Auto merge of #99024 - matthiaskrgr:rollup-8ygpcpg, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #97917 (Implement ExitCodeExt for Windows)
 - #98844 (Reword comments and rename HIR visiting methods.)
 - #98979 (interpret: use AllocRange in UninitByteAccess)
 - #98986 (Fix missing word in comment)
 - #98994 (replace process exit with more detailed exit in src/bootstrap/*.rs)
 - #98995 (Add a test for #80471)
 - #99002 (suggest adding a derive for #[default] applied to variants)
 - #99004 (Add a test for #70408)
 - #99017 (Replace boolean argument for print_where_clause with an enum to make code more clear)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-07 20:55:34 +00:00
Tomasz Miąsko
87374de3ad Miscellaneous inlining improvements
Add `#[inline]` to a few trivial non-generic methods from a perf report
that otherwise wouldn't be candidates for inlining.
2022-07-07 22:20:08 +02:00
Esteban Küber
d09851cfba Wording tweak 2022-07-07 12:25:56 -07:00
Esteban Küber
5f91614d12 Fix label on uninit binding field assignment 2022-07-07 12:25:56 -07:00
Esteban Küber
a86fa4fa38 Avoid misleading message/label in match-cfg-fake-edges.rs test 2022-07-07 12:25:56 -07:00
Esteban Küber
95923d1676 Review comments: wording 2022-07-07 12:25:56 -07:00
Esteban Küber
9cb1874cd6 Tweak wording and spans 2022-07-07 12:25:56 -07:00
Esteban Küber
29e2aa12ff On partial uninit error point at where we need init
When a binding is declared without a value, borrowck verifies that all
codepaths have *one* assignment to them to initialize them fully. If
there are any cases where a condition can be met that leaves the binding
uninitialized or we attempt to initialize a field of an unitialized
binding, we emit E0381.

We now look at all the statements that initialize the binding, and use
them to explore branching code paths that *don't* and point at them. If
we find *no* potential places where an assignment to the binding might
be missing, we display the spans of all the existing initializers to
provide some context.
2022-07-07 12:25:55 -07:00
Esteban Küber
385c79379c Track WellFormed obligations with an appropriate cause, instead of MiscObligation 2022-07-07 12:15:18 -07:00
Esteban Küber
af10a456c1 Track implicit Sized obligations in type params
Suggest adding a `?Sized` bound if appropriate on E0599 by inspecting
the HIR Generics. (Fix #98539)
2022-07-07 12:15:12 -07:00
pierwill
8a1c1ec8b2 MIR dataflow: Rename function to always_storage_live_locals
Related to #99021.
2022-07-07 13:49:40 -05:00
Matthias Krüger
7fed4fffb6
Rollup merge of #99002 - fee1-dead-contrib:sugg_derive, r=michaelwoerister
suggest adding a derive for #[default] applied to variants

cc ``@TaKO8Ki`` as followup to #98873.
2022-07-07 20:33:30 +02:00
Matthias Krüger
b4f8537a56
Rollup merge of #98986 - pierwill:patch-5, r=oli-obk
Fix missing word in comment
2022-07-07 20:33:27 +02:00
Matthias Krüger
90641470be
Rollup merge of #98979 - RalfJung:more-alloc-range, r=oli-obk
interpret: use AllocRange in UninitByteAccess

also use nice new format string syntax in `interpret/error.rs`, and use the `#` flag to add `0x` prefixes where applicable.

r? ``@oli-obk``
2022-07-07 20:33:26 +02:00
Matthias Krüger
8cc6bb3d5d
Rollup merge of #98844 - cjgillot:deep-visit, r=jyn514
Reword comments and rename HIR visiting methods.

Sparked by this discussion in [zulip](https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/Confused.20by.20comment.20on.20.60deep_visit_item_likes_in_module.60)

r? ``@jyn514`` ``@camsteffen``
2022-07-07 20:33:24 +02:00
bors
0f573a0c54 Auto merge of #95573 - cjgillot:lower-query, r=michaelwoerister
Make lowering a query

Split from https://github.com/rust-lang/rust/pull/88186.

This PR refactors the relationship between lowering and the resolver outputs in order to make lowering itself a query.
In a first part, lowering is changed to avoid modifying resolver outputs, by maintaining its own data structures for creating new `NodeId`s and so.

Then, the `TyCtxt` is modified to allow creating new `LocalDefId`s from inside it. This is done by:
- enclosing `Definitions` in a lock, so as to allow modification;
- creating a query `register_def` whose purpose is to declare a `LocalDefId` to the query system.

See `TyCtxt::create_def` and `TyCtxt::iter_local_def_id` for more detailed explanations of the design.
2022-07-07 18:14:44 +00:00
Obei Sideg
51504dbf01 Adding suggestion for E0530 2022-07-07 21:00:01 +03:00
pierwill
933a994111 Add doc comments in rustc_middle::mir 2022-07-07 12:41:30 -05:00
Ralf Jung
1e0f3cb566 make a name less ambiguous 2022-07-07 12:01:36 -04:00
bors
3e51277fe6 Auto merge of #99014 - Dylan-DPC:rollup-n84y0jk, r=Dylan-DPC
Rollup of 8 pull requests

Successful merges:

 - #96856 (Fix ProjectionElem validation)
 - #97711 (Improve soundness of rustc_arena)
 - #98507 (Finishing touches for `#[expect]` (RFC 2383))
 - #98692 (rustdoc: Cleanup more FIXMEs)
 - #98901 (incr: cache dwarf objects in work products)
 - #98930 (Make MIR basic blocks field public)
 - #98973 (Remove (unused) inherent impl anchors)
 - #98981 ( Edit `rustc_mir_dataflow::framework` documentation )

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-07 15:08:27 +00:00
Camille GILLOT
111df9e6ed Reword comments and rename HIR visiting methods. 2022-07-07 16:01:43 +02:00
Dylan DPC
6910d84bc4
Rollup merge of #98981 - pierwill:pierwill/dataflow-docs-edits, r=Dylan-DPC
Edit `rustc_mir_dataflow::framework` documentation

Some edits for clarity and consistency.
2022-07-07 18:06:55 +05:30
Dylan DPC
71b3fbdb47
Rollup merge of #98930 - tmiasko:pub-basic-blocks, r=oli-obk
Make MIR basic blocks field public

This makes it possible to mutably borrow different fields of the MIR
body without resorting to methods like `basic_blocks_local_decls_mut_and_var_debug_info`.

To preserve validity of control flow graph caches in the presence of
modifications, a new struct `BasicBlocks` wraps together basic blocks
and control flow graph caches.

The `BasicBlocks` dereferences to `IndexVec<BasicBlock, BasicBlockData>`.
On the other hand a mutable access requires explicit `as_mut()` call.
2022-07-07 18:06:53 +05:30
Dylan DPC
ade6d2cf6b
Rollup merge of #98901 - davidtwco:split-dwarf-incr-workproduct, r=michaelwoerister
incr: cache dwarf objects in work products

Cache DWARF objects alongside object files in work products when those exist so that DWARF object files are available for thorin in packed mode in incremental scenarios.

r? `@michaelwoerister`
2022-07-07 18:06:52 +05:30
Dylan DPC
c815fef795
Rollup merge of #98507 - xFrednet:rfc-2383-manual-expectation-magic, r=wesleywiser
Finishing touches for `#[expect]` (RFC 2383)

This PR adds documentation and some functionality to rustc's lint passes, to manually fulfill expectations. This is needed for some lints in Clippy. Hopefully, it should be one of the last things before we can move forward with stabilizing this feature.

As part of this PR, I've also updated `clippy::duplicate_mod` to showcase how this new functionality can be used and to ensure that it works correctly.

---

changelog: [`duplicate_mod`]: Fixed lint attribute interaction

r? `@wesleywiser`

cc: https://github.com/rust-lang/rust/issues/97660, https://github.com/rust-lang/rust/issues/85549

And I guess that's it. Here have a magical unicorn 🦄
2022-07-07 18:06:50 +05:30
Dylan DPC
d63c713947
Rollup merge of #97711 - Nilstrieb:rustc-arena-ub, r=wesleywiser
Improve soundness of rustc_arena

Make it runnable in miri by changing the loop iteration count for some tests in miri. Also fix a stacked borrows issue with box.
2022-07-07 18:06:49 +05:30
Dylan DPC
f6bbe280bf
Rollup merge of #96856 - DrMeepster:fix_projection_validation, r=Icnr
Fix ProjectionElem validation

`TypeChecker::visit_projection_elem` was not actually being called.
2022-07-07 18:06:48 +05:30
bors
20dd693013 Auto merge of #98675 - eddyb:cg-array-literal, r=nikic
rustc_codegen_ssa: use `project_index`, not `project_field`, for array literals.

See https://github.com/rust-lang/rust/pull/98615#issuecomment-1170082774 for some context.

In short, we were using `project_field` even for array `mir::Rvalue::Aggregate`s, which results in benchmarks like `deep-vector.rs` (and presumably also some real-world usecases?) being impacted by how we handle non-array aggregate fields.

(This is a separate PR so that we can measure the perf effects in isolation)

r? `@nikic`
2022-07-07 12:23:26 +00:00
Oli Scherer
8d9f609d0d Comment update 2022-07-07 11:19:57 +00:00
Oli Scherer
2a899dc1cf UnsafeCell now has no niches, ever. 2022-07-07 10:46:22 +00:00
Oli Scherer
0b863e0024 not knowing about opaque types is worse than not knowing about regions, make sure we don't accidentally mark something as ok-modulo-regions if there are opaque types involved 2022-07-07 08:10:50 +00:00
bors
c461f7a16e Auto merge of #98841 - Kobzol:hir-validator-bitset, r=cjgillot
Use a bitset instead of a hash map in HIR ID validator

The hashset insertion was slightly hot in incr patched runs, but it seems unnecessary to use a hashset here, as it just checks that a dense set of N integers was seen.

I'm not sure if it's possible to know the amount of items beforehand to preallocate the bitset? I suppose not.
2022-07-07 07:38:08 +00:00
Camille GILLOT
5edc55f99f Fix borrowck closure span. 2022-07-07 09:27:44 +02:00
Camille GILLOT
8cc87250ef Shorten span for closures. 2022-07-07 09:27:42 +02:00
Tomasz Miąsko
17adfeb2b4 Move dominators from Body to BasicBlocks 2022-07-07 08:11:49 +02:00
Tomasz Miąsko
dfa6a7cbde Move switch_sources from Body to BasicBlocks 2022-07-07 08:11:49 +02:00
Tomasz Miąsko
39d9c1cb1f Move predecessors from Body to BasicBlocks 2022-07-07 08:11:49 +02:00
Tomasz Miąsko
2446b17745 Move is_cfg_cyclic from Body to BasicBlocks 2022-07-07 08:11:49 +02:00
Tomasz Miąsko
c9dd1d9983 Make MIR basic blocks field public
This makes it possible to mutably borrow different fields of the MIR
body without resorting to methods like `basic_blocks_local_decls_mut_and_var_debug_info`.

To preserve validity of control flow graph caches in the presence of
modifications, a new struct `BasicBlocks` wraps together basic blocks
and control flow graph caches.

The `BasicBlocks` dereferences to `IndexVec<BasicBlock, BasicBlockData>`.
On the other hand a mutable access requires explicit `as_mut()` call.
2022-07-07 08:11:49 +02:00
Jubilee Young
530b5da49b Also stop emitting BTI prologues for naked functions
Same idea but for AArch64.
2022-07-06 22:44:58 -07:00
Jubilee Young
92174f988b Stop emitting CET prologues for naked functions
We can apply nocf_check as a hack for now.
2022-07-06 22:44:54 -07:00
Deadbeef
2f0ccdfbba suggest adding a derive for #[default] applied to variants 2022-07-07 04:57:01 +00:00
bors
e78e747f53 Auto merge of #98827 - aDotInTheVoid:suggest-extern-block, r=nagisa
Suggest using block for `extern "abi" fn` with no body

`@rustbot` modify labels: +A-diagnostics
2022-07-07 04:18:47 +00:00
bors
fac8fa5672 Auto merge of #98487 - cjgillot:variance-nohir, r=wesleywiser
Do not fetch HIR to compute variances.

Everything can be done using higher-level queries.  This simplifies the code, and should allow better incremental caching.
2022-07-07 01:17:36 +00:00
Miguel Guarniz
01a957e92a record LocalDefId of closure
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
2022-07-06 19:17:29 -04:00
Miguel Guarniz
b53dd71faa gather body owners
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
2022-07-06 19:17:16 -04:00
bors
8824d13161 Auto merge of #98831 - RalfJung:no-more-unsized-locals, r=oli-obk
interpret: remove support for unsized_locals

I added support for unsized_locals in https://github.com/rust-lang/rust/pull/59780 but the current implementation is a crude hack and IMO definitely not the right way to have unsized locals in MIR. It also [causes problems](https://rust-lang.zulipchat.com/#narrow/stream/146212-t-compiler.2Fconst-eval/topic/Missing.20Layout.20Check.20in.20.60interpret.2Foperand.2Ers.60.3F). and what codegen does is unsound and has been for years since clearly nobody cares (so I hope nobody actually relies on that implementation and I'll be happy if Miri ensures they do not). I think if we want to have unsized locals in Miri/MIR we should add them properly, either by having a `StorageLive` that takes metadata or by having an `alloca` that returns a pointer (making the ptr indirection explicit) or something like that.

So, this PR removes the `LocalValue::Unallocated` hack. It adds `Immediate::Uninit`, for several reasons:
- This lets us still do fairly little work in `push_stack_frame`, in particular we do not actually have to create any allocations.
- If/when I remove `ScalarMaybeUninit`, we will need something like this to have an "optimized" representation of uninitialized locals. Without this we'd have to put uninitialized integers into the heap!
- const-prop needs some way to indicate "I don't know the value of this local'; it used to use `LocalValue::Unallocated` for that, now it can use `Immediate::Uninit`.

There is still a fundamental difference between `LocalValue::Unallocated` and `Immediate::Uninit`: the latter is considered a regular local that you can read from and write to, it just has a more optimized representation when compared with an actual `Allocation` that is fully uninit. In contrast, `LocalValue::Unallocated`  had this really odd behavior where you would write to it but not read from it. (This is in fact what caused the problems mentioned above.)

While at it I also did two drive-by cleanups/improvements:
- In `pop_stack_frame`, do the return value copying and local deallocation while the frame is still on the stack. This leads to better error locations being reported. The old errors were [sometimes rather confusing](https://rust-lang.zulipchat.com/#narrow/stream/269128-miri/topic/Cron.20Job.20Failure.202022-06-24/near/287445522).
- Deduplicate `copy_op` and `copy_op_transmute`.

r? `@oli-obk`
2022-07-06 22:50:29 +00:00
Camille GILLOT
32a30cad03 Use DefIdTree instead of re-implementing it. 2022-07-06 23:30:00 +02:00
Camille GILLOT
2c3b4ff995 Remove dead code. 2022-07-06 23:26:54 +02:00
Camille GILLOT
e475a69fa8 Reword create_def comment. 2022-07-06 23:23:52 +02:00
Camille GILLOT
e912c8dfe0 Use a dedicated DepKind for the forever-red node. 2022-07-06 23:20:12 +02:00
Camille GILLOT
c168fba268 Comment untracked_crate. 2022-07-06 23:17:07 +02:00
Camille GILLOT
8fc3deb1b4 Remove sess field from LoweringContext. 2022-07-06 23:15:57 +02:00
Camille GILLOT
74be945820 Expand comment in with_hir_id_owner. 2022-07-06 23:15:11 +02:00
Camille GILLOT
15530a1c84 Create a forever red node and use it to force side effects. 2022-07-06 23:11:44 +02:00
Camille GILLOT
682f57656e Do not create a new NodeId when not used. 2022-07-06 23:10:36 +02:00
Camille GILLOT
fb060fb774 Remove useless branch. 2022-07-06 23:09:29 +02:00
Camille GILLOT
250c71b85d Make AST lowering a query. 2022-07-06 23:04:55 +02:00
Camille GILLOT
43bb31b954 Allow to create definitions inside the query system. 2022-07-06 22:50:55 +02:00
bors
7665c35430 Auto merge of #98987 - GuillaumeGomez:rollup-bcy32bp, r=GuillaumeGomez
Rollup of 7 pull requests

Successful merges:

 - #96935 (Allow arithmetic and certain bitwise ops on AtomicPtr)
 - #98519 (Replace some `guess_head_span` with `def_span`)
 - #98911 (rustdoc: filter '_ lifetimes from ty::Generics)
 - #98939 (rustdoc: Add more semantic information to impl IDs)
 - #98971 (Fix typo in file descriptor docs)
 - #98983 (docs: Add overview of `rustc_middle::mir::TerminatorKind`)
 - #98984 (Remove erroneous doc comment)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-06 20:09:41 +00:00
xFrednet
c8b4873cf9
Add function to manually fulfill lint expectations (RFC 2383) 2022-07-06 22:01:39 +02:00
xFrednet
6c6388cd6c
Document, that some lint have to be expected on the crate level (RFC 2383)
Examples: NON_ASCII_IDENTS, UNCOMMON_CODEPOINTS, CONFUSABLE_IDENTS, MIXED_SCRIPT_CONFUSABLES
2022-07-06 22:01:39 +02:00
Guillaume Gomez
4b88cba353
Rollup merge of #98984 - pierwill:patch-4, r=RalfJung
Remove erroneous doc comment

Fixes the formatting issue shown here:

<img width="803" alt="Screen Shot 2022-07-06 at 12 50 56 PM" src="https://user-images.githubusercontent.com/19642016/177612734-2d881c6a-2850-4c1b-8f1a-08339ad5bfbc.png">
2022-07-06 20:43:29 +02:00
Guillaume Gomez
47de8e96f8
Rollup merge of #98983 - pierwill:patch-3, r=RalfJung
docs: Add overview of `rustc_middle::mir::TerminatorKind`
2022-07-06 20:43:28 +02:00
Guillaume Gomez
d712f67897
Rollup merge of #98519 - TaKO8Ki:add-head-span-field-to-item-and-impl-item, r=cjgillot
Replace some `guess_head_span` with `def_span`

This patch fixes a part of #97417.
r? `@cjgillot`
2022-07-06 20:43:24 +02:00
Guillaume Gomez
4755173cf6
Rollup merge of #96935 - thomcc:atomicptr-strict-prov, r=dtolnay
Allow arithmetic and certain bitwise ops on AtomicPtr

This is mainly to support migrating from `AtomicUsize`, for the strict provenance experiment.

This is a pretty dubious set of APIs, but it should be sufficient to allow code that's using `AtomicUsize` to manipulate a tagged pointer atomically. It's under a new feature gate, `#![feature(strict_provenance_atomic_ptr)]`, but I'm not sure if it needs its own tracking issue. I'm happy to make one, but it's not clear that it's needed.

I'm unsure if it needs changes in the various non-LLVM backends. Because we just cast things to integers anyway (and were already doing so), I doubt it.

API change proposal: https://github.com/rust-lang/libs-team/issues/60

Fixes #95492
2022-07-06 20:43:23 +02:00
pierwill
deaa92b34b
Fix missing word in comment 2022-07-06 13:26:26 -05:00
Ralf Jung
dc9e0bf782 fix a strange ConstProp ICE 2022-07-06 14:11:44 -04:00
Ralf Jung
e685530b07 deduplicate some copy_op code 2022-07-06 14:11:41 -04:00
Ralf Jung
47cb276ab8 support passing unsized fn arguments 2022-07-06 14:03:20 -04:00
Ralf Jung
8ef0caa23c interpret: remove LocalValue::Unallocated, add Operand::Uninit
Operand::Uninit is an *allocated* operand that is fully uninitialized.
This lets us lazily allocate the actual backing store of *all* locals (no matter their ABI).

I also reordered things in pop_stack_frame at the same time.
I should probably have made that a separate commit...
2022-07-06 14:03:20 -04:00
Nilstrieb
211fb66810 Fix stacked borrows violation in rustc_arena
There was a problem with storing a `Box<T>` in a struct, where
the current rules would invalidate the value. this makes it store
a raw pointer instead, circumventing the aliasing problems.
2022-07-06 20:02:45 +02:00
pierwill
482bb39032
Remove erroneous doc comment 2022-07-06 12:52:02 -05:00
pierwill
fb579435a5
docs: Add overview of rustc_middle::mir::TerminatorKind 2022-07-06 12:48:19 -05:00
bors
3dcb616888 Auto merge of #98959 - cjgillot:late-bound-order, r=michaelwoerister
Return a FxIndexSet in is_late_bound query.

This return value is iterated upon by borrowck, hence the need to preserve
a deterministic iteration order.

Fixes https://github.com/rust-lang/rust/issues/98890
Affects https://github.com/rust-lang/rust/issues/96655

I don't know if this supersedes https://github.com/rust-lang/rust/pull/98924 or fixes an unrelated bug.

r? `@michaelwoerister`
This may deserve a backport.
2022-07-06 17:38:48 +00:00
Ralf Jung
a73e2557c7 fix ICE in ConstProp 2022-07-06 13:28:42 -04:00
David Wood
44c1fcc04d session: output-width -> diagnostic-width
Rename the `--output-width` flag to `--diagnostic-width` as this appears
to be the preferred name within the compiler team.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-06 17:43:33 +01:00
David Wood
cd23af6793 session: terminal-width -> output-width
Rename the `--terminal-width` flag to `--output-width` as the behaviour
doesn't just apply to terminals (and so is slightly less accurate).

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-06 17:38:18 +01:00
David Wood
e5288842fa sess: stabilize --terminal-width
Formerly `-Zterminal-width`, `--terminal-width` allows the user or build
tool to inform rustc of the width of the terminal so that diagnostics
can be truncated.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-06 17:32:59 +01:00
pierwill
8c9a130056 Edit rustc_mir_dataflow::framework documentation 2022-07-06 11:20:40 -05:00
Ralf Jung
dfd243e27c add track_caller to some interpreter functions 2022-07-06 11:27:54 -04:00
Ralf Jung
27b7b3dcd6 interpret: use AllocRange in UninitByteAccess
also use nice new format string syntax in interpret/error.rs
2022-07-06 10:55:06 -04:00
Nixon Enraght-Moony
02fb345964 Suggest using block for extern "abi" fn with no body 2022-07-06 13:27:53 +01:00
Takayuki Maeda
6f65b7e64b suggest adding a missing zero to a floating point number 2022-07-06 20:09:39 +09:00
David Wood
e1065239fe ssa: abort if dwarf packaging fails
This should have been here from the start... oops. When `thorin` fails
to package a DWARF package, that should fail compilation.
2022-07-06 11:15:13 +01:00
David Wood
fc641f21c2 ssa: remove dwo of metadata and allocator module
Compiling with `-Csplit-debuginfo=packed` was leaving behind `.dwo`
files because either the metadata or allocator module contained a DWARF
object which was not being removed by the
`maybe_remove_temps_from_module` closure.
2022-07-06 11:15:13 +01:00
David Wood
8371a036ea incr: cache dwarf objects in work products
Cache DWARF objects alongside object files in work products when those
exist so that DWARF object files are available for thorin in packed mode
in incremental scenarios.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-06 11:15:13 +01:00
Takayuki Maeda
b730bc9f20 fix miri-opt tests 2022-07-06 19:09:50 +09:00
Takayuki Maeda
0541b4e034 use named_span in case of tuple variant 2022-07-06 19:09:50 +09:00
Takayuki Maeda
3d1b679a3c add Node::Variant to Map::opt_span 2022-07-06 19:09:50 +09:00
Takayuki Maeda
83dea35384 replace guess_head_span with def_span 2022-07-06 19:09:47 +09:00
Dylan DPC
7f62a719af
Rollup merge of #98968 - RalfJung:scalar-sanity, r=oli-obk
assert Scalar sanity

With https://github.com/rust-lang/rust/pull/96814 having landed, finally our `Scalar` layouts have the invariants they deserve. :)
2022-07-06 14:49:13 +05:30
Dylan DPC
41e30e3371
Rollup merge of #98967 - ClementTsang:fix_inaccessible_type_alias_plural_typo, r=lcnr
fix typo in note about multiple inaccessible type aliases

Mainly intended as a small typo fix ("aliass" -> "aliases") for the case where a type cannot be found in scope but there are multiple inaccessible type aliases that match the missing type.

In general this change would use the correct plural form in this scenario for base words that end with 's'.
2022-07-06 14:49:12 +05:30
Dylan DPC
56667b5a07
Rollup merge of #98964 - RalfJung:typo, r=Dylan-DPC
fix typo in function name

I don't know what I was doing when I named that function...
follow-up to #98888
r? `@oli-obk`
2022-07-06 14:49:11 +05:30
Dylan DPC
df1f415305
Rollup merge of #98884 - davidtwco:translation-on-lints-derive, r=oli-obk
macros: `LintDiagnostic` derive

- Move `LintDiagnosticBuilder` into `rustc_errors` so that a diagnostic derive can refer to it.
- Introduce a `DecorateLint` trait, which is equivalent to `SessionDiagnostic` or `AddToDiagnostic` but for lints. Necessary without making more changes to the lint infrastructure as `DecorateLint` takes a `LintDiagnosticBuilder` and re-uses all of the existing logic for determining what type of diagnostic a lint should be emitted as (e.g. error/warning).
- Various refactorings of the diagnostic derive machinery (extracting `build_field_mapping` helper and moving `sess` field out of the `DiagnosticDeriveBuilder`).
- Introduce a `LintDiagnostic` derive macro that works almost exactly like the `SessionDiagnostic` derive macro  except that it derives a `DecorateLint` implementation instead. A new derive is necessary for this because `SessionDiagnostic` is intended for when the generated code creates the diagnostic. `AddToDiagnostic` could have been used but it would have required more changes to the lint machinery.

~~At time of opening this pull request, ignore all of the commits from #98624, it's just the last few commits that are new.~~

r? `@oli-obk`
2022-07-06 14:49:10 +05:30
Dylan DPC
707c0d9a2d
Rollup merge of #98881 - cjgillot:q-def-kind, r=fee1-dead
Only compute DefKind through the query.
2022-07-06 14:49:08 +05:30
fee1-dead
31629860e8
Fix double space 2022-07-06 17:02:58 +08:00
DrMeepster
a2799b2de8 fix projectionelem validation 2022-07-06 01:59:16 -07:00
bors
5b8cf49c51 Auto merge of #98206 - eggyal:align-to-chalk-folding-api, r=jackh726
Split TypeVisitable from TypeFoldable

Impl of rust-lang/compiler-team#520 following MCP approval.

r? `@ghost`
2022-07-06 05:48:11 +00:00
Alan Egerton
4f0a64736b
Update TypeVisitor paths 2022-07-06 06:41:53 +01:00
Ralf Jung
8f867c5445 finally enable Scalar layout sanity checks 2022-07-05 22:26:26 -04:00
ClementTsang
503c669927 fix typo in note about multiple inaccessible type aliases
Mainly intended as a small typo fix ("aliass" -> "aliases") for
the case where a type cannot be found in scope, and there are
multiple inaccessible type aliases that match the missing type.

In general this change would use the correct plural form in
this scenario for words that end with 's'.
2022-07-05 21:21:12 -04:00
Ralf Jung
4687afa480 fix type in function name 2022-07-05 17:48:43 -04:00
Guillaume Gomez
5d650bb92e
Rollup merge of #98944 - pierwill:flatset-docs, r=Dylan-DPC
Edit `rustc_mir_dataflow::framework::lattice::FlatSet` docs

Cosmetic improvements. Adds a paragraph break, and
ellipses to signify arbitrary size of a flat set.
2022-07-05 23:43:33 +02:00
Guillaume Gomez
3e802d72bb
Rollup merge of #96814 - RalfJung:enum-repr-align, r=oli-obk
Fix repr(align) enum handling

`enum`, for better or worse, supports `repr(align)`. That has already caused a bug in https://github.com/rust-lang/rust/issues/92464, which was "fixed" in https://github.com/rust-lang/rust/pull/92932, but it turns out that that fix is wrong and caused https://github.com/rust-lang/rust/issues/96185.

So this reverts #92932 (which fixes #96185), and attempts another strategy for fixing #92464: special-case enums when doing a cast, re-using the code to load the discriminant rather than assuming that the enum has scalar layout. This works fine for the interpreter.

However, #92464 contained another testcase that was previously not in the test suite -- and after adding it, it ICEs again. This is not surprising; codegen needs the same patch that I did in the interpreter. Probably this has to happen [around here](d32ce37a17/compiler/rustc_codegen_ssa/src/mir/rvalue.rs (L276)). Unfortunately I don't know how to do that -- the interpreter can load a discriminant from an operand, but codegen can only do that from a place. `@oli-obk` `@eddyb` `@bjorn3` any idea?
2022-07-05 23:43:30 +02:00
Alan Egerton
e9e5d0685b
Relax constrained generics to TypeVisitable 2022-07-05 22:25:43 +01:00
Alan Egerton
f66c06f7f2
Explicit TypeVisitable implementations 2022-07-05 22:25:35 +01:00
Alan Egerton
9ffdc2de8c
impl TypeVisitable in type traversal macros 2022-07-05 22:25:33 +01:00
Alan Egerton
e4b9625b87
Add #[derive(TypeVisitable)] 2022-07-05 22:25:15 +01:00
Ze'ev Maor
728fb05f1f enable on opt level 1 2022-07-06 00:03:32 +03:00
Camille GILLOT
974b1e3e51 Clarify the behaviour from inside the query system. 2022-07-05 22:52:21 +02:00
Ze'ev Maor
099cb5ad8a only enable ConstProp on opt level 2 2022-07-05 23:38:52 +03:00
Camille GILLOT
2a7abed87f Return a FxIndexSet in is_late_bound query.
This return value is iterated upon by borrowck, hence the need to preserve
a deterministic iteration order.
2022-07-05 21:54:40 +02:00
Alan Egerton
bca894909c
Split TypeVisitable from TypeFoldable 2022-07-05 19:18:19 +01:00
bors
41ad4d9b2d Auto merge of #98936 - matthiaskrgr:rollup-dvr0ucm, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #98860 (adjust dangling-int-ptr error message)
 - #98888 (interpret: fix CheckedBinOp behavior when overflow checking is disabled)
 - #98889 (Add regression test for #79467)
 - #98895 (bootstrap.py: Always use `.exe` for Windows)
 - #98920 (adapt issue-37945 codegen test to accept any order of ops)
 - #98921 (Refactor: remove a redundant mutable variable)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-05 17:46:53 +00:00
Ralf Jung
cedc428a5f fix the layout of repr(align) enums 2022-07-05 13:24:21 -04:00
pierwill
f8b16c5d87 Edit rustc_mir_dataflow::framework::lattice::FlatSet docs
Cosmetic improvements. Adds a paragraph break, and
ellipses to signify arbitrary size of a flat set.
2022-07-05 11:34:39 -05:00
Matthias Krüger
720eb123af
Rollup merge of #98921 - TaKO8Ki:refactor-fulfillment-context-select, r=Dylan-DPC
Refactor: remove a redundant mutable variable
2022-07-05 17:08:15 +02:00
Matthias Krüger
cca43fe8e2
Rollup merge of #98888 - RalfJung:interpret-checked-bin, r=oli-obk
interpret: fix CheckedBinOp behavior when overflow checking is disabled

Adjusts the interpreter to https://github.com/rust-lang/rust/pull/98738.

r? `@oli-obk`
2022-07-05 17:08:11 +02:00
Matthias Krüger
69195c026e
Rollup merge of #98860 - RalfJung:dangling-int-ptr, r=davidtwco
adjust dangling-int-ptr error message

based on suggestions by `@saethlin` in https://github.com/rust-lang/miri/issues/2163

Fixes https://github.com/rust-lang/miri/issues/2163

I also did a bit of refactoring on this, so we have a helper method to create a `Pointer` with `None` provenance.
2022-07-05 17:08:10 +02:00
David Wood
9d864c8d56 macros: add diagnostic derive for lints
`SessionDiagnostic` isn't suitable for use on lints as whether or not it
creates an error or a warning is decided at compile-time by the macro,
whereas lints decide this at runtime based on the location of the lint
being reported (as it will depend on the user's `allow`/`deny`
attributes, etc). Re-using most of the machinery for
`SessionDiagnostic`, this macro introduces a `LintDiagnostic` derive
which implements a `DecorateLint` trait, taking a
`LintDiagnosticBuilder` and adding to the lint according to the
diagnostic struct.
2022-07-05 16:00:21 +01:00
David Wood
7f9d8480d6 macros: move sess out of builder
`sess` field of `SessionDiagnosticDeriveBuilder` is never actually used
in the builder's member functions, so it doesn't need to be a field.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-05 16:00:21 +01:00
David Wood
406579ae13 macros: introduce build_field_mapping
Move the logic for building a field mapping (which is used by the
building of format strings in `suggestion` annotations) into a helper
function.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-05 16:00:21 +01:00
David Wood
540eaf985d errors: introduce DecorateLint
Add a new trait to be generated by diagnostic derives which uses a
`LintDiagnosticBuilder`.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-05 16:00:20 +01:00
David Wood
2874f09534 lint: LintDiagnosticBuilder into rustc_errors
Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-05 16:00:20 +01:00
David Wood
84ec77769f macros: fix documentation link for diag derive
Signed-off-by: David Wood <david.wood@huawei.com>
2022-07-05 16:00:20 +01:00
bors
efb171e235 Auto merge of #98584 - lcnr:region-stuff-more-beans, r=oli-obk
continue nll transition by removing stuff

r? `@jackh726` for now

building on #98641
2022-07-05 14:58:31 +00:00
bors
54f79babae Auto merge of #98925 - Dylan-DPC:rollup-9185c9y, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #97712 (ptr::copy and ptr::swap are doing untyped copies)
 - #98624 (lints: mostly translatable diagnostics)
 - #98776 (rustdoc: improve click behavior of the source code mobile full-screen "sidebar")
 - #98856 (Remove FIXME from rustdoc intra-doc test)
 - #98913 (⬆️ rust-analyzer)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-05 12:17:26 +00:00
Ralf Jung
46956f76ca adjust dangling-int-ptr error message 2022-07-05 08:08:24 -04:00
Ralf Jung
2f6e996662 always check overflow in CheckedBinOp in CTFE 2022-07-05 07:32:38 -04:00
Dylan DPC
291df97fae
Rollup merge of #98624 - davidtwco:translation-on-lints, r=compiler-errors
lints: mostly translatable diagnostics

As lints are created slightly differently than other diagnostics, intended to try make them translatable first and then look into the applicability of diagnostic structs but ended up just making most of the diagnostics in the crate translatable (which will still be useful if I do make a lot of them structs later anyway).

r? ``@compiler-errors``
2022-07-05 16:04:32 +05:30
bors
53792b9c5c Auto merge of #96862 - oli-obk:enum_cast_mir, r=RalfJung
Change enum->int casts to not go through MIR casts.

follow-up to https://github.com/rust-lang/rust/pull/96814

this simplifies all backends and even gives LLVM more information about the return value of `Rvalue::Discriminant`, enabling optimizations in more cases.
2022-07-05 09:36:29 +00:00
Takayuki Maeda
c9e2aa4d7f refactor: remove a redundant mutable variable 2022-07-05 18:28:36 +09:00
Oli Scherer
82c73af4a6 Prefer trace level instrumentation for the new noisy instrument attributes 2022-07-05 09:27:06 +00:00
Oli Scherer
c3aec3056e Add a helper method with an explicit name instead of hand rolling a match 3x 2022-07-05 09:26:45 +00:00
bors
4045ce641a Auto merge of #98910 - Dylan-DPC:rollup-9x82wdg, r=Dylan-DPC
Rollup of 6 pull requests

Successful merges:

 - #97300 (Implement `FusedIterator` for `std::net::[Into]Incoming`)
 - #98761 (more `need_type_info` improvements)
 - #98811 (Interpret: AllocRange Debug impl, and use it more consistently)
 - #98847 (fix interpreter validity check on Box)
 - #98854 (clean up the borrowing in rustc_hir_pretty)
 - #98873 (Suggest `#[derive(Default)]` to enums with `#[default]`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-07-05 06:44:49 +00:00
Dylan DPC
9a2274cf81
Rollup merge of #98873 - TaKO8Ki:suggest-default-derive-to-enum-with-default-attribute, r=fee1-dead
Suggest `#[derive(Default)]` to enums with `#[default]`

fixes #95226
2022-07-05 10:42:59 +05:30
Dylan DPC
6e5f1d491a
Rollup merge of #98854 - kadiwa4:rustc_hir_pretty_clean_up_borrowing, r=oli-obk
clean up the borrowing in rustc_hir_pretty

A whole lot of the `&`s and `ref`s were redundant. I hope doing this in one big commit is fine, because all of the changes are pretty self-contained.

`@rustbot` label: +C-cleanup
2022-07-05 10:42:58 +05:30
Dylan DPC
7702c50ea5
Rollup merge of #98847 - RalfJung:box-is-special, r=oli-obk
fix interpreter validity check on Box

Follow-up to https://github.com/rust-lang/rust/pull/98554: avoid walking over parts of the value twice.

And then move all that logic into the general visitor so not each visitor implementation has to deal with it...
2022-07-05 10:42:57 +05:30
Dylan DPC
522d52cef7
Rollup merge of #98811 - RalfJung:interpret-alloc-range, r=oli-obk
Interpret: AllocRange Debug impl, and use it more consistently

The two commits are pretty independent but it did not seem worth having two PRs for them.
r? ``@oli-obk``
2022-07-05 10:42:55 +05:30
Dylan DPC
6a9db39f6c
Rollup merge of #98761 - lcnr:need_type_info-cont, r=estebank
more `need_type_info` improvements

this now deals with macros in suggestions and the source cost computation does what I want for `channel` 🎉

r? ``@estebank``
2022-07-05 10:42:54 +05:30
bors
880646ca9c Auto merge of #98872 - JakobDegen:no-invalidate, r=davidtwco
Add method to mutate MIR body without invalidating CFG caches.

In addition to adding this method, a handful of passes are updated to use it. There's still quite a few passes that could in principle make use of this as well, but do not at the moment because they use `VisitorMut` or `MirPatch`, which needs additional support for this.

The method name is slightly unwieldy, but I don't expect anyone to be writing it a lot, and at least it says what it does. If anyone has a suggestion for a better name though, would be happy to rename.

r? rust-lang/mir-opt
2022-07-05 04:04:04 +00:00