Commit Graph

85032 Commits

Author SHA1 Message Date
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
Ralf Jung
5b7185794f give machine more control over what counts as memory leak 2018-10-18 12:08:22 +02:00
Ralf Jung
21934c81f4 add support for storing extra data in an allocation 2018-10-18 12:08:22 +02:00
Ralf Jung
290db47ad6 comment on keeping validity in sync 2018-10-18 12:08:22 +02:00
bors
40123a1257 Auto merge of #54349 - GuillaumeGomez:no-example-lint, r=QuietMisdreavus
[rustdoc] Add lint for doc without codeblocks

Fixes #53805.

r? @QuietMisdreavus
2018-10-18 09:53:29 +00:00
Niko Matsakis
6e302ad76a resolve_lifetime.rs: rustfmt 2018-10-18 05:39:53 -04:00
varkor
40bba70823
Make warnings into errors 2018-10-18 10:35:01 +01:00
Sebastian Dröge
80a8e5c1f7 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.

See #55177 for the tracking issue
2018-10-18 10:38:05 +03:00
bors
af204b1f3e Auto merge of #55171 - kennytm:rollup, r=kennytm
Rollup of 18 pull requests

Successful merges:

 - #54646 (improve documentation on std:🧵:sleep)
 - #54933 (Cleanup the rest of codegen_llvm)
 - #54964 (Run both lldb and gdb tests)
 - #55016 (Deduplicate some code and compile-time values around vtables)
 - #55031 (Improve verify_llvm_ir config option)
 - #55050 (doc std::fmt: the Python inspiration is already mentioned in precedin…)
 - #55077 (rustdoc: Use dyn keyword when rendering dynamic traits)
 - #55080 (Detect if access to localStorage is forbidden by the user's browser)
 - #55090 (regression test for move out of borrow via pattern)
 - #55102 (resolve: Do not skip extern prelude during speculative resolution)
 - #55104 (Add test for #34229)
 - #55111 ([Rustc Book] Explain --cfg's arguments)
 - #55122 (Cleanup mir/borrowck)
 - #55127 (Remove HybridBitSet::dummy)
 - #55128 (Fix LLVMRustInlineAsmVerify return type mismatch)
 - #55142 (miri: layout should not affect CTFE checks (outside of validation))
 - #55151 (Cleanup nll)
 - #55161 ([librustdoc] Disable spellcheck for search field)
2018-10-18 07:02:11 +00:00
kennytm
1c090061e9
Rollup merge of #55111 - Havvy:rustc-book-cfg-examples, r=GuillaumeGomez
[Rustc Book] Explain --cfg's arguments

I removed this from the reference since it's rustc specific, and noticed it wasn't well documented on the page that should document it well. It does seem to go against the grain of one line per command line flag though.
2018-10-18 12:56:07 +08:00
kennytm
7d21252383
Rollup merge of #55161 - akxcv:rustdoc/disable-spellcheck, r=QuietMisdreavus,GuillaumeGomez
[librustdoc] Disable spellcheck for search field

This disables spellchecking for the search field in the rustdoc web interface.

As someone who uses Safari to browse through Rust docs, spellchecking gets really annoying.
2018-10-18 12:55:19 +08:00