Commit Graph

85064 Commits

Author SHA1 Message Date
Niko Matsakis
121f3c8d19 normalize after substitution 2018-10-19 09:32:32 -04:00
Niko Matsakis
f99300fcbd pull relate_type_and_user_type code into type_check module
It's really layered atop the core "relate-types" code
2018-10-19 09:32:30 -04:00
Oliver Scherer
53e92f4573 Update unit tests 2018-10-19 14:34:45 +02:00
Oliver Scherer
bf3d40aa7e Update TypedArena tests 2018-10-19 14:34:44 +02:00
Oliver Scherer
54eb222c40 Update more internals tests to default 2018-10-19 14:34:44 +02:00
Oliver Scherer
ab3f37ec43 Free some memory instead of just dropping elements 2018-10-19 14:34:44 +02:00
Oliver Scherer
55f76628ee Update a compiler-test to the Default changes 2018-10-19 14:34:44 +02:00
Oliver Scherer
36641ce8cd Remove unused box 2018-10-19 14:34:44 +02:00
Oliver Scherer
5075174c46 Derives often have very strict bounds 2018-10-19 14:34:44 +02:00
Oliver Scherer
3c9258e604 Prefer Default::default over FxHash*::default in struct constructors 2018-10-19 14:34:44 +02:00
Oliver Scherer
ee81739dc1 Deprecate the FxHashMap() and FxHashSet() constructor function hack 2018-10-19 14:34:44 +02:00
Niko Matsakis
e7ab33e7a6 type_check/mod.rs: rustfmt 2018-10-19 08:31:35 -04:00
Niko Matsakis
a0a3b4c058 replace UserTypeAnnotation::AdtDef with TypeOf 2018-10-19 08:31:35 -04:00
Niko Matsakis
e94959b936 propagate user-type annotation for constants in expressions 2018-10-19 08:31:35 -04:00
Niko Matsakis
ebdfda64f8 convert FnDef to TypeOf, which is more general 2018-10-19 08:31:35 -04:00
Niko Matsakis
bd93741bd3 remove outdated assertion
This dates from the days before we instantiated user types with
inference variables.
2018-10-19 08:31:35 -04:00
Pramod Bisht
978dc3d66f 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 like this

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 element of
`inexistent_fields` is there any value lies in
`unmentioned_fields` using Levenshtein algorithm, if 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`

Address: #52717
2018-10-19 10:33:49 +00:00
Alex Crichton
3cc8f738d4 rustc: Fix (again) simd vectors by-val in ABI
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-19 02:35:00 -07:00
bors
74ff7dcb13 Auto merge of #55194 - kennytm:rollup, r=kennytm
Rollup of 7 pull requests

Successful merges:

 - #54300 (Updated RELEASES.md for 1.30.0)
 - #55013 ([NLL] Propagate bounds from generators)
 - #55071 (Fix ICE and report a human readable error)
 - #55144 (Cleanup resolve)
 - #55166 (Don't warn about parentheses on `match (return)`)
 - #55169 (Add a `copysign` function to f32 and f64)
 - #55178 (Stabilize slice::chunks_exact(), chunks_exact_mut(), rchunks(), rchunks_mut(), rchunks_exact(), rchunks_exact_mut())
2018-10-19 09:29:48 +00:00
kennytm
0724efd9a1
Rollup merge of #55013 - matthewjasper:propagate-generator-bounds, r=nikomatsakis
[NLL] Propagate bounds from generators

This used to only be done for closures.
2018-10-19 16:48:36 +08:00
kennytm
4763c22402
Rollup merge of #55178 - sdroege:stabilize-chunks-exact, r=alexcrichton
Stabilize slice::chunks_exact(), chunks_exact_mut(), rchunks(), rchunks_mut(), rchunks_exact(), rchunks_exact_mut()

Fixes #47115, #55177
2018-10-19 16:47:55 +08:00
kennytm
399314d802
Rollup merge of #55169 - raphlinus:copysign, r=joshtriplett
Add a `copysign` function to f32 and f64

This patch adds a `copysign` function to the float primitive types. It is an exceptionally useful function for writing efficient numeric code, as it often avoids branches, is auto-vectorizable, and there are efficient intrinsics for most platforms.

I think this might work as-is, as the relevant `copysign` intrinsic is already used internally for the implementation of `signum`. It's possible that an implementation might be needed in japaric/libm for portability across all platforms, in which case I'll do that also.

Part of the work towards #55107
2018-10-19 16:47:51 +08:00
kennytm
9d2eb9b752
Rollup merge of #55166 - varkor:ret-parens, r=davidtwco
Don't warn about parentheses on `match (return)`

Fixes #55164.
2018-10-19 16:47:48 +08:00
kennytm
8d712aa1d8
Rollup merge of #55144 - ljedrz:cleanup_resolve, r=petrochenkov
Cleanup resolve

- improve/remove allocations
- `truncate` instead of `pop`ping in a loop
- improve common patterns
2018-10-19 16:47:46 +08:00
kennytm
89ebc6ce4f
Rollup merge of #55071 - oli-obk:const_cast_🍨, r=RalfJung
Fix ICE and report a human readable error

fixes #55063

r? @RalfJung
2018-10-19 16:47:42 +08:00
ljedrz
d28aed6dc4 Prefer unwrap_or_else to unwrap_or in case of function calls/allocations 2018-10-19 09:45:45 +02:00
bors
dbab381da1 Auto merge of #55040 - scalexm:param-env, r=nikomatsakis
Replace `ParamEnv` with a new type in chalk context.

I left a few FIXMEs.

r? @nikomatsakis
2018-10-19 06:38:10 +00:00
kennytm
1419a697e3
Rollup merge of #54300 - Aaronepower:master, r=Aaronepower
Updated RELEASES.md for 1.30.0

[Rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)

r? @Mark-Simulacrum

cc @rust-lang/release
2018-10-19 11:03:25 +08:00
bors
cb5e1b93e3 Auto merge of #55004 - oli-obk:sized_static, r=cramertj
Check the type of statics and constants for `Sized`ness

fixes #54410
2018-10-19 00:22:25 +00:00
Matthew Jasper
ef1a40d5fe Propagate bounds from generators 2018-10-18 22:47:49 +01:00
bors
45088b11f5 Auto merge of #54979 - estebank:path-unsized, r=nikomatsakis
Custom E0277 diagnostic for `Path`

r? @nikomatsakis we have a way to target `Path` exclusively, we need to identify the correct text to show to consider #23286 fixed.
2018-10-18 21:42:21 +00:00
bors
e7f5d48059 Auto merge of #54976 - davidtwco:issue-52663-special-case-closures, r=nikomatsakis
NLL lacks various special case handling of closures

Part of #52663.

Firstly, this PR extends existing handling of closures to also support generators.

Second, this PR adds the note found in the AST when a closure is invoked twice and captures a variable by-value:

```text
note: closure cannot be invoked more than once because it moves the variable `dict` out of its environment
  --> $DIR/issue-42065.rs:16:29
   |
LL |         for (key, value) in dict {
   |                             ^^^^
```

r? @nikomatsakis
cc @pnkfelix
2018-10-18 18:14:52 +00:00
David Wood
d088edc531
Improve check to consider how value is used. 2018-10-18 18:21:15 +02:00
David Wood
375645abb8
Add by-value captured variable note on second use.
This commit adds a note that was present in the AST borrow checker when
closures are invoked more than once and have captured variables
by-value.
2018-10-18 18:21:14 +02:00
Sebastian Dröge
52cc6fde4b Stabilize slice::rchunks(), rchunks_mut(), rchunks_exact(), rchunk_exact_mut()
Fixes #55177
2018-10-18 18:51:56 +03:00
Sebastian Dröge
b08ca2958e Stabilize slice::chunks_exact() and slice::chunks_exact_mut()
Fixes #47115
2018-10-18 18:51:56 +03:00
David Wood
aa701154f0
Extend closure special-casing for generators.
This commit extends existing special-casing of closures to highlight the
use of variables within generators that are causing the generator to
borrow them.
2018-10-18 17:48:18 +02:00
Raph Levien
f08db6bf1e Add must_use on copysign
Added a #[must_use] annotation on copysign, per review feedback.
2018-10-18 08:35:09 -07:00
bors
121320d523 Auto merge of #54580 - sdroege:rchunks, r=SimonSapin
Add slice::rchunks(), rchunks_mut(), rchunks_exact() and rchunks_exact_mut()

These work exactly like the normal chunks iterators but start creating
chunks from the end of the slice.

----

The new iterators were motivated by a [comment](https://github.com/rust-lang/rust/issues/47115#issuecomment-424141121) by @DutchGhost.

~~~This currently includes the commits from https://github.com/rust-lang/rust/pull/54537 to not have to rename things twice or have merge conflicts. I'll force-push a new version of the branch ones those are in master.~~~

Also the stabilization tracking issue is just some number right now. I'll create the corresponding issue once this is reviewed and otherwise mergeable.

cc @DutchGhost
2018-10-18 12:47:31 +00:00
Ralf Jung
5dd0375ae0 turn casts-to-raw into a proper raw-reborrow; that is just cleaner 2018-10-18 13:11:09 +02:00
Aaron Power
518a5a4898 Updated RELEASES.md for 1.30.0 2018-10-18 12:06:52 +01:00
Ralf Jung
c885d8b41e don't do any work towards ptr provenance in const mode 2018-10-18 12:09:00 +02:00
Ralf Jung
2af11f7433 the tidy strikes again 2018-10-18 12:09:00 +02:00
Ralf Jung
bc647e9d33 add 'raw reference' to the machine hook, and use that in ptr-to-raw casts 2018-10-18 12:09:00 +02:00
Ralf Jung
24724efe1c miri: debug! print when we are leaving/entering a function
With a hack to exclude the topmost function for now, because that triggers an ICE...
2018-10-18 12:09:00 +02:00
Ralf Jung
abf6f4781f Forward entire ptr used for dealloaction to machine
Also, demote some debug! to trace!
2018-10-18 12:09:00 +02:00
Ralf Jung
1279a59c9f repeat after me: Clone, Copy, Debug 2018-10-18 12:08:23 +02:00
Ralf Jung
d61db93c15 also hook dereferencing 2018-10-18 12:08:23 +02:00
Ralf Jung
5f20b16934 eval_context: move getters together and add one for is_freeze 2018-10-18 12:08:23 +02:00
Ralf Jung
ce9cd15ce6 provide machine hooks for creating references and accessing memory 2018-10-18 12:08:22 +02:00