Commit graph

9627 commits

Author SHA1 Message Date
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
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
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
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
Esteban Küber
59c816d58b fix test 2020-04-22 12:42:02 -07:00
Esteban Küber
322b2045f2 Revert old span change 2020-04-22 12:12:33 -07:00
Esteban Küber
1f43fc0209 Tweak wording 2020-04-22 12:12:33 -07:00
Esteban Küber
13c1daeb2f Tweak 'static suggestion code
Fix #71196.
2020-04-22 12:12:33 -07:00
Dylan DPC
7939a4d728
Rollup merge of #71370 - PankajChaudhary5:ErrorCode-E0696, r=GuillaumeGomez
Added detailed error code explanation for issue E0696 in Rust compiler.

Added proper error explanation for issue E0696 in the Rust compiler.
Error Code E0696

Sub Part of Issue #61137

r? @GuillaumeGomez
2020-04-22 16:41:12 +02:00
Dylan DPC
221f677d70
Rollup merge of #71336 - ecstatic-morse:check-consts-asm, r=oli-obk
Exhaustively match on `{Statement,Terminator}Kind` during const checking

This adds a pre-monomorphization error for inline assembly in a const context as well.

r? @oli-obk
2020-04-22 16:41:11 +02:00
bors
00f677d897 Auto merge of #71424 - Dylan-DPC:rollup-iunh61a, r=Dylan-DPC
Rollup of 6 pull requests

Successful merges:

 - #70970 (Detect mistyped associated consts in `Instance::resolve`.)
 - #71203 (Correct await span for async-await error reporting)
 - #71214 (Add error code for inner doc error)
 - #71337 (Moving all rustdoc-ui tests to check-pass)
 - #71412 (Clarify unused_doc_comments note on macro invocations)
 - #71414 (More diagnostic items for Clippy usage)

Failed merges:

r? @ghost
2020-04-22 11:14:23 +00:00
Dylan DPC
91ef66374b
Rollup merge of #71412 - dtolnay:uselessdoc, r=Manishearth
Clarify unused_doc_comments note on macro invocations

The previous error message used to say:

<pre>
/// doc
^^^^^^^ rustdoc does not generate documentation for <b>macros</b>
</pre>

Obviously we do generate documentation for macros, such as https://docs.rs/bitflags/1.2.1/bitflags/macro.bitflags.html. It's only macro invocations that don't get their own docs. This PR updates the message to say "rustdoc does not generate documentation for <b>macro invocations</b>".

I observe that prior to #69084 this used to say "rustdoc does not generate documentation for **macro expansions**", as implemented originally in #57882. I don't have a preference between those but I made the commit before looking up the history.

r? @Manishearth
attn: @yaahc @euclio
2020-04-22 12:18:38 +02:00
Dylan DPC
372d37b106
Rollup merge of #71214 - GuillaumeGomez:add-error-code-inner-doc-error, r=Dylan-DPC
Add error code for inner doc error

r? @Dylan-DPC

cc @oli-obk
2020-04-22 12:18:34 +02:00
Dylan DPC
7b1ce6e98d
Rollup merge of #71203 - csmoe:issue-71137, r=csmoe
Correct await span for async-await error reporting

Closes #71137
r? @tmandry
2020-04-22 12:18:33 +02:00
Dylan DPC
707004c552
Rollup merge of #70970 - eddyb:trait-vs-impl-mismatch, r=oli-obk
Detect mistyped associated consts in `Instance::resolve`.

*Based on #71049 to prevent redundant/misleading downstream errors.*

Fixes #70942 by refusing to resolve an associated `const` if it doesn't have the same type in the `impl` that it does in the `trait` (which we assume had errored, and `delay_span_bug` guards against bugs).
2020-04-22 12:18:31 +02:00
Guillaume Gomez
038f5b7433 Update UI tests 2020-04-22 11:09:57 +02:00
bors
4bfd62acb1 Auto merge of #71323 - nnethercote:bitcode-in-rlib, r=alexcrichton
Add `-Cbitcode-in-rlib`.

This is a cut-down version of #70458 that gets the compile-time wins.

r? @alexcrichton
2020-04-22 07:52:42 +00:00
Nicholas Nethercote
2984799881 Add a simple test. 2020-04-22 15:22:18 +10:00
David Tolnay
3a8097f2b4
Clarify unused_doc_comments note on macro invocations 2020-04-21 21:16:50 -07:00
csmoe
00d12ef901 add test for correct await span 2020-04-22 09:51:56 +08:00