Commit graph

30055 commits

Author SHA1 Message Date
Oliver Scherer
c849a0d087 Add a repro example for not propagating constants of partially const initialized variables 2020-05-12 12:55:55 +02:00
Dylan DPC
d9c3110ae8
Rollup merge of #72067 - jonas-schievink:fuel-warn, r=varkor
Emit a warning when optimization fuel runs out

`eprintln!` gets swallowed by Cargo too easily.
2020-05-11 22:21:01 +02:00
Dylan DPC
a14af7fff8
Rollup merge of #72052 - lcnr:const_pprint, r=ecstatic-morse
display `ConstKind::Param`
2020-05-11 22:20:59 +02:00
Dylan DPC
705671ef49
Rollup merge of #72019 - matthewjasper:dont-skip-binder, r=davidtwco
Fix debug assertion in error code

Closes #70813
2020-05-11 22:20:54 +02:00
Dylan DPC
dd595fade5
Rollup merge of #72014 - GuillaumeGomez:deprecated-emoji, r=kinnison,ollie27
Deprecated emoji

Fixes #67872.

r? @kinnison

cc @rust-lang/rustdoc
2020-05-11 22:20:51 +02:00
bors
3fe4dd2dda Auto merge of #71953 - oli-obk:const_prop_deaggregates, r=wesleywiser
Const prop aggregates even if partially or fully modified

r? @wesleywiser

cc @rust-lang/wg-mir-opt I'm moderately scared of this change, but I'm confident in having reviewed all the cases.
2020-05-11 07:23:31 +00:00
Jonas Schievink
62116c31cd Emit a warning when optimization fuel runs out
`eprintln!` gets swallowed by Cargo too easily.
2020-05-10 15:40:17 +02:00
bors
9912925c25 Auto merge of #72074 - RalfJung:rollup-1ns58no, r=RalfJung
Rollup of 4 pull requests

Successful merges:

 - #71840 (Rework MIR drop tree lowering)
 - #71882 (Update the `cc` crate)
 - #71945 (Sort "implementations on foreign types" section in the sidebar)
 - #72043 (Add missing backtick in E0569 explanation)

Failed merges:

r? @ghost
2020-05-10 12:07:34 +00:00
Ralf Jung
62353071af
Rollup merge of #71840 - matthewjasper:drop-trees, r=oli-obk
Rework MIR drop tree lowering

This PR changes how drops are generated in MIR construction. This is the first half of the fix for #47949.

Rather than generating the drops for a given unwind/break/continue/return/generator drop path as soon as they are needed, the required drops are recorded and get generated later.

The motivation for this is
* It simplifies the caching scheme, because it's now possible to walk up the currently scheduled drop tree to recover state.
* The basic block order for MIR more closely resembles execution order.

This PR also:
* Highlights cleanup blocks in the graphviz MIR output.
* Removes some unnecessary drop flag assignments.
2020-05-10 11:34:30 +02:00
bors
8d16eeb8c9 Auto merge of #71775 - petrochenkov:crtcfg, r=matthewjasper
Enable `cfg` predicate for `target_feature = "crt-static"` only if the target supports it

That's what all other `target_feature`s do.
2020-05-10 08:25:32 +00:00
bors
b3269536d0 Auto merge of #72020 - alexcrichton:fix-incremental-linker-plugin-lto, r=oli-obk
Fix disagreeement about CGU reuse and LTO

This commit fixes an issue where the codegen backend's selection of LTO
disagreed with what the codegen later thought was being done. Discovered
in #72006 we have a longstanding issue where if `-Clinker-plugin-lto` in
optimized mode is compiled incrementally it will always panic on the
second compilation. The underlying issue turned out to be that the
production of the original artifact determined that LTO should not be
done (because it's being postponed to the linker) but the CGU reuse
selection thought that LTO was done so it was trying to load pre-LTO
artifacts which were never generated.

The fix here is to ensure that the logic when generating code which
determines what kind of LTO is being done is shared amongst the CGU
reuse decision and the backend actually doing LTO. This means that
they'll both be in agreement about whether the previous compilation did
indeed produce incremental pre-LTO artifacts.

Closes #72006
2020-05-10 04:41:01 +00:00
Alex Crichton
c7bd5a635e Fix disagreeement about CGU reuse and LTO
This commit fixes an issue where the codegen backend's selection of LTO
disagreed with what the codegen later thought was being done. Discovered
in #72006 we have a longstanding issue where if `-Clinker-plugin-lto` in
optimized mode is compiled incrementally it will always panic on the
second compilation. The underlying issue turned out to be that the
production of the original artifact determined that LTO should not be
done (because it's being postponed to the linker) but the CGU reuse
selection thought that LTO was done so it was trying to load pre-LTO
artifacts which were never generated.

The fix here is to ensure that the logic when generating code which
determines what kind of LTO is being done is shared amongst the CGU
reuse decision and the backend actually doing LTO. This means that
they'll both be in agreement about whether the previous compilation did
indeed produce incremental pre-LTO artifacts.

Closes #72006
2020-05-09 19:30:48 -07:00
bors
6f5c7827b7 Auto merge of #71557 - matthewjasper:mir-asymmetric-or-pattern, r=oli-obk
Fix ICE for broken or-pattern in async fn

closes #71297
2020-05-10 01:12:21 +00:00
Bastian Kauschke
0db2aec14a display ConstKind::Param 2020-05-09 17:10:40 +02:00
Ralf Jung
366c1786e6
Rollup merge of #71555 - cjgillot:nameless, r=matthewjasper
Remove ast::{Ident, Name} reexports.

The reexport of `Symbol` into `Name` confused me.
2020-05-09 13:36:39 +02:00
Ralf Jung
1704dca270
Rollup merge of #71185 - JohnTitor:run-fail, r=petrochenkov
Move tests from `test/run-fail` to UI

Fixes #65440
cc #65865 #65506
r? @nikomatsakis
2020-05-09 13:36:30 +02:00
Ralf Jung
2420b42ac6
Rollup merge of #69406 - jackh726:chalk-upgrade, r=nikomatsakis
upgrade chalk and use chalk-solve/chalk-ir/chalk-rust-ir

Reintegrate chalk into rustc.

r? @nikomatsakis
cc. @rust-lang/wg-traits
2020-05-09 13:36:29 +02:00
Matthew Jasper
a030c92341 Bless mir-opt tests 2020-05-09 10:51:39 +01:00
Matthew Jasper
611988551f Defer creating drop trees in MIR lowering until leaving that scope 2020-05-09 10:50:55 +01:00
bors
945d110e05 Auto merge of #72036 - Dylan-DPC:rollup-ca8b0ql, r=Dylan-DPC
Rollup of 8 pull requests

Successful merges:

 - #70834 (Add core::future::{pending,ready})
 - #71839 (Make BTreeMap::new and BTreeSet::new const)
 - #71890 (Simplify the error Registry methods a little)
 - #71942 (Shrink `LocalDecl`)
 - #71947 (Dead-code pass highlights too much of impl functions)
 - #71981 (Fix `strip-priv-imports` pass name in the rustdoc documentation)
 - #72018 (Fix canonicalization links)
 - #72031 (Better documentation for io::Read::read() return value)

Failed merges:

r? @ghost
2020-05-09 03:07:54 +00:00
Dylan DPC
966589edfc
Rollup merge of #71947 - mibac138:dead-code, r=cramertj
Dead-code pass highlights too much of impl functions

Fixes #66627.
Previous diagnostic:
```
error: method is never used: `unused_impl_fn_3`
  --> src/main.rs:28:5
   |
28 | /     fn unused_impl_fn_3(
29 | |         var: i32,
30 | |     ) {
31 | |         println!("bar {}", var);
32 | |     }
   | |_____^
```
New diagnostic:
```
error: associated function is never used: `unused_impl_fn_3`
  --> $DIR/lint-dead-code-6.rs:13:8
   |
LL |     fn unused_impl_fn_3(
   |        ^^^^^^^^^^^^^^^^
```

This makes associated functions in line with free-standing functions.
2020-05-09 03:10:11 +02:00
Dylan DPC
f16c27f1c4
Rollup merge of #71839 - LG3696:master, r=cramertj
Make BTreeMap::new and BTreeSet::new const
2020-05-09 03:10:05 +02:00
bors
0f9088f961 Auto merge of #71418 - hbina:rename_miri_undef, r=RalfJung
Renamed "undef" -> "uninit"

1. InvalidUndefBytes -> InvalidUninitBytes
2. ScalarMaybeUndef -> ScalarMaybeUninit
3. UndefMask -> InitMask

Related issue #71193
2020-05-08 23:45:57 +00:00
Dylan DPC
a9eb01ae03
Rollup merge of #71710 - workingjubilee:jubilee-readd-test, r=nikomatsakis
Test for zero-sized function items not ICEing

Closes #30276.
Again.
Please give rustcake with no icing!
2020-05-08 18:48:23 +02:00
Matthew Jasper
619c6055e7 Fix debug assertion in error code 2020-05-08 17:25:44 +01:00
Guillaume Gomez
9d8310856b Add test for deprecated emoji 2020-05-08 15:27:08 +02:00
Dylan DPC
678954000a
Rollup merge of #72008 - lcnr:patch-3, r=varkor
Add const-generics test

Taken from #71973 as this apparently already compiles.

r? @varkor
2020-05-08 14:11:52 +02:00
Camille GILLOT
32507d6910 Fix tests 2020-05-08 13:57:08 +02:00
Bastian Kauschke
4fd70e4ed9
add const-generics test 2020-05-08 13:42:17 +02:00
Vadim Petrochenkov
13c93120cf Fix some tests failing in --pass check mode 2020-05-08 14:27:36 +03:00
Jack Huey
a24df5b3cd Reintegrate chalk using chalk-solve 2020-05-07 17:35:58 -04:00
Dylan DPC
14cbbf3820
Rollup merge of #71960 - estebank:fix-E0284, r=davidtwco
Fix E0284 to not use incorrect wording

Fix #71584, fix #69683.
2020-05-07 21:46:16 +02:00
Dylan DPC
53d15401ba
Rollup merge of #71903 - euclio:reword-possible-better, r=petrochenkov
reword "possible candidate" import suggestion

This suggestion has always read a bit awkwardly to me, particularly the "possible better candidate" variant.

This commit rewords the suggestion to be more concise and mention the kind of the suggested item. There isn't a nice way to label individual suggestions, so I opted to use "items" in the case of multiple suggestions.
2020-05-07 21:46:14 +02:00
Dylan DPC
f3691ac066
Rollup merge of #71783 - estebank:async-block-2015, r=tmandry
Detect errors caused by `async` block in 2015 edition

Fix #67204.
2020-05-07 21:46:12 +02:00
Esteban Küber
a7b03ad4ed Fix E0284 to not use incorrect wording
Fix #71584, fix #69683.
2020-05-07 10:19:37 -07:00
Dylan DPC
806089ad70
Rollup merge of #71972 - RalfJung:miri-validity-error-refine, r=oli-obk
use hex for pointers in Miri error messages

Also refine vtable error message: distinguish between "drop fn does not point to a function" and "drop fn points to a function with the wrong signature".
2020-05-07 17:58:59 +02:00
Dylan DPC
9e4a745b8d
Rollup merge of #71959 - petrochenkov:chelpers, r=Mark-Simulacrum
tests: Fix warnings in `rust_test_helpers.c`

MSVC is silly and doesn't recognize `assert` as diverging.
2020-05-07 17:58:55 +02:00
Dylan DPC
480f718158
Rollup merge of #71952 - JohnTitor:add-tests, r=Dylan-DPC
Add some regression tests

Closes #29988
Closes #34979
Pick up two snippets that have been fixed from #67945 (shouldn't be closed yet!)
2020-05-07 17:58:53 +02:00
Yuki Okushi
d717e55f19
Add some skip flags 2020-05-08 00:51:13 +09:00
Yuki Okushi
9a164ff4c5
Skip tests on emscripten 2020-05-08 00:39:02 +09:00
Hanif Bin Ariffin
b2a8b39cd0 Renamed "undef" stuff to "uninit"
1. InvalidUndefBytes -> InvalidUninitBytes
2. ScalarMaybeUndef -> ScalarMaybeUninit
3. UndefMask -> InitMask

Related issue  #71193
2020-05-07 11:27:29 -04:00
Ralf Jung
d1ea287feb use hex for pointers in Miri error messages; refine vtable error message 2020-05-07 08:57:40 +02:00
Andy Russell
9f88d75710
reword "possible candidate" import suggestion 2020-05-07 00:33:25 -04:00
Vadim Petrochenkov
8e76663ed1 test: Fix warnings in rust_test_helpers.c 2020-05-06 23:54:05 +03:00
Dylan DPC
066eb08f5d
Rollup merge of #71950 - RalfJung:try-validation-cleanup, r=oli-obk
Miri validation error handling cleanup

Slightly expand @jumbatm's pattern macro and use it throughout validation. This ensures we never incorrectly swallow `InvalidProgram` errors or ICE when they occur.

Fixes https://github.com/rust-lang/rust/issues/71353
r? @oli-obk
2020-05-06 22:36:55 +02:00
Dylan DPC
d33180e1d7
Rollup merge of #71918 - GuillaumeGomez:rename-methods-section, r=Dylan-DPC
Rename methods section

Fixes https://github.com/rust-lang/rust/issues/70475.

It renames the section [methods](https://doc.rust-lang.org/nightly/std/string/struct.String.html#methods) into "Implementations". However, I didn't not update the title in the sidebar considering that it only lists methods under (even though I updated the link of the "methods" to make it point to the "implementations" section.

r? @kinnison

cc @rust-lang/rustdoc
2020-05-06 22:36:51 +02:00
Dylan DPC
ce14d6db5a
Rollup merge of #70908 - estebank:suggest-add, r=nikomatsakis
Provide suggestions for type parameters missing bounds for associated types

When implementing the binary operator traits it is easy to forget to restrict the `Output` associated type. `rustc` now accounts for different cases to lead users in the right direction to add the necessary restrictions. The structured suggestions in the following output are new:

```
error: equality constraints are not yet supported in `where` clauses
  --> $DIR/missing-bounds.rs:37:33
   |
LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B {
   |                                 ^^^^^^^^^^^^^^^^^^^^^^ not supported
   |
   = note: see issue #20041 <https://github.com/rust-lang/rust/issues/20041> for more information
help: if `Output` is an associated type you're trying to set, use the associated type binding syntax
   |
LL | impl<B: Add> Add for E<B> where B: Add<Output = B> {
   |                                 ^^^^^^^^^^^^^^^^^

error[E0308]: mismatched types
  --> $DIR/missing-bounds.rs:11:11
   |
7  | impl<B> Add for A<B> where B: Add {
   |      - this type parameter
...
11 |         A(self.0 + rhs.0)
   |           ^^^^^^^^^^^^^^ expected type parameter `B`, found associated type
   |
   = note: expected type parameter `B`
             found associated type `<B as std::ops::Add>::Output`
help: consider further restricting this bound
   |
7  | impl<B> Add for A<B> where B: Add + std::ops::Add<Output = B> {
   |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0369]: cannot add `B` to `B`
  --> $DIR/missing-bounds.rs:31:21
   |
31 |         Self(self.0 + rhs.0)
   |              ------ ^ ----- B
   |              |
   |              B
   |
help: consider restricting type parameter `B`
   |
27 | impl<B: std::ops::Add<Output = B>> Add for D<B> {
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

That output is given for the following cases:

```rust
struct A<B>(B);
impl<B> Add for A<B> where B: Add {
    type Output = Self;

    fn add(self, rhs: Self) -> Self {
        A(self.0 + rhs.0) //~ ERROR mismatched types
    }
}

struct D<B>(B);
impl<B> Add for D<B> {
    type Output = Self;

    fn add(self, rhs: Self) -> Self {
        Self(self.0 + rhs.0) //~ ERROR cannot add `B` to `B`
    }
}

struct E<B>(B);
impl<B: Add> Add for E<B> where <B as Add>::Output = B {
    type Output = Self;

    fn add(self, rhs: Self) -> Self {
        Self(self.0 + rhs.0)
    }
}
```
2020-05-06 22:36:43 +02:00
Oliver Scherer
a1ebb94775 Const prop aggregates even if partially or fully modified 2020-05-06 19:36:08 +02:00
Yuki Okushi
f22bc7b1cf
Add some tests for #67945 2020-05-07 02:22:08 +09:00
Yuki Okushi
be2d5535ea
Add test for #34979 2020-05-07 02:22:08 +09:00