Commit Graph

85141 Commits

Author SHA1 Message Date
bjorn3
825b55e763 Add alloc_map accessor 2018-10-21 15:49:19 +02:00
bjorn3
3742892749 Use read_local_of_frame in eval_place_to_op
Also make `layout_of_local` accept any `Frame`
2018-10-21 15:49:19 +02:00
bjorn3
7d406c9146 Fix errors 2018-10-21 15:49:19 +02:00
bjorn3
3e62ba1af6 Add method to get OpTy for local from arbitrary frame 2018-10-21 15:49:19 +02:00
bjorn3
ea51e32043 Make OpTy field op public for priroda 2018-10-21 15:49:19 +02:00
bors
31b97f789f Auto merge of #55069 - matthewjasper:explain-free-region-liveness, r=nikomatsakis
[NLL] Use new region infer errors when explaining borrows

Use the new free region infer errors for explaining borrows

This gives at least some explanation for why a borrow is expected to
last for a certain free region. Also:

* Reports E0373: "closure may outlive the current function" with NLL.
* Special cases the case of returning a reference to (or value referencing) a local variable or temporary (E0515).
* Special case assigning a reference to a local variable in a closure to a captured variable. (E0521)

Closes #51026 - `regions-nested-fns-2.rs` isn't changed to that diagnostic, since that would not be the correct error here.
Closes #51169
cc #53882 - The error is (IMO) better now, but it could be better when we trace lifetimes in these error messages.

r? @nikomatsakis cc @pnkfelix
2018-10-21 12:04:25 +00:00
Matthew Jasper
2a3969a3f7 Use new region infer errors for explaining borrows
This gives at least some explanation for why a borrow is expected to
last for a certain free region. Also:

* Reports E0373: "closure may outlive the current function" with NLL.
* Special cases the case of returning a reference to (or value
  referencing) a local variable or temporary (E0515).
* Special case assigning a reference to a local variable in a closure
  to a captured variable.
2018-10-21 12:35:00 +01:00
Vadim Petrochenkov
21d67c45a3 Fix a few tests with target-specific output
Enable one fully ignored test
2018-10-21 14:06:29 +03:00
Vadim Petrochenkov
7977250fb4 Make sure all ui/parse tests have -Z parse-only
Except those testing parsing during macro expansion
2018-10-21 14:06:29 +03:00
Vadim Petrochenkov
64c0efab85 Make some ui/parser tests compile-pass 2018-10-21 14:06:28 +03:00
Vadim Petrochenkov
51f3b6241d Move more parsing tests to ui/parser 2018-10-21 14:06:28 +03:00
Vadim Petrochenkov
52ede63263 Remove the parse-fail test suite 2018-10-21 14:06:28 +03:00
Vadim Petrochenkov
73e1f8970f Move parse-fail tests to UI 2018-10-21 14:06:28 +03:00
bors
66910ba686 Auto merge of #55125 - RalfJung:stacked-borrows, r=oli-obk
miri engine: Hooks for basic stacked borrows

r? @oli-obk
2018-10-21 09:32:25 +00:00
bors
554b7874a9 Auto merge of #54919 - alexcrichton:update-cargo, r=Mark-Simulacrum
Update Cargo, build curl/OpenSSL statically via features

In addition to to updating Cargo's submodule and Cargo's dependencies,
this also updates Cargo's build to build OpenSSL statically into Cargo
as well as libcurl unconditionally. This removes OpenSSL build logic
from the bootstrap code, and otherwise requests that even on OSX we
build curl statically.
2018-10-21 06:48:10 +00:00
Alex Crichton
4f661c016f Update Cargo, build curl/OpenSSL statically via features
In addition to to updating Cargo's submodule and Cargo's dependencies,
this also updates Cargo's build to build OpenSSL statically into Cargo
as well as libcurl unconditionally. This removes OpenSSL build logic
from the bootstrap code, and otherwise requests that even on OSX we
build curl statically.
2018-10-20 18:47:01 -07:00
Ralf Jung
3f5b550296 update miri 2018-10-21 01:32:45 +02:00
bors
d5418764ad Auto merge of #55230 - Manishearth:rollup, r=Manishearth
Rollup of 5 pull requests

Successful merges:

 - #55156 (Fixed: Multiple errors on single typo in match pattern)
 - #55189 (update books for the next release)
 - #55193 (make asm diagnostic instruction optional)
 - #55203 (Write an initial version of the `program_clauses` callback)
 - #55213 (ignore target folders)

Failed merges:

r? @ghost
2018-10-20 22:23:36 +00:00
François Mockers
9eacd68a49 manage cases with tabs or other whitespaces 2018-10-21 00:23:29 +02:00
Matthew Jasper
275432c115 Give an error number for "borrowed data escapes outside of closure" 2018-10-20 23:11:30 +01:00
Matthew Jasper
049bee09e9 Use more accurate ConstraintCategorys
Adds UseAsConst and UseAsStatic to replace Return in consts/statics.
Don't report the arguments to an overloaded operator as CallArguments.
Also don't report "escaping data" in these items.
2018-10-20 23:11:30 +01:00
Matthew Jasper
a2c24873b1 Prefer type annotations and returns in free region errors 2018-10-20 23:11:30 +01:00
Manish Goregaokar
f2848a010a Rollup merge of #55213 - qmx:tidy-fix, r=tmandry
when you try to edit a crate inside the compiler tree using rls, it
generates it's assets under target/rls, then tidy is trying to validate
line lenghts for C headers, etc
2018-10-20 13:15:52 -07:00
Manish Goregaokar
50cc08dd94 Rollup merge of #55203 - scalexm:program-clauses, r=nikomatsakis
Sometimes I just return `ty::List::empty()` because I cannot express these \"built-in\" clauses without bound tys support.

r? @nikomatsakis
2018-10-20 13:15:48 -07:00
Manish Goregaokar
ddf33eaa67 Rollup merge of #55189 - steveklabnik:update-books, r=QuietMisdreavus
Sending this PR in today so we can see what linkchecker wants overnight; please don't r+ until travis is green!
2018-10-20 13:15:45 -07:00
Manish Goregaokar
b860765355 Rollup merge of #55073 - alexcrichton:demote-simd, r=nagisa
The issue of passing around SIMD types as values between functions has
seen [quite a lot] of [discussion], and although we thought [we fixed
it][quite a lot] it [wasn't]! This PR is a change to rustc to, again,
try to fix this issue.

The fundamental problem here remains the same, if a SIMD vector argument
is passed by-value in LLVM's function type, then if the caller and
callee disagree on target features a miscompile happens. We solve this
by never passing SIMD vectors by-value, but LLVM will still thwart us
with its argument promotion pass to promote by-ref SIMD arguments to
by-val SIMD arguments.

This commit is an attempt to thwart LLVM thwarting us. We, just before
codegen, will take yet another look at the LLVM module and demote any
by-value SIMD arguments we see. This is a very manual attempt by us to
ensure the codegen for a module keeps working, and it unfortunately is
likely producing suboptimal code, even in release mode. The saving grace
for this, in theory, is that if SIMD types are passed by-value across
a boundary in release mode it's pretty unlikely to be performance
sensitive (as it's already doing a load/store, and otherwise
perf-sensitive bits should be inlined).

The implementation here is basically a big wad of C++. It was largely
copied from LLVM's own argument promotion pass, only doing the reverse.
In local testing this...

Closes #50154
Closes #52636
Closes #54583
Closes #55059

[quite a lot]: https://github.com/rust-lang/rust/pull/47743
[discussion]: https://github.com/rust-lang/rust/issues/44367
[wasn't]: https://github.com/rust-lang/rust/issues/50154
2018-10-20 13:15:39 -07:00
bors
155510e377 Auto merge of #55156 - PramodBisht:issue/52717, r=estebank
Fixed: Multiple errors on single typo in match pattern

Here we have fixed the case where we were throwing two diagnostic messages `E0026` and `E0027` for same case.

Example
```
error[E0026]: variant `A::A` does not have a field named `fob`
  --> src/test/ui/issue-52717.rs:20:12
   |
20 |     A::A { fob } => { println!("{}", fob); }
   |            ^^^ variant `A::A` does not have this field

error[E0027]: pattern does not mention field `foo`
  --> src/test/ui/issue-52717.rs:20:5
   |
20 |     A::A { fob } => { println!("{}", fob); }
   |     ^^^^^^^^^^^^ missing field `foo`

error: aborting due to 2 previous errors
```

Here above we can see that both `E0026` and `E0027` are depicting
same thing.

So, to fix this issue, we are simply checking if for last element of `inexistent_fields` is there any value lies in `unmentioned_fields` using levenshtein algorithm, if it does then for that case we are simply deleting element from `unmentioned_fields`. More or less, now instead of showing separate message in `E0027` we are giving extra hint on `E0026`

r? @estebank
2018-10-20 19:45:53 +00:00
Zack M. Davis
1ddbd81c80 pick a reference issue for absolute-paths future incompatibility info
It would be kind of embarrassing to ship with the "issue TBD" message!
2018-10-20 12:40:48 -07:00
Fabian Drinck
2f41c0d194 Rename InferTy::CanonicalTy to BoundTy and add DebruijnIndex to variant type 2018-10-20 19:16:23 +02:00
Fabian Drinck
2581bdc143 Rename CanonicalVar to BoundTyIndex 2018-10-20 18:39:29 +02:00
bors
22cc2ae805 Auto merge of #55119 - varkor:unwarned-match-on-never, r=nikomatsakis
Allow explicit matches on ! without warning

It's now possible to explicitly match on `!` without an unreachable code warning. This seems desirable as promoting explicitness.

Fixes https://github.com/rust-lang/rust/issues/55116.
2018-10-20 15:02:26 +00:00
kryptan
e10f0cd07d
Use a keyword in raw identifier example 2018-10-20 15:24:38 +03:00
Steve Klabnik
69daa9aac1 update books for the next release 2018-10-20 07:47:32 -04:00
bors
ca2639e82e Auto merge of #55014 - ljedrz:lazyboye_unwraps, r=matthewjasper
Prefer unwrap_or_else to unwrap_or in case of function calls/allocations

The contents of `unwrap_or` are evaluated eagerly, so it's not a good pick in case of function calls and allocations. This PR also changes a few `unwrap_or`s with `unwrap_or_default`.

An added bonus is that in some cases this change also reveals if the object it's called on is an `Option` or a `Result` (based on whether the closure takes an argument).
2018-10-20 11:22:48 +00:00
bors
94273f4d8e Auto merge of #55114 - oli-obk:fx#map, r=nikomatsakis
Deprecate the `FxHashMap()` and `FxHashSet()` constructor function hack
2018-10-20 08:45:55 +00:00
Scott McMurray
18f7db3d69 impl<'_> IceCube<'_> {} is now only one error in both editions 2018-10-19 22:57:41 -07:00
Scott McMurray
74df5ec387 Add a stub feature so we can still test E0705 2018-10-19 22:26:02 -07:00
Scott McMurray
4ab691ac2c 17905 also no longer errors, thanks to IHLE
But its test was written in an outdated way that hits a different error despite IHLE, so keep a variant around for that case.
2018-10-19 22:26:02 -07:00
Scott McMurray
ae130b0889 Move an underscore-lifetime error test to an IHLE success test 2018-10-19 22:26:01 -07:00
Scott McMurray
faf68f473f Hooray! 19982 finally works the way people wanted in December 2014 :) 2018-10-19 21:57:52 -07:00
Scott McMurray
37393576ec Stabilize impl_header_lifetime_elision in 2015
It's already stable in 2018; this finishes the stabilization.
2018-10-19 21:57:52 -07:00
bors
89be71a462 Auto merge of #55007 - davidtwco:issue-39175, r=petrochenkov
Help suggests non-existent package std::os::ext::process::CommandExt

Fixes #39175.
2018-10-20 01:31:10 +00:00
bors
42dde960f9 Auto merge of #55162 - nikomatsakis:issue-54902-underscore-bound, r=tmandry
handle underscore bounds in unexpected places

Per the discussion on #54902, I made it a hard error to use lifetime bounds in various places where they used to be permitted:

- `where Foo: Bar<'_>` for example

I also moved error reporting to HIR lowering and added `Error` variants to let us suppress downstream errors that result.

I (imo) improved the error message wording to be clearer, as well.

In the process, I fixed the ICE in #52098.

Fixes #54902
Fixes #52098
2018-10-19 22:54:14 +00:00
Niko Matsakis
c294ec640b add more to the ERROR messages 2018-10-19 16:44:01 -04:00
Niko Matsakis
df8adb53c9 fix error messages 2018-10-19 16:41:29 -04:00
bors
78ff609d73 Auto merge of #55152 - nikomatsakis:nll-issue-54571-type-annot-in-constants, r=pnkfelix
support type annot in constants, casts

Fixes #54571
Fixes #54332
Fixes #55183

r? @pnkfelix
2018-10-19 20:20:12 +00:00
Douglas Campos
cf90f72f55 ignore target folders
when you try to edit a crate inside the compiler tree using rls, it
generates it's assets under target/rls, then tidy is trying to validate
line lenghts for C headers, etc
2018-10-19 19:26:43 +00:00
scalexm
91da1a5c17 Write an initial version of the program_clauses callback 2018-10-19 15:47:22 +02:00
David Wood
4334aaacf1
Only suggest paths that exist.
In order to output a path that could actually be imported (valid and
visible), we need to handle re-exports correctly.

For example, take `std::os::unix::process::CommandExt`, this trait is
actually defined at `std::sys::unix::ext::process::CommandExt` (at time
of writing).

`std::os::unix` rexports the contents of `std::sys::unix::ext`.
`std::sys` is private so the "true" path to `CommandExt` isn't accessible.

In this case, the visible parent map will look something like this:

(child) -> (parent)
`std::sys::unix::ext::process::CommandExt` -> `std::sys::unix::ext::process`
`std::sys::unix::ext::process` -> `std::sys::unix::ext`
`std::sys::unix::ext` -> `std::os`

This is correct, as the visible parent of `std::sys::unix::ext` is in fact
`std::os`.

When printing the path to `CommandExt` and looking at the current
segment that corresponds to `std::sys::unix::ext`, we would normally
print `ext` and then go to the parent - resulting in a mangled path like
`std::os::ext::process::CommandExt`.

Instead, we must detect that there was a re-export and instead print `unix`
(which is the name `std::sys::unix::ext` was re-exported as in `std::os`).
2018-10-19 15:45:46 +02:00
Niko Matsakis
9a7bb0ef24 normalize the self-type that we extract from impl 2018-10-19 09:34:28 -04:00