Commit Graph

3188 Commits

Author SHA1 Message Date
Oliver Schneider
c793391e6d Move platform dependent output ui tests to compile-fail 2018-10-03 11:46:05 +02:00
Oliver Schneider
9e46c0b689 Only promote calls to #[rustc_promotable] const fns 2018-10-03 10:07:05 +02:00
bors
4cf11765dc Auto merge of #54767 - pietroalbini:rollup, r=pietroalbini
Rollup of 10 pull requests

Successful merges:

 - #54269 (#53840: Consolidate pattern check errors)
 - #54458 (Allow both explicit and elided lifetimes in the same impl header)
 - #54603 (Add `crate::` to trait suggestions in Rust 2018.)
 - #54648 (Update Cargo's submodule)
 - #54680 (make run-pass tests with empty main just compile-pass tests)
 - #54687 (Use impl_header_lifetime_elision in libcore)
 - #54699 (Re-export `getopts` so custom drivers can reference it.)
 - #54702 (do not promote comparing function pointers)
 - #54728 (Renumber `proc_macro` tracking issues)
 - #54745 (make `CStr::from_bytes_with_nul_unchecked()` a const fn)

Failed merges:

r? @ghost
2018-10-02 23:29:58 +00:00
Pietro Albini
1826970cf2
Rollup merge of #54728 - alexcrichton:renumber-issues, r=nikomatsakis
Renumber `proc_macro` tracking issues

Lots of issue links in the compiler still point to https://github.com/rust-lang/rust/issues/38356 which is a bit of a monster issue that isn't serving much purpose any more. I've split the issue into a number of more fine-grained tracking issues to track stabilizations.
2018-10-02 22:54:36 +02:00
Pietro Albini
d9d96637d4
Rollup merge of #54702 - RalfJung:fn-ptr-promotion, r=oli-obk
do not promote comparing function pointers

This *could* break existing code that relied on fn ptr comparison getting promoted to `'static` lifetime.

Fixes https://github.com/rust-lang/rust/issues/54696
2018-10-02 22:54:35 +02:00
Pietro Albini
7e571eead8
Rollup merge of #54687 - scottmcm:more-elision, r=dtolnay
Use impl_header_lifetime_elision in libcore

The feature is approved for stabilization, so let's use it to remove about 300 `'a`s.

Tracking issue for the feature: https://github.com/rust-lang/rust/issues/15872
2018-10-02 22:54:33 +02:00
Pietro Albini
32c1454a87
Rollup merge of #54680 - RalfJung:compile-pass, r=pnkfelix
make run-pass tests with empty main just compile-pass tests

Many run-pass tests have an empty main, so there is not actually any point in running them. This makes them `compile-pass` tests instead, saving some time (generating the binary and then running it).

For now I did this only for `run-pass/issues`; if there is interest I can also do it for the other directories. I used `^\s*fn\s+main\(\s*\)\s*\{\s*\}` as regexp to identify these files.
2018-10-02 22:54:32 +02:00
Pietro Albini
f70f6ec567
Rollup merge of #54603 - davidtwco:issue-54559, r=nikomatsakis
Add `crate::` to trait suggestions in Rust 2018.

Fixes #54559.

In the 2018 edition, when suggesting traits to import that implement a
given method that is being invoked, suggestions will now include the
`crate::` prefix if the suggested trait is local to the current crate.

r? @nikomatsakis
2018-10-02 22:54:29 +02:00
Pietro Albini
ab338eadfa
Rollup merge of #54458 - scottmcm:bug-54456, r=nikomatsakis
Allow both explicit and elided lifetimes in the same impl header

While still prohibiting explicit and in-band in the same header.

Fixes #54456

As usual, I don't know the broader context of the code I'm changing, so please let me know whatever I can do better.

Pre-existing test that mixing explicit and in-band remains an error: https://github.com/rust-lang/rust/blob/master/src/test/ui/in-band-lifetimes/E0688.rs
2018-10-02 22:54:28 +02:00
Pietro Albini
49d4359f6d
Rollup merge of #54269 - PramodBisht:issue/53840, r=estebank
#53840: Consolidate pattern check errors

#53840  on this PR we are aggregating `cannot bind by-move and by-ref in the same pattern` message present on the different lines into one diagnostic message. Here we are first gathering those `spans` on `vector` then we are throwing them with the help of `MultiSpan`
r? @estebank

Addresses: #53480
2018-10-02 22:54:27 +02:00
bors
2bd5993ca2 Auto merge of #54343 - blitzerr:master, r=nikomatsakis
First shot at #54015

Closes #54015
2018-10-02 20:46:49 +00:00
Ralf Jung
454b14a511 move some more tests 2018-10-02 13:16:56 +02:00
Oliver Schneider
2a1ea44bdc Nest the impl Trait existential item inside the return type 2018-10-02 10:54:34 +02:00
Pramod Bisht
e536e64702 Consolidate pattern check errors
we are consolidating `cannot bind by-move and by-ref in the same
pattern` message present on the different lines into single diagnostic
message.

To do this, we are first gathering those spans into the vector
after that we are throwing them with the help of MultiSpan in
a separate block.

Addresses: #53840
2018-10-02 05:51:02 +00:00
bors
2d1065bc2a Auto merge of #54694 - csmoe:self_this, r=estebank
Suggest to use self for fake-self from other languages

Closes https://github.com/rust-lang/rust/issues/54019
r? @estebank
2018-10-02 01:09:36 +00:00
David Wood
9e2d6e1e62
Add crate:: to trait suggestions in Rust 2018.
In the 2018 edition, when suggesting traits to import that implement a
given method that is being invoked, suggestions will now include the
`crate::` prefix if the suggested trait is local to the current crate.
2018-10-02 01:16:05 +02:00
David Wood
2be306939d
Improve mutability error suggestions.
This commit improves mutability error suggestions by suggesting the
removal of `&mut` where a mutable borrow is being taken of a `&mut self`
or a `self: &mut Self`.
2018-10-02 00:35:15 +02:00
David Wood
43b5d725d0
Improve implicit self mutability suggestions.
This commit adds an `ImplicitSelfKind` to the HIR and the MIR that keeps
track of whether a implicit self argument is immutable by-value, mutable
by-value, immutable reference or mutable reference so that the addition
of the `mut` keyword can be suggested for the immutable by-value case.
2018-10-02 00:35:15 +02:00
bors
7cbcdae818 Auto merge of #54693 - RalfJung:ctfe-scalar-pair-undef, r=oli-obk
do not normalize all non-scalar constants to a ConstValue::ScalarPair

We still need `ConstValue::ScalarPair` for match handling (matching slices and strings), but that will never see anything `Undef`. For non-fat-ptr `ScalarPair`, just point to the allocation like larger data structures do.

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

r? @eddyb
2018-10-01 22:32:26 +00:00
Ariel Ben-Yehuda
1069c0e38f add a special case for literal 'static: 'a where-clauses
This makes evaluation more consistent with fulfillment.
2018-10-01 22:44:45 +03:00
Ariel Ben-Yehuda
53a4b39909 handle outlives predicates in trait evaluation
Fixes #54302.
2018-10-01 22:44:45 +03:00
Alex Crichton
615214480a Extra proc macro gates are now at #54727 2018-10-01 12:37:07 -07:00
David Wood
8c6d08b71f
Add special cases for move from Rc/Arc errors.
This commit special cases the move out of borrowed content error,
previously:

```
error[E0507]: cannot move out of borrowed content
 --> src/main.rs:7:10
  |
7 |     drop(x.field);
  |          ^ cannot move out of borrowed content
```

to instead mention that it is a move out of a `Rc`/`Arc` which is more
helpful:

```
error[E0507]: cannot move out of an `Rc`
 --> src/main.rs:7:10
  |
7 |     drop(x.field);
  |          ^ cannot move out of an `Rc`
```
2018-10-01 13:50:22 +02:00
kennytm
5b08200223
Rollup merge of #54676 - pnkfelix:issue-15287-kill-zflag-disabling-ast-check, r=alexcrichton
Remove `-Z disable_ast_check_for_mutation_in_guard`

One should use `#![feature(bind_by_move_pattern_guards)]` over `-Z disable_ast_check_for_mutation_in_guard`

cc #15287
2018-10-01 17:49:33 +08:00
kennytm
5bfd085cd2
Rollup merge of #54623 - alexreg:impl_trait_in_bindings-help, r=estebank
Added help message for `impl_trait_in_bindings` feature gate

r? @estebank

CC @Centril
2018-10-01 16:12:59 +08:00
kennytm
b18821201f
Rollup merge of #54488 - zackmdavis:and_the_case_of_the_unused_crate, r=estebank
in which we include attributes in unused `extern crate` suggestion spans

![unused_extern](https://user-images.githubusercontent.com/1076988/45921698-50243e80-be6f-11e8-930a-7b2a33b4935c.png)

Resolves #54400.

r? @estebank
2018-10-01 16:12:56 +08:00
kennytm
a1f3b0fe74
Rollup merge of #54308 - dsciarra:issue-22692, r=estebank
Better user experience when attempting to call associated functions with dot notation

Closes #22692
2018-10-01 16:12:55 +08:00
csmoe
4470b1cec0 mark fix as MaybeIncorrect 2018-10-01 13:03:04 +08:00
csmoe
912691b3ff update ui test for suggest-self 2018-10-01 13:02:12 +08:00
bors
93efd533a3 Auto merge of #54650 - eddyb:no-extern's-land, r=alexcrichton
Don't lint non-extern-prelude extern crate's in Rust 2018.

Fixes #54381 by silencing the lint telling users to remove `extern crate` when `use` doesn't work.

r? @alexcrichton cc @petrochenkov @nikomatsakis @Centril
2018-09-30 22:20:16 +00:00
Alexander Regueiro
3e142b92bc Added help message for impl_trait_in_bindings feature gate. 2018-09-30 22:12:34 +01:00
bors
fc403ad987 Auto merge of #53255 - orium:fix-bug-overflow-send, r=arielb1
Add a per-tree error cache to the obligation forest

This implements part of what @nikomatsakis mentioned in  https://github.com/rust-lang/rust/pull/30533#issuecomment-170705871:

> 1. If you find that a new obligation is a duplicate of one already in the tree, the proper processing is:
>      * if that other location is your parent, you should abort with a cycle error (or accept it, if coinductive)
>      * if that other location is not an ancestor, you can safely ignore the new obligation

In particular it implements the "if that other location is your parent accept it, if coinductive" part.  This fixes #40827.

I have to say that I'm not 100% confident that this is rock solid.  This is my first pull request 🎉, and I didn't know anything about the trait resolver before this.  In particular I'm not totally sure that comparing predicates is enough (for instance, do we need to compare `param_env` as well?).  Also, I'm not sure what @nikomatsakis mentions [here](https://github.com/rust-lang/rust/issues/30977#issue-127091096), but it might be something that affects this PR:

> In particular, I am wary of getting things wrong around inference variables! We can always add things to the set in their current state, and if unifications occur then the obligation is just kind of out-of-date, but I want to be sure we don't accidentally fail to notice that something is our ancestor. I decided this was subtle enough to merit its own PR.

Anyway, go ahead and review 🙂.

Ref #30977.

# Performance

We are now copying vectors around, so I decided to do some benchmarking.  A simple benchmark shows that this does not seem to affect performance in a measurable way:

I ran `cargo clean && cargo build` 20 times on actix-web (84b27db) and these are the results:

```text
rustc master:

            Mean        Std.Dev.    Min         Median      Max
real        66.637      2.996       57.220      67.714      69.314
user        307.293     14.741      258.093     312.209     320.702
sys         12.524      0.653       10.499      12.726      13.193

rustc fix-bug-overflow-send:

            Mean        Std.Dev.    Min         Median      Max
real        66.297      4.310       53.532      67.516      70.348
user        306.812     22.371      236.917     314.748     326.229
sys         12.757      0.952       9.671       13.125      13.544
```

I will do a more comprehensive benchmark (compiling rustc stage1) and post the results.

r? @nikomatsakis, @nnethercote

PS: It is better to review this commit-by-commit.
2018-09-30 19:41:07 +00:00
Diogo Sousa
6bfa6aa872 Deduplicate errors in the obligation forest.
Fixes #40827.
2018-09-30 20:01:35 +01:00
Ralf Jung
4cbfc9398d also compile-fail test fn ptr comparison promotion 2018-09-30 20:28:00 +02:00
bors
390540909e Auto merge of #54622 - matthewjasper:more-nll-mode, r=pnkfelix
Enable NLL compare mode for more tests

Most of these tests were disabled due to NLL bugs that have since been fixed. A few needed updating for NLL.

r? @nikomatsakis
2018-09-30 14:38:47 +00:00
csmoe
cae164c02c add test for fake self 2018-09-30 20:49:22 +08:00
Ralf Jung
1b22befd36 make run-pass tests with empty main just compile-pass tests 2018-09-30 14:32:10 +02:00
Ralf Jung
392ea7ad53 do not normalize non-scalar constants to a ConstValue::ScalarPair 2018-09-30 12:37:00 +02:00
Scott McMurray
8d6bee3442 UI test updates 2018-09-29 22:05:07 -07:00
bors
6310be458f Auto merge of #54601 - cuviper:prep-1.31, r=Mark-Simulacrum
Bump to 1.31.0 and bootstrap from 1.30 beta

Closes #54594.
2018-09-30 01:45:50 +00:00
Donato Sciarra
0390736dce Improve ux when calling associated functions with dot notation
Issue: 22692
2018-09-29 21:36:58 +02:00
Keith Yeung
8380b25d13 Add UI test for preserving user types in type ascriptions 2018-09-29 10:34:36 -07:00
bors
eb50e75729 Auto merge of #54599 - nikomatsakis:issue-54593-impl-Trait, r=eddyb
use closure def-id in returns, but base def-id in locals

The refactorings to  handle `let x: impl Trait`  wound up breaking `impl Trait` in closure return types. I think there are some deeper problems with the code in question, but this a least should make @eddyb's example work.

Fixes #54593

r? @eddyb
2018-09-29 15:07:59 +00:00
bors
9653f79033 Auto merge of #54660 - kennytm:rollup, r=kennytm
Rollup of 8 pull requests

Successful merges:

 - #54564 (Add 1.29.1 release notes)
 - #54567 (Include path in stamp hash for debuginfo tests)
 - #54577 (rustdoc: give proc-macros their own pages)
 - #54590 (std: Don't let `rust_panic` get inlined)
 - #54598 (Remove useless lifetimes from `Pin` `impl`s.)
 - #54604 (Added help message for `self_in_typedefs` feature gate)
 - #54635 (Improve docs for std::io::Seek)
 - #54645 (Compute Android gdb version in compiletest)
2018-09-29 12:35:39 +00:00
kennytm
9b56c8700c
Rollup merge of #54604 - alexreg:self_in_typedefs-help, r=estebank
Added help message for `self_in_typedefs` feature gate

Fixes #54563.

CC @Centril @estebank @leonardo-m
2018-09-29 16:43:39 +08:00
bors
6622172734 Auto merge of #54278 - eddyb:spanned-generic-predicates, r=nikomatsakis
rustc: keep a Span for each predicate in ty::GenericPredicates.

This should allow finer-grained diagnostics, including migration suggestions for #54090.
(Note that I haven't changed most of the users of `predicates_of` to use the new spans)

r? @nikomatsakis
2018-09-29 03:42:38 +00:00
Rusty Blitzerr
671e77d60b test fix for #54015 2018-09-28 18:24:17 -07:00
bors
a0a6e43755 Auto merge of #53013 - zackmdavis:infer_outlints, r=nikomatsakis
in which inferable outlives-requirements are linted

RFC 2093 (tracking issue #44493) lets us leave off these
commonsensically inferable `T: 'a` outlives requirements. (A separate
feature-gate was split off for the case of 'static lifetimes, for
which questions still remain.) Detecting these was requested as an
idioms-2018 lint.

Resolves #52042, an item under the fabulous metaïssue #52047.

It's plausible that this shouldn't land until after `infer_outlives_requirements` has been stabilized ([final comment period started](https://github.com/rust-lang/rust/issues/44493#issuecomment-408852946) 4 days ago), but I think there's also a strong case to not-wait in order to maximize the time that [Edition Preview 2](https://internals.rust-lang.org/t/rust-2018-release-schedule-and-extended-beta/8076) users have to kick at it. (It's allow by default, so there's no impact unless you explicitly turn it or the rust-2018-idioms group up to `warn` or higher.)

Questions—

 * Is `explicit-outlives-requirements` a good name? (I chose it as an [RFC 344](https://github.com/rust-lang/rfcs/blob/master/text/0344-conventions-galore.md#lints)-compliant "inversion" of the feature-gate name, `infer_outlives_requirements`, but I could imagine someone arguing that the word `struct` should be part of the name somewhere, for specificity.)

 * Are there any false-positives or false-negatives? @nikomatsakis [said that](https://github.com/rust-lang/rust/issues/52042#issuecomment-406409795) getting this right would be "fairly hard", which makes me nervous that I'm missing something. The UI test in the initial submission of this pull request just exercises the examples [given in the Edition Guide](https://rust-lang-nursery.github.io/edition-guide/2018/transitioning/ownership-and-lifetimes/struct-inference.html).

![infer_outlints](https://user-images.githubusercontent.com/1076988/43625740-6bf43dca-96a3-11e8-9dcf-793ac83d424d.png)

r? @alexcrichton
2018-09-29 01:09:07 +00:00
Eduard-Mihai Burtescu
81ca8ebee2 rustc_typeck: don't lint non-extern-prelude extern crate's in Rust 2018. 2018-09-28 23:35:01 +03:00
Rusty Blitzerr
44b3674d8e Test fixes for the change of error message for issue #54015 2018-09-28 09:25:14 -07:00
Eduard-Mihai Burtescu
7020326bea rustc: keep a Span for each predicate in ty::GenericPredicates. 2018-09-28 17:19:35 +03:00
Felix S. Klock II
f9ff7b7336 Prefer #![feature(bind_by_move_pattern_guards)] over -Z disable_ast_check_for_mutation_in_guard 2018-09-28 15:40:10 +02:00
bors
d623ec6ba3 Auto merge of #54568 - levex:issue-54130, r=nagisa
codegen_llvm: check inline assembly constraints with LLVM

---%<---
Hey all,

As issue #54130 highlights, constraints are not checked and passing bad constraints to LLVM can crash it since a `Verify()` call is placed inside an assertion (see: `src/llvm/lib/IR/InlineAsm.cpp:39`).

As this is my first PR to the Rust compiler (woot! 🎉), there might be better ways of achieving this result. In particular, I am not too happy about generating an error in codegen; it would be much nicer if we did it earlier. However, @rkruppe [noted on IRC](https://botbot.me/mozilla/rustc/2018-09-25/?msg=104791581&page=1) that this should be fine for an unstable feature and a much better solution than the _status quo_, which is an ICE.

Thanks!
--->%---

LLVM provides a way of checking whether the constraints and the actual
inline assembly make sense. This commit introduces a check before
emitting code for the inline assembly. If LLVM rejects the inline
assembly (or its constraints), then the compiler emits an error E0668
("malformed inline assembly").

Fixes: #54130
Signed-off-by: Levente Kurusa \<lkurusa@acm.org\>
2018-09-28 09:17:28 +00:00
bors
bd8d030d01 Auto merge of #54338 - orium:fix-macro-inc-comp, r=nrc
Use full name to identify a macro in a `FileName`.

Before this two macros with same name would be indistinguishable inside a `FileName`.  This caused a bug in incremental compilation (see #53097) since two different macros would map out to the same `StableFilemapId`.

Fixes #53097.

r? @nrc
2018-09-28 06:40:32 +00:00
Josh Stone
d40b6cf086 Update ui lines 2018-09-27 20:52:53 -07:00
Josh Stone
ce034951fb Bump to 1.31.0 and bootstrap from 1.30 beta 2018-09-27 20:52:53 -07:00
Zack M. Davis
032d97fa01 in which inferable outlives-requirements are linted
RFC 2093 (tracking issue #44493) lets us leave off
commonsensically inferable `T: 'a` outlives requirements. (A separate
feature-gate was split off for the case of 'static lifetimes, for
which questions still remain.) Detecting these was requested as an
idioms-2018 lint.

It turns out that issuing a correct, autofixable suggestion here is
somewhat subtle in the presence of other bounds and generic
parameters. Basically, we want to handle these three cases:

 • One outlives-bound. We want to drop the bound altogether, including
   the colon—

   MyStruct<'a, T: 'a>
                 ^^^^ help: remove this bound

 • An outlives bound first, followed by a trait bound. We want to
   delete the outlives bound and the following plus sign (and
   hopefully get the whitespace right, too)—

   MyStruct<'a, T: 'a + MyTrait>
                   ^^^^^ help: remove this bound

 • An outlives bound after a trait bound. We want to delete the
   outlives lifetime and the preceding plus sign—

   MyStruct<'a, T: MyTrait + 'a>
                          ^^^^^ help: remove this bound

This gets (slightly) even more complicated in the case of where
clauses, where we want to drop the where clause altogether if there's
just the one bound. Hopefully the comments are enough to explain
what's going on!

A script (in Python, sorry) was used to generate the
hopefully-sufficiently-exhaustive UI test input. Some of these are
split off into a different file because rust-lang-nursery/rustfix#141
(and, causally upstream of that, #53934) prevents them from being
`run-rustfix`-tested.

We also make sure to include a UI test of a case (copied from RFC
2093) where the outlives-bound can't be inferred. Special thanks to
Niko Matsakis for pointing out the `inferred_outlives_of` query,
rather than blindly stripping outlives requirements as if we weren't a
production compiler and didn't care.

This concerns #52042.
2018-09-27 20:24:14 -07:00
bors
7d52cbce6d Auto merge of #54530 - pnkfelix:issue-54047-migrate-ui-run-pass-back-to-run-pass, r=alexcrichton
Migrate `src/test/ui/run-pass/*` back to `src/test/run-pass/`.

Moves all the tests from `src/test/ui/run-pass/**` back to `src/test/run-pass/`.

This should have no impact on our overall testing completeness due to PR #54223

Fix #54047
2018-09-27 23:46:21 +00:00
Matthew Jasper
27ea8117e7 Enable NLL compare mode for more tests
These tests were disabled due to NLL bugs that have since been fixed.
2018-09-27 22:30:04 +01:00
bors
8876906867 Auto merge of #54468 - matthewjasper:fix-polonius, r=nikomatsakis
[NLL] Get Polonius borrow check to work in simple cases

* Restores the generation of outlives facts from subtyping.
* Restore liveness facts.
* Generate invalidates facts at the start point of each location,
  where we check for errors.
* Add a small test for simple cases (previously these cases have compiled, and more recently ICEd).

Closes #54212
cc #53142 (will need test)

### Known limitations

* Two phase borrows aren't implemented for Polonius yet
* Invalidation facts haven't been updated for some of the recent changes to make `Drop` terminators access fewer things.
* Fact generation is not as optimized as it could be.
* Around 30 tests fail in compare mode, often tests that are ignored in nll compare mode

r? @nikomatsakis
2018-09-27 19:26:59 +00:00
bors
c9865b1c37 Auto merge of #54355 - pnkfelix:issue-22323-regression-test, r=davidtwco
NLL: regression test for "dropck: track order of destruction for r-value temporaries"

Once this lands, we can remove the E-needstest from #22323.

(We shouldn't close the bug itself, however, because we are leaving the NLL-fixed-by-NLL bugs open until NLL is turned on by default.)
2018-09-27 12:35:36 +00:00
bors
e999ebdb97 Auto merge of #54581 - petrochenkov:cfgattr, r=alexcrichton
Accept trailing comma in `cfg_attr`

Fixes https://github.com/rust-lang/rust/issues/54463 (stable-to-beta regression)
2018-09-27 07:16:27 +00:00
Alexander Regueiro
4151de43aa Updated stderr test files. 2018-09-27 04:20:25 +01:00
Niko Matsakis
bcfdfe4e50 use the closure def-id in returns, but closure-base def-id in locals
Using the `closure_base_def_id` indiscriminantely, as we were doing
before, winds up "going wrong" if the closure type includes the `impl
Trait` from the parent. The problem arises because the return value
for closures is inferred and meant to treat the return
type *opaquely*, so we don't want to be "desugaring" it into the
underlying type.
2018-09-26 17:07:25 -04:00
Matthew Jasper
610903fb11 Get Polonius borrow check to work in simple cases
* Restores the generation of outlives facts from subtyping.
* Restore liveness facts.
* Generate invalidates facts at the start point of each location,
  where we check for errors.
* Add a small test for simple cases.
2018-09-26 22:03:56 +01:00
Levente Kurusa
0991d2098f
fixup! codegen_llvm: check inline assembly constraints with LLVM 2018-09-26 16:23:10 +02:00
Niko Matsakis
e2deef32d4 pacify the mercilous tidy. 2018-09-26 09:38:26 -04:00
Niko Matsakis
f87189dd3c update tests and add stderr files 2018-09-26 09:38:26 -04:00
Niko Matsakis
0b4791e60b make NLL handle IfEq bounds by using SCC normalization 2018-09-26 09:38:26 -04:00
Niko Matsakis
689b791422 use approx. bounds to decide whether to add outlives obligations
Before, if we had a projection like `<T as Foo<'0>>::Bar: 'x` and a
where clause like `<T as Foo<'a>>::Bar: 'a`, we considered those to
have nothing to do with one another. Therefore, we would use the
"overconstrained" path of adding `T: 'x` and `'0: 'x` requirements. We
now do a "fuzzy" match where we erase regions first and hence we see
the env bound `'a`.
2018-09-26 09:38:26 -04:00
Niko Matsakis
b2e0215a1f apply process_registered_region_obligations at the end of regionck
We used to apply it repeatedly as we went, relying on the current
value of the `region_bound_pairs_accum` vector. But now we save those
values into a map, so we can just process all the registered region
obligations at the end.
2018-09-26 09:38:26 -04:00
Felix S. Klock II
2080474c75 Migrate src/test/ui/run-pass/* back to src/test/run-pass/.
Fix #54047
2018-09-26 13:10:54 +02:00
bors
a2b27c19da Auto merge of #54497 - ralexstokes:stabilize_pattern_parentheses, r=nikomatsakis
Stabilize pattern_parentheses feature

Addresses #51087 .

Stabilizes the previously unstable feature `pattern_parentheses` which enables the use of `()` in match patterns.
2018-09-26 07:38:19 +00:00
bors
0b2eae72af Auto merge of #54164 - mikhail-m1:54131, r=pnkfelix
add "temporary value borrowed for too long" error

Issue #54131

r? @nikomatsakis
2018-09-26 01:16:22 +00:00
Vadim Petrochenkov
2b3e16bfaa Accept trailing comma in cfg_attr 2018-09-26 03:07:59 +03:00
bors
4141a4079e Auto merge of #53542 - alexreg:impl-trait-in-bindings, r=cramertj
`impl trait` in bindings (feature: impl-trait-existential-types)

This PR enables `impl Trait` syntax (opaque types) to be used in bindings, e.g.

* `let foo: impl Clone = 1;`
* `static foo: impl Clone = 2;`
* `const foo: impl Clone = 3;`

This is part of [RFC 2071](https://github.com/rust-lang/rfcs/blob/master/text/2071-impl-trait-existential-types.md) ([tracking issue](https://github.com/rust-lang/rust/issues/34511)), but exists behind the separate feature gate `impl_trait_in_bindings`.

CC @cramertj @oli-obk @eddyb @Centril @varkor
2018-09-25 20:02:14 +00:00
Mikhail Modin
2af199d58e Update E0714 to E0716 in tests output 2018-09-25 16:24:20 +01:00
bors
31789a658b Auto merge of #54411 - cramertj:await-keyword-error, r=nikomatsakis
Make "await" a pseudo-edition keyword

This change makes "await" ident an error in 2018 edition without async_await
feature and adds "await" to the 2018 edition keyword lint group that
suggest migration on the 2015 edition.

cc https://github.com/rust-lang/rust/issues/53834

r? @nikomatsakis
2018-09-25 15:20:10 +00:00
Felix S. Klock II
ea4d934c32 Change the diagnostic number from 714 to 716. 2018-09-25 15:23:57 +01:00
Mikhail Modin
5fc0b743d7 add "temporary value dropped while borrowed" error
Issue #54131
2018-09-25 15:23:56 +01:00
bors
e7416d5650 Auto merge of #54317 - Centril:feature/dbg_macro, r=SimonSapin
Implement the dbg!(..) macro

Implements the `dbg!(..)` macro due to #54306.
cc https://github.com/rust-lang/rfcs/pull/2361

r? @alexcrichton
2018-09-25 07:06:15 +00:00
bors
287187230b Auto merge of #53693 - scottmcm:marker-trait-attribute, r=nikomatsakis
Support an explicit annotation for marker traits

From the tracking issue for rust-lang/rfcs#1268:
> It seems obvious that we should make a `#[marker]` annotation. ~ https://github.com/rust-lang/rust/issues/29864#issuecomment-368959441

This PR allows you to put `#[marker]` on a trait, at which point:
- [x] The trait must not have any items ~~All of the trait's items must have defaults~~
- [x] Any impl of the trait must be empty (not override any items)
- [x] But impls of the trait are allowed to overlap

r? @nikomatsakis
2018-09-25 03:42:46 +00:00
Alexander Regueiro
3b14450225 Added tests. 2018-09-25 03:09:43 +01:00
Matthew Jasper
218189536d Handle impl trait in MIR type checked for assignments. 2018-09-25 03:05:55 +01:00
Matthew Jasper
1a6ed0271e Update ui tests 2018-09-24 23:33:13 +01:00
Matthew Jasper
c5047cb494 Add tests for new match borrows 2018-09-24 23:33:13 +01:00
Taylor Cramer
fb14662e74 Make "await" a pseudo-edition keyword
This change makes "await" ident an error in 2018 edition without async_await
feature and adds "await" to the 2018 edition keyword lint group that
suggest migration on the 2015 edition.
2018-09-24 13:07:19 -07:00
bors
a072d1bca6 Auto merge of #54509 - matthewjasper:better-drop-access, r=pnkfelix
[NLL] Rework checking for borrows conflicting with drops

Previously, we would split the drop access into multiple checks for each
field of a struct/tuple/closure and through `Box` dereferences. This
changes this to check if the borrow is accessed by the drop in
`places_conflict`.

We also now handle enums containing `Drop` types.

Closes #53569

r? @nikomatsakis
cc @pnkfelix
2018-09-24 14:47:17 +00:00
bors
e5c6575801 Auto merge of #54507 - csmoe:deny_overflow, r=varkor
Deny the `overflowing_literals` lint for the 2018 edition

Closes https://github.com/rust-lang/rust/issues/54502
r? @varkor
2018-09-24 10:08:01 +00:00
bors
8a92ebfb59 Auto merge of #54495 - raventid:improve-e0425-message, r=estebank
Improve error message for E0424

Resolves #54369

r? @estebank
2018-09-24 00:20:21 +00:00
Mazdak Farrokhzad
e5b9331a86 dbg_macro: fix line numbers 2018-09-23 22:48:24 +02:00
Matthew Jasper
cfbd1a9a25 Update tests for changes to drop access 2018-09-23 20:27:41 +01:00
Matthew Jasper
4603fb8862 Rework checking for borrows conflicting with drops
Previously, we would split the drop access into multiple checks for each
field of a struct/tuple/closure and through `Box` dereferences. This
changes this to check if the borrow is accessed by the drop in
places_conflict.

This also allows us to handle enums in a simpler way, since we don't
have to construct any new places.
2018-09-23 20:27:41 +01:00
Matthew Jasper
d3f9af8891 Remove irrelevant message about drop order
When dropping a self-borrowing struct we shouldn't add a "values in a
scope are dropped in the opposite order they are defined" message,
since there is only one value being dropped.
2018-09-23 20:27:41 +01:00
csmoe
6523eabf6e add test for edition 2018 2018-09-23 22:59:06 +08:00
Mazdak Farrokhzad
5184dcc31c dbg_macro: only ignore cloudabi and emscripten 2018-09-23 15:59:34 +02:00
Mazdak Farrokhzad
3006d4ea48 dbg_macro: more things... 2018-09-23 15:50:11 +02:00
David Wood
b342f00179
Only annotate if borrow is returned.
Error now correctly checks whether the borrow that does not live
long enough is being returned before annotating the error with the
arguments and return type from the signature - as this would not be
relevant if the borrow was not being returned.
2018-09-23 14:18:35 +02:00
David Wood
ef10e94993
Correctly handle named lifetimes.
Enhances annotation logic to properly consider named lifetimes where
lifetime elision rules that were previously implemented would not apply.

Further, adds new help and note messages to diagnostics and highlights
only lifetime when dealing with named lifetimes.
2018-09-23 14:18:35 +02:00
David Wood
350ed4200c
Added note about dangling references.
This error can only occur within a function when a borrow of data owned
within the function is returned; and when there are arguments that could
have been returned instead. Therefore, it is always applicable to add a
specific note that links to the relevant rust documentation about
dangling references.
2018-09-23 14:18:34 +02:00