]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoCorrectly handle binders inside trait predicates
Matthew Jasper [Sat, 30 May 2020 16:03:32 +0000 (17:03 +0100)]
Correctly handle binders inside trait predicates

4 years agolint: normalize projections using opaque types
David Wood [Fri, 12 Jun 2020 16:42:08 +0000 (17:42 +0100)]
lint: normalize projections using opaque types

This commit normalizes projections which contain opaque types (opaque types
are otherwise linted against, which is would have previously made the
test cases added in this commit fail).

Signed-off-by: David Wood <david@davidtw.co>
4 years agoTry to suggest dereferences when trait selection failed.
Donough Liu [Sat, 20 Jun 2020 10:30:12 +0000 (18:30 +0800)]
Try to suggest dereferences when trait selection failed.

4 years agoDecouple `Autoderef` with `FnCtxt` and move `Autoderef` to `librustc_trait_selection`.
Donough Liu [Sat, 20 Jun 2020 10:29:13 +0000 (18:29 +0800)]
Decouple `Autoderef` with `FnCtxt` and move `Autoderef` to `librustc_trait_selection`.

4 years agoRemove uses of `Vec::remove_item`
Lukas Kalbertodt [Sat, 20 Jun 2020 09:38:15 +0000 (11:38 +0200)]
Remove uses of `Vec::remove_item`

4 years agoPre-compute `hir_id_to_def_id` mapping
marmeladema [Fri, 12 Jun 2020 18:17:44 +0000 (19:17 +0100)]
Pre-compute `hir_id_to_def_id` mapping

4 years agoRemove `HirId` to `NodeId` conversion APIs
marmeladema [Fri, 12 Jun 2020 17:43:58 +0000 (18:43 +0100)]
Remove `HirId` to `NodeId` conversion APIs

4 years agoRemove `NodeId` to `HirId` conversion APIs
marmeladema [Fri, 12 Jun 2020 17:36:58 +0000 (18:36 +0100)]
Remove `NodeId` to `HirId` conversion APIs

4 years agoMove `trait_map` into `hir::Crate`
marmeladema [Fri, 12 Jun 2020 17:13:10 +0000 (18:13 +0100)]
Move `trait_map` into `hir::Crate`

4 years agoDeprecate `Vec::remove_item`
Lukas Kalbertodt [Sat, 20 Jun 2020 09:09:53 +0000 (11:09 +0200)]
Deprecate `Vec::remove_item`

4 years agoremove `pop_placeholders`
Bastian Kauschke [Sat, 6 Jun 2020 14:41:48 +0000 (16:41 +0200)]
remove `pop_placeholders`

4 years agoint -> i32
Bastian Kauschke [Sat, 6 Jun 2020 10:05:37 +0000 (12:05 +0200)]
int -> i32

4 years agoskol -> placeholder
Bastian Kauschke [Sat, 6 Jun 2020 09:52:02 +0000 (11:52 +0200)]
skol -> placeholder

4 years agobootstrap: Factor out common code in supported_sanitizers
Tomasz Miąsko [Mon, 8 Jun 2020 00:00:00 +0000 (00:00 +0000)]
bootstrap: Factor out common code in supported_sanitizers

4 years agoci: Enable sanitizers on dist-aarch64-linux
Tomasz Miąsko [Thu, 4 Jun 2020 00:00:00 +0000 (00:00 +0000)]
ci: Enable sanitizers on dist-aarch64-linux

4 years agobootstrap: Build sanitizer runtimes for aarch64-unknown-linux-gnu
Tomasz Miąsko [Sat, 6 Jun 2020 00:00:00 +0000 (00:00 +0000)]
bootstrap: Build sanitizer runtimes for aarch64-unknown-linux-gnu

4 years agoSupport sanitizers on aarch64-unknown-linux-gnu
Tomasz Miąsko [Thu, 4 Jun 2020 00:00:00 +0000 (00:00 +0000)]
Support sanitizers on aarch64-unknown-linux-gnu

4 years agoUpdate existing test cases.
jumbatm [Mon, 6 Apr 2020 10:00:42 +0000 (20:00 +1000)]
Update existing test cases.

- Allow ClashingExternDecl for lint-dead-code-3
- Update test case for #5791
- Update test case for #1866
- Update extern-abi-from-macro test case

4 years agoAdd clashing-extern-fn.rs stderr.
jumbatm [Sun, 5 Apr 2020 14:01:24 +0000 (00:01 +1000)]
Add clashing-extern-fn.rs stderr.

4 years agoAdd ClashingExternDecl lint.
jumbatm [Fri, 19 Jun 2020 08:14:54 +0000 (18:14 +1000)]
Add ClashingExternDecl lint.

This lint checks that all declarations for extern fns of the same name
are declared with the same types.

4 years agoAdd ClashingExternDecl test case.
jumbatm [Tue, 31 Mar 2020 08:24:59 +0000 (18:24 +1000)]
Add ClashingExternDecl test case.

4 years agoAuto merge of #73528 - Manishearth:rollup-7djz8nd, r=Manishearth
bors [Sat, 20 Jun 2020 02:45:08 +0000 (02:45 +0000)]
Auto merge of #73528 - Manishearth:rollup-7djz8nd, r=Manishearth

Rollup of 16 pull requests

Successful merges:

 - #71420 (Specialization is unsound)
 - #71899 (Refactor `try_find` a little)
 - #72689 (add str to common types)
 - #72791 (update coerce docs and unify relevant tests)
 - #72934 (forbid mutable references in all constant contexts except for const-fns)
 - #73027 (Make `need_type_info_err` more conservative)
 - #73347 (Diagnose use of incompatible sanitizers)
 - #73359 (shim.rs: avoid creating `Call` terminators calling `Self`)
 - #73399 (Clean up E0668 explanation)
 - #73436 (Clean up E0670 explanation)
 - #73440 (Add src/librustdoc as an alias for src/tools/rustdoc)
 - #73442 (pretty/mir: const value enums with no variants)
 - #73452 (Unify region variables when projecting associated types)
 - #73458 (Use alloc::Layout in DroplessArena API)
 - #73484 (Update the doc for std::prelude to the correct behavior)
 - #73506 (Bump Rustfmt and RLS)

Failed merges:

r? @ghost

4 years agoRollup merge of #73506 - Xanewok:update-rls, r=Xanewok
Manish Goregaokar [Sat, 20 Jun 2020 02:43:13 +0000 (19:43 -0700)]
Rollup merge of #73506 - Xanewok:update-rls, r=Xanewok

Bump Rustfmt and RLS

Fixes #73406
Fixes #73199
Fixes #73407
Fixes #73200

cc @calebcartwright @topecongiro

r? @ghost

Let's see what CI says first

4 years agoRollup merge of #73484 - poliorcetics:use-prelude-doc, r=sfackler
Manish Goregaokar [Sat, 20 Jun 2020 02:43:11 +0000 (19:43 -0700)]
Rollup merge of #73484 - poliorcetics:use-prelude-doc, r=sfackler

Update the doc for std::prelude to the correct behavior

Fixes #64686.

One line change to ensure the docs are correct about the behavior of the compiler when inserting`std::prelude::v1`.

I don't think examples are necessary but I can add some (especially those from the original issue) if needed.

4 years agoRollup merge of #73458 - tmiasko:arena-layout, r=matthewjasper
Manish Goregaokar [Sat, 20 Jun 2020 02:43:09 +0000 (19:43 -0700)]
Rollup merge of #73458 - tmiasko:arena-layout, r=matthewjasper

Use alloc::Layout in DroplessArena API

4 years agoRollup merge of #73452 - matthewjasper:auto-rec, r=nikomatsakis
Manish Goregaokar [Sat, 20 Jun 2020 02:43:07 +0000 (19:43 -0700)]
Rollup merge of #73452 - matthewjasper:auto-rec, r=nikomatsakis

Unify region variables when projecting associated types

This is required to avoid cycles when evaluating auto trait predicates.
Notably, this is required to be able add Chalk types to `CtxtInterners` for `cfg(parallel_compiler)`.

r? @nikomatsakis

4 years agoRollup merge of #73442 - davidtwco:issue-72181-pretty-print-const-val-enum-no-variant...
Manish Goregaokar [Sat, 20 Jun 2020 02:43:05 +0000 (19:43 -0700)]
Rollup merge of #73442 - davidtwco:issue-72181-pretty-print-const-val-enum-no-variants, r=oli-obk

pretty/mir: const value enums with no variants

Fixes #72181.

This PR modifies the pretty printer and const eval in the MIR so that `destructure_const` (used in `pretty_print_const_value`) can handle enums with no variants (or types containing enums with no variants).

I'm not convinced that this is the correct approach, folks more familiar with `destructure_const` would be able to say - happy to adjust the PR. Looking through `destructure_const` and the functions that it invokes, it didn't seem like it was written to handle zero-variant-enums - I assume that case is handled earlier in some way so `destructure_const` doesn't need to under normal circumstances. It didn't seem like it would be straightforward to make `destructure_const` handle this case in a first-class-feeling way (e.g. adding a `Variants::None` variant), so this PR makes some minimal changes to avoid ICEs.

4 years agoRollup merge of #73440 - jyn514:bootstrap/build-rustdoc, r=Mark-Simulacrum
Manish Goregaokar [Sat, 20 Jun 2020 02:43:03 +0000 (19:43 -0700)]
Rollup merge of #73440 - jyn514:bootstrap/build-rustdoc, r=Mark-Simulacrum

Add src/librustdoc as an alias for src/tools/rustdoc

No one actually works with src/tools/rustdoc, it's almost empty.

Closes https://github.com/rust-lang/rust/issues/73439

4 years agoRollup merge of #73436 - GuillaumeGomez:cleanup-e0670, r=Dylan-DPC
Manish Goregaokar [Sat, 20 Jun 2020 02:43:01 +0000 (19:43 -0700)]
Rollup merge of #73436 - GuillaumeGomez:cleanup-e0670, r=Dylan-DPC

Clean up E0670 explanation

r? @Dylan-DPC

4 years agoRollup merge of #73399 - GuillaumeGomez:cleanup-e0668, r=Dylan-DPC
Manish Goregaokar [Sat, 20 Jun 2020 02:42:59 +0000 (19:42 -0700)]
Rollup merge of #73399 - GuillaumeGomez:cleanup-e0668, r=Dylan-DPC

Clean up E0668 explanation

r? @Dylan-DPC

4 years agoRollup merge of #73359 - jonas-schievink:do-the-shimmy, r=matthewjasper
Manish Goregaokar [Sat, 20 Jun 2020 02:42:57 +0000 (19:42 -0700)]
Rollup merge of #73359 - jonas-schievink:do-the-shimmy, r=matthewjasper

shim.rs: avoid creating `Call` terminators calling `Self`

Also contains some cleanup and doc comment additions so I could make sense of the code.

Fixes https://github.com/rust-lang/rust/issues/73109
Closes https://github.com/rust-lang/rust/pull/73175

r? @matthewjasper

4 years agoRollup merge of #73347 - tmiasko:incompatible-sanitizers, r=nikic
Manish Goregaokar [Sat, 20 Jun 2020 02:42:55 +0000 (19:42 -0700)]
Rollup merge of #73347 - tmiasko:incompatible-sanitizers, r=nikic

Diagnose use of incompatible sanitizers

Emit an error when incompatible sanitizer are configured through command
line options. Previously the last one configured prevailed and others
were silently ignored.

Additionally use a set to represent configured sanitizers, making it
possible to enable multiple sanitizers at once. At least in principle,
since currently all of them are considered to be incompatible with
others.

4 years agoRollup merge of #73027 - doctorn:issue-72690, r=estebank
Manish Goregaokar [Sat, 20 Jun 2020 02:42:53 +0000 (19:42 -0700)]
Rollup merge of #73027 - doctorn:issue-72690, r=estebank

Make `need_type_info_err` more conservative

Makes sure arg patterns we are going to suggest on are actually contained within the span of the obligation that caused the inference error (credit to @lcnr for suggesting this fix).

There's a subtle trade-off regarding the handling of local patterns which I've left a comment about.

Resolves #72690

4 years agoRollup merge of #72934 - christianpoveda:mut-borrows-in-consts, r=oli-obk
Manish Goregaokar [Sat, 20 Jun 2020 02:42:51 +0000 (19:42 -0700)]
Rollup merge of #72934 - christianpoveda:mut-borrows-in-consts, r=oli-obk

forbid mutable references in all constant contexts except for const-fns

PR to address #71212

cc: @ecstatic-morse

4 years agoRollup merge of #72791 - lcnr:coerce-refactor, r=estebank
Manish Goregaokar [Sat, 20 Jun 2020 02:42:49 +0000 (19:42 -0700)]
Rollup merge of #72791 - lcnr:coerce-refactor, r=estebank

update coerce docs and unify relevant tests

Merges `test/ui/coerce` with `test/ui/coercion`.
Updates the documentation of `librustc_typeck/check/coercion.rs`.
Adds 2 new coercion tests.

4 years agoRollup merge of #72689 - lcnr:common_str, r=estebank
Manish Goregaokar [Sat, 20 Jun 2020 02:42:47 +0000 (19:42 -0700)]
Rollup merge of #72689 - lcnr:common_str, r=estebank

add str to common types

I already expected this to be the case and it may slightly improve perf.

Afaict if we ever want to change str into a lang item this would have to get reverted.
As that would be fairly simple I don't believe this to cause any problems in the future.

4 years agoRollup merge of #71899 - cuviper:try_find_map, r=dtolnay
Manish Goregaokar [Sat, 20 Jun 2020 02:42:45 +0000 (19:42 -0700)]
Rollup merge of #71899 - cuviper:try_find_map, r=dtolnay

Refactor `try_find` a little

~~This works like `find_map`, but mapping to a `Try` type. It stops when `Ok` is `Some(value)`, with an additional short-circuit on `Try::Error`. This is similar to the unstable `try_find`, but has the advantage of being able to directly return the user's `R: Try` type directly, rather than converting to `Result`.~~
(removed -- `try_find_map` was declined in review)

This PR also refactors `try_find` a little to match style. The `E` type parameter was unnecessary, so it's now removed. The folding closure now has reduced parametricity on just `T = Self::Item`, rather
than the whole `Self` iterator type. There's otherwise no functional change in this.

4 years agoRollup merge of #71420 - RalfJung:specialization-incomplete, r=matthewjasper
Manish Goregaokar [Sat, 20 Jun 2020 02:42:43 +0000 (19:42 -0700)]
Rollup merge of #71420 - RalfJung:specialization-incomplete, r=matthewjasper

Specialization is unsound

As discussed in https://github.com/rust-lang/rust/issues/31844#issuecomment-617013949, it might be a good idea to warn users of specialization that the feature they are using is unsound.

I also expanded the "incomplete feature" warning to link the user to the tracking issue.

4 years agoAuto merge of #73511 - Manishearth:rollup-3iffxd8, r=Manishearth
bors [Fri, 19 Jun 2020 23:04:41 +0000 (23:04 +0000)]
Auto merge of #73511 - Manishearth:rollup-3iffxd8, r=Manishearth

Rollup of 13 pull requests

Successful merges:

 - #71568 (Document unsafety in slice/sort.rs)
 - #72709 (`#[deny(unsafe_op_in_unsafe_fn)]` in liballoc)
 - #73214 (Add asm!() support for hexagon)
 - #73248 (save_analysis: improve handling of enum struct variant)
 - #73257 (ty: projections in `transparent_newtype_field`)
 - #73261 (Suggest `?Sized` when applicable for ADTs)
 - #73300 (Implement crate-level-only lints checking.)
 - #73334 (Note numeric literals that can never fit in an expected type)
 - #73357 (Use `LocalDefId` for import IDs in trait map)
 - #73364 (asm: Allow multiple template string arguments; interpret them as newline-separated)
 - #73382 (Only display other method receiver candidates if they actually apply)
 - #73465 (Add specialization of `ToString for char`)
 - #73489 (Refactor hir::Place)

Failed merges:

r? @ghost

4 years agoRefactor `try_find` a little
Josh Stone [Mon, 4 May 2020 18:25:54 +0000 (11:25 -0700)]
Refactor `try_find` a little

The `E` type parameter was unnecessary, so it's now removed. The folding
closure now has reduced parametricity on just `T = Self::Item`, rather
than the whole `Self` iterator type. There's otherwise no functional
change in this.

4 years agoUpdate the doc for std::prelude, removing the "technical part" section
Alexis Bourget [Fri, 19 Jun 2020 19:19:17 +0000 (21:19 +0200)]
Update the doc for std::prelude, removing the "technical part" section

4 years agoadd new error code
Christian Poveda [Thu, 18 Jun 2020 19:52:37 +0000 (14:52 -0500)]
add new error code

4 years agoAuto merge of #73257 - davidtwco:issue-73249-improper-ctypes-projection, r=lcnr,varkor
bors [Fri, 19 Jun 2020 19:14:45 +0000 (19:14 +0000)]
Auto merge of #73257 - davidtwco:issue-73249-improper-ctypes-projection, r=lcnr,varkor

ty: projections in `transparent_newtype_field`

Fixes #73249.

This PR modifies `transparent_newtype_field` so that it handles
projections with generic parameters, where `normalize_erasing_regions`
would ICE.

4 years agoReturn type is bound too
Jack Huey [Wed, 3 Jun 2020 20:14:18 +0000 (16:14 -0400)]
Return type is bound too

4 years agoChange InternedAdtDef to &'tcx AdtDef
Jack Huey [Wed, 3 Jun 2020 17:33:28 +0000 (13:33 -0400)]
Change InternedAdtDef to &'tcx AdtDef

4 years agoNits and change skip_binder to no_bound_vars for fndef
Jack Huey [Wed, 3 Jun 2020 16:21:56 +0000 (12:21 -0400)]
Nits and change skip_binder to no_bound_vars for fndef

4 years agoUpdate chalk to 0.11.0
Jack [Tue, 2 Jun 2020 21:16:39 +0000 (17:16 -0400)]
Update chalk to 0.11.0

4 years agoFix building
Jack Huey [Sat, 30 May 2020 06:59:29 +0000 (02:59 -0400)]
Fix building

4 years agoLower consts
Jack Huey [Sat, 30 May 2020 06:21:33 +0000 (02:21 -0400)]
Lower consts

4 years agoUpdate chalk and add LifetimeOutlives and ObjectSafe lowering
Jack Huey [Sat, 30 May 2020 02:09:34 +0000 (22:09 -0400)]
Update chalk and add LifetimeOutlives and ObjectSafe lowering

4 years agoUpdate Chalk
Jack Huey [Wed, 27 May 2020 23:27:53 +0000 (19:27 -0400)]
Update Chalk

4 years agoTest error order is non-deterministic
Jack Huey [Wed, 27 May 2020 06:23:30 +0000 (02:23 -0400)]
Test error order is non-deterministic

4 years agoRemove RustDefId
Jack Huey [Wed, 27 May 2020 05:26:51 +0000 (01:26 -0400)]
Remove RustDefId

4 years agoImplement fn_def_datum
Jack Huey [Wed, 27 May 2020 05:05:09 +0000 (01:05 -0400)]
Implement fn_def_datum

4 years agoUse builtin types for Never, Array, and FnDef
Jack Huey [Wed, 27 May 2020 00:38:41 +0000 (20:38 -0400)]
Use builtin types for Never, Array, and FnDef

4 years agoUpdate chalk
Jack Huey [Wed, 27 May 2020 00:19:19 +0000 (20:19 -0400)]
Update chalk

4 years agoUpdate chalk
Jack Huey [Wed, 13 May 2020 20:46:26 +0000 (16:46 -0400)]
Update chalk

4 years agoAdd compare-mode=chalk and add a little bit more implementations and fixmes
Jack Huey [Wed, 13 May 2020 19:18:50 +0000 (15:18 -0400)]
Add compare-mode=chalk and add a little bit more implementations and fixmes

4 years agoupdate diagnostics for &mut in constants
Christian Poveda [Mon, 15 Jun 2020 17:05:24 +0000 (12:05 -0500)]
update diagnostics for &mut in constants

4 years agoupdate tests
Christian Poveda [Mon, 8 Jun 2020 20:16:23 +0000 (15:16 -0500)]
update tests

4 years agoforbid mutable references in all constants except const fns
Christian Poveda [Sun, 7 Jun 2020 00:25:02 +0000 (19:25 -0500)]
forbid mutable references in all constants except const fns

4 years agoUsing xsave restore to restore complete FPU state
Raoul Strackx [Fri, 19 Jun 2020 12:20:35 +0000 (14:20 +0200)]
Using xsave restore to restore complete FPU state

4 years agoRollup merge of #73489 - sexxi-goose:init_place_refactor, r=nikomatsakis
Manish Goregaokar [Fri, 19 Jun 2020 16:15:20 +0000 (09:15 -0700)]
Rollup merge of #73489 - sexxi-goose:init_place_refactor, r=nikomatsakis

Refactor hir::Place

For the following code
```rust
let c = || bar(foo.x, foo.x)
```

We generate two different `hir::Place`s for both `foo.x`.
Handling this adds overhead for analysis we need to do for RFC 2229.

We also want to store type information at each Projection to support
analysis as part of the RFC. This resembles what we have for
`mir::Place`

This commit modifies the Place as follows:
- Rename to `PlaceWithHirId`, where there `hir_id` is that of the
expressioin.
- Move any other information that describes the access out to another
struct now called `Place`.
- Removed `Span`, it can be accessed using the [hir
API](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.span)
- Modify `Projection` to be a strucutre of its own, that currently only
contains the `ProjectionKind`.

Adding type information to projections wil be completed as part of https://github.com/rust-lang/project-rfc-2229/issues/5

Closes https://github.com/rust-lang/project-rfc-2229/issues/3

4 years agoRollup merge of #73465 - lzutao:spec-char-tostring, r=sfackler
Manish Goregaokar [Fri, 19 Jun 2020 16:15:18 +0000 (09:15 -0700)]
Rollup merge of #73465 - lzutao:spec-char-tostring, r=sfackler

Add specialization of `ToString for char`

Closes #73462

4 years agoRollup merge of #73382 - Aaron1011:fix/self-receiver-candidates, r=petrochenkov
Manish Goregaokar [Fri, 19 Jun 2020 16:15:16 +0000 (09:15 -0700)]
Rollup merge of #73382 - Aaron1011:fix/self-receiver-candidates, r=petrochenkov

Only display other method receiver candidates if they actually apply

Previously, we would suggest `Box<Self>` as a valid receiver, even if
method resolution only succeeded due to an autoderef (e.g. to `&self`)

4 years agoRollup merge of #73364 - joshtriplett:inline-asm, r=Amanieu
Manish Goregaokar [Fri, 19 Jun 2020 16:15:14 +0000 (09:15 -0700)]
Rollup merge of #73364 - joshtriplett:inline-asm, r=Amanieu

asm: Allow multiple template string arguments; interpret them as newline-separated

Allow the `asm!` macro to accept a series of template arguments, and interpret them as if they were concatenated with a '\n' between them. This allows writing an `asm!` where each line of assembly appears in a separate template string argument.

This syntax makes it possible for rustfmt to reliably format and indent each line of assembly, without risking changes to the inside of a template string. It also avoids the complexity of having the user carefully format and indent a multi-line string (including where to put the surrounding quotes), and avoids the extra indentation and lines of a call to `concat!`.

For example, rewriting the second example from the [blog post on the new inline assembly syntax](https://blog.rust-lang.org/inside-rust/2020/06/08/new-inline-asm.html) using multiple template strings:

```rust

fn main() {
    let mut bits = [0u8; 64];
    for value in 0..=1024u64 {
        let popcnt;
        unsafe {
            asm!(
                "    popcnt {popcnt}, {v}",
                "2:",
                "    blsi rax, {v}",
                "    jz 1f",
                "    xor {v}, rax",
                "    tzcnt rax, rax",
                "    stosb",
                "    jmp 2b",
                "1:",
                v = inout(reg) value => _,
                popcnt = out(reg) popcnt,
                out("rax") _, // scratch
                inout("rdi") bits.as_mut_ptr() => _,
            );
        }
        println!("bits of {}: {:?}", value, &bits[0..popcnt]);
    }
}
```

Note that all the template strings must appear before all other arguments; you cannot, for instance, provide a series of template strings intermixed with the corresponding operands.

4 years agoRollup merge of #73357 - petrochenkov:tmap, r=davidtwco
Manish Goregaokar [Fri, 19 Jun 2020 16:15:12 +0000 (09:15 -0700)]
Rollup merge of #73357 - petrochenkov:tmap, r=davidtwco

Use `LocalDefId` for import IDs in trait map

cc https://github.com/rust-lang/rust/pull/73291#discussion_r439734867

4 years agoRollup merge of #73334 - ayazhafiz:err/num-type-cannot-fit, r=estebank
Manish Goregaokar [Fri, 19 Jun 2020 16:15:10 +0000 (09:15 -0700)]
Rollup merge of #73334 - ayazhafiz:err/num-type-cannot-fit, r=estebank

Note numeric literals that can never fit in an expected type

re https://github.com/rust-lang/rust/pull/72380#discussion_r438289385

Given the toy code

```rust
fn is_positive(n: usize) {
  n > -1_isize;
}
```

We currently get a type mismatch error like the following:

```
error[E0308]: mismatched types
 --> src/main.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit
  |
2 |     n > (-1_isize).try_into().unwrap();
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

But clearly, `-1` can never fit into a `usize`, so the suggestion will
always panic. A more useful message would tell the user that the value
can never fit in the expected type:

```
error[E0308]: mismatched types
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
note: `-1_isize` can never fit into `usize`
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^
```

Which is what this commit implements.

I only added this check for negative literals because

- Currently we can only perform such a check for literals (constant
  value propagation is outside the scope of the typechecker at this
  point)
- A lint error for out-of-range numeric literals is already emitted

IMO it makes more sense to put this check in librustc_lint, but as far
as I can tell the typecheck pass happens before the lint pass, so I've
added it here.

r? @estebank

4 years agoRollup merge of #73300 - crlf0710:crate_level_only_check, r=petrochenkov
Manish Goregaokar [Fri, 19 Jun 2020 16:15:08 +0000 (09:15 -0700)]
Rollup merge of #73300 - crlf0710:crate_level_only_check, r=petrochenkov

Implement crate-level-only lints checking.

This implements a crate_level_only flag on lints, and when it is true, it becomes an error when user tries  to specify this flag upon nodes other than crate node.

This also turns on this flag for all non_ascii_ident lints.

4 years agoRollup merge of #73261 - estebank:generics-sized, r=nikomatsakis
Manish Goregaokar [Fri, 19 Jun 2020 16:15:06 +0000 (09:15 -0700)]
Rollup merge of #73261 - estebank:generics-sized, r=nikomatsakis

Suggest `?Sized` when applicable for ADTs

Address #71790, fix #27964.

4 years agoRollup merge of #73257 - davidtwco:issue-73249-improper-ctypes-projection, r=lcnr...
Manish Goregaokar [Fri, 19 Jun 2020 16:15:04 +0000 (09:15 -0700)]
Rollup merge of #73257 - davidtwco:issue-73249-improper-ctypes-projection, r=lcnr,varkor

ty: projections in `transparent_newtype_field`

Fixes #73249.

This PR modifies `transparent_newtype_field` so that it handles
projections with generic parameters, where `normalize_erasing_regions`
would ICE.

4 years agoRollup merge of #73248 - marmeladema:save-analysis-various-fixes, r=Xanewok
Manish Goregaokar [Fri, 19 Jun 2020 16:15:02 +0000 (09:15 -0700)]
Rollup merge of #73248 - marmeladema:save-analysis-various-fixes, r=Xanewok

save_analysis: improve handling of enum struct variant

Fixes #61385

4 years agoRollup merge of #73214 - androm3da:hex_inline_asm_00, r=Amanieu
Manish Goregaokar [Fri, 19 Jun 2020 16:15:00 +0000 (09:15 -0700)]
Rollup merge of #73214 - androm3da:hex_inline_asm_00, r=Amanieu

Add asm!() support for hexagon

4 years agoRollup merge of #72709 - LeSeulArtichaut:unsafe-liballoc, r=nikomatsakis
Manish Goregaokar [Fri, 19 Jun 2020 16:14:58 +0000 (09:14 -0700)]
Rollup merge of #72709 - LeSeulArtichaut:unsafe-liballoc, r=nikomatsakis

`#[deny(unsafe_op_in_unsafe_fn)]` in liballoc

This PR proposes to make use of the new `unsafe_op_in_unsafe_fn` lint, i.e. no longer consider the body of an unsafe function as an unsafe block and require explicit unsafe block to perform unsafe operations.

This has been first (partly) suggested by @Mark-Simulacrum in https://github.com/rust-lang/rust/pull/69245#issuecomment-587817065

Tracking issue for the feature: #71668.
~~Blocked on #71862.~~
r? @Mark-Simulacrum cc @nikomatsakis can you confirm that those changes are desirable? Should I restrict it to only BTree for the moment?

4 years agoRollup merge of #71568 - hbina:document_unsafety_slice_sort, r=joshtriplett
Manish Goregaokar [Fri, 19 Jun 2020 16:14:56 +0000 (09:14 -0700)]
Rollup merge of #71568 - hbina:document_unsafety_slice_sort, r=joshtriplett

Document unsafety in slice/sort.rs

Let me know if these documentations are accurate c:

I don't think I am capable enough to document the safety of `partition_blocks`, however.

Related issue #66219

4 years agoRemove old commented code
Nathan West [Fri, 19 Jun 2020 15:42:58 +0000 (11:42 -0400)]
Remove old commented code

4 years agoFixed missing `mut`
Nathan West [Fri, 19 Jun 2020 15:32:36 +0000 (11:32 -0400)]
Fixed missing `mut`

4 years agopretty/mir: const value enums with no variants
David Wood [Thu, 18 Jun 2020 09:37:59 +0000 (10:37 +0100)]
pretty/mir: const value enums with no variants

This commit modifies the pretty printer and const eval in the MIR so
that `destructure_const` (used in `pretty_print_const_value`) can handle
enums with no variants (or types containing enums with no variants).

Signed-off-by: David Wood <david@davidtw.co>
4 years agoBump Rustfmt and RLS
Igor Matuszewski [Mon, 15 Jun 2020 09:43:39 +0000 (11:43 +0200)]
Bump Rustfmt and RLS

4 years agoAuto merge of #73504 - RalfJung:rollup-iy8hsvl, r=RalfJung
bors [Fri, 19 Jun 2020 12:30:20 +0000 (12:30 +0000)]
Auto merge of #73504 - RalfJung:rollup-iy8hsvl, r=RalfJung

Rollup of 10 pull requests

Successful merges:

 - #72280 (Fix up autoderef when reborrowing)
 - #72785 (linker: MSVC supports linking static libraries as a whole archive)
 - #73011 (first stage of implementing LLVM code coverage)
 - #73044 (compiletest: Add directives to detect sanitizer support)
 - #73054 (memory access sanity checks: abort instead of panic)
 - #73136 (Change how compiler-builtins gets many CGUs)
 - #73280 (Add E0763)
 - #73317 (bootstrap: read config from $RUST_BOOTSTRAP_CONFIG)
 - #73350 (bootstrap/install.rs: support a nonexistent `prefix` in `x.py install`)
 - #73352 (Speed up bootstrap a little.)

Failed merges:

r? @ghost

4 years agoRollup merge of #73352 - ehuss:bootstrap-metadata, r=Mark-Simulacrum
Ralf Jung [Fri, 19 Jun 2020 12:29:35 +0000 (14:29 +0200)]
Rollup merge of #73352 - ehuss:bootstrap-metadata, r=Mark-Simulacrum

Speed up bootstrap a little.

The bootstrap script was calling `cargo metadata` 3 times (or 6 with `-v`). This is a very expensive operation, and this attempts to avoid the extra calls. On my system, a simple command like `./x.py test -h -v` goes from about 3 seconds to 0.4.

An overview of the changes:

- Call `cargo metadata` only once with `--no-deps`. Optional dependencies are filtered in `in_tree_crates` (handling `profiler_builtins` and `rustc_codegen_llvm` which are driven by the config).
- Remove a duplicate call to `metadata::build` when using `-v`. I'm not sure why it was there, it looks like a mistake or vestigial from previous behavior.
- Remove check for `_shim`, I believe all the `_shim` crates are now gone.
- Remove check for `rustc_` and `*san` for `test::Crate::should_run`, these are no longer dependencies in the `test` tree.
- Use relative paths in `./x.py test -h -v` output.
- Some code cleanup (remove unnecessary `find_compiler_crates`, etc.).
- Show suite paths (`src/test/ui/...`) in `./x.py test -h -v` output.
- Some doc comments.

4 years agoRollup merge of #73350 - nodakai:install-rs-support-nonexistent-prefix, r=Mark-Simulacrum
Ralf Jung [Fri, 19 Jun 2020 12:29:33 +0000 (14:29 +0200)]
Rollup merge of #73350 - nodakai:install-rs-support-nonexistent-prefix, r=Mark-Simulacrum

bootstrap/install.rs: support a nonexistent `prefix` in `x.py install`

PR #49778 introduced fs::canonicalize() which fails for a nonexistent path.
This is a surprise for someone used to GNU Autotools' configure which can create any necessary intermediate directories in prefix.

This change makes it run fs::create_dir_all() before canonicalize().

4 years agoRollup merge of #73317 - davidtwco:bootstrap-config-env-var, r=Mark-Simulacrum
Ralf Jung [Fri, 19 Jun 2020 12:29:31 +0000 (14:29 +0200)]
Rollup merge of #73317 - davidtwco:bootstrap-config-env-var, r=Mark-Simulacrum

bootstrap: read config from $RUST_BOOTSTRAP_CONFIG

This PR modifies bootstrap so that `config.toml` is read first from `RUST_BOOTSTRAP_CONFIG`, then `--config` and finally `config.toml` in the current directory.

This is a subjective change, intended to improve the ergnomics when using "development shells" for rustc development (for example, using tools such as Nix) which set environment variables to ensure a reproducible environment (these development shells can then be version controlled, e.g. [my rustc shell](https://github.com/davidtwco/veritas/blob/6b74a5c170b6efb2c7b094352932f9158f97eec0/nix/shells/rustc.nix)). By optionally reading `config.toml` from an environment variable, a `config.toml` can be defined in the development shell and a path to it exposed in the `RUST_BOOTSTRAP_CONFIG` environment variable - avoiding the need to manually symlink the contents of this file to `config.toml` in the working directory.

4 years agoRollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkov
Ralf Jung [Fri, 19 Jun 2020 12:29:29 +0000 (14:29 +0200)]
Rollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkov

Add E0763

4 years agoRollup merge of #73136 - alexcrichton:thinlto-compiler-builtins, r=Mark-Simulacrum
Ralf Jung [Fri, 19 Jun 2020 12:29:26 +0000 (14:29 +0200)]
Rollup merge of #73136 - alexcrichton:thinlto-compiler-builtins, r=Mark-Simulacrum

Change how compiler-builtins gets many CGUs

This commit intends to fix an accidental regression from #70846. The
goal of #70846 was to build compiler-builtins with a maximal number of
CGUs to ensure that each module in the source corresponds to an object
file. This high degree of control for compiler-builtins is desirable to
ensure that there's at most one exported symbol per CGU, ideally
enabling compiler-builtins to not conflict with the system libgcc as
often.

In #70846, however, only part of the compiler understands that
compiler-builtins is built with many CGUs. The rest of the compiler
thinks it's building with `sess.codegen_units()`. Notably the
calculation of `sess.lto()` consults `sess.codegen_units()`, which when
there's only one CGU it disables ThinLTO. This means that
compiler-builtins is built without ThinLTO, which is quite harmful to
performance! This is the root of the cause from #73135 where intrinsics
were found to not be inlining trivial functions.

The fix applied in this commit is to remove the special-casing of
compiler-builtins in the compiler. Instead the build system is now
responsible for special-casing compiler-builtins. It doesn't know
exactly how many CGUs will be needed but it passes a large number that
is assumed to be much greater than the number of source-level modules
needed. After reading the various locations in the compiler source, this
seemed like the best solution rather than adding more and more special
casing in the compiler for compiler-builtins.

Closes #73135

4 years agoRollup merge of #73054 - RalfJung:dont-panic, r=Mark-Simulacrum
Ralf Jung [Fri, 19 Jun 2020 12:29:24 +0000 (14:29 +0200)]
Rollup merge of #73054 - RalfJung:dont-panic, r=Mark-Simulacrum

memory access sanity checks: abort instead of panic

Suggested by @Mark-Simulacrum, this should help reduce the performance impact of these checks.

4 years agoRollup merge of #73044 - tmiasko:compiletest-san, r=nikomatsakis
Ralf Jung [Fri, 19 Jun 2020 12:29:22 +0000 (14:29 +0200)]
Rollup merge of #73044 - tmiasko:compiletest-san, r=nikomatsakis

compiletest: Add directives to detect sanitizer support

Add needs-sanitizer-{address,leak,memory,thread} directive indicating
that test requires target with support for specific sanitizer.

This is an addition to the existing needs-sanitizer-support directive
indicating that test requires a sanitizer runtime library.

The existing needs-sanitizer-support directive could be incorporated into the
new ones, but I decided to retain it, since it enables running sanitizer
codegen tests even when building of sanitizer runtime libraries is disabled.

4 years agoRollup merge of #73011 - richkadel:llvm-count-from-mir-pass, r=tmandry
Ralf Jung [Fri, 19 Jun 2020 12:29:20 +0000 (14:29 +0200)]
Rollup merge of #73011 - richkadel:llvm-count-from-mir-pass, r=tmandry

first stage of implementing LLVM code coverage

This PR replaces #70680 (WIP toward LLVM Code Coverage for Rust) since I am re-implementing the Rust LLVM code coverage feature in a different part of the compiler (in MIR pass(es) vs AST).

This PR updates rustc with `-Zinstrument-coverage` option that injects the llvm intrinsic `instrprof.increment()` for code generation.

This initial version only injects counters at the top of each function, and does not yet implement the required coverage map.

Upcoming PRs will add the coverage map, and add more counters and/or counter expressions for each conditional code branch.

Rust compiler MCP https://github.com/rust-lang/compiler-team/issues/278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation

***[I put together some development notes here, under a separate branch.](https://github.com/richkadel/rust/blob/cfa0b21d34ee64e4ebee226101bd2ef0c6757865/src/test/codegen/coverage-experiments/README-THIS-IS-TEMPORARY.md)***

4 years agoRollup merge of #72785 - petrochenkov:wholemsvc, r=matthewjasper
Ralf Jung [Fri, 19 Jun 2020 12:29:18 +0000 (14:29 +0200)]
Rollup merge of #72785 - petrochenkov:wholemsvc, r=matthewjasper

linker: MSVC supports linking static libraries as a whole archive

4 years agoRollup merge of #72280 - nbdd0121:typeck, r=nikomatsakis
Ralf Jung [Fri, 19 Jun 2020 12:29:16 +0000 (14:29 +0200)]
Rollup merge of #72280 - nbdd0121:typeck, r=nikomatsakis

Fix up autoderef when reborrowing

Currently `(f)()` and `f.call_mut()` behaves differently if expression `f` contains autoderef in it. This causes a weird error in #72225.

When `f` is type checked, `Deref` is used (this is expected as we can't yet determine if we should use `Fn` or `FnMut`). When subsequently we determine the actual trait to be used, when using the `f.call_mut()` syntax the `Deref` is patched to `DerefMut`, while for the `(f)()` syntax case it is not.

This PR replicates the fixup for the first case.

Fixes #72225
Fixes #68590

4 years agoApply suggestions from code review
LeSeulArtichaut [Sun, 31 May 2020 13:06:51 +0000 (15:06 +0200)]
Apply suggestions from code review

Co-authored-by: nikomatsakis <niko@alum.mit.edu>
4 years ago`#[deny(unsafe_op_in_unsafe_fn)]` in liballoc
LeSeulArtichaut [Thu, 28 May 2020 21:27:00 +0000 (23:27 +0200)]
`#[deny(unsafe_op_in_unsafe_fn)]` in liballoc

4 years agoty: simplify `transparent_newtype_field`
David Wood [Fri, 12 Jun 2020 15:14:05 +0000 (16:14 +0100)]
ty: simplify `transparent_newtype_field`

This commit removes the normalization from `transparent_newtype_field` -
turns out it wasn't necessary and that makes it a bunch simpler -
particularly when handling projections.

Signed-off-by: David Wood <david@davidtw.co>
4 years agolint: unify enum variant, union and struct logic
David Wood [Fri, 12 Jun 2020 13:11:45 +0000 (14:11 +0100)]
lint: unify enum variant, union and struct logic

This commit applies the changes introduced in #72890 to both enum
variants and unions - where the logic prior to #72890 was duplicated.

Signed-off-by: David Wood <david@davidtw.co>
4 years agolint: prohibit fields with opaque types
David Wood [Fri, 12 Jun 2020 12:30:39 +0000 (13:30 +0100)]
lint: prohibit fields with opaque types

Opaque types cannot be used in extern declarations, and normally cannot
exist in fields - except with type aliases to `impl Trait` and
projections which normalize to them.

Signed-off-by: David Wood <david@davidtw.co>
4 years agosave_analysis: improve handling of enum struct variant
marmeladema [Thu, 11 Jun 2020 18:08:33 +0000 (19:08 +0100)]
save_analysis: improve handling of enum struct variant

Fixes #61385

4 years agoty: projections in `transparent_newtype_field`
David Wood [Thu, 11 Jun 2020 21:53:32 +0000 (22:53 +0100)]
ty: projections in `transparent_newtype_field`

This commit modifies `transparent_newtype_field` so that it handles
projections with generic parameters, where `normalize_erasing_regions`
would ICE.

Signed-off-by: David Wood <david@davidtw.co>
4 years agocoerce reborrow multi arg test
Bastian Kauschke [Sat, 30 May 2020 18:54:14 +0000 (20:54 +0200)]
coerce reborrow multi arg test

4 years agoupdate coercion docs
Bastian Kauschke [Sat, 30 May 2020 17:43:04 +0000 (19:43 +0200)]
update coercion docs

4 years agomerge coercion test folders
Bastian Kauschke [Sat, 30 May 2020 17:42:22 +0000 (19:42 +0200)]
merge coercion test folders