Commit Graph

217451 Commits

Author SHA1 Message Date
Dylan DPC
c78e3c735a
Rollup merge of #107411 - cjgillot:dataflow-discriminant, r=oli-obk
Handle discriminant in DataflowConstProp

cc ``@jachris``
r? ``@JakobDegen``

This PR attempts to extend the DataflowConstProp pass to handle propagation of discriminants. We handle this by adding 2 new variants to `TrackElem`: `TrackElem::Variant` for enum variants and `TrackElem::Discriminant` for the enum discriminant pseudo-place.

The difficulty is that the enum discriminant and enum variants may alias each another. This is the issue of the `Option<NonZeroUsize>` test, which is the equivalent of https://github.com/rust-lang/unsafe-code-guidelines/issues/84 with a direct write.

To handle that, we generalize the flood process to flood all the potentially aliasing places. In particular:
- any write to `(PLACE as Variant)`, either direct or through a projection, floods `(PLACE as OtherVariant)` for all other variants and `discriminant(PLACE)`;
- `SetDiscriminant(PLACE)` floods `(PLACE as Variant)` for each variant.

This implies that flooding is not hierarchical any more, and that an assignment to a non-tracked place may need to flood a tracked place. This is handled by `for_each_aliasing_place` which generalizes `preorder_invoke`.

As we deaggregate enums by putting `SetDiscriminant` last, this allows to propagate the value of the discriminant.

This refactor will allow to make https://github.com/rust-lang/rust/pull/107009 able to handle discriminants too.
2023-02-15 12:24:55 +05:30
Dylan DPC
a110cf5d16
Rollup merge of #107173 - clubby789:suggest-array-length, r=compiler-errors
Suggest the correct array length on mismatch

Fixes #107156

I wasn't able to find a way to get the `Span` for the actual array size unfortunately, so this suggestion can't be applied automatically.

``@rustbot`` label +A-diagnostics
2023-02-15 12:24:54 +05:30
Dylan DPC
9800dbe883
Rollup merge of #107163 - mikebenfield:parameters-pr, r=TaKO8Ki
Remove some superfluous type parameters from layout.rs.

Specifically remove V, which can always be VariantIdx, and F, which can always be Layout.
2023-02-15 12:24:54 +05:30
Dylan DPC
83f10ea5b7
Rollup merge of #105300 - aliemjay:member-lower, r=oli-obk
rework min_choice algorithm of member constraints

See [this comment](https://github.com/rust-lang/rust/pull/105300#issuecomment-1384312743) for the description of the new algorithm.

Fixes #63033
Fixes #104639

This uses a more general algorithm than #89056 that doesn't treat `'static` as a special case. It thus accepts more code. For example:
```rust
async fn test2<'s>(_: &'s u8, _: &'_ &'s u8, _: &'_ &'s u8) {}
```
I claim it's more correct as well because it fixes #104639.

cc ``@nikomatsakis`` ``@lqd`` ``@tmandry`` ``@eholk`` ``@chenyukang`` ``@oli-obk``

r? types
2023-02-15 12:24:53 +05:30
bors
0416b1a6f6 Auto merge of #108056 - matthiaskrgr:rollup-oa6bxvh, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #107573 (Update the minimum external LLVM to 14)
 - #107626 (Fix `x fix` on the standard library itself)
 - #107673 (update ICU4X to 1.1.0)
 - #107733 (Store metrics from `metrics.json` to CI PGO timer)
 - #108007 (Use `is_str` instead of string kind comparison)
 - #108033 (add an unstable `#[rustc_coinductive]` attribute)
 - #108039 (Refactor refcounted structural_impls via functors)
 - #108040 (Use derive attributes for uninteresting traversals)
 - #108044 (interpret: rename Pointer::from_addr → from_addr_invalid)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2023-02-14 21:07:04 +00:00
Matthias Krüger
8e82c8c9d0
Rollup merge of #108044 - RalfJung:from-addr-invalid, r=oli-obk
interpret: rename Pointer::from_addr → from_addr_invalid

This function corresponds to `ptr::invalid` in the standard library; the previous name was not clear enough IMO.
2023-02-14 18:24:44 +01:00
Matthias Krüger
9b39568e64
Rollup merge of #108040 - eggyal:attributes_for_uninteresting_traversals, r=oli-obk
Use derive attributes for uninteresting traversals

It appears that visiting and folding was implemented on `BitMatrix` solely so that the derive macros could be used on `GeneratorLayout`, however such implementation would not necessarily be correct for other uses (if there were any).  Adding attributes to the derive macro is more correct and potentially more generally useful.

r? ``@oli-obk``
2023-02-14 18:24:43 +01:00
Matthias Krüger
207d6e177f
Rollup merge of #108039 - eggyal:traverse_refcounts_via_functors, r=oli-obk
Refactor refcounted structural_impls via functors

The mapping of values in refcounted types can be extracted as a functor, simplifying the implementations in the type library (whose structural folding impls now all use such functors).  This functor could also prove more generally useful elsewhere.
2023-02-14 18:24:43 +01:00
Matthias Krüger
edcdab08a4
Rollup merge of #108033 - lcnr:coinductive-attr, r=compiler-errors
add an unstable `#[rustc_coinductive]` attribute

useful to test coinduction, especially in the new solver.

as this attribute should remain permanently unstable I don't think this needs any official approval. cc ``@rust-lang/types``

had to weaken the check for stable query results in the solver to prevent an ICE if there's a coinductive cycle with constraints.

r? ``@compiler-errors``
2023-02-14 18:24:42 +01:00
Matthias Krüger
7e0127b2ae
Rollup merge of #108007 - compiler-errors:str-less-kind, r=Nilstrieb
Use `is_str` instead of string kind comparison

Split out from #107939
2023-02-14 18:24:42 +01:00
Matthias Krüger
74d018e317
Rollup merge of #107733 - Kobzol:opt-build-metrics, r=Mark-Simulacrum
Store metrics from `metrics.json` to CI PGO timer

With this change, we'll be able to easily see how long does it take to compile LLVM vs `rustc`.

r? ```@Mark-Simulacrum```
2023-02-14 18:24:41 +01:00
Matthias Krüger
3549e42580
Rollup merge of #107673 - lukas-code:update-icu4x, r=davidtwco
update ICU4X to 1.1.0

This patch updates the ICU4X crates to version 1.1.0 and regenerates the static data for `rustc_baked_icu_data`.

This is mostly an internal and bugfix update. It notably includes https://github.com/unicode-org/icu4x/pull/2834 to fix the future compatibility warning for [`BYTE_SLICE_IN_PACKED_STRUCT_WITH_DERIVE`](https://github.com/rust-lang/rust/issues/107457).

[full changelog](https://github.com/unicode-org/icu4x/blob/icu%401.1.0/CHANGELOG.md)
2023-02-14 18:24:41 +01:00
Matthias Krüger
2c1d3e92e0
Rollup merge of #107626 - jyn514:x-fix, r=Mark-Simulacrum
Fix `x fix` on the standard library itself

Fixes https://github.com/rust-lang/rust/issues/107501
2023-02-14 18:24:40 +01:00
Matthias Krüger
a1ba861190
Rollup merge of #107573 - cuviper:drop-llvm-13, r=nagisa
Update the minimum external LLVM to 14

With this change, we'll have stable support for LLVM 14 through 16 (pending release).
For reference, the previous increase to LLVM 13 was #100460.
2023-02-14 18:24:40 +01:00
bors
6e0115778b Auto merge of #108052 - matthiaskrgr:rollup-p6r6rnl, r=matthiaskrgr
Rollup of 10 pull requests

Successful merges:

 - #103478 ( Suggest fix for misplaced generic params on fn item #103366 )
 - #107739 (Check for overflow in evaluate_canonical_goal)
 - #108003 (Avoid ICE when the generic_span is empty)
 - #108016 ("Basic usage" is redundant for there is just one example)
 - #108023 (Shrink size of array benchmarks)
 - #108024 (add message to update Cargo.toml when x is changed)
 - #108025 (rustdoc: add more tooltips to intra-doc links)
 - #108029 (s/eval_usize/eval_target_usize/ for clarity)
 - #108035 (Avoid using a dead email address as the main email address)
 - #108038 (Remove needless supertrait constraints from Interner projections)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2023-02-14 17:24:31 +00:00
Matthias Krüger
ea679fb674
Rollup merge of #108038 - eggyal:remove_needless_supertrait_constraints, r=lcnr
Remove needless supertrait constraints from Interner projections

These associated types are already all constrained to implement `Ord`, so specifically requiring its supertraits `Eq`, `PartialEq` and `PartialOrd` is superfluous.
2023-02-14 18:02:55 +01:00
Matthias Krüger
7a9e6e8ccb
Rollup merge of #108035 - oli-obk:oli_new_contributor_funkiness, r=Mark-Simulacrum
Avoid using a dead email address as the main email address

This caused highfive to welcome me as a new contributor on every PR, because it couldn't find any commits of mine.
2023-02-14 18:02:54 +01:00
Matthias Krüger
f68864cbca
Rollup merge of #108029 - oli-obk:🞋_usize, r=RalfJung
s/eval_usize/eval_target_usize/ for clarity

r? `@nnethercote`

as discussed in https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/.60Const.60.20and.20.60usize.60.2F.60u64.60 it is unclear what `usize` means and why we use a `u64` for something talking about `usize`. This renaming should make it clear that we're talking about `usize`s on the target platform, irrespective of the compiler host platform.
2023-02-14 18:02:54 +01:00
Matthias Krüger
8804e7f3dc
Rollup merge of #108025 - notriddle:notriddle/intra-doc-link-tooltips, r=GuillaumeGomez
rustdoc: add more tooltips to intra-doc links

This commit makes intra-doc link tooltips consistent with generated links in function signatures and item tables, with the format `itemtype foo::bar::baz`. This way, you can tell if a link points at a trait or a type (for example) by mousing over it.

See also https://github.com/rust-lang/rust/pull/39697

Partially solves https://internals.rust-lang.org/t/rustdoc-suggestion-highlight-links-fn-s-mod-s-type-s-etc-appropriately-within-and-documentation/17931 (though the Internals thread asks for color-coding, while this PR adds a tooltip instead, it's accomplishing the same thing).

Before:

<img width="950" alt="image" src="https://user-images.githubusercontent.com/1593513/218653059-911cea01-7231-438a-ad98-be98ab73783f.png">

After:

<img width="432" alt="image" src="https://user-images.githubusercontent.com/1593513/218653201-34ca3aa7-18f1-4cb1-be68-a1411bbe797e.png">
2023-02-14 18:02:53 +01:00
Matthias Krüger
43b42c5e78
Rollup merge of #108024 - zephaniahong:master, r=jyn514
add message to update Cargo.toml when x is changed

`@jyn514` Is this correct?

As mentioned in #108021
2023-02-14 18:02:53 +01:00
Matthias Krüger
d599be0af2
Rollup merge of #108023 - JulianKnodt:smaller_benchmark, r=workingjubilee
Shrink size of array benchmarks

Might've overdone it with the size of these benchmarks, as there's no need for them to be quite as large.

Fixes #108011
2023-02-14 18:02:52 +01:00
Matthias Krüger
3eb57319f2
Rollup merge of #108016 - tshepang:just-one-example, r=thomcc
"Basic usage" is redundant for there is just one example
2023-02-14 18:02:52 +01:00
Matthias Krüger
1f486f0a9b
Rollup merge of #108003 - chenyukang:yukang/fix-107998, r=compiler-errors
Avoid ICE when the generic_span is empty

Fixes #107998
r? ```@TaKO8Ki```
2023-02-14 18:02:51 +01:00
Matthias Krüger
9ee3c7ac4b
Rollup merge of #107739 - spastorino:check-overflow-evaluate_canonical_goal, r=lcnr
Check for overflow in evaluate_canonical_goal

r? `@lcnr`
2023-02-14 18:02:50 +01:00
Matthias Krüger
202c70666f
Rollup merge of #103478 - SpanishPear:spanishpear/issue_103366_fix, r=TaKO8Ki
Suggest fix for misplaced generic params on fn item #103366

fixes #103366

This still has some work to go, but works for 2/3 of the initial base cases described in #1033366

simple fn:
```
error: expected identifier, found `<`
 --> shreys/test_1.rs:1:3
  |
1 | fn<T> id(x: T) -> T { x }
  |   ^ expected identifier
  |
help: help: place the generic parameter list after the function name:
  |
1 | fn id<T>(x: T) -> T { x }
  |    ~~~~

```

Complicated bounds
```
error: expected identifier, found `<`
 --> spanishpear/test_2.rs:1:3
  |
1 | fn<'a, B: 'a + std::ops::Add<Output = u32>> f(_x: B) { }
  |   ^ expected identifier
  |
help: help: place the generic parameter list after the function name:
  |
1 | fn f<'a, B: 'a + std::ops::Add<Output = u32>>(_x: B) { }
  |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```

Opening a draft PR for comments on approach, particularly I have the following questions:
 -  [x]  Is it okay to be using `err.span_suggestion` over struct derives? I struggled to get the initial implementation (particularly the correct suggestion message) on struct derives, although I think given what I've learned since starting, I could attempt re-doing it with that approach.
  -  [x] in the case where the snippet cannot be obtained from a span, is the `help` but no suggestion okay? I think yes (also, when does this case occur?)
  -  [x] are there any red flags for the generalisation of this work for relevant item kinds (i.e. `struct`, `enum`, `trait`, and `union`). My basic testing indicates it does work for those types except the help tip is currently hardcoded to `after the function name` - which should change dependent on the item.
  - [x] I am planning to not show the suggestion if there is already a `<` after the item identifier, (i.e. if there are already generics, as after a function name per the original issue). Any major objections?
  - [x] Is the style of error okay? I wasn't sure if there was a way to make it display nicer, or if thats handled by span_suggestion

These aren't blocking questions, and I will keep working on:
  - check if there is a `<` after the ident (and if so, not showing the suggestion)
  - generalize the help message
  - figuring out how to write/run/etc ui tests (including reading the docs for them)
  - logic cleanups
2023-02-14 18:02:50 +01:00
Alan Egerton
3b510e88ef
Use derive attributes for uninteresting traversals 2023-02-14 15:09:40 +00:00
Ralf Jung
91d25168cd interpret: rename Pointer::from_addr → from_addr_invalid 2023-02-14 14:55:50 +01:00
Santiago Pastorino
26136c6224
Reduce visibility of some items 2023-02-14 10:17:07 -03:00
Santiago Pastorino
c8dae10f14
Check for overflow in evaluate_canonical_goal 2023-02-14 09:51:39 -03:00
Alan Egerton
26e3363c51
Refactor refcounted structural_impls via functors 2023-02-14 12:14:58 +00:00
Alan Egerton
9e2947a621
Ord entails its supertraits 2023-02-14 12:13:05 +00:00
lcnr
a2f03037b4 change the marker attribute to only_local 2023-02-14 12:18:33 +01:00
lcnr
51671cd435 add test for coinduction in new solver 2023-02-14 12:18:33 +01:00
lcnr
646e667200 add a #[rustc_coinductive] attribute 2023-02-14 11:53:22 +01:00
Oli Scherer
0e185c2df1 Avoid using a dead email address as the main email address 2023-02-14 10:51:15 +00:00
bors
9bb6e60d1f Auto merge of #103695 - LYF1999:yf/103563, r=lcnr
fix: Unexpected trait bound not satisfied in HRTB and Associated Type

fix https://github.com/rust-lang/rust/issues/103563
2023-02-14 10:01:19 +00:00
Oli Scherer
936bf29d4c s/eval_usize/eval_target_usize/ for clarity 2023-02-14 08:51:19 +00:00
Zephaniah Ong
70fd729e7e change file path and improve message 2023-02-14 14:25:46 +08:00
bors
e9ab7872fd Auto merge of #107765 - petrochenkov:nomoclone, r=oli-obk
rustc/rustdoc: Perform name resolver cleanups enabled by #94857

Unblocks https://github.com/rust-lang/rust/pull/105462.
r? `@oli-obk`
2023-02-14 05:59:44 +00:00
Michael Howell
ba4b026e80 rustdoc: add more tooltips to intra-doc links
This commit makes intra-doc link tooltips consistent with generated
links in function signatures and item tables, with the format
`itemtype foo::bar::baz`. This way, you can tell if a link points at
a trait or a type (for example) by mousing over it.

See also fce944d4e7
2023-02-13 22:57:28 -07:00
Zephaniah Ong
2a5a1a89d3 add message to update Cargo.toml when x is changed 2023-02-14 13:56:19 +08:00
kadmin
826abcc728 Shrink size of array benchmarks 2023-02-14 05:01:24 +00:00
yukang
3180f1c828 Fix #107998, avoid ICE when the generic_span is empty 2023-02-14 03:46:43 +00:00
bors
c3c6d73b04 Auto merge of #107993 - weihanglo:update-cargo, r=weihanglo
Update cargo

10 commits in 82c3bb79e3a19a5164e33819ef81bfc2c984bc56..39c13e67a5962466cc7253d41bc1099bbcb224c3 2023-02-04 22:52:16 +0000 to 2023-02-12 02:01:08 +0000

- chore: Update to toml v0.6, toml_edit v0.18 (rust-lang/cargo#11618)
- doc: more doc comments and intra-doc links (rust-lang/cargo#11703)
- Deny warnings in CI, not locally (rust-lang/cargo#11699)
- add comment to lto.rs (rust-lang/cargo#11701)
- Re-export cargo_new::NewProjectKind as public (rust-lang/cargo#11700)
- Add '-C' flag for changing current dir before build (rust-lang/cargo#10952)
- `-Zrustdoc-scrape-example` must fail with bad build script (rust-lang/cargo#11694)
- Update CHANGELOG for 1.68 backports (rust-lang/cargo#11690)
- Update 1password to the version 2 CLI (rust-lang/cargo#11692)
- chore: autolabel more for `A-*` (rust-lang/cargo#11679)

r? `@ghost`
2023-02-14 02:55:06 +00:00
Tshepang Mbambo
ef6a59b7a9 "Basic usage" is redundant for there is just one example 2023-02-14 01:43:41 +02:00
bors
5348a89a77 Auto merge of #108015 - matthiaskrgr:rollup-qerohjn, r=matthiaskrgr
Rollup of 8 pull requests

Successful merges:

 - #107902 (fix: improve the suggestion on future not awaited)
 - #107913 (Update broken link in cargo style guide)
 - #107942 (Tighter spans for bad inherent `impl` self types)
 - #107948 (Allow shortcuts to directories to be used for ./x.py fmt)
 - #107971 (Clearly document intentional UB in mir-opt tests)
 - #107985 (Added another error to be processed in fallback)
 - #108002 (Update books)
 - #108013 (rustdoc: use a string with one-character codes for search index types)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2023-02-13 23:20:03 +00:00
Matthias Krüger
f1a349457f
Rollup merge of #108013 - notriddle:notriddle/search-index-itemtype, r=GuillaumeGomez
rustdoc: use a string with one-character codes for search index types

    $ wc -c search-index.old.js search-index.new.js
    3940530 search-index.old.js
    3843222 search-index.new.js

((3940530-3843222)/3940530)*100 = 2.47%

    $ wc -c search-index.old.js.gz search-index.new.js.gz
    380251 search-index.old.js.gz
    379434 search-index.new.js.gz

((380251-379434)/380251)*100 = 0.214%
2023-02-13 23:25:15 +01:00
Matthias Krüger
9bf807e7a1
Rollup merge of #108002 - rustbot:docs-update, r=ehuss
Update books

## rust-lang/book

2 commits in f2a78f64b668f63f581203c6bac509903f7c00ee..d94e03a18a2590ed3f1c67b859cb11528d2a2d5c
2023-02-10 16:01:09 UTC to 2023-02-10 15:55:43 UTC

- Update to Rust 1.67.1
- Update to Rust 1.66.1

## rust-embedded/book

1 commits in f1a4614aa41cc544b91b79760a709e113f3451d7..701d1551429da4cb609082c0ac99df569e336710
2023-01-31 12:32:49 UTC to 2023-01-31 12:32:49 UTC

- fix: Circled Image not visible on B&W E-Ink screen (rust-embedded/book#339)

## rust-lang/nomicon

2 commits in bd1829d235296952bf72ca55635e360584b8805e..79b53665a7c61d171fb8c5ad0b73b371f9ee6ba7
2023-02-13 08:40:24 UTC to 2023-02-07 09:43:03 UTC

- Fixes double bug in Send-Sync example (rust-lang/nomicon#401)
- Small language fix in subtyping.md (rust-lang/nomicon#399)

## rust-lang/reference

4 commits in 22882fb3f7b4d69fdc0d1731e8b9cfcb6910537d..e5adb99c04817b7fbe08f4ffce5b36702667345f
2023-02-08 18:09:03 UTC to 2023-02-01 03:49:46 UTC

- Eliminate 'half open' terminology from range pattern grammar (rust-lang/reference#1330)
- fix place expression context example (rust-lang/reference#1327)
- remove confusing words (rust-lang/reference#1324)
- Reword "expression for a match arm" (rust-lang/reference#1325)

## rust-lang/rust-by-example

5 commits in 134376872e8c387ef369507e0ee9b5a0e3272718..efe23c4fe12e06351b8dc8c3d18312c761455109
2023-02-06 11:32:23 UTC to 2023-01-31 16:38:03 UTC

- fix irrelevant comments (rust-lang/rust-by-example#1676)
- remove redudant code (rust-lang/rust-by-example#1675)
- Line comments: change 'inside' to 'after' (rust-lang/rust-by-example#1674)
- fix incorrect trait bound demonstration (rust-lang/rust-by-example#1673)
- fix "High Order Functions" typo (rust-lang/rust-by-example#1672)

## rust-lang/rustc-dev-guide

14 commits in e359ee27fc3da3356d71a732128c0a1abe02e53a..41a96ab971cb45e2a184df20619ad1829765c990
2023-02-11 06:41:56 UTC to 2023-01-31 18:42:30 UTC

- Add a citation file (rust-lang/rustc-dev-guide#1550)
- Improve git submodule help (rust-lang/rustc-dev-guide#1587)
- update examples for rustc 1.69.0-nightly (e1eaa2d5d 2023-02-06) (rust-lang/rustc-dev-guide#1590)
- Replace settings.json with x.py setup note (rust-lang/rustc-dev-guide#1588)
- Do not add accept header on linkcheck (rust-lang/rustc-dev-guide#1586)
- Fixed small grammar mistake in monomorph.md (rust-lang/rustc-dev-guide#1585)
- update bootstrap guide (rust-lang/rustc-dev-guide#1583)
- Use host symlink for custom rustup toolchain (rust-lang/rustc-dev-guide#1580)
- Fix broken links (rust-lang/rustc-dev-guide#1577)
- Add section on comparing types (rust-lang/rustc-dev-guide#1570)
- Update rustfmt path (rust-lang/rustc-dev-guide#1574)
- fix wrong heading level (rust-lang/rustc-dev-guide#1573)
- fix incorrect position of `Clarification of build command's stdout` (rust-lang/rustc-dev-guide#1572)
- extend bootstrap related documentations (rust-lang/rustc-dev-guide#1563)
2023-02-13 23:25:14 +01:00
Matthias Krüger
56193b0e60
Rollup merge of #107985 - alesito85:master, r=ChrisDenton
Added another error to be processed in fallback

This pull request addresses the problem of Rust not being able to read file/directory metadata because the current user doesn't have permission to read the file and are thus inaccessible.

One particular example is `System Volume Information`. But any example can be made by having a file/directory, which the current user can't access even though the system does allow to view the metadata, which is handled by the fallback.

The fallback exists to get the metadata but it was limited to one error type. Having added ERROR_ACCESS_DENIED per Chris Denton's suggestion, file/directory properties are now properly read.

Solution suggested by Chris Denton https://github.com/nushell/nushell/issues/6857#issuecomment-1426847135
2023-02-13 23:25:13 +01:00
Matthias Krüger
5915309645
Rollup merge of #107971 - saethlin:mir-opt-ub, r=cjgillot
Clearly document intentional UB in mir-opt tests

All of the changed mir-opt test input files did not pass Miri. Now they do.

r? `@cjgillot` because there's a CopyProp test in here that I do not fully understand
2023-02-13 23:25:13 +01:00