Commit graph

12862 commits

Author SHA1 Message Date
Nick Hamann
7fef162873 Only print parameters with elided lifetimes in elision error messages.
When displaying the function parameters for a lifetime elision error message,
this changes it to first filter out the parameters that don't have elided
lifetimes.

Fixes #30255.
2016-05-18 01:50:21 -05:00
bors
786b26d7b4 Auto merge of #33491 - arielb1:obligation-jungle, r=nikomatsakis
Replace the obligation forest with a graph

In the presence of caching, arbitrary nodes in the obligation forest can be merged, which makes it a general graph. Handle it as such, using cycle-detection algorithms in the processing.

I should do performance measurements sometime.

This was pretty much written as a proof-of-concept. Please help me write this in a less-ugly way. I should also add comments explaining what is going on.

r? @nikomatsakis
2016-05-16 18:39:59 -07:00
bors
cd6a400175 Auto merge of #33588 - nikomatsakis:compiletest-ui, r=acrichto
add UI testing framework

This adds a framework for capturing and tracking the precise output of rustc, which allows us to check all manner of minor details with the output. It's pretty strict right now -- the output must match almost exactly -- and hence maybe a bit too strict. But I figure we can add wildcards or whatever later. There is also a script intended to make updating the references easy, though the script could make things a *bit* easier (in particular, it'd be nice if it would find the build directory for you automatically).

One thing I was wondering about is the best way to test colors. Since windows doesn't embed those in the output stream, this test framework can't test colors on windows -- so I figure we can just write tests that are ignored on windows and which pass `--color=always` or whatever to rustc.

cc @jonathandturner
r? @alexcrichton
2016-05-16 14:41:50 -07:00
Niko Matsakis
24cfa1efb0 pacify the mercilous tidy 2016-05-16 16:48:48 -04:00
Ariel Ben-Yehuda
65ad935737 change on_unimplented logic 2016-05-16 23:16:52 +03:00
bors
32f8366b7c Auto merge of #33640 - lucab:to-upstream/tcp-stress, r=alexcrichton
test: explicitely check the number of spawned threads in tcp-stress

System limits may restrict the number of threads effectively spawned by this test (eg. systemd recently introduced a 512 tasks per unit maximum default).
Now this test explicitly asserts on the expected number of threads, making failures due to system limits easier to spot.
More details at https://bugs.debian.org/822325
2016-05-16 02:47:12 -07:00
bors
e87cd7e380 Auto merge of #33505 - petrochenkov:self, r=nrc
Remove ExplicitSelf from HIR

`self` argument is already kept in the argument list and can be retrieved from there if necessary, so there's no need for the duplication.
The same changes can be applied to AST, I'll make them in the next breaking batch.
The first commit also improves parsing of method declarations and fixes https://github.com/rust-lang/rust/issues/33413.

r? @eddyb
2016-05-15 23:14:52 -07:00
bors
5ebe41835f Auto merge of #33619 - jonathandturner:improve_structured_errors, r=nikomatsakis
Batch of improvements to errors for new error format

This is a batch of improvements to existing errors to help get the most out of the new error format.

* Added labels to primary spans (^^^) for a set of errors that didn't currently have them
* Highlight the source blue under the secondary notes for better readability
* Move some of the "Note:" into secondary spans+labels
* Fix span_label to take &mut instead, which makes it work the same as other methods in that set
2016-05-15 15:08:46 -07:00
bors
e7420fbbae Auto merge of #33620 - eddyb:oops-static-is-not-fn, r=dotdash
mir: always allow &mut [...] in static mut regardless of the array length.
2016-05-15 11:01:03 -07:00
Manish Goregaokar
e82596b9d8 Rollup merge of #33585 - GuillaumeGomez:error_code_test, r=steveklabnik
Add compile-fail tests for error codes

r? @steveklabnik

cc @jonathandturner
2016-05-15 20:13:42 +05:30
Manish Goregaokar
c3086c2ef8 Rollup merge of #33342 - birkenfeld:issue-26472, r=jseyfried
typeck: if a private field exists, also check for a public method

For example, `Vec::len` is both a field and a method, and usually encountering `vec.len` just means that the parens were forgotten.

Fixes: #26472

NOTE: I added the parameter `allow_private` to `method::exists` since I don't want to suggest inaccessible methods. For the second case, where only the method exists, I think it would make sense to set it to `false` as well, but I wanted to preserve compatibility for this case.
2016-05-15 20:13:39 +05:30
bors
088d417852 Auto merge of #33593 - dotdash:smart_derive, r=brson
Improve derived implementations for enums with lots of fieldless variants

A number of trait methods like PartialEq::eq or Hash::hash don't
actually need a distinct arm for each variant, because the code within
the arm only depends on the number and types of the fields in the
variants. We can easily exploit this fact to create less and better
code for enums with multiple variants that have no fields at all, the
extreme case being C-like enums.

For nickel.rs and its by now infamous 800 variant enum, this reduces
optimized compile times by 25% and non-optimized compile times by 40%.
Also peak memory usage is down by almost 40% (310MB down to 190MB).

To be fair, most other crates don't benefit nearly as much, because
they don't have as huge enums. The crates in the Rust distribution that
I measured saw basically no change in compile times (I only tried
optimized builds) and only 1-2% reduction in peak memory usage.
2016-05-14 22:04:58 -07:00
bors
dd0ef17a2d Auto merge of #33600 - ollie27:rustdoc_impl_params, r=alexcrichton
rustdoc: Fix missing type parameters on impls

They were broken by #32558.

Fixes: #33592
2016-05-14 19:46:01 -07:00
Luca Bruno
22972b8b6f
test: clear deprecation warnings in tcp-stress
Signed-off-by: Luca Bruno <lucab@debian.org>
2016-05-14 18:57:09 +02:00
Luca Bruno
47ebc56386
test: assert that all tcp-stress threads get spawned
System limits may restrict the number of threads effectively spawned
by this test (eg. systemd recently introduced a 512 tasks per unit
maximum default).
This commit explicitly asserts on the expected number of threads,
making failures due to system limits easier to spot.
More details at https://bugs.debian.org/822325

Signed-off-by: Luca Bruno <lucab@debian.org>
2016-05-14 18:56:20 +02:00
Vadim Petrochenkov
a62a690326 Add checks for self: _ and self: &_ 2016-05-14 13:42:37 +03:00
Vadim Petrochenkov
212d5d4352 syntax: Refactor parsing of method declarations
Fix spans and expected token lists, fix #33413 + other cosmetic improvements
Add test for #33413
Convert between `Arg` and `ExplicitSelf` precisely
Simplify pretty-printing for methods
2016-05-14 13:23:37 +03:00
Manish Goregaokar
c62d65cfbf Rollup merge of #33574 - michaelwoerister:collector-cleanup, r=nikomatsakis
trans-collector: Assorted fixes and refactorings needed for making trans collector-driven.

As the title says. The messages on the individual commits should do a good job of explaining what they are about.

r? @nikomatsakis
2016-05-14 11:57:49 +02:00
Manish Goregaokar
8845592514 Rollup merge of #33572 - nagisa:assoc-const-types, r=eddyb
Support references to outer type params for assoc consts

Fixes #28809

r? @eddyb
2016-05-14 11:57:48 +02:00
Manish Goregaokar
4a1ce9831c Rollup merge of #33554 - sfackler:no-current-exe, r=alexcrichton
Don't use env::current_exe with libbacktrace

If the path we give to libbacktrace doesn't actually correspond to the
current process, libbacktrace will segfault *at best*.

cc #21889

r? @alexcrichton
cc @semarie
2016-05-14 11:57:47 +02:00
bors
d3ec9d43cf Auto merge of #33538 - Ms2ger:LocalCrateReader, r=arielb1
Refactor code around LocalCrateReader.
2016-05-13 23:34:52 -07:00
Ariel Ben-Yehuda
5458d8b419 rewrite fuzzy on_unimplemented matching to avoid ICEs 2016-05-13 23:01:57 -07:00
Ariel Ben-Yehuda
5c39a2ae44 add cycle-reporting logic
Fixes #33344
2016-05-13 21:23:02 -07:00
Ariel Ben-Yehuda
957500b793 rewrite obligation forest. cycles still handled incorrectly. 2016-05-13 21:23:02 -07:00
Niko Matsakis
cb112dc8cf add UI testing framework 2016-05-13 15:22:45 -07:00
Eduard Burtescu
55aae6f48e mir: always allow &mut [...] in static mut regardless of the array length. 2016-05-13 22:27:09 +03:00
Luqman Aden
f3e1d57bc2 Allow repr attribute on single variant enum. 2016-05-13 12:36:57 -04:00
ggomez
1d6411d863 Add compile-fail tests for error codes 2016-05-13 14:43:56 +02:00
bors
a581c82bdc Auto merge of #33541 - eddyb:promote-only-temps, r=arielb1
mir: don't attempt to promote Unpromotable constant temps.

Fixes #33537. This was a non-problem in regular functions, but we also promote in `const fn`s.
There we always qualify temps so you can't depend on `Unpromotable` temps being `NOT_CONST`.
2016-05-13 03:10:46 -07:00
bors
709e5c5fde Auto merge of #33596 - nikomatsakis:issue-33586-regr-assoc-type-path, r=eddyb
re-introduce a cache for ast-ty-to-ty

It turns out that `ast_ty_to_ty` is supposed to be updating the `def`
after it finishes, but at some point in the past it stopped doing
so. This was never noticed because of the `ast_ty_to_ty_cache`, but that
cache was recently removed. This PR fixes the code to update the def
properly, but apparently that is not quite enough to make the operation
idempotent, so for now we reintroduce the cache too.

Fixes #33586.

r? @eddyb
2016-05-13 00:29:22 -07:00
bors
01ed700640 Auto merge of #33450 - SiegeLord:dep_info_no_analysis, r=nrc
Make --emit dep-info work correctly with -Z no-analysis again.

Previously, it would attempt to resolve some external crates that weren't necessary for dep-info output.

Fixes #33231.
2016-05-12 19:52:51 -07:00
Jonathan Turner
1b6afd1e42 Update errors to use new error format 2016-05-12 16:48:59 -07:00
Oliver Middleton
538de73f5b rustdoc: Fix missing type parameters on impls 2016-05-12 20:08:33 +01:00
Björn Steinbrink
0eeb14eaba Improve derived implementations for enums with lots of fieldless variants
A number of trait methods like PartialEq::eq or Hash::hash don't
actually need a distinct arm for each variant, because the code within
the arm only depends on the number and types of the fields in the
variants. We can easily exploit this fact to create less and better
code for enums with multiple variants that have no fields at all, the
extreme case being C-like enums.

For nickel.rs and its by now infamous 800 variant enum, this reduces
optimized compile times by 25% and non-optimized compile times by 40%.
Also peak memory usage is down by almost 40% (310MB down to 190MB).

To be fair, most other crates don't benefit nearly as much, because
they don't have as huge enums. The crates in the Rust distribution that
I measured saw basically no change in compile times (I only tried
optimized builds) and only 1-2% reduction in peak memory usage.
2016-05-12 21:05:13 +02:00
Niko Matsakis
aa00e3a552 re-introduce a cache for ast-ty-to-ty
It turns out that `ast_ty_to_ty` is supposed to be updating the `def`
after it finishes, but at some point in the past it stopped doing
so. This was never noticed because of the `ast_ty_to_ty_cache`, but that
cache was recently removed. This PR fixes the code to update the def
properly, but apparently that is not quite enough to make the operation
idempotent, so for now we reintroduce the cache too.

Fixes #33425.
2016-05-12 14:23:26 -04:00
Pavel Sountsov
215b2603f1 Fix the sed invocation to also work with BSD sed. 2016-05-12 09:32:17 -07:00
Steven Fackler
9393e52d4d Don't use env::current_exe with libbacktrace
If the path we give to libbacktrace doesn't actually correspond to the
current process, libbacktrace will segfault *at best*.

cc #21889
2016-05-12 09:13:58 -07:00
Georg Brandl
843b174e93 typeck: if a private field exists, also check for a public method
For example, `Vec::len` is both a field and a method, and usually
encountering `vec.len` just means that the parens were forgotten.

Fixes: #26472
2016-05-12 07:53:17 +02:00
bors
ed1ece6fd8 Auto merge of #33169 - swgillespie:issue32829, r=eddyb
const_fn: Check the terminating expression of a block for blocks in a const initializer

In a const or static initializer, the `CheckBlock` check ensures that blocks in the initializer expression are only in tail positions or in items. In this case, it didn't check the terminating expression of a block, which resulted in an ICE later in the compiler pipeline if the trailing expression was itself a block. This change fixes the ICE and ensures that the proper error is emitted. This fixes the ICE in #32829 .
2016-05-11 19:48:54 -07:00
Simonas Kazlauskas
d3218fae7b Check the constants’ parameter environment 2016-05-12 01:10:34 +03:00
Guillaume Gomez
521c0ae1e8 Rollup merge of #33401 - GuillaumeGomez:index_indication, r=pnkfelix
Add rustc_on_unimplemented for Index implementation on slice

Reopening of #31071.

It also extends the possibility of `#[rustc_on_unimplemented]` by providing a small type filter in order to find the ones which corresponds the most.

r? @pnkfelix
2016-05-11 21:30:19 +02:00
Michael Woerister
64bc3c266c trans: Make collector handle the drop_in_place() intrinsic. 2016-05-11 14:30:33 -04:00
James Miller
f4dd4be86a Add test for collecting items in statics 2016-05-11 13:59:14 -04:00
Michael Woerister
85b155f6f1 trans: Don't try to place declarations during codegen unit partitioning. 2016-05-11 13:58:23 -04:00
bors
e37f8593e4 Auto merge of #33556 - steveklabnik:rollup, r=steveklabnik
Rollup of 9 pull requests

- Successful merges: #33129, #33260, #33345, #33386, #33522, #33524, #33528, #33539, #33542
- Failed merges: #33342, #33475, #33517
2016-05-11 07:03:12 -07:00
Steve Klabnik
4b8e7cb504 Rollup merge of #33539 - nikomatsakis:static-error, r=pnkfelix
fix DFS for region error reporting

This was causing terrible error reports, because the algorithm was incorrectly identifying the constraints.

r? @eddyb
2016-05-11 09:27:44 -04:00
Steve Klabnik
3b75f4b56e Rollup merge of #33345 - birkenfeld:issue-31754, r=pnkfelix
middle: reset loop labels while visiting closure

This should fix #31754 and follow-up #25343.  Before the latter, the closure was visited twice in the context of the enclosing fn, which made even a single closure with a loop label emit a warning.

With this change, the closure is still visited within the context of the main fn (which is intended, since it is not a separate item) but resets the found loop labels while being visited.

Fixes: #31754

Note: I amended the test file from #25343, but I don't know if the original or amended test are effective, since as far as I could see, compiletest's run-pass tests do not check for zero warnings emitted?

/cc @Manishearth
2016-05-11 09:27:43 -04:00
ggomez
61e6169ffe Improve weight algorithm and tests 2016-05-11 13:24:22 +02:00
Guillaume Gomez
b8fad79a07 Improve error message for Index trait on slices 2016-05-11 13:22:01 +02:00
ggomez
e9797d4be5 Extend rustc_on_unimplemented flag: if a message is available at an impl, this message will be displayed instead 2016-05-11 13:18:57 +02:00