7528 Commits

Author SHA1 Message Date
Ariel Ben-Yehuda
21fd312043 Normalize associated types in closure signatures
Fixes #25700.
2015-06-18 23:04:57 +03:00
Ariel Ben-Yehuda
56d765d0eb Simplify and type_known_to_meet_builtin_bound and make it more correct when
associated types are involved.
2015-06-18 20:51:43 +03:00
Manish Goregaokar
b5f2b098d7 Rollup merge of #26348 - eefriedman:unused-interiorsafety, r=luqmana 2015-06-18 13:38:09 +05:30
bors
713d9176ad Auto merge of #26326 - nikomatsakis:optimize-fulfillment-cache-in-tcx, r=pcwalton
When we successfully resolve a trait reference with no type/lifetime parameters, like `i32: Foo` or `Box<u32>: Sized`, this is in fact globally true. This patch adds a simple global to the tcx to cache such cases. The main advantage of this is really about caching things like `Box<Vec<Foo>>: Sized`. It also points to the need to revamp our caching infrastructure -- the current caches make selection cost cheaper, but we still wind up paying a high cost in the confirmation process, and in particular unrolling out dependent obligations. Moreover, we should probably do caching more uniformly and with a key that takes the where-clauses into account. But that's for later.

For me, this shows up as a reasonably nice win (20%) on Servo's script crate (when built in dev mode). This is not as big as my initial measurements suggested, I think because I was building my rustc with more debugging enabled at the time. I've not yet done follow-up profiling and so forth to see where the new hot spots are. Bootstrap times seem to be largely unaffected.

cc @pcwalton 

This is technically a [breaking-change] in that functions with unsatisfiable where-clauses may now yield errors where before they may have been accepted. Even before, these functions could never have been *called* by actual code. In the future, such functions will probably become illegal altogether, but in this commit they are still accepted, so long as they do not rely on the unsatisfiable where-clauses. As before, the functions still cannot be called in any case.
2015-06-17 22:50:17 +00:00
bors
e7a5a1c33a Auto merge of #25961 - sanxiyn:dead-variant-2, r=huonw
Rebase of #21468.

Fix #25960.
2015-06-17 13:30:31 +00:00
Eli Friedman
199e60aa22 Remove unused type InteriorSafety. 2015-06-16 13:05:07 -07:00
Niko Matsakis
957935a002 Fix merge errors 2015-06-16 12:08:37 -04:00
Niko Matsakis
f0f13f86ef Rather than expanding the where-clauses in the environment over and over
again, do it once and then just remember the expanded form. At the same
time, filter globally nameable predicates out of the environment, since
they can cause cache errors (and they are not necessary in any case).
2015-06-15 17:31:27 -04:00
Niko Matsakis
ff89fcf83b Add a (somewhat hacky) cache to the tcx that tracks "global" trait refs
that are known to have been satisfied *somewhere*. This means that if
one fn finds that `SomeType: Foo`, then every other fn can just consider
that to hold.

Unfortunately, there are some complications:

1. If `SomeType: Foo` includes dependent conditions, those conditions
   may trigger an error. This error will be repored in the first fn
   where `SomeType: Foo` is evaluated, but not in the other fns, which
   can lead to uneven error reporting (which is sometimes confusing).

2. This kind of caching can be unsound in the presence of
   unsatisfiable where clauses. For example, suppose that the first fn
   has a where-clause like `i32: Bar<u32>`, which in fact does not
   hold. This will "fool" trait resolution into thinking that `i32:
   Bar<u32>` holds. This is ok currently, because it means that the
   first fn can never be calle (since its where clauses cannot be
   satisfied), but if the first fn's successful resolution is cached, it
   can allow other fns to compile that should not. This problem is fixed
   in the next commit.
2015-06-15 17:31:26 -04:00
Ariel Ben-Yehuda
6cdccc5a78 Make impl-trait-ref associated types work in methods 2015-06-15 18:27:35 +03:00
Eli Friedman
33b7386d39 Split TyArray into TyArray and TySlice.
Arrays and slices are closely related, but not that closely; making the
separation more explicit is generally more clear.
2015-06-12 16:50:13 -07:00
Eli Friedman
3c69db4c3c Cleanup: rename middle::ty::sty and its variants.
Use camel-case naming, and use names which actually make sense in modern Rust.
2015-06-12 11:07:16 -07:00
bors
b5b3a99f84 Auto merge of #26190 - Veedrac:no-iter, r=alexcrichton
Pull request for #26188.
2015-06-11 18:10:08 +00:00
Joshua Landau
d7f5fa4636 Conver reborrows to .iter() calls where appropriate 2015-06-11 13:56:07 +01:00
bors
fc9e424550 Auto merge of #26172 - nham:add_E0116, r=alexcrichton
Also improves the wording of the E0133 description.

cc #24407
2015-06-11 10:06:38 +00:00
Joshua Landau
ca7418b846 Removed many pointless calls to *iter() and iter_mut() 2015-06-10 21:14:03 +01:00
bors
ae8a3c92a7 Auto merge of #26182 - Manishearth:rollup, r=Manishearth
- Successful merges: #26142, #26143, #26145, #26146, #26164, #26174
- Failed merges:
2015-06-10 18:41:42 +00:00
Manish Goregaokar
7d9427e6cd Rollup merge of #26146 - steveklabnik:remove_unsafe_pointer, r=Gankro
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-10 22:07:10 +05:30
Manish Goregaokar
32e96aa165 Rollup merge of #26143 - steveklabnik:gh25851, r=alexcrichton
Still some references left to this old term, I've updated them to say boxes.

Related to #25851
2015-06-10 22:07:09 +05:30
bors
d8a9570154 Auto merge of #26141 - eddyb:ast_map, r=nikomatsakis
Gets libsyntax one step closer to running on stable (see #24518).
Closes #24757, erickt's previous attempt at this.
2015-06-10 11:38:04 +00:00
Nick Hamann
aace3675b7 Revise E0133 description.
Tweaks some of the wording so it reads better.
2015-06-10 02:18:53 -05:00
bors
172cd83490 Auto merge of #26058 - Kimundi:issue15609, r=nikomatsakis
Closes #15609
2015-06-10 03:15:16 +00:00
bors
5ea3ed0fd0 Auto merge of #26055 - arielb1:smart-fold, r=nikomatsakis
Before:
581.72user 4.75system 7:42.74elapsed 126%CPU (0avgtext+0avgdata 1176224maxresident)k
llvm took 359.183

After:
550.63user 5.09system 7:20.28elapsed 126%CPU (0avgtext+0avgdata 1165516maxresident)k
llvm took 354.801
2015-06-10 01:44:59 +00:00
Eduard Burtescu
76eaed44d9 syntax: move ast_map to librustc. 2015-06-10 02:40:45 +03:00
Steve Klabnik
2c75256c15 Exise 'unsafe pointer' in favor of 'raw pointer'
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-09 16:49:24 -04:00
Steve Klabnik
a3cd5eb1bd Exise 'owned pointer' from the codebase
Still some references left to this old term, I've updated them to say boxes.

Related to #25851
2015-06-09 16:26:21 -04:00
Andrew Straw
1fff553fe7 fix comments in example about types 2015-06-09 20:49:52 +02:00
Marvin Löbel
d6b7ca041a Made ref pattern bindings correctly pick Deref or DerefMut
Added LvaluePreference::from_mutbl

Closes #15609
2015-06-09 16:02:00 +02:00
Manish Goregaokar
4b5ac524f3 Rollup merge of #26099 - TheNeikos:fix-old_array_syntax_in_comments, r=alexcrichton
As per RFC#520 the syntax for arrays has changed,
this changes the remaining comments to reflect
the new syntax.

I checked for existing occurences of this with the following command:

`ag "\[., \.\..\]"` which by now should only return a single occurence.
2015-06-09 05:42:28 +05:30
bors
02c33b690b Auto merge of #26077 - SimonSapin:patch-6, r=alexcrichton
With the latter is provided by the `From` conversion trait, the former is now completely redundant. Their code is identical. Let’s deprecate now and plan to remove in the next cycle. (It’s `#[unstable]`.)

r? @alexcrichton 
CC @nagisa
2015-06-08 20:52:33 +00:00
bors
4e14ef0516 Auto merge of #26044 - nagisa:canonicalize-metadata-loader, r=alexcrichton
This might fail when --extern library is a symlink to an invalid location. Instead just pretend it
doesn’t exist at all.

Fixes #26006
2015-06-08 17:44:30 +00:00
Marcel Müller
ebc3de22d8 Fixed old occurences of the removed array syntax
As per RFC#520 the syntax for arrays has changed,
this changes the remaining comments to reflect
the new syntax.
2015-06-08 17:58:08 +02:00
Simon Sapin
c160192f5f Replace usage of String::from_str with String:from 2015-06-08 16:55:35 +02:00
bors
1ade076f62 Auto merge of #26029 - GuillaumeGomez:const_check, r=Manishearth
Part of #24407.
2015-06-08 09:54:32 +00:00
Ariel Ben-Yehuda
39b9bea4ba Skip useless recursion in freshening and late-bound-region substitutio
Before:
581.72user 4.75system 7:42.74elapsed 126%CPU (0avgtext+0avgdata 1176224maxresident)k
llvm took 359.183

After:
550.63user 5.09system 7:20.28elapsed 126%CPU (0avgtext+0avgdata 1165516maxresident)k
llvm took 354.801
2015-06-08 12:29:22 +03:00
Guillaume Gomez
ae550bd987 Add error explanation for E0014 2015-06-08 08:18:03 +02:00
bors
bea1c4a78e Auto merge of #25823 - oli-obk:static_to_const_lint, r=alexcrichton
r? @eddyb
2015-06-08 04:54:59 +00:00
Nick Cameron
8d9a58131d error due to rebase 2015-06-08 12:18:42 +12:00
Nick Cameron
83c73e327a review changes - only show closure ids in verbose mode 2015-06-08 11:41:48 +12:00
Nick Cameron
e9db5fb202 Tidying up, fix some minor linkage bugs, use ty flags to avoid caching closure types. 2015-06-08 11:41:48 +12:00
Oliver 'ker' Schneider
ec078a033b change some statics to constants 2015-06-07 19:50:13 +02:00
Simonas Kazlauskas
ab86face01 Don’t ICE if fs::canonicalise fails in meta-load
This might fail when --extern library is a symlink to an invalid location. Instead just pretend it
doesn’t exist at all.
2015-06-07 20:34:12 +03:00
bors
ae74652b4a Auto merge of #26057 - audebert:master, r=alexcrichton
The constraint referenced here is:

```rust
fn foo<T>(t: T) where T: Trait<AssociatedType=u32> { /* */ }
```
2015-06-07 00:07:07 +00:00
Rémi Audebert
27dd0dda1b Fix small typo in diagnostics.rs 2015-06-06 18:32:49 +02:00
bors
bfd072db45 Auto merge of #26038 - eddyb:dst-nested, r=luqmana
Allows `Rc<RefCell<Trait>>` and other containers. Fixes #25351.
r? @nrc This is the discussed strategy, more or less.
2015-06-06 15:32:26 +00:00
Eduard Burtescu
01dee1b77e Allow nested generics for the last field of structs in unsizing. 2015-06-05 20:49:23 +03:00
bors
75fb009c76 Auto merge of #26023 - arielb1:fast-sized, r=eddyb
r? @eddyb 

The change to `trans::common::type_is_sized` is because we currently abort, rather than return random results, on overflow.
2015-06-05 15:27:34 +00:00
Ariel Ben-Yehuda
595409df06 Introduce a fast-path for type_is_sized/type_moves_by_default
This seems to improve performance by the same 2-3% of my selection
fast-path.
2015-06-05 03:50:49 +03:00
bors
e0ca6b1a31 Auto merge of #25975 - arielb1:remove-param-space, r=nikomatsakis
r? @nikomatsakis
2015-06-04 21:48:58 +00:00
Ms2ger
f2cca31e3d Inline enum_variant_ids into its only caller. 2015-06-04 10:12:19 +02:00