]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agoRollup merge of #89370 - RalfJung:ctfe-aggregate-rvalue, r=oli-obk
Manish Goregaokar [Fri, 1 Oct 2021 01:05:26 +0000 (18:05 -0700)]
Rollup merge of #89370 - RalfJung:ctfe-aggregate-rvalue, r=oli-obk

CTFE: tweak aggregate rvalue handling

I have not looked at this code in ages... I think Miri does not even hit it, since (most?) aggregate rvalues are lowered somewhere in the MIR pipeline, but CTFE does hit it.

So this adds some extra sanity assertions, and removes a ZST special case -- ZST should only be special cased fairly late (when the actual memory access happens); e.g. `!` is a ZST and we still want `copy_op` to be called for it since it will perform validation (and raise UB, since `!` is never valid).

2 years agoRollup merge of #89314 - notriddle:notriddle/lint-fix-enum-variant-match, r=davidtwco
Manish Goregaokar [Fri, 1 Oct 2021 01:05:25 +0000 (18:05 -0700)]
Rollup merge of #89314 - notriddle:notriddle/lint-fix-enum-variant-match, r=davidtwco

fix(lint): don't suggest refutable patterns to "fix" irrefutable bind

In function arguments and let bindings, do not suggest changing `C` to `Foo::C` unless `C` is the only variant of `Foo`, because it won't work.

The general warning is still kept, because code like this is confusing.

Fixes #88730

p.s. `src/test/ui/lint/lint-uppercase-variables.rs` already tests the one-variant case.

2 years agoRollup merge of #89306 - devnexen:haiku_ncpus, r=nagisa
Manish Goregaokar [Fri, 1 Oct 2021 01:05:24 +0000 (18:05 -0700)]
Rollup merge of #89306 - devnexen:haiku_ncpus, r=nagisa

thread: implements available_concurrency on haiku

2 years agoRollup merge of #89303 - guswynn:std_suspend, r=dtolnay
Manish Goregaokar [Fri, 1 Oct 2021 01:05:23 +0000 (18:05 -0700)]
Rollup merge of #89303 - guswynn:std_suspend, r=dtolnay

Add `#[must_not_suspend]` to some types in std

I am not sure what else should have it? `Ref`?

2 years agoRollup merge of #89248 - hkmatsumoto:suggest-similarly-named-assoc-items, r=estebank
Manish Goregaokar [Fri, 1 Oct 2021 01:05:22 +0000 (18:05 -0700)]
Rollup merge of #89248 - hkmatsumoto:suggest-similarly-named-assoc-items, r=estebank

Suggest similarly named associated items in trait impls

Fix #85942

Previously, the compiler didn't suggest similarly named associated items unlike we do in many situations. This patch adds such diagnostics for associated functions, types, and constants.

2 years agoRollup merge of #89202 - estebank:infer-call-type, r=oli-obk
Manish Goregaokar [Fri, 1 Oct 2021 01:05:21 +0000 (18:05 -0700)]
Rollup merge of #89202 - estebank:infer-call-type, r=oli-obk

Resolve infered types when complaining about unexpected call type

```
error[E0618]: expected function, found `{integer}`
  --> $DIR/call-block.rs:2:13
   |
LL |     let _ = {42}();
   |             ^^^^--
   |             |
   |             call expression requires function
```
instead of
```
error[E0618]: expected function, found `_`
  --> $DIR/call-block.rs:2:13
   |
LL |     let _ = {42}();
   |             ^^^^--
   |             |
   |             call expression requires function
```

2 years agoRollup merge of #88782 - asquared31415:issue-79559, r=cjgillot
Manish Goregaokar [Fri, 1 Oct 2021 01:05:20 +0000 (18:05 -0700)]
Rollup merge of #88782 - asquared31415:issue-79559, r=cjgillot

Fix ICE when `start` lang item has wrong generics

In my previous pr #87875 I missed the requirements on the `start` lang item due to its relative difficulty to test and opting for more conservative estimates.  This fixes that by updating the requirement to be exactly one generic type.

The `start` lang item should have exactly one generic type for the return type of the `main` fn ptr passed to it.  I believe having zero would previously *sometimes* compile (often with the use of `fn() -> ()` as the fn ptr but it was likely UB to call if the return type of `main` was not `()` as far as I know) however it also sometimes would not for various errors including ICEs and LLVM errors depending on exact situations.  Having more than 1 generic has always failed with an ICE because only the one generic type is expected and provided.

Fixes #79559, fixes #73584, fixes #83117 (all duplicates)
Relevant to #9307

r? ````@cjgillot````

2 years agoAuto merge of #89282 - sexxi-goose:fix-88118, r=nikomatsakis
bors [Thu, 30 Sep 2021 20:23:47 +0000 (20:23 +0000)]
Auto merge of #89282 - sexxi-goose:fix-88118, r=nikomatsakis

2229: Consume IfLet expr

When using the IfLet guard feature, we can ICE when attempting to resolve PlaceBuilders.
For pattern matching, we currently don't consume the IfLet expression when "visiting" the arms leading us to not "read" all variables and hence not being able to resolve them.

r? `@nikomatsakis`
Closes https://github.com/rust-lang/rust/issues/88118

2 years agoAuto merge of #87998 - nneonneo:master, r=oli-obk
bors [Thu, 30 Sep 2021 13:23:09 +0000 (13:23 +0000)]
Auto merge of #87998 - nneonneo:master, r=oli-obk

Avoid spurious "previous iteration of loop" errors

Only follow backwards edges during `get_moved_indexes` if the move path is definitely initialized at loop entry. Otherwise, the error occurred prior to the loop, so we ignore the backwards edges to avoid generating misleading "value moved here, in previous iteration of loop" errors.

This patch also slightly improves the analysis of inits, including `NonPanicPathOnly` initializations (which are ignored by `drop_flag_effects::for_location_inits`). This is required for the definite initialization analysis, but may also help find certain skipped reinits in rare cases.

Patch passes all non-ignored src/test/ui testcases.

Fixes #72649.

2 years agoAuto merge of #86853 - usbalbin:const_try, r=oli-obk
bors [Thu, 30 Sep 2021 10:35:24 +0000 (10:35 +0000)]
Auto merge of #86853 - usbalbin:const_try, r=oli-obk

Constify ?-operator for Result and Option

Try to make `?`-operator usable in `const fn` with `Result` and `Option`, see #74935 . Note that the try-operator itself was constified in #87237.

TODO
* [x] Add tests for const T -> T conversions
* [x] cleanup commits
* [x] Remove `#![allow(incomplete_features)]`
* [?] Await decision in #86808 - I'm not sure
* [x] Await support for parsing `~const` in bootstrapping compiler
* [x] Tracking issue(s)? - #88674

2 years agoAuto merge of #89250 - Aaron1011:keep-bound-region-names, r=estebank
bors [Thu, 30 Sep 2021 07:33:59 +0000 (07:33 +0000)]
Auto merge of #89250 - Aaron1011:keep-bound-region-names, r=estebank

Don't anonymize bound region names during typeck

Once this anonymization has performed, we have no
way of recovering the original names during NLL
borrow checking. Keeping the original names allows
error messages in full NLL mode to contain the original
bound region names.

As a result, the typeck results may contain types that
differ only in the names used for their bound regions. However,
anonimization of bound regions does not guarantee that
all distinct types are unqual (e.g. not subtypes of each other).
For example, `for<'a> fn(&'a u32, &'a u32)` and
`for<'b, 'c> fn(&'b u32, &'c u32)` are subtypes of each other,
as explained here:

https://github.com/rust-lang/rust/blob/63cc2bb3d07d6c726dfcdc5f95cbe5ed4760641a/compiler/rustc_infer/src/infer/nll_relate/mod.rs#L682-L690

Therefore, any code handling types with higher-ranked regions already
needs to handle the case where two distinct `Ty`s are 'actually'
equal.

2 years agoAuto merge of #89386 - ehuss:rollup-idf4dmj, r=ehuss
bors [Thu, 30 Sep 2021 04:51:41 +0000 (04:51 +0000)]
Auto merge of #89386 - ehuss:rollup-idf4dmj, r=ehuss

Rollup of 13 pull requests

Successful merges:

 - #87428 (Fix union keyword highlighting in rustdoc HTML sources)
 - #88412 (Remove ignore-tidy-undocumented-unsafe from core::slice::sort)
 - #89098 (Fix generics where bounds order)
 - #89232 (Improve help for recursion limit errors)
 - #89294 (:arrow_up: rust-analyzer)
 - #89297 (Remove Never variant from clean::Type enum)
 - #89311 (Add unit assignment to MIR for `asm!()`)
 - #89313 (PassWrapper: handle function rename from upstream D36850)
 - #89315 (Clarify that `CString::from_vec_unchecked` appends 0 byte.)
 - #89335 (Optimize is_sorted for Range and RangeInclusive)
 - #89366 (rustdoc: Remove lazy_static dependency)
 - #89377 (Update cargo)
 - #89378 (Update books)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoRollup merge of #89378 - ehuss:update-books, r=ehuss
Eric Huss [Thu, 30 Sep 2021 02:33:45 +0000 (19:33 -0700)]
Rollup merge of #89378 - ehuss:update-books, r=ehuss

Update books

## nomicon

1 commits in fe6227eb3c8533200c52dffa42ef1b6f2f02c40e..2747c4bb2cbc0639b733793ddb0bf4e9daa2634e
2021-08-31 05:42:38 +0900 to 2021-09-19 17:33:32 +0900
- Clarify a bit of wording (rust-lang/nomicon#310)

## reference

2 commits in 0e5ed7a4bec065f0cc18c35d1c904639e095314d..13747275bd14c2d2b453100498532f9ae5504769
2021-08-29 17:33:21 +0900 to 2021-09-24 17:44:04 +0900
-  (rust-lang/reference#1087)
- Document RangeFrom patterns (rust-lang/reference#900)

## book

4 commits in fcb5e0ea68112d85a1d29a7a7335978ef2a02181..eb1282ec444db94055fa9531b6f3f803e86bb382
2021-08-31 21:26:19 -0400 to 2021-09-16 21:17:09 -0400
- Rust 1.55 (rust-lang/book#2890)
- Chapter 3.3: Remove unused variable (rust-lang/book#2877)
- Appendix (operators and symbols): remove extra space (rust-lang/book#2876)
- Chapter 17.1: add missing comma (rust-lang/book#2867)

## rust-by-example

2 commits in 9d4132b56c4999cd3ce1aeca5f1b2f2cb0d11c24..28aca4a36962c709bce301c03114b5589381dfb8
2021-09-14 06:56:00 -0300 to 2021-09-25 08:19:51 -0300
- fix formatting (rust-lang/rust-by-example#1463)
- involving === verb, involved === adjective (rust-lang/rust-by-example#1461)

## rustc-dev-guide

7 commits in 9198465b6ca8bed669df0cbb67c0e6d0b140803c..d1f03cbaa39d9164f5fe4b9b93762668142e0dad
2021-09-12 11:50:44 -0500 to 2021-09-24 12:00:29 +0900
- Fix a typo on closure.md (rust-lang/rustc-dev-guide#1218)
- const generics update
- s/--blessed/--bless/
- Make indentation consistent in example vscode config file
- Suggests `--edition=2018` argument when using stage0/bin/rustfmt directly
- `ty::Unevaluated`: dealing with unused substs (rust-lang/rustc-dev-guide#1190)
- Parallel codegen (rust-lang/rustc-dev-guide#1206)

2 years agoRollup merge of #89377 - ehuss:update-cargo, r=ehuss
Eric Huss [Thu, 30 Sep 2021 02:33:44 +0000 (19:33 -0700)]
Rollup merge of #89377 - ehuss:update-cargo, r=ehuss

Update cargo

5 commits in 0121d66aa2ef5ffa9735f86c2b56f5fdc5a837a6..d56b42c549dbb7e7d0f712c51b39400260d114d4
2021-09-22 16:08:27 +0000 to 2021-09-27 13:44:18 +0000
- Allow `cargo update --precise` with metadata. (rust-lang/cargo#9945)
- Support path_in_vcs as part of cargo_vcs_metadata (rust-lang/cargo#9866)
- Doc about InstallTracker files and `install.root` (rust-lang/cargo#9948)
- Add some clarity on the license/license-file warning. (rust-lang/cargo#9941)
- Fix the problem that help cannot be displayed properly (rust-lang/cargo#9933)

2 years agoRollup merge of #89366 - GuillaumeGomez:remove-lazy-static, r=jyn514
Eric Huss [Thu, 30 Sep 2021 02:33:43 +0000 (19:33 -0700)]
Rollup merge of #89366 - GuillaumeGomez:remove-lazy-static, r=jyn514

rustdoc: Remove lazy_static dependency

The macro was used in only one place and there are equivalents in the std, so it seemed weird to keep it around...

I think running a perf check would be a good idea though, just in case.

r? ``@jyn514``

2 years agoRollup merge of #89335 - mbrubeck:range-is-sorted, r=cuviper
Eric Huss [Thu, 30 Sep 2021 02:33:42 +0000 (19:33 -0700)]
Rollup merge of #89335 - mbrubeck:range-is-sorted, r=cuviper

Optimize is_sorted for Range and RangeInclusive

The [`Step`] trait guarantees that `Range<impl Step>` yields items in sorted order.  We can override `Iterator::is_sorted` based on this guarantee, as we already do for `Iterator::min` and `max`.

Thank you to ``@fiveseven-lambda`` who pointed this out [on the Rust Users Forum](https://users.rust-lang.org/t/is-sorted-method-in-impl-iterator-for-range/64717).

[`Step`]: https://doc.rust-lang.org/stable/std/iter/trait.Step.html

2 years agoRollup merge of #89315 - et342:cstr_from_vec_unchecked_doc, r=yaahc
Eric Huss [Thu, 30 Sep 2021 02:33:41 +0000 (19:33 -0700)]
Rollup merge of #89315 - et342:cstr_from_vec_unchecked_doc, r=yaahc

Clarify that `CString::from_vec_unchecked` appends 0 byte.

2 years agoRollup merge of #89313 - durin42:llvm-14-thinLTOResolvePrevailingInModule, r=nikic
Eric Huss [Thu, 30 Sep 2021 02:33:40 +0000 (19:33 -0700)]
Rollup merge of #89313 - durin42:llvm-14-thinLTOResolvePrevailingInModule, r=nikic

PassWrapper: handle function rename from upstream D36850

thinLTOResolvePrevailingInModule became thinLTOFinalizeInModule and
gained the ability to propagate noRecurse and noUnwind function
attributes. I ran codegen tests with it both on and off, as the upstream
patch uses it in both modes, and the tests pass both ways. Given that,
it seemed reasonable to go ahead and let the propagation be enabled in
rustc, and see what happens. See https://reviews.llvm.org/D36850 for
more examples of how the new version of the function gets used.

r? ``@nikic`` cc ``@nagisa``

2 years agoRollup merge of #89311 - FabianWolff:issue-89305, r=oli-obk
Eric Huss [Thu, 30 Sep 2021 02:33:39 +0000 (19:33 -0700)]
Rollup merge of #89311 - FabianWolff:issue-89305, r=oli-obk

Add unit assignment to MIR for `asm!()`

Fixes #89305. `ExprKind::LlvmInlineAsm` gets a `push_assign_unit()` here:
https://github.com/rust-lang/rust/blob/2b6ed3b675475abc01ce7e68bb75b457f0c85684/compiler/rustc_mir_build/src/build/expr/into.rs#L475-L479

The same should probably happen for `ExprKind::InlineAsm`, which fixes the "use of possibly-uninitialized variable" error described in #89305.

2 years agoRollup merge of #89297 - GuillaumeGomez:remove-never-from-type-enum, r=camelid
Eric Huss [Thu, 30 Sep 2021 02:33:38 +0000 (19:33 -0700)]
Rollup merge of #89297 - GuillaumeGomez:remove-never-from-type-enum, r=camelid

Remove Never variant from clean::Type enum

Fixes #89287.

r? ``@camelid``

2 years agoRollup merge of #89294 - lnicola:rust-analyzer-2021-09-27, r=lnicola
Eric Huss [Thu, 30 Sep 2021 02:33:38 +0000 (19:33 -0700)]
Rollup merge of #89294 - lnicola:rust-analyzer-2021-09-27, r=lnicola

:arrow_up: rust-analyzer

2 years agoRollup merge of #89232 - rossmacarthur:fix-76424, r=wesleywiser
Eric Huss [Thu, 30 Sep 2021 02:33:37 +0000 (19:33 -0700)]
Rollup merge of #89232 - rossmacarthur:fix-76424, r=wesleywiser

Improve help for recursion limit errors

- Tweak help message and suggested limit (handle `0` case).
- Add test for #75602 (it was already fixed, maybe can be resolved too).

Fixes #76424

2 years agoRollup merge of #89098 - GuillaumeGomez:where-bounds-order, r=camelid
Eric Huss [Thu, 30 Sep 2021 02:33:36 +0000 (19:33 -0700)]
Rollup merge of #89098 - GuillaumeGomez:where-bounds-order, r=camelid

Fix generics where bounds order

Fixes #88809.

Like said on the above issue, the issue is that we were expecting `Symbol` comparisons to be string-based but they are integer-based (because `Symbol` is an integer), messing up the bounds order. To fix it, I simply stored into a `FxIndexMap` instead.

r? ``@jyn514``

2 years agoRollup merge of #88412 - mdsn:slice-sort-safety, r=dtolnay
Eric Huss [Thu, 30 Sep 2021 02:33:35 +0000 (19:33 -0700)]
Rollup merge of #88412 - mdsn:slice-sort-safety, r=dtolnay

Remove ignore-tidy-undocumented-unsafe from core::slice::sort

Write down the missing safety arguments to be able to remove `ignore-tidy-undocumented-unsafe` from `core::slice::sort`.

Helps with #66219

``@rustbot`` label C-cleanup T-libs

2 years agoRollup merge of #87428 - GuillaumeGomez:union-highlighting, r=notriddle
Eric Huss [Thu, 30 Sep 2021 02:33:34 +0000 (19:33 -0700)]
Rollup merge of #87428 - GuillaumeGomez:union-highlighting, r=notriddle

Fix union keyword highlighting in rustdoc HTML sources

I followed this logic: if I find an ident "union", I check if it followed by another ident or not. If it's the case, then I consider this is a keyword because it's declaring a union type.

To do so I created a new Iterator which allows to peek the next items without moving the current iterator position.

This is part of https://github.com/rust-lang/rust/issues/85016. If the fix makes sense, I'll extend it to other weak keywords (the issue only mentions they exist but https://doc.rust-lang.org/nightly/reference/keywords.html#weak-keywords only talks about `dyn` and `'static` so not sure if there is anything else to be done?).

cc `@notriddle` (you're one of the last ones who worked on this part of rustdoc so here you go :wink: )
r? `@jyn514`

2 years agoAuto merge of #89110 - Aaron1011:adjustment-span, r=estebank
bors [Thu, 30 Sep 2021 01:40:30 +0000 (01:40 +0000)]
Auto merge of #89110 - Aaron1011:adjustment-span, r=estebank

Use larger span for adjustment THIR expressions

Currently, we use a relatively 'small' span for THIR
expressions generated by an 'adjustment' (e.g. an autoderef,
autoborrow, unsizing). As a result, if a borrow generated
by an adustment ends up causing a borrowcheck error, for example:

```rust
let mut my_var = String::new();
let my_ref = &my_var
my_var.push('a');
my_ref;
```

then the span for the mutable borrow may end up referring
to only the base expression (e.g. `my_var`), rather than
the method call which triggered the mutable borrow
(e.g. `my_var.push('a')`)

Due to a quirk of the MIR borrowck implementation,
this doesn't always get exposed in migration mode,
but it does in many cases.

This commit makes THIR building consistently use 'larger'
spans for adjustment expressions. These spans are recoded
when we first create the adjustment during typecheck. For
example, an autoref adjustment triggered by a method call
will record the span of the entire method call.

The intent of this change it make it clearer to users
when it's the specific way in which a variable is
used (for example, in a method call) that produdes
a borrowcheck error. For example, an error message
claiming that a 'mutable borrow occurs here' might
be confusing if it just points at a usage of a variable
(e.g. `my_var`), when no `&mut` is in sight. Pointing
at the entire expression should help to emphasize
that the method call itself is responsible for
the mutable borrow.

In several cases, this makes the `#![feature(nll)]` diagnostic
output match up exactly with the default (migration mode) output.
As a result, several `.nll.stderr` files end up getting removed
entirely.

2 years agoAuto merge of #89380 - ehuss:fix-windows-llvm, r=Mark-Simulacrum
bors [Wed, 29 Sep 2021 22:39:40 +0000 (22:39 +0000)]
Auto merge of #89380 - ehuss:fix-windows-llvm, r=Mark-Simulacrum

Fix Windows LLVM issue.

GitHub image 20210928.2 added LLVM 12.0.1 to the stock image.  However, the `lldb` executable doesn't work, it fails with:

> C:/Program Files/LLVM/bin/lldb.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory

We probably don't want to start testing LLDB on windows anyways (at least not without intent).

The hacky solution for now is to just delete the system LLVM.

2 years agoFix Windows LLVM issue.
Eric Huss [Wed, 29 Sep 2021 22:27:44 +0000 (15:27 -0700)]
Fix Windows LLVM issue.

2 years agoUpdate books
Eric Huss [Wed, 29 Sep 2021 21:37:40 +0000 (14:37 -0700)]
Update books

2 years agoUpdate cargo
Eric Huss [Wed, 29 Sep 2021 21:07:04 +0000 (14:07 -0700)]
Update cargo

2 years agoRemove Never variant from clean::Type enum
Guillaume Gomez [Mon, 27 Sep 2021 12:20:52 +0000 (14:20 +0200)]
Remove Never variant from clean::Type enum

2 years agoAuto merge of #89011 - bjorn3:restructure_rt, r=dtolnay
bors [Wed, 29 Sep 2021 17:58:08 +0000 (17:58 +0000)]
Auto merge of #89011 - bjorn3:restructure_rt, r=dtolnay

Restructure std::rt

These changes should reduce binary size slightly while at the same slightly improving performance of startup, thread spawning and `std::thread::current()`. I haven't verified if the compiler is able to optimize some of these cases already, but at least for some others the compiler is unable to do these optimizations as they slightly change behavior in cases where program startup would crash anyway by omitting a backtrace and panic location.

I can remove 6f6bb16 if preferred.

2 years agoCTFE: extra assertions for Aggregate rvalues; remove unnecessarily eager special...
Ralf Jung [Wed, 29 Sep 2021 17:47:41 +0000 (13:47 -0400)]
CTFE: extra assertions for Aggregate rvalues; remove unnecessarily eager special case

2 years agoremove outdated comment
Ralf Jung [Wed, 29 Sep 2021 17:43:22 +0000 (13:43 -0400)]
remove outdated comment

2 years agofix(lint): don't suggest refutable patterns to "fix" irrefutable bind
Michael Howell [Tue, 28 Sep 2021 00:16:04 +0000 (17:16 -0700)]
fix(lint): don't suggest refutable patterns to "fix" irrefutable bind

In function arguments and let bindings, do not suggest changing `C` to `Foo::C`
unless `C` is the only variant of `Foo`, because it won't work.

The general warning is still kept, because code like this is confusing.

Fixes #88730

2 years agoRemove lazy_static dependency
Guillaume Gomez [Wed, 29 Sep 2021 15:20:52 +0000 (17:20 +0200)]
Remove lazy_static dependency

2 years agoAuto merge of #89331 - GuillaumeGomez:rollup-b10unye, r=GuillaumeGomez
bors [Wed, 29 Sep 2021 10:39:41 +0000 (10:39 +0000)]
Auto merge of #89331 - GuillaumeGomez:rollup-b10unye, r=GuillaumeGomez

Rollup of 8 pull requests

Successful merges:

 - #87260 (Libgccjit codegen)
 - #89212 (x.py: run `rustup toolchain link` in setup)
 - #89233 (Hide `<...> defined here` note if the source is not available)
 - #89235 (make junit output more consistent with default format)
 - #89255 (Fix incorrect disambiguation suggestion for associated items)
 - #89276 (Fix the population of the `union.impls` field)
 - #89283 (Add regression test for issue #83564)
 - #89318 (rustc_session: Remove lint store from `Session`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

2 years agoAuto merge of #89328 - flip1995:clippyup, r=Manishearth
bors [Wed, 29 Sep 2021 07:44:23 +0000 (07:44 +0000)]
Auto merge of #89328 - flip1995:clippyup, r=Manishearth

Update Clippy

Delayed Clippy sync

r? `@Manishearth`

2 years agoref/refmut
Gus Wynn [Wed, 29 Sep 2021 00:57:08 +0000 (17:57 -0700)]
ref/refmut

2 years agoAuto merge of #88950 - Nadrieril:deconstruct-pat, r=oli-obk
bors [Wed, 29 Sep 2021 00:16:17 +0000 (00:16 +0000)]
Auto merge of #88950 - Nadrieril:deconstruct-pat, r=oli-obk

Add an intermediate representation to exhaustiveness checking

The exhaustiveness checking algorithm keeps deconstructing patterns into a `Constructor` and some `Fields`, but does so a bit all over the place. This PR introduces a new representation for patterns that already has that information, so we only compute it once at the start.
I find this makes code easier to follow. In particular `DeconstructedPat::specialize` is a lot simpler than what happened before, and more closely matches the description of the algorithm. I'm also hoping this could help for the project of librarifying exhaustiveness for rust_analyzer since it decouples the algorithm from `rustc_middle::Pat`.

2 years agoImprove help for recursion limit errors
Ross MacArthur [Tue, 28 Sep 2021 20:16:42 +0000 (22:16 +0200)]
Improve help for recursion limit errors

2 years agoOptimize is_sorted for Range and RangeInclusive
Matt Brubeck [Tue, 28 Sep 2021 19:50:38 +0000 (12:50 -0700)]
Optimize is_sorted for Range and RangeInclusive

The `Step` trait guarantees that `Range<impl Step>` yields items in
sorted order.  We can override the `Iterator::is_sorted` method based on
this guarantee, as we already do for `Iterator::min` and `max`.

2 years agoRollup merge of #89318 - petrochenkov:lstore, r=oli-obk
Guillaume Gomez [Tue, 28 Sep 2021 18:00:18 +0000 (20:00 +0200)]
Rollup merge of #89318 - petrochenkov:lstore, r=oli-obk

rustc_session: Remove lint store from `Session`

It was added in https://github.com/rust-lang/rust/pull/75534, but after the cleanup in https://github.com/rust-lang/rust/pull/87070 it's no longer necessary.

2 years agoRollup merge of #89283 - camelid:issue-83564-test, r=davidtwco
Guillaume Gomez [Tue, 28 Sep 2021 18:00:17 +0000 (20:00 +0200)]
Rollup merge of #89283 - camelid:issue-83564-test, r=davidtwco

Add regression test for issue #83564

cc #83564

r? ``@davidtwco``

2 years agoRollup merge of #89276 - Urgau:fix-union-impls, r=GuillaumeGomez
Guillaume Gomez [Tue, 28 Sep 2021 18:00:17 +0000 (20:00 +0200)]
Rollup merge of #89276 - Urgau:fix-union-impls, r=GuillaumeGomez

Fix the population of the `union.impls` field

This pull-request fix the population of the `union.impls` field that was forgot when the `Union` type was introduce as a split from the `Struct` type https://github.com/rust-lang/rust/pull/81500.

``@rustbot`` label +T-rustdoc +A-rustdoc-json

2 years agoRollup merge of #89255 - FabianWolff:issue-88806, r=cjgillot
Guillaume Gomez [Tue, 28 Sep 2021 18:00:16 +0000 (20:00 +0200)]
Rollup merge of #89255 - FabianWolff:issue-88806, r=cjgillot

Fix incorrect disambiguation suggestion for associated items

Fixes #88806. I have not added a new test case, because the erroneous behavior is already present in existing test cases.

2 years agoRollup merge of #89235 - yaahc:junit-formatting, r=kennytm
Guillaume Gomez [Tue, 28 Sep 2021 18:00:15 +0000 (20:00 +0200)]
Rollup merge of #89235 - yaahc:junit-formatting, r=kennytm

make junit output more consistent with default format

The default format of libtest includes new-lines between each section to ensure the label output from cargo is on it's own line

<pre><font color="#A1B56C"><b>❯</b></font> <font color="#A1B56C">cargo</font><font color="#D8D8D8"> </font><font color="#A1B56C">test</font>
<font color="#A1B56C"><b>   Compiling</b></font> test-test v0.1.0 (/home/jlusby/tmp/test-test)
<font color="#A1B56C"><b>    Finished</b></font> test [unoptimized + debuginfo] target(s) in 0.59s
<font color="#A1B56C"><b>     Running</b></font> unittests (target/debug/deps/test_test-639f369234319c09)

running 1 test
test tests::it_works ... <font color="#A1B56C">ok</font>

test result: <font color="#A1B56C">ok</font>. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

<font color="#A1B56C"><b>   Doc-tests</b></font> test-test

running 0 tests

test result: <font color="#A1B56C">ok</font>. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

</pre>

But when the junit outputter was added to libtest these newlines were omitted, resulting in some "fun" output when run via cargo.

Note the `Doc-tests` text at the end of the first line of xml.

<pre><font color="#A1B56C"><b>❯</b></font> <font color="#A1B56C">cargo</font><font color="#D8D8D8"> </font><font color="#A1B56C">test</font><font color="#D8D8D8"> </font><font color="#A1B56C">--</font><font color="#D8D8D8"> </font><font color="#A1B56C">-Zunstable-options</font><font color="#D8D8D8"> </font><font color="#A1B56C">--format</font><font color="#D8D8D8"> </font><font color="#A1B56C">junit</font>
<font color="#A1B56C"><b>    Finished</b></font> test [unoptimized + debuginfo] target(s) in 0.00s
<font color="#A1B56C"><b>     Running</b></font> unittests (target/debug/deps/test_test-639f369234319c09)
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;testsuites&gt;&lt;testsuite name=&quot;test&quot; package=&quot;test&quot; id=&quot;0&quot; errors=&quot;0&quot; failures=&quot;0&quot; tests=&quot;1&quot; skipped=&quot;0&quot; &gt;&lt;testcase classname=&quot;tests&quot; name=&quot;it_works&quot; time=&quot;0&quot;/&gt;&lt;system-out/&gt;&lt;system-err/&gt;&lt;/testsuite&gt;&lt;/testsuites&gt;<font color="#A1B56C"><b>   Doc-tests</b></font> test-test
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;testsuites&gt;&lt;testsuite name=&quot;test&quot; package=&quot;test&quot; id=&quot;0&quot; errors=&quot;0&quot; failures=&quot;0&quot; tests=&quot;0&quot; skipped=&quot;0&quot; &gt;&lt;system-out/&gt;&lt;system-err/&gt;&lt;/testsuite&gt;&lt;/testsuites&gt;

</pre>

After this PR the junit output includes the same style of newlines as the pretty format

<pre><font color="#A1B56C"><b>❯</b></font> <font color="#A1B56C">cargo</font><font color="#D8D8D8"> </font><font color="#A1B56C">test</font><font color="#D8D8D8"> </font><font color="#A1B56C">--</font><font color="#D8D8D8"> </font><font color="#A1B56C">-Zunstable-options</font><font color="#D8D8D8"> </font><font color="#A1B56C">--format</font><font color="#D8D8D8"> </font><font color="#A1B56C">junit</font>
<font color="#A1B56C"><b>   Compiling</b></font> test-test v0.1.0 (/home/jlusby/tmp/test-test)
<font color="#A1B56C"><b>    Finished</b></font> test [unoptimized + debuginfo] target(s) in 0.39s
<font color="#A1B56C"><b>     Running</b></font> unittests (target/debug/deps/test_test-42c2320bb9450c69)

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;testsuites&gt;&lt;testsuite name=&quot;test&quot; package=&quot;test&quot; id=&quot;0&quot; errors=&quot;0&quot; failures=&quot;0&quot; tests=&quot;1&quot; skipped=&quot;0&quot; &gt;&lt;testcase classname=&quot;tests&quot; name=&quot;it_works&quot; time=&quot;0&quot;/&gt;&lt;system-out/&gt;&lt;system-err/&gt;&lt;/testsuite&gt;&lt;/testsuites&gt;

<font color="#A1B56C"><b>   Doc-tests</b></font> test-test

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;testsuites&gt;&lt;testsuite name=&quot;test&quot; package=&quot;test&quot; id=&quot;0&quot; errors=&quot;0&quot; failures=&quot;0&quot; tests=&quot;0&quot; skipped=&quot;0&quot; &gt;&lt;system-out/&gt;&lt;system-err/&gt;&lt;/testsuite&gt;&lt;/testsuites&gt;

</pre>

2 years agoRollup merge of #89233 - FabianWolff:issue-89159, r=estebank
Guillaume Gomez [Tue, 28 Sep 2021 18:00:14 +0000 (20:00 +0200)]
Rollup merge of #89233 - FabianWolff:issue-89159, r=estebank

Hide `<...> defined here` note if the source is not available

Fixes #89159. Similar to #87088.

r? ``@estebank``

2 years agoRollup merge of #89212 - Sl1mb0:xpy-toolchain-link, r=jyn514
Guillaume Gomez [Tue, 28 Sep 2021 18:00:13 +0000 (20:00 +0200)]
Rollup merge of #89212 - Sl1mb0:xpy-toolchain-link, r=jyn514

x.py: run `rustup toolchain link` in setup

Addresses #89206

r? ``@jyn514``

2 years agoRollup merge of #87260 - antoyo:libgccjit-codegen, r=Mark-Simulacrum
Guillaume Gomez [Tue, 28 Sep 2021 18:00:12 +0000 (20:00 +0200)]
Rollup merge of #87260 - antoyo:libgccjit-codegen, r=Mark-Simulacrum

Libgccjit codegen

This PR introduces a subtree for a gcc-based codegen backend to the repository, per decision in https://github.com/rust-lang/compiler-team/issues/442. We do not yet expect to ship this backend on nightly or run tests in CI, but we do verify that the backend checks (i.e., `cargo check`) successfully.

Work is expected to progress primarily in https://github.com/rust-lang/rustc_codegen_gcc, with semi-regular upstreaming, like with other subtrees.

2 years agoMerge commit 'cb7915b00c235e9b5861564f3be78dba330980ee' into clippyup
flip1995 [Tue, 28 Sep 2021 17:03:12 +0000 (18:03 +0100)]
Merge commit 'cb7915b00c235e9b5861564f3be78dba330980ee' into clippyup

2 years agoAuto merge of #7733 - flip1995:rustup, r=flip1995
bors [Tue, 28 Sep 2021 16:42:31 +0000 (16:42 +0000)]
Auto merge of #7733 - flip1995:rustup, r=flip1995

Rustup

This needs a review this time. Especially https://github.com/rust-lang/rust-clippy/commit/521bf8f0fa18c7f130505f0a902ab0e65a76cec2 cc `@camsteffen` I think this is necessary now, because `itertools` is no longer a dependency of `clippy_utils` and therefore this path can't be found :thinking:

( I forgot about the sync last week. I should get to document this process better, so other people can do it when I'm not around )

changelog: none

2 years agoCleanup of rustup changes
flip1995 [Tue, 28 Sep 2021 16:40:06 +0000 (17:40 +0100)]
Cleanup of rustup changes

2 years agoBump nightly version -> 2021-09-28
flip1995 [Tue, 28 Sep 2021 09:54:04 +0000 (10:54 +0100)]
Bump nightly version -> 2021-09-28

2 years agoAllow internal lint INVALID_PATHS for itertools path
flip1995 [Tue, 28 Sep 2021 09:53:11 +0000 (10:53 +0100)]
Allow internal lint INVALID_PATHS for itertools path

Since clippy_utils doesn't depend on the itertools crate anymore, the
lint can't find the path.

2 years agoSuggest similarly named assoc items in trait impls
Hirochika Matsumoto [Sat, 25 Sep 2021 15:53:37 +0000 (00:53 +0900)]
Suggest similarly named assoc items in trait impls

Previously, the compiler didn't suggest similarly named associated items
unlike we do in many situations. This patch adds such diagnostics for
associated functions, types and constants.

2 years agoAuto merge of #89048 - oli-obk:in_tracing_we_trust, r=jackh726
bors [Tue, 28 Sep 2021 14:55:37 +0000 (14:55 +0000)]
Auto merge of #89048 - oli-obk:in_tracing_we_trust, r=jackh726

Add more tracing instrumentation

I changed or added all this while working on a branch and pulled it out so we can merge it on its own.

2 years agoMerge commit 'cd4810de42c57b64b74dae09c530a4c3a41f87b9' into libgccjit-codegen
Antoni Boucher [Tue, 28 Sep 2021 13:33:06 +0000 (09:33 -0400)]
Merge commit 'cd4810de42c57b64b74dae09c530a4c3a41f87b9' into libgccjit-codegen

2 years agoFix warnings (#98)
antoyo [Tue, 28 Sep 2021 13:32:54 +0000 (09:32 -0400)]
Fix warnings (#98)

2 years agoMerge commit '9809f5d21990d9e24b3e9876ea7da756fd4e9def' into libgccjit-codegen
Antoni Boucher [Tue, 28 Sep 2021 13:19:11 +0000 (09:19 -0400)]
Merge commit '9809f5d21990d9e24b3e9876ea7da756fd4e9def' into libgccjit-codegen

2 years agoUpdate to nightly-2021-09-28 (#97)
antoyo [Tue, 28 Sep 2021 13:18:27 +0000 (09:18 -0400)]
Update to nightly-2021-09-28 (#97)

2 years agoMore tracing instrumentation
Oli Scherer [Fri, 20 Aug 2021 13:36:04 +0000 (13:36 +0000)]
More tracing instrumentation

2 years agoAuto merge of #86191 - kawadakk:release-add-solid-support, r=nagisa,estebank,m-ou-se,
bors [Tue, 28 Sep 2021 11:50:33 +0000 (11:50 +0000)]
Auto merge of #86191 - kawadakk:release-add-solid-support, r=nagisa,estebank,m-ou-se,

Add SOLID targets

This PR introduces new tier 3 targets for [SOLID](https://www.kmckk.co.jp/eng/SOLID/) embedded development platform by Kyoto Microcomputer Co., Ltd.

|          Target name           | `target_arch` | `target_vendor` | `target_os`  |
|--------------------------------|---------------|-----------------|--------------|
| `aarch64-kmc-solid_asp3`       | `aarch64`     | `kmc`           | `solid_asp3` |
| `armv7a-kmc-solid_asp3-eabi`   | `arm`         | `kmc`           | `solid_asp3` |
| `armv7a-kmc-solid_asp3-eabihf` | `arm`         | `kmc`           | `solid_asp3` |

## Related PRs

- [ ] `libc`: https://github.com/rust-lang/libc/pull/2227
- [ ] `cc`: https://github.com/alexcrichton/cc-rs/pull/609

## Non-blocking Issues

- [ ] The target kernel can support `Thread::unpark` directly, but this property is not utilized because the underlying kernel feature is used to implement `Condvar` and it's unclear whether `std` should guarantee that parking tokens are not clobbered by other synchronization primitives.
- [ ] The rustc book: The page title "\*-kmc-solid-\*" shows up as "-kmc-solid-" in TOC

## Tier 3 Target Policy

As tier 3 targets, the new targets are required to adhere to [the tier 3 target policy](https://doc.rust-lang.org/nightly/rustc/target-tier-policy.html#tier-3-target-policy) requirements. This section quotes each requirement in entirety and describes how they are met.

> - A tier 3 target must have a designated developer or developers (the "target maintainers") on record to be CCed when issues arise regarding the target. (The mechanism to track and CC such developers may evolve over time.)

See [`src/doc/rustc/src/platform-support/kmc-solid.md`](https://github.com/kawadakk/rust/blob/release-add-solid-support/src/doc/rustc/src/platform-support/kmc-solid.md).

> - Targets must use naming consistent with any existing targets; for instance, a target for the same CPU or OS as an existing Rust target should use the same name for that CPU or OS. Targets should normally use the same names and naming conventions as used elsewhere in the broader ecosystem beyond Rust (such as in other toolchains), unless they have a very good reason to diverge. Changing the name of a target can be highly disruptive, especially once the target reaches a higher tier, so getting the name right is important even for a tier 3 target.
>     - Target names should not introduce undue confusion or ambiguity unless absolutely necessary to maintain ecosystem compatibility. For example, if the name of the target makes people extremely likely to form incorrect beliefs about what it targets, the name should be changed or augmented to disambiguate it.

The new target names follow this format: `$ARCH-$VENDOR-$OS-$ABI`, which is already adopted by most existing targets. `$ARCH` and `$ABI` follow the convention: `aarch64-*` for AArch64, `armv7a-*-eabi` for Armv7-A with EABI. `$OS` is used to distinguish multiple variations of the platform in a somewhat similar way to the Apple targets, though we are only adding one variation in this PR. `$VENDOR` denotes the platform vendor name similarly to the Apple, Solaris, SGX, and VxWorks targets.

`$OS` corresponds to the value of `target_os` and takes the format `solid-$KERNEL`. The inclusion of a hyphen prevents unique decomposition of target names, though the mapping between target names and target attributes isn't trivial in the first place, e.g., because of the Android targets.

More targets may be added later, as we support other base kernels (there are at least three at the point of writing) and are interested in supporting other processor architectures in the future.

> - Tier 3 targets may have unusual requirements to build or use, but must not create legal issues or impose onerous legal terms for the Rust project or for Rust developers or users.
>     - The target must not introduce license incompatibilities.
>     - Anything added to the Rust repository must be under the standard Rust license (`MIT OR Apache-2.0`).
>     - The target must not cause the Rust tools or libraries built for any other host (even when supporting cross-compilation to the target) to depend on any new dependency less permissive than the Rust licensing policy. This applies whether the dependency is a Rust crate that would require adding new license exceptions (as specified by the `tidy` tool in the rust-lang/rust repository), or whether the dependency is a native library or binary. In other words, the introduction of the target must not cause a user installing or running a version of Rust or the Rust tools to be subject to any new license requirements.
>     - If the target supports building host tools (such as `rustc` or `cargo`), those host tools must not depend on proprietary (non-FOSS) libraries, other than ordinary runtime libraries supplied by the platform and commonly used by other binaries built for the target. For instance, `rustc` built for the target may depend on a common proprietary C runtime library or console output library, but must not depend on a proprietary code generation library or code optimization library. Rust's license permits such combinations, but the Rust project has no interest in maintaining such combinations within the scope of Rust itself, even at tier 3.
>     - Targets should not require proprietary (non-FOSS) components to link a functional binary or library.
>     - "onerous" here is an intentionally subjective term. At a minimum, "onerous" legal/licensing terms include but are *not* limited to: non-disclosure requirements, non-compete requirements, contributor license agreements (CLAs) or equivalent, "non-commercial"/"research-only"/etc terms, requirements conditional on the employer or employment of any particular Rust developers, revocable terms, any requirements that create liability for the Rust project or its developers or users, or any requirements that adversely affect the livelihood or prospects of the Rust project or its developers or users.

We intend to make the contribution fully available under the standard Rust license with no additional legal restrictions whatsoever. This PR does not introduce any new dependency less permissive than the Rust license policy, and we are willing to ensure this doesn't happen for future contributions regarding the new targets.

The new targets don't support building host tools.

Although the new targets use a platform-provided C compiler toolchain, it can be substituted by [GNU Arm Embedded Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) for testing purposes.

> - Tier 3 targets should attempt to implement as much of the standard libraries as possible and appropriate (`core` for most targets, `alloc` for targets that can support dynamic memory allocation, `std` for targets with an operating system or equivalent layer of system-provided functionality), but may leave some code unimplemented (either unavailable or stubbed out as appropriate), whether because the target makes it impossible to implement or challenging to implement. The authors of pull requests are not obligated to avoid calling any portions of the standard library on the basis of a tier 3 target not implementing those portions.

Most features are implemented. The following features are not implemented due to the lack of native support:

- `fs::File::{file_attr, truncate, duplicate, set_permissions}`
- `fs::{symlink, link, canonicalize}`
- Process creation
- Command-line arguments

~~Networking is not implemented yet, and we intend to add it as soon as it's ready.~~
Edit (2021-07-07): Networking is now implemented.

Backtrace generation is not really a good fit for embedded targets, so it's intentionally left unimplemented. Unwinding is functional, however.

> - The target must provide documentation for the Rust community explaining how to build for the target, using cross-compilation if possible. If the target supports running tests (even if they do not pass), the documentation must explain how to run tests for the target, using emulation if possible or dedicated hardware if necessary.

See [`src/doc/rustc/src/platform-support/kmc-solid.md`](https://github.com/kawadakk/rust/blob/release-add-solid-support/src/doc/rustc/src/platform-support/kmc-solid.md). Running tests is not supported.

> - Neither this policy nor any decisions made regarding targets shall create any binding agreement or estoppel by any party. If any member of an approving Rust team serves as one of the maintainers of a target, or has any legal or employment requirement (explicit or implicit) that might affect their decisions regarding a target, they must recuse themselves from any approval decisions regarding the target's tier status, though they may otherwise participate in discussions.
>     - This requirement does not prevent part or all of this policy from being cited in an explicit contract or work agreement (e.g. to implement or maintain support for a target). This requirement exists to ensure that a developer or team responsible for reviewing and approving a target does not face any legal threats or obligations that would prevent them from freely exercising their judgment in such approval, even if such judgment involves subjective matters or goes beyond the letter of these requirements.
> - Tier 3 targets must not impose burden on the authors of pull requests, or other developers in the community, to maintain the target. In particular, do not post comments (automated or manual) on a PR that derail or suggest a block on the PR based on a tier 3 target. Do not send automated messages or notifications (via any medium, including via ``@`)` to a PR author or others involved with a PR regarding a tier 3 target, unless they have opted into such messages.
>     - Backlinks such as those generated by the issue/PR tracker when linking to an issue or PR are not considered a violation of this policy, within reason. However, such messages (even on a separate repository) must not generate notifications to anyone involved with a PR who has not requested such notifications.
> - Patches adding or updating tier 3 targets must not break any existing tier 2 or tier 1 target, and must not knowingly break another tier 3 target without approval of either the compiler team or the maintainers of the other tier 3 target.
>     - In particular, this may come up when working on closely related targets, such as variations of the same architecture with different features. Avoid introducing unconditional uses of features that another variation of the target may not have; use conditional compilation or runtime detection, as appropriate, to let each target run code supported by that target.

We acknowledge these requirements and intend to ensure they are met.

There are no closely related targets at the moment.

2 years agoAuto merge of #7727 - flip1995:changelog, r=xFrednet
bors [Tue, 28 Sep 2021 10:27:47 +0000 (10:27 +0000)]
Auto merge of #7727 - flip1995:changelog, r=xFrednet

Update changelog to 1.56

As expected a pretty short changelog, because of the missed sync last release cycle.

[Rendered](https://github.com/flip1995/rust-clippy/blob/changelog/CHANGELOG.md)

changelog: none

2 years agoFix CHANGELOG formatting
flip1995 [Tue, 28 Sep 2021 10:08:40 +0000 (11:08 +0100)]
Fix CHANGELOG formatting

2 years agoMerge remote-tracking branch 'upstream/master' into rustup
flip1995 [Tue, 28 Sep 2021 09:50:56 +0000 (10:50 +0100)]
Merge remote-tracking branch 'upstream/master' into rustup

2 years agoAuto merge of #89293 - TaKO8Ki:fix-confusing-error-for-path-separator-to-refer-to...
bors [Tue, 28 Sep 2021 08:58:41 +0000 (08:58 +0000)]
Auto merge of #89293 - TaKO8Ki:fix-confusing-error-for-path-separator-to-refer-to-an-struct-item, r=estebank

Suggest using the path separator for tuple struct

Fix confusing error message `constructor is not visible here due to private fields` for tuple struct

closes #83450

2 years agorustc_session: Remove lint store from `Session`
Vadim Petrochenkov [Tue, 28 Sep 2021 08:53:33 +0000 (11:53 +0300)]
rustc_session: Remove lint store from `Session`

2 years agoAuto merge of #89277 - jyn514:codeblock-edition, r=GuillaumeGomez
bors [Tue, 28 Sep 2021 05:50:00 +0000 (05:50 +0000)]
Auto merge of #89277 - jyn514:codeblock-edition, r=GuillaumeGomez

Use the correct edition for syntax highlighting doctests

Previously it would unconditionally use edition 2015, which was incorrect.

Helps with https://github.com/rust-lang/rust/issues/89135 in that you can now override the doctest to be 2018 edition instead of being forced to fix the error. This doesn't resolve any of the deeper problems that rustdoc disagrees with most rust users on what a code block is.

cc `@Mark-Simulacrum`

2 years agoAuto merge of #7608 - andrewpollack:7594/while_let_some_result, r=Manishearth
bors [Tue, 28 Sep 2021 05:33:57 +0000 (05:33 +0000)]
Auto merge of #7608 - andrewpollack:7594/while_let_some_result, r=Manishearth

#7594: Adding new 'while_let_some_result' linting

Excited for the opportunity to contribute to Clippy! Since the latest Bay Area Rust Meetup, I've been looking for an opportunity and found it :smile:

Please let me know how I can improve this PR! Much of it is similar to ``[`if_let_some_result`]``, but I followed the description in the issue to create its own linting rules. Looking forward to feedback, and continuing to work on Clippy in the future!

changelog: Renamed Lint: `if_let_some_result` is now called [`match_result_ok`]. Now also handles `while let` case.

2 years agofmt
Manish Goregaokar [Tue, 28 Sep 2021 05:33:45 +0000 (22:33 -0700)]
fmt

2 years agoAdd renamed lint
Manish Goregaokar [Tue, 28 Sep 2021 05:26:14 +0000 (22:26 -0700)]
Add renamed lint

2 years agoUse a single if_chain
Manish Goregaokar [Tue, 28 Sep 2021 05:09:23 +0000 (22:09 -0700)]
Use a single if_chain

2 years agoAdjusting changelog
Andrew Pollack [Sat, 25 Sep 2021 15:39:00 +0000 (08:39 -0700)]
Adjusting changelog

2 years agoRemoved value from changelog to get pass
Andrew Pollack [Tue, 21 Sep 2021 00:34:32 +0000 (17:34 -0700)]
Removed value from changelog to get pass

2 years agoAdding new linting
Andrew Pollack [Mon, 30 Aug 2021 01:49:09 +0000 (18:49 -0700)]
Adding new  linting

2 years agoAdd SOLID targets
Tomoaki Kawada [Tue, 28 Sep 2021 02:20:46 +0000 (11:20 +0900)]
Add SOLID targets

SOLID[1] is an embedded development platform provided by Kyoto
Microcomputer Co., Ltd. This commit introduces a basic Tier 3 support
for SOLID.

# New Targets

The following targets are added:

 - `aarch64-kmc-solid_asp3`
 - `armv7a-kmc-solid_asp3-eabi`
 - `armv7a-kmc-solid_asp3-eabihf`

SOLID's target software system can be divided into two parts: an
RTOS kernel, which is responsible for threading and synchronization,
and Core Services, which provides filesystems, networking, and other
things. The RTOS kernel is a μITRON4.0[2][3]-derived kernel based on
the open-source TOPPERS RTOS kernels[4]. For uniprocessor systems
(more precisely, systems where only one processor core is allocated for
SOLID), this will be the TOPPERS/ASP3 kernel. As μITRON is
traditionally only specified at the source-code level, the ABI is
unique to each implementation, which is why `asp3` is included in the
target names.

More targets could be added later, as we support other base kernels
(there are at least three at the point of writing) and are interested
in supporting other processor architectures in the future.

# C Compiler

Although SOLID provides its own supported C/C++ build toolchain, GNU Arm
Embedded Toolchain seems to work for the purpose of building Rust.

# Unresolved Questions

A μITRON4 kernel can support `Thread::unpark` natively, but it's not
used by this commit's implementation because the underlying kernel
feature is also used to implement `Condvar`, and it's unclear whether
`std` should guarantee that parking tokens are not clobbered by other
synchronization primitives.

# Unsupported or Unimplemented Features

Most features are implemented. The following features are not
implemented due to the lack of native support:

- `fs::File::{file_attr, truncate, duplicate, set_permissions}`
- `fs::{symlink, link, canonicalize}`
- Process creation
- Command-line arguments

Backtrace generation is not really a good fit for embedded targets, so
it's intentionally left unimplemented. Unwinding is functional, however.

## Dynamic Linking

Dynamic linking is not supported. The target platform supports dynamic
linking, but enabling this in Rust causes several problems.

 - The linker invocation used to build the shared object of `std` is
   too long for the platform-provided linker to handle.

 - A linker script with specific requirements is required for the
   compiled shared object to be actually loadable.

As such, we decided to disable dynamic linking for now. Regardless, the
users can try to create shared objects by manually invoking the linker.

## Executable

Building an executable is not supported as the notion of "executable
files" isn't well-defined for these targets.

[1] https://solid.kmckk.com/SOLID/
[2] http://ertl.jp/ITRON/SPEC/mitron4-e.html
[3] https://en.wikipedia.org/wiki/ITRON_project
[4] https://toppers.jp/

2 years agoClarify that `CString::from_vec_unchecked` appends 0 byte.
et342 [Tue, 28 Sep 2021 00:51:52 +0000 (05:51 +0500)]
Clarify that `CString::from_vec_unchecked` appends 0 byte.

2 years agoFix/count trailing zeroes (#95)
antoyo [Tue, 28 Sep 2021 00:35:45 +0000 (20:35 -0400)]
Fix/count trailing zeroes (#95)

* Fix count trailing zeroes
* Fix pop count
* Fix bit reverse

2 years agoAdd unit assignment to MIR for `asm!()`
Fabian Wolff [Mon, 27 Sep 2021 21:06:16 +0000 (23:06 +0200)]
Add unit assignment to MIR for `asm!()`

2 years agoFix/mismatch types (#94)
antoyo [Mon, 27 Sep 2021 23:31:24 +0000 (19:31 -0400)]
Fix/mismatch types (#94)

* Refactor test.sh script

* Fix mismatched types error

2 years agoPassWrapper: handle function rename from upstream D36850
Augie Fackler [Mon, 27 Sep 2021 21:03:08 +0000 (17:03 -0400)]
PassWrapper: handle function rename from upstream D36850

thinLTOResolvePrevailingInModule became thinLTOFinalizeInModule and
gained the ability to propagate noRecurse and noUnwind function
attributes. I ran codegen tests with it both on and off, as the upstream
patch uses it in both modes, and the tests pass both ways. Given that,
it seemed reasonable to go ahead and let the propagation be enabled in
rustc, and see what happens. See https://reviews.llvm.org/D36850 for
more examples of how the new version of the function gets used.

2 years agoApply suggestions from code review
Jane Lusby [Mon, 27 Sep 2021 21:50:35 +0000 (14:50 -0700)]
Apply suggestions from code review

Co-authored-by: kennytm <kennytm@gmail.com>
2 years agoAuto merge of #89249 - Aaron1011:higher-ranked-cause, r=estebank
bors [Mon, 27 Sep 2021 21:29:19 +0000 (21:29 +0000)]
Auto merge of #89249 - Aaron1011:higher-ranked-cause, r=estebank

Improve cause information for NLL higher-ranked errors

This PR has several interconnected pieces:

1. In some of the NLL region error code, we now pass
   around an `ObligationCause`, instead of just a plain `Span`.
   This gets forwarded into `fulfill_cx.register_predicate_obligation`
   during error reporting.
2. The general InferCtxt error reporting code is extended to
   handle `ObligationCauseCode::BindingObligation`
3. A new enum variant `ConstraintCategory::Predicate` is added.
   We try to avoid using this as the 'best blame constraint' - instead,
   we use it to enhance the `ObligationCause` of the `BlameConstraint`
   that we do end up choosing.

As a result, several NLL error messages now contain the same
"the lifetime requirement is introduced here" message as non-NLL
errors.

Having an `ObligationCause` available will likely prove useful
for future improvements to NLL error messages.

2 years agoAuto merge of #89214 - smoelius:register_tool, r=petrochenkov
bors [Mon, 27 Sep 2021 18:21:14 +0000 (18:21 +0000)]
Auto merge of #89214 - smoelius:register_tool, r=petrochenkov

Pass real crate-level attributes to `pre_expansion_lint`

The PR concerns the unstable feature `register_tool` (#66079).

The feature's implementation requires the attributes of the crate being compiled, so that when attributes like `allow(foo::bar)` are encountered, it can be verified that `register_tool(foo)` appears in the crate root.

However, the crate's attributes are not readily available during early lint passes. Specifically, on this line, `krate.attrs` appears to be the attributes of the current source file, not the attributes of the whole crate: https://github.com/rust-lang/rust/blob/bf642323d621dcefeef1d8ab4711aae36e357615/compiler/rustc_lint/src/context.rs#L815

Consequently, "unknown tool" errors were being produced when `allow(foo::bar)` appeared in a submodule, even though `register_tool(foo)` appeared in the crate root.

EDITED: The proposed fix is to obtain the real crate-level attributes in `configure_and_expand` and pass them to `pre_expansion_lint`. (See `@petrochenkov's` [comment](https://github.com/rust-lang/rust/pull/89214#issuecomment-926927072) below.)

The original "prosed fix" text follows.

---

The proposed fix is to add an `error_on_unknown_tool` flag to `LintLevelsBuilder`. The flag controls whether "unknown tool" errors are emitted. The flag is set during late passes, but not earlier.

More specifically, this PR contains two commits:

* The first adds a `known-tool-in-submodule` UI test that does not currently pass.
* The second adds the `error_on_unknown_tool` flag. The new test passes with the addition of this flag.

This change has the added benefit of eliminating some errors that were duplicated in existing tests.

To the reviewer: please check that I implemented the UI test correctly.

2 years agothread: implements available_concurrency on haiku
David Carlier [Mon, 27 Sep 2021 17:51:52 +0000 (18:51 +0100)]
thread: implements available_concurrency on haiku

2 years ago#[feature] not required for lint result
Gus Wynn [Mon, 27 Sep 2021 15:49:36 +0000 (08:49 -0700)]
#[feature] not required for lint result

2 years agoRemove `DefId` from `ConstraintCategory::Predicate`
Aaron Hill [Mon, 27 Sep 2021 15:45:34 +0000 (10:45 -0500)]
Remove `DefId` from `ConstraintCategory::Predicate`

This shirnks the size of `ConstraintCategory`, hopefully
fixing a performance regression.

2 years agolock types
Gus Wynn [Mon, 27 Sep 2021 15:43:30 +0000 (08:43 -0700)]
lock types

2 years agoImprove cause information for NLL higher-ranked errors
Aaron Hill [Sat, 28 Aug 2021 23:45:37 +0000 (18:45 -0500)]
Improve cause information for NLL higher-ranked errors

This PR has several interconnected pieces:

1. In some of the NLL region error code, we now pass
   around an `ObligationCause`, instead of just a plain `Span`.
   This gets forwarded into `fulfill_cx.register_predicate_obligation`
   during error reporting.
2. The general InferCtxt error reporting code is extended to
   handle `ObligationCauseCode::BindingObligation`
3. A new enum variant `ConstraintCategory::Predicate` is added.
   We try to avoid using this as the 'best blame constraint' - instead,
   we use it to enhance the `ObligationCause` of the `BlameConstraint`
   that we do end up choosing.

As a result, several NLL error messages now contain the same
"the lifetime requirement is introduced here" message as non-NLL
errors.

Having an `ObligationCause` available will likely prove useful
for future improvements to NLL error messages.

2 years agoAuto merge of #89285 - jackh726:issue-88862, r=nikomatsakis
bors [Mon, 27 Sep 2021 14:08:13 +0000 (14:08 +0000)]
Auto merge of #89285 - jackh726:issue-88862, r=nikomatsakis

Don't normalize opaque types with escaping late-bound regions

Fixes #88862

Turns out, this has some really bad perf implications in large types (issue #88862). While we technically can handle them fine, it doesn't change test output either way. For now, revert with an added benchmark. Future attempts to change this back will have to consider perf.

Needs a perf run once https://github.com/rust-lang/rustc-perf/pull/1033 is merged

r? `@nikomatsakis`

2 years agoCleanup fix for global initialization (#93)
antoyo [Mon, 27 Sep 2021 13:34:06 +0000 (09:34 -0400)]
Cleanup fix for global initialization (#93)

* Cleanup fix for global initialization
* Remove linker script hack
* Use v0 symbol mangling
* Fix warnings

2 years agoAuto merge of #89263 - TaKO8Ki:suggest-both-immutable-and-mutable-trait-implementatio...
bors [Mon, 27 Sep 2021 11:10:40 +0000 (11:10 +0000)]
Auto merge of #89263 - TaKO8Ki:suggest-both-immutable-and-mutable-trait-implementations, r=estebank

Suggest both of immutable and mutable trait implementations

closes #85865

2 years agoUpdate changelog to 1.56
flip1995 [Mon, 27 Sep 2021 09:56:49 +0000 (11:56 +0200)]
Update changelog to 1.56

2 years agoAuto merge of #7664 - matthiaskrgr:bump_to_2021, r=flip1995
bors [Mon, 27 Sep 2021 09:14:10 +0000 (09:14 +0000)]
Auto merge of #7664 - matthiaskrgr:bump_to_2021, r=flip1995

bump clippy crates to edition 2021

Also helps with dogfooding edition 2021 a bit. :)
Tests passed locally.

---

changelog: bump edition from 2018 to 2021

2 years agoAuto merge of #7692 - workingjubilee:float-cmp-not-wrong, r=giraffate
bors [Mon, 27 Sep 2021 09:00:31 +0000 (09:00 +0000)]
Auto merge of #7692 - workingjubilee:float-cmp-not-wrong, r=giraffate

Demote float_cmp to pedantic

See this issue: https://github.com/rust-lang/rust-clippy/issues/7666

This is one of the most frequently suppressed lints. It is deny-by-default. It is not actually clearly wrong, as there are many instances where direct float comparison is actually desirable. It is only after operating on floats that they may lose precision, and that depends greatly on the operation. As most correctness lints have a much higher standard of error, being based on hard and fast binary logic, this should not be amongst them.

A linter is not a substitute for observing the math carefully and running tests, and doing the desirable thing is even more likely to lead one to want exact comparisons.

changelog: Demote [`float_cmp`] from correctness to pedantic lints

2 years agoAuto merge of #89203 - GuillaumeGomez:cleanup-rustdoc-types, r=camelid
bors [Mon, 27 Sep 2021 07:54:16 +0000 (07:54 +0000)]
Auto merge of #89203 - GuillaumeGomez:cleanup-rustdoc-types, r=camelid

Clean up clean/types.rs file by making the implementations follow the type declaration

This PR doesn't change anything, it simply moves things around: when reading the code, I realized a few times that a type declaration and implementations on it might be separated by some other type declarations, which makes the reading much more complicated. I put back impl and declaration together.

r? `@camelid`

2 years ago:arrow_up: rust-analyzer
Laurențiu Nicola [Mon, 27 Sep 2021 07:39:05 +0000 (10:39 +0300)]
:arrow_up: rust-analyzer

2 years agosuggest path for tuple struct
Takayuki Maeda [Mon, 27 Sep 2021 07:28:38 +0000 (16:28 +0900)]
suggest path for tuple struct

2 years agoAuto merge of #89182 - GuillaumeGomez:boostrap-explicit-request, r=Mark-Simulacrum
bors [Mon, 27 Sep 2021 05:00:59 +0000 (05:00 +0000)]
Auto merge of #89182 - GuillaumeGomez:boostrap-explicit-request, r=Mark-Simulacrum

Simplify explicit request check and allow to run "doc src/librustdoc" even without config set

Originally I wanted to allow the command `doc src/librustdoc` to work when passed explicitly but then `@Mark-Simulacrum` recommended me to generalize it, so here we are!

r? `@Mark-Simulacrum`