Commit Graph

105947 Commits

Author SHA1 Message Date
bors 82018665a5 Auto merge of #68234 - CAD97:slice-from-raw-parts, r=KodrAus
Stabilize ptr::slice_from_raw_parts[_mut]

Closes #36925, the tracking issue.
Initial impl: #60667

r? @rust-lang/libs

In addition to stabilizing, I've adjusted the example of `ptr::slice_from_raw_parts` to use `slice_from_raw_parts` instead of `slice_from_raw_parts_mut`, which was unnecessary for the example as written.
2020-01-28 05:31:34 +00:00
bors 67fae2241b Auto merge of #68587 - JohnTitor:rollup-fz45xwc, r=JohnTitor
Rollup of 11 pull requests

Successful merges:

 - #68200 (Stabilize the debug_map_key_value feature)
 - #68383 (Clean up E0205 explanation)
 - #68412 (Clean up E0207 explanation)
 - #68454 (clean up E0214 explanation)
 - #68482 (clean up error codes explanation)
 - #68563 (Don't call `tcx.fn_sig` on closures)
 - #68570 (Bump LLVM submodule to fix LLVM assertion failure in MSP430 interrupt generation.)
 - #68571 (check_match: extract common logic)
 - #68573 (Clean up E0262 explanation)
 - #68575 (Disable the testcase for Vxworks.)
 - #68581 (Add support for icebreakers-cleanup-crew commands)

Failed merges:

r? @ghost
2020-01-28 02:17:10 +00:00
Yuki Okushi aac5788a61
Rollup merge of #68581 - spastorino:support-ice-breaker-cleanup-crew, r=Dylan-DPC
Add support for icebreakers-cleanup-crew commands

r? @nikomatsakis
2020-01-28 10:48:23 +09:00
Yuki Okushi 41110edeeb
Rollup merge of #68575 - Wind-River:master_2020, r=alexcrichton
Disable the testcase for Vxworks.

r? @alexcrichton
2020-01-28 10:48:21 +09:00
Yuki Okushi ee79cf28db
Rollup merge of #68573 - GuillaumeGomez:clean-up-e0262, r=Dylan-DPC
Clean up E0262 explanation

r? @Dylan-DPC
2020-01-28 10:48:20 +09:00
Yuki Okushi 8bc0e48540
Rollup merge of #68571 - Centril:check_in_cx, r=oli-obk
check_match: extract common logic

This is part of work on `hir::ExprKind::Let` which I thought made sense on its own (though makes even more sense with `::Let`).

r? @oli-obk
2020-01-28 10:48:19 +09:00
Yuki Okushi 1e47ca518f
Rollup merge of #68570 - cr1901:msp430-fix-1-2020, r=alexcrichton
Bump LLVM submodule to fix LLVM assertion failure in MSP430 interrupt generation.

This PR brings in changes introduced by [this cherry-pick](https://github.com/rust-lang/llvm-project/pull/37) to the Rust repository.

Nightlies downloaded from `rustup` do not appear to have llvm assertions enabled; the assertion failure [sometimes](https://github.com/YuhanLiin/msp430fr2355-quickstart/issues/3) causes link errors that shouldn't occur. I couldn't find any indication of other bugs; however, it should still be fixed.
2020-01-28 10:48:17 +09:00
Yuki Okushi c38e97cc61
Rollup merge of #68563 - Aaron1011:fix/fn-sig-closure, r=varkor
Don't call `tcx.fn_sig` on closures

Fixes #68542
2020-01-28 10:48:16 +09:00
Yuki Okushi 8ed586581d
Rollup merge of #68482 - GuillaumeGomez:clean-up-err-codes, r=Dylan-DPC
clean up error codes explanation

r? @Dylan-DPC
2020-01-28 10:48:14 +09:00
Yuki Okushi 39407c9ab7
Rollup merge of #68454 - GuillaumeGomez:clean-up-e0214, r=Dylan-DPC
clean up E0214 explanation

r? @Dylan-DPC
2020-01-28 10:48:12 +09:00
Yuki Okushi dc33cd3500
Rollup merge of #68412 - GuillaumeGomez:clean-up-e0207, r=Dylan-DPC
Clean up E0207 explanation

r? @Dylan-DPC
2020-01-28 10:48:10 +09:00
Yuki Okushi 2bfa058074
Rollup merge of #68383 - GuillaumeGomez:clean-up-e0205, r=Dylan-DPC
Clean up E0205 explanation

r? @Dylan-DPC
2020-01-28 10:48:05 +09:00
Yuki Okushi 5c42ffe150
Rollup merge of #68200 - KodrAus:stabilize/debug_map_key_value, r=alexcrichton
Stabilize the debug_map_key_value feature

RFC: https://github.com/rust-lang/rfcs/pull/2696
Tracking issue: #62482

Stabilizes the `debug_map_key_value` feature, which covers:

```rust
impl<'a, 'b> DebugMap<'a, 'b> {
    pub fn key(&mut self, key: &dyn fmt::Debug) -> &mut DebugMap<'a, 'b> {}
    pub fn value(&mut self, value: &dyn fmt::Debug) -> &mut DebugMap<'a, 'b> {}
}
```

These methods are small and self-contained, and are used as the basis for the existing `DebugMap::entry` method, so have been used in the wild for the last 6 months or so.
2020-01-28 10:48:04 +09:00
Ashley Mannix 2c07a621ef stabilize the debug_map_key_value feature 2020-01-28 11:15:22 +10:00
bors 0859451592 Auto merge of #68580 - Mark-Simulacrum:rollup-r80xhus, r=Mark-Simulacrum
Rollup of 3 pull requests

Successful merges:

 - #68459 (don't clone types that are copy, round two.)
 - #68576 (update miri)
 - #68579 (Update cargo)

Failed merges:

r? @ghost
2020-01-27 22:59:38 +00:00
Santiago Pastorino 3124603f09
Add support for icebreakers-cleanup-crew commands 2020-01-27 15:58:27 -03:00
Mark Rousskov b0f5f670b3
Rollup merge of #68579 - ehuss:update-cargo, r=Mark-Simulacrum
Update cargo

2 commits in b68b0978ab8012f871c80736fb910d14b89c4498..9d32b7b01409024b165545c568b1525d86e2b7cb
2020-01-24 18:26:23 +0000 to 2020-01-26 18:27:29 +0000
- Polish code to clarify meaning (rust-lang/cargo#7836)
- Store maximum queue length (rust-lang/cargo#7829)
2020-01-27 13:42:03 -05:00
Mark Rousskov 69362b9c9e
Rollup merge of #68576 - jonhoo:bump-miri, r=oli-obk
update miri

Bump miri for rust-lang/miri#1150

r? @oli-obk
2020-01-27 13:42:02 -05:00
Mark Rousskov aa6e58b352
Rollup merge of #68459 - matthiaskrgr:clone_on_copy2, r=eddyb
don't clone types that are copy, round two.

Apparently fixing some of these issues makes clippy find even more so I did a couple of rounds now.

r? @eddyb
2020-01-27 13:42:00 -05:00
Eric Huss e1a837c08f Update cargo 2020-01-27 10:30:44 -08:00
Jon Gjengset 98724074d7
Bump miri for rust-lang/miri#1150 2020-01-27 12:47:51 -05:00
Umesh Kalappa 2a38eb3a86 Disable the testcase for Vxworks. 2020-01-27 09:37:57 -08:00
Guillaume Gomez 4b0fe2ac63 Clean up E0262 explanation 2020-01-27 17:43:02 +01:00
Mazdak Farrokhzad de7f16d431 check_match: extract common logic 2020-01-27 16:53:45 +01:00
William D. Jones b0174ecf34 Fix LLVM assertion failure in MSP430 interrupt generation. 2020-01-27 10:42:48 -05:00
Guillaume Gomez 833ffd7b83
Update src/librustc_error_codes/error_codes/E0220.md
Co-Authored-By: Dylan DPC <dylan.dpc@gmail.com>
2020-01-27 16:06:38 +01:00
bors 8a79d08fa5 Auto merge of #68566 - pietroalbini:rollup-22hbo3e, r=pietroalbini
Rollup of 4 pull requests

Successful merges:

 - #67928 (Update RELEASES.md for 1.41.0)
 - #68370 (Ensure that we error when calling "const extern fn" with wrong convention)
 - #68531 ([self-profiler] Two small cleanups)
 - #68562 (Fix spelling errors)

Failed merges:

r? @ghost
2020-01-27 11:59:57 +00:00
Pietro Albini 5f9284c95f
Rollup merge of #68562 - hjung4:spell, r=jonas-schievink
Fix spelling errors
2020-01-27 12:50:52 +01:00
Pietro Albini 9188bab4db
Rollup merge of #68531 - wesleywiser:cleanup_self_profiler, r=michaelwoerister
[self-profiler] Two small cleanups

r? @michaelwoerister
2020-01-27 12:50:50 +01:00
Pietro Albini 7e824343d3
Rollup merge of #68370 - Aaron1011:const-extern-test, r=RalfJung
Ensure that we error when calling "const extern fn" with wrong convention

See #64926
2020-01-27 12:50:49 +01:00
Pietro Albini c8d5f4dcd1
Rollup merge of #67928 - XAMPPRocky:relnotes-1.41.0, r=pietroalbini
Update RELEASES.md for 1.41.0

### [Rendered](https://github.com/XAMPPRocky/rust/blob/relnotes-1.41.0/RELEASES.md)

cc @rust-lang/release
2020-01-27 12:50:47 +01:00
bors 1d5f6d41e1 Auto merge of #68165 - thomcc:lt_ones, r=sfackler
Add leading_ones and trailing_ones methods to the primitive integer types

I was surprised these were missing (given that `leading_zeros` and `trailing_zeros` exist), and they seem trivial and hopefully not controversial.

Note that there's some precedent in that `count_ones` and `count_zeros` are both supported even though only one of these has an intrinsic.

I'm not sure if these need a `rustc_const_unstable` flag (the tests don't seem to mind that it's missing). I just made them const, since there's not really any reason for these to be non-const when the `_zeros` variants are const.

Note: My understanding is trivial stuff like (hopefully) this can land without an RFC, but I'm not fully sure about the process though. Questions like "when does the tracking issue get filed?", are a total mystery to me. So, any guidance is appreciated, and sorry in advance if I should have gone through some more involved process for this.
2020-01-27 08:42:56 +00:00
Aaron Hill 9ad1a8c97f
Don't call `tcx.fn_sig` on closures
Fixes #68542
2020-01-27 00:49:56 -05:00
comet 9a78c2b11d
update 2020-01-26 22:52:13 -06:00
Aaron Hill 4a650324f8
Ensure that we error when calling "const extern fn" with wrong convention
See #64926
2020-01-26 23:05:36 -05:00
bors 320ada6479 Auto merge of #68447 - estebank:sugg-type-param, r=petrochenkov
Suggest defining type parameter when appropriate

```
error[E0412]: cannot find type `T` in this scope
 --> file.rs:3:12
  |
3 | impl Trait<T> for Struct {}
  |     -      ^ not found in this scope
  |     |
  |     help: you might be missing a type parameter: `<T>`
```

Fix #64298.
2020-01-27 03:01:59 +00:00
Matthias Krüger f7dcdcc0b9 make matches exhaustive 2020-01-27 01:18:18 +01:00
Matthias Krüger ec61761e46 don't clone types that are copy, round two. 2020-01-27 01:18:18 +01:00
bors c3681d62ee Auto merge of #68122 - Centril:stabilize-transparent-enums, r=petrochenkov
Stabilize `#[repr(transparent)]` on `enum`s in Rust 1.42.0

# Stabilization report

The following is the stabilization report for `#![feature(transparent_enums)]`.

Tracking issue: https://github.com/rust-lang/rust/issues/60405
[Version target](https://forge.rust-lang.org/#current-release-versions): 1.42 (2020-01-30 => beta, 2020-03-12 => stable).

## User guide

A `struct` with only a single non-ZST field (let's call it `foo`) can be marked as `#[repr(transparent)]`. Such a `struct` has the same layout and ABI as `foo`. Here, we also extend this ability to `enum`s with only one variant, subject to the same restrictions as for the equivalent `struct`. That is, you can now write:

```rust
#[repr(transparent)]
enum Foo { Bar(u8) }
```

which, in terms of layout and ABI, is equivalent to:

```rust
#[repr(transparent)]
struct Foo(u8);
```

## Motivation

This is not a major feature that will unlock new and important use-cases. The utility of `repr(transparent)` `enum`s is indeed limited. However, there is still some value in it:

1. It provides conceptual simplification of the language in terms of treating univariant `enum`s and `struct`s the same, as both are product types. Indeed, languages like Haskell only have `data` as the only way to construct user-defined ADTs in the language.

2. In rare occasions, it might be that the user started out with a univariant `enum` for whatever reason (e.g. they thought they might extend it later). Now they want to make this `enum` `transparent` without breaking users by turning it into a `struct`. By lifting the restriction here, now they can.

## Technical specification

The reference specifies [`repr(transparent)` on a `struct`](https://doc.rust-lang.org/nightly/reference/type-layout.html#the-transparent-representation) as:

> ### The transparent Representation
>
>  The `transparent` representation can only be used on `struct`s that have:
>  - a single field with non-zero size, and
>  - any number of fields with size 0 and alignment 1 (e.g. `PhantomData<T>`).
>
> Structs with this representation have the same layout and ABI as the single non-zero sized field.
>
> This is different than the `C` representation because a struct with the `C` representation will always have the ABI of a `C` `struct` while, for example, a struct with the `transparent` representation with a primitive field will have the ABI of the primitive field.
>
> Because this representation delegates type layout to another type, it cannot be used with any other representation.

Here, we amend this to include univariant `enum`s as well with the same static restrictions and the same effects on dynamic semantics.

## Tests

All the relevant tests are adjusted in the PR diff but are recounted here:

- `src/test/ui/repr/repr-transparent.rs` checks that `repr(transparent)` on an `enum` must be univariant, rather than having zero or more than one variant. Restrictions on the fields inside the only variants, like for those on `struct`s, are also checked here.

- A number of codegen tests are provided as well:
    - `src/test/codegen/repr-transparent.rs` (the canonical test)
    - `src/test/codegen/repr-transparent-aggregates-1.rs`
    - `src/test/codegen/repr-transparent-aggregates-2.rs`
    - `src/test/codegen/repr-transparent-aggregates-3.rs`

- `src/test/ui/lint/lint-ctypes-enum.rs` tests the interactions with the `improper_ctypes` lint.

## History

- 2019-04-30, RFC https://github.com/rust-lang/rfcs/pull/2645
  Author: @mjbshaw
  Reviewers: The Language Team

  This is the RFC that proposes allowing `#[repr(transparent)]` on `enum`s and `union`.

- 2019-06-11, PR https://github.com/rust-lang/rust/pull/60463
  Author: @mjbshaw
  Reviewers: @varkor and @rkruppe

  The PR implements the RFC aforementioned in full.

- 2019, PR https://github.com/rust-lang/rust/pull/67323
  Author: @Centril
  Reviewers: @davidtwco

  The PR reorganizes the static checks taking advantage of the fact that `struct`s and `union`s are internally represented as ADTs with a single variant.

- This PR stabilizes `transparent_enums`.

## Related / possible future work

The remaining work here is to figure out the semantics of `#[repr(transparent)]` on `union`s and stabilize those. This work continues to be tracked in https://github.com/rust-lang/rust/issues/60405.
2020-01-27 00:05:57 +00:00
bors a237641c7d Auto merge of #68407 - eddyb:iter-macro-backtrace, r=petrochenkov
rustc_span: return an impl Iterator instead of a Vec from macro_backtrace.

Having `Span::macro_backtrace` produce an `impl Iterator<Item = ExpnData>` allows #67359 to use it instead of rolling its own similar functionality.

The move from `MacroBacktrace` to `ExpnData` (which the first two commits are prerequisites for) both eliminates unnecessary allocations, and is strictly more flexible (exposes more information).

r? @petrochenkov
2020-01-26 21:01:13 +00:00
Esteban Küber 697fdc568e Suggest defining type parameter when appropriate
```
error[E0412]: cannot find type `T` in this scope
 --> file.rs:3:12
  |
3 | impl Trait<T> for Struct {}
  |     -      ^ not found in this scope
  |     |
  |     help: you might be missing a type parameter: `<T>`
```

Fix #64298.
2020-01-26 10:57:18 -08:00
Eduard-Mihai Burtescu 6980f82c0d rustc_span: return an impl Iterator instead of a Vec from macro_backtrace. 2020-01-26 17:18:55 +02:00
Eduard-Mihai Burtescu 75284f8cbd rustc_span: replace MacroBacktrace with ExpnData. 2020-01-26 17:18:55 +02:00
Eduard-Mihai Burtescu a7b0aa0675 rustc_span: move pretty syntax from macro_backtrace to ExpnKind::descr. 2020-01-26 17:18:55 +02:00
Eduard-Mihai Burtescu 787c458eeb Don't use ExpnKind::descr to get the name of a bang macro. 2020-01-26 17:18:54 +02:00
bors 698fcd38fa Auto merge of #68545 - estebank:verbose-bound-display, r=petrochenkov
Use better bound names in `-Zverbose` mode

r? @petrochenkov as per https://github.com/rust-lang/rust/pull/67951/files#r365524015
2020-01-26 11:48:34 +00:00
bors 3d8778d767 Auto merge of #68522 - estebank:impl-trait-sugg-2, r=oli-obk
Further improve `impl Trait`/`dyn Trait` suggestions

After reading [_Returning Trait Objects_ by Bryce Fisher-Fleig](https://bryce.fisher-fleig.org/blog/returning-trait-objects/), [I noticed that](https://www.reddit.com/r/rust/comments/esueur/returning_trait_objects/ffczl4k/) #68195 had a few bugs due to not ignoring `ty::Error`.

- Account for `ty::Error`.
- Account for `if`/`else` and `match` blocks when pointing at return types and referencing their types.
- Increase the multiline suggestion output from 6 lines to 20.
2020-01-26 08:36:23 +00:00
bors fe1e81561a Auto merge of #68517 - oli-obk:spaces2, r=nagisa
Don't use spaces before type ascription like colons

Split out of #67133 to make that PR simpler

r? @eddyb
2020-01-26 05:13:14 +00:00
bors 086b2a49ec Auto merge of #68031 - Marwes:fold_list, r=estebank
perf: Avoid creating a SmallVec if nothing changes during a fold

Not sure if this helps but in theory it should be less work than what
the current micro optimization does for `ty::Predicate` lists.

(It would explain the overhead I am seeing from `perf`.)
2020-01-26 01:51:50 +00:00
bors 83beb0a118 Auto merge of #68546 - JohnTitor:rollup-znuot4b, r=JohnTitor
Rollup of 5 pull requests

Successful merges:

 - #68485 (add a test for #60976)
 - #68498 (Add some type-alias-impl-trait regression tests)
 - #68514 (Use Self instead of self return type)
 - #68534 (Update submodules to rust-lang)
 - #68540 (clean up error codes E0229 and E0261)

Failed merges:

r? @ghost
2020-01-25 22:44:39 +00:00