Commit Graph

105957 Commits

Author SHA1 Message Date
Santiago Pastorino a13a7d74ca Remove unneeded & on match pattern 2020-01-28 10:12:54 -03:00
Santiago Pastorino 5f1caa4032 ./x.py fmt 2020-01-28 10:12:54 -03:00
Santiago Pastorino 22a4827dcb Place::ty_from takes local by value 2020-01-28 10:12:53 -03:00
Santiago Pastorino b5b6be0ab7 Local field on PlaceRef and RootPlace is not a reference anymore 2020-01-28 10:12:53 -03:00
Santiago Pastorino 39d93b1ef8 codegen_place and related functions can take PlaceRef by value 2020-01-28 10:12:53 -03:00
Santiago Pastorino 10b19f6dee make_integrate_local takes Local by value 2020-01-28 10:12:53 -03:00
Santiago Pastorino 4a86c55f56 record_killed_borrows_for_local takes Local by value 2020-01-28 10:12:53 -03:00
Santiago Pastorino a71cc4ca11 Place conflict functions take Local by value 2020-01-28 10:12:52 -03:00
bors b181835a6b Auto merge of #68529 - TimDiekmann:rename-alloc, r=Amanieu
Rename `Alloc` to `AllocRef`

The allocator-wg has decided to merge this change upstream in https://github.com/rust-lang/wg-allocators/issues/8#issuecomment-577122958.

This renames `Alloc` to `AllocRef` because types that implement `Alloc` are a reference, smart pointer, or ZSTs. It is not possible to have an allocator like `MyAlloc([u8; N])`, that owns the memory and also implements `Alloc`, since that would mean, that moving a `Vec<T, MyAlloc>` would need to correct the internal pointer, which is not possible as we don't have move constructors.

For further explanation please see https://github.com/rust-lang/wg-allocators/issues/8#issuecomment-489464843 and the comments after that one.

Additionally it clarifies the semantics of `Clone` on an allocator. In the case of `AllocRef`, it is clear that the cloned handle still points to the same allocator instance, and that you can free data allocated from one handle with another handle.

The initial proposal was to rename `Alloc` to `AllocHandle`, but `Ref` expresses the semantics better than `Handle`. Also, the only appearance of `Handle` in `std` are for windows specific resources, which might be confusing.

Blocked on https://github.com/rust-lang/miri/pull/1160
2020-01-28 08:44:20 +00:00
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
Tim Diekmann 7ca25db816 Rename Alloc to AllocRef 2020-01-27 21:39:51 +01: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