Commit graph

9644 commits

Author SHA1 Message Date
Dylan MacKenzie
900cf82d4d TYPE -> TYPE_ASCRIPTIONG 2020-04-28 14:58:50 -07:00
Dylan MacKenzie
532ba46402 Use path to refer to constants in cross-crate pattern tests 2020-04-28 14:58:50 -07:00
Dylan MacKenzie
e68a5c6800 Add cross-crate const in pattern tests 2020-04-28 14:58:50 -07:00
Dylan MacKenzie
b58da533bc Add branchy const in pattern tests 2020-04-28 14:58:50 -07:00
Dylan MacKenzie
135cfcb5cd FIXME: ignore test that ICEs 2020-04-28 14:58:50 -07:00
Dylan MacKenzie
66f2d44c73 Add tests from #67088 and the issues mentioned in its description 2020-04-28 14:58:50 -07:00
bors
d7afaa7247 Auto merge of #71444 - RalfJung:test-async-no-opt, r=jonas-schievink
smoke-test for async fn with mir-opt-level=0

MIR opt levels heavily influence which MIR transformations run, and we barely test non-default opt levels. I am particularly worried about `async fn` lowering and how it might (not) work when the set of preceding MIR passes changes -- see https://github.com/rust-lang/rust/pull/70073.

This adds some basic smoke testing, where at least a few `async fn` `run-pass` test are ensured to also work with mir-opt-level=0.
2020-04-28 09:06:55 +00:00
Ralf Jung
3a129df39c also run some generator tests without MIR optimizations 2020-04-28 08:22:08 +02:00
Ralf Jung
3bce639fc0 make recursive-zst test unleashed 2020-04-27 13:40:26 +02:00
Dylan DPC
ac62dcef05
Rollup merge of #71438 - estebank:resolve-sugg-tiny, r=petrochenkov
Tweak some suggestions in `rustc_resolve`
2020-04-27 03:26:17 +02:00
Dylan DPC
94ac0ac59f
Rollup merge of #71419 - contrun:wrong-namespace-rustc-resolve, r=petrochenkov
add message for resolution failure because wrong namespace

closes https://github.com/rust-lang/rust/issues/71406
2020-04-27 03:26:15 +02:00
Dylan DPC
c95bcbc9d5
Rollup merge of #71409 - estebank:point-at-ret-question-mark-op, r=petrochenkov
Point at the return type on `.into()` failure caused by `?`

Fix #35946.
2020-04-27 03:26:13 +02:00
Dylan DPC
9d0025263a
Rollup merge of #68716 - petrochenkov:stabmixed, r=dtolnay
Stabilize `Span::mixed_site`

Closes https://github.com/rust-lang/rust/issues/65049.
cc https://github.com/rust-lang/rust/issues/54727#issuecomment-580647446

Pre-requisite for https://github.com/rust-lang/rust/pull/68717 ("Stabilize fn-like proc macros in expression, pattern and statement positions").

Stabilization report: https://github.com/rust-lang/rust/pull/68716#issuecomment-581076337.
2020-04-27 03:26:05 +02:00
Dylan DPC
398d3eeca1
Rollup merge of #71421 - elichai:2020-04-boxed-slice, r=sfackler
Add a function to turn Box<T> into Box<[T]>

Hi,
I think this is very useful, as currently it's not possible in safe rust to do this without re-allocating.
an alternative implementation of the same function can be:
```rust
pub fn into_boxed_slice<T>(boxed: Box<T>) -> Box<[T]> {
    unsafe {
        let slice = slice::from_raw_parts_mut(Box::into_raw(boxed), 1);
        Box::from_raw(slice)
    }
}
```

The only thing that makes me a little uncomfortable is this line :
> The alignment of array types is greater or equal to the alignment of its element type

from https://rust-lang.github.io/unsafe-code-guidelines/layout/arrays-and-slices.html

But then I see:
> The alignment of &T, &mut T, *const T and *mut T are the same, and are at least the word size.
> The alignment of &[T] is the word size.

from https://rust-lang.github.io/unsafe-code-guidelines/layout/pointers.html#representation

So I do believe this is valid(FWIW it also passes in miri https://play.rust-lang.org/?gist=c002b99364ee6b29862aeb3565a91c19)
2020-04-26 21:02:32 +02:00
Esteban Küber
be90f90810 Point at the return type on .into() failure caused by ?
Fix #35946.
2020-04-26 11:50:58 -07:00
Esteban Küber
6e3ba6f40f Tweak some suggestions in rustc_resolve 2020-04-26 11:43:43 -07:00
Vadim Petrochenkov
f5223a3435 Stabilize Span::mixed_site 2020-04-26 18:21:53 +03:00
Elichai Turkel
0228ca0c7d
Add success and fail tests for into_boxed_slice 2020-04-26 15:42:43 +03:00
YI
eb8a7031ef use defkind.descr in wrong namespace resolve failure 2020-04-26 10:28:33 +08:00
Dylan DPC
fde472792f
Rollup merge of #71541 - wesleywiser:issue_26376, r=Dylan-DPC
Add regression test for #26376

Closes #26376
2020-04-26 01:00:19 +02:00
Dylan DPC
b964451a72
Rollup merge of #71140 - oli-obk:static_cycle, r=RalfJung
[breaking change] Disallow statics initializing themselves

fixes #71078

Self-initialization is unsound because it breaks privacy assumptions that unsafe code can make. In

```rust
pub mod foo {
    #[derive(Debug, Copy, Clone)]
    pub struct Foo {
        x: (),
    }
}

pub static FOO: foo::Foo = FOO;
```

unsafe could could expect that ony functions inside the `foo` module were able to create a value of type `Foo`.
2020-04-26 01:00:15 +02:00
Dylan DPC
e51cbc8376
Rollup merge of #70043 - mark-i-m:def-kind-more, r=eddyb
Add all remaining `DefKind`s.

r? @eddyb or @Centril

~~I'm not sure if this is what you were thinking of. There are also a few places where I'm not sure what the correct choice is because I don't fully understand the meaning of some variants.~~

~~In general, it feels a bit odd to add some of these as `DefKind`s (e.g. `Arm`) because they don't feel like definitions. Are there things that it makes sense not to add?~~
2020-04-26 01:00:13 +02:00
Dylan DPC
7b7c63cb77
Rollup merge of #69041 - petrochenkov:stabmodispan, r=Amanieu
proc_macro: Stabilize `Span::resolved_at` and `Span::located_at`

Introduced in https://github.com/rust-lang/rust/pull/47149.
Part of https://github.com/rust-lang/rust/issues/54725.

Motivation: https://github.com/rust-lang/rust/pull/68716#issuecomment-583918919.
Identifiers in proc macros may want to inherit span locations for diagnostics from one tokens (e.g. some tokens from the macro input), but resolve those identifiers from some different location (e.g. from the macro's definition site).
This becomes especially important when multiple resolution locations become available with stabilization of [`Span::mixed_site`](https://github.com/rust-lang/rust/pull/68716).

Why I think this is the right API for setting span's location and hygiene - https://github.com/rust-lang/rust/pull/69041#issuecomment-586644778.

r? @dtolnay
2020-04-25 18:30:22 +02:00
Vadim Petrochenkov
966a295e8c Add a test for Span::resolved_at and Span::located_at 2020-04-25 14:59:09 +03:00
Dylan DPC
4b5b6cbe60
Rollup merge of #71533 - pnkfelix:revert-70566-for-const-validation-fix, r=Dylan-DPC
Revert PR 70566 for const validation fix

This is a port of PR #71441 but ported to the master branch, as discussed in [yesterday's T-compiler meeting](https://zulip-archive.rust-lang.org/131828tcompiler/88751weeklymeeting2020042354818.html#195065903)
2020-04-25 11:25:55 +02:00
Dylan DPC
6ded356d9c
Rollup merge of #71494 - flip1995:while_let_span, r=petrochenkov
Fix span of while (let) expressions after lowering

Credit goes to @alex-700 who found this while trying to fix a suggestion in Clippy.

While `if`, `try`, `for` and `await` expressions get the span of the original expression when desugared, `while` loops got the span of the scrutinee, which lead to weird code, when building the suggestion, that randomly worked: https://github.com/rust-lang/rust-clippy/pull/5511/files#diff-df4e9d2bf840a5f2e3b580bef73da3bcR106-R108

I'm wondering, if `DesugaringKind` should get a variant `WhileLoop` and instead of using the span of the `ast::ExprKind::While` expr directly, a new span with `self.mark_span_with_reason` should be used, like it is done with `for` loops.

There was some fallout, but I think that is acceptable. If not, I need some help to find out where this can be fixed.
2020-04-25 11:25:50 +02:00
Wesley Wiser
1474face6f Add regression test for #26376 2020-04-24 21:02:00 -04:00
Dylan DPC
f3331cb5b1
Rollup merge of #71330 - ecstatic-morse:const-qualif-lazy, r=oli-obk
Only run dataflow for const qualification if type-based check would fail

This is the optimization discussed in https://github.com/rust-lang/rust/issues/49146#issuecomment-614012476. We wait for `Qualif::in_any_value_of_ty` to return `true` before running dataflow. For bodies that deal mostly with primitive types, this will avoid running dataflow at all during const qualification.

This also removes the `BitSet` used to cache `in_any_value_of_ty` for each local, which was only necessary for an old version of #64470 that also handled promotability.
2020-04-25 01:35:55 +02:00
Dylan DPC
2e2080dee6
Rollup merge of #69456 - contrun:fix-misleading-compiler-error, r=estebank
fix misleading type annotation diagonstics

This solves the method call part of issue https://github.com/rust-lang/rust/issues/69455
2020-04-25 01:35:53 +02:00
Ralf Jung
7d23c3bf8a adjust tests 2020-04-24 16:18:19 -04:00
Eduard-Mihai Burtescu
d00f94ffc1 Remove redundant descr/descriptive_variant methods from HIR. 2020-04-24 13:44:08 -05:00
Dylan DPC
2846aa2f2f
Rollup merge of #71318 - RalfJung:miri-unleash-cleanup, r=oli-obk
miri-unleash tests: ensure they fire even with 'allow(const_err)'

This is easier with `static` than `const` so I switched some of them over.
2020-04-24 13:14:20 +02:00
Dylan DPC
7d8a3ad128
Rollup merge of #71235 - estebank:lt-sugg-2, r=ecstatic-morse
Tweak `'static` suggestion code

Fix #71196.
2020-04-24 13:14:19 +02:00
Dylan DPC
fa7fb932cc
Rollup merge of #71426 - contrun:fix-e0751-explanation, r=estebank
fix error code in E0751.md

reference: https://github.com/rust-lang/rust/issues/71304
2020-04-24 02:47:35 +02:00
Dylan DPC
c33deb9fda
Rollup merge of #71068 - pyfisch:unicode-version-stable, r=SimonSapin
Stabilize UNICODE_VERSION (feature unicode_version)

Tracking issue: #49726

r? @sfackler

#71020 changed the definition of `UNICODE_VERSION` just yesterday from a struct to a tuple. Maybe you want to wait some more before stabilizing this constant, on the other hand this is a very small and simple addition.

CC @behnam @SimonSapin @Serentty
2020-04-24 02:47:32 +02:00
Dylan DPC
45e04feb1d
Rollup merge of #70845 - varkor:const-generics-derive-eq-diagnostic, r=estebank
Make the `structural_match` error diagnostic for const generics clearer

The previous diagnostic caused confusion (https://github.com/rust-lang/rust/issues/70790), so this changes the message to be closer to the message for using non-`structural_match` constants in patterns, explicitly mentioning `#[derive(PartialEq, Eq)]`.

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

r? @estebank
2020-04-24 02:47:26 +02:00
flip1995
898cbf265a
update_tests 2020-04-24 00:22:50 +02:00
Ralf Jung
6b76b0e558 explain what we are testing in mutable_const 2020-04-23 21:25:27 +02:00
Dylan DPC
1d3d80f773
Rollup merge of #70633 - kper:master, r=estebank
Confusing suggestion on incorrect closing `}`

Compiler returns
```
error: unexpected closing delimiter: `}`
  --> main.rs:20:1
   |
9  |             ErrorHandled::Reported => {}
   |                                       -- this block is empty, you might have not meant to close it temp
...
20 | }
   | ^ unexpected closing delimiter

error: aborting due to previous error
```
2020-04-23 20:34:57 +02:00
Ralf Jung
6463ecfe76 miri-unleash tests: ensure they fire even with 'allow(const_err)' 2020-04-23 20:08:41 +02:00
Dylan MacKenzie
15f95b145e Cycle errors now occur during const-eval, not checking 2020-04-23 11:01:56 -07:00
Dylan DPC
4ae7037582
Rollup merge of #71396 - DeeDeeG:improve-e0308-again, r=estebank
Improve E0308 error message wording again

Hello again,

I recently did this PR: #70242

I felt the error message could be further improved, so I made [a post on the Rust community forum](https://users.rust-lang.org/t/looking-for-feedback-on-an-improved-error-message-for-e0308/40004) to ask for feedback.

(Also, there were some comments on my original PR that I took into consideration as well.)

This PR is my attempt to take all the feedback into account and propose a better and simplified error message that should still be accurate. Its main benefit is having simpler grammar, and hopefully being easier to read and understand.

Thanks to everyone who commented and gave feedback, and thank you for taking a look at this PR.
2020-04-23 15:57:14 +02:00
Dylan DPC
61fbc6a394
Rollup merge of #71005 - jonas-schievink:no-place-like-return, r=oli-obk
Reading from the return place is fine

Const eval thinks that reading from local `_0` is UB, but it isn't. `_0` is just a normal local like any other, and codegen handles it that way too. The only special thing is that the `Return` terminator will read from it.

I've hit these errors while working on an NRVO pass that can merge other locals with `_0` in https://github.com/rust-lang/rust/pull/71003.

r? @oli-obk
2020-04-23 15:57:11 +02:00
Oliver Scherer
af44cdf04f Disallow statics initializing themselves 2020-04-23 15:55:08 +02:00
Pyfisch
aa0175c98d Stabilize UNICODE_VERSION (feature unicode_version)
The feature will become stable in Rust 1.45.
Noted that the value of UNICODE_VERSION is expected to change.
2020-04-23 14:36:30 +02:00
YI
baac961fb5 fix error code for E0751 2020-04-23 15:46:05 +08:00
Esteban Küber
25f8966b5a Sort MultiSpans on creation 2020-04-22 17:15:34 -07:00
Ralf Jung
9ea5eed32b smoke-test for async fn with mir-opt-level=0 2020-04-22 23:34:13 +02:00
Dylan DPC
0f806534c0
Rollup merge of #71400 - dtolnay:isavailable, r=petrochenkov
proc_macro::is_available()

This PR adds `proc_macro::is_available() -> bool` to determine whether proc_macro has been made accessible to the currently running program.

The proc_macro crate is only intended for use inside the implementation of procedural macros. All the functions in the crate panic if invoked from outside of a procedural macro, such as from a build script or unit test or ordinary Rust binary.

Unfortunately those panics made it impossible for libraries that are designed to support both macro and non-macro use cases (e.g. Syn) to be used from binaries that are compiled with panic=abort. In panic=unwind mode we're able to attempt a proc macro call inside catch_unwind and use libproc_macro's result if it succeeds, otherwise fall back to a non-macro alternative implementation. But in panic=abort there was no way to determine which implementation needs to be used.

r? @eddyb
attn: @petrochenkov @adetaylor
ref: https://github.com/dtolnay/cxx/issues/130
2020-04-22 23:19:24 +02:00
Dylan DPC
10e47f5b7b
Rollup merge of #71256 - cuviper:must_use_replace, r=estebank
Lint must_use on mem::replace

This adds a hint on `mem::replace`, "if you don't need the old value,
you can just assign the new value directly". This is in similar spirit
to the `must_use` on `ManuallyDrop::take`.
2020-04-22 23:19:19 +02:00