Commit graph

15181 commits

Author SHA1 Message Date
Nathan Froyd
ffc6ddd51b add -C overflow-checks option
In addition to defining and handling the new option, we also add a
method on librustc::Session for determining the necessity of overflow
checks.  This method provides a single point to sort out the three (!)
different ways for turning on overflow checks: -C debug-assertions, -C
overflow-checks, and -Z force-overflow-checks.

Fixes #33134.
2017-02-22 10:08:57 -05:00
bors
0f34b532af Auto merge of #39765 - GuillaumeGomez:file-not-found-for-module-error, r=jseyfried
File not found for module error

Fixes #39542.

r? @jonathandturner

Maybe you want to take a look @pnkfelix?
2017-02-21 21:08:11 +00:00
Corey Farwell
8918ceb67a Rollup merge of #39913 - nikomatsakis:inference-error, r=pnkfelix
Report full details of inference errors

When the old suggestion machinery was removed by @brson in https://github.com/rust-lang/rust/pull/37057, it was not completely removed. There was a bit of code that had the job of going through errors and finding those for which suggestions were applicable, and it remained, causing us not to emit the full details of such errors.  This PR removes that.

I've also added various lifetime tests to the UI test suite (so you can also see the before/after there). I have some concrete thoughts on how to improve these cases and am planning on writing those up in some mentoring issues (@CengizIO has expressed interest in working on those changes, so I plan to work with him on it, at least to start).

cc @jonathandturner
2017-02-20 12:42:53 -05:00
Guillaume Gomez
0a45dd7e71 Add tests for newly added error codes 2017-02-20 17:47:44 +01:00
Niko Matsakis
75da4b663e fix run-pass test that required Copy impl 2017-02-19 15:33:47 -05:00
Vadim Petrochenkov
8c7d0077ab Avoid ICE in Self::Assoc in impl headers 2017-02-19 00:34:08 +03:00
Vadim Petrochenkov
bf95c29c98 Privatize fields of PathResolution
Ensure Def::Err has depth == 0
2017-02-19 00:34:08 +03:00
bors
8f2fc9db15 Auto merge of #39887 - nikomatsakis:issue-39292, r=arielb1
erase late bound regions in `get_vtable_methods()`

Higher-ranked object types can otherwise cause late-bound regions to
sneak into the substs, leading to the false conclusion that some method
is unreachable.

r? @arielb1, who wrote the heart of this patch anyhow

Fixes #39292
2017-02-18 12:17:06 +00:00
Niko Matsakis
9e0171f7c8 remove vestiges of the old suggestion machinery 2017-02-17 14:47:39 -05:00
Niko Matsakis
5167ac8719 add some sample UI error test cases
These are some samples that I have been focusing on improving over
time. In this PR, I mainly want to stem the bleeding where we in some
cases we show an error that gives you no possible way to divine the
problem.
2017-02-17 11:01:35 -05:00
bors
dc0bb3f283 Auto merge of #39485 - canndrew:inference-fix-39297, r=nikomatsakis
Ignore expected type in diverging blocks

As per comment: https://github.com/rust-lang/rust/issues/39297#issuecomment-276810343
2017-02-17 10:46:59 +00:00
bors
16c94cd673 Auto merge of #39752 - keeperofdakeys:macro-error, r=keeperofdakeys
Refactor macro resolution errors + add derive macro suggestions

Move legacy macro resolution error reporting to `finalize_current_module_macro_resolutions`, and provide suggestions for derive macros.

Fixes #39323

cc https://github.com/rust-lang/rust/issues/30197

r? @jseyfried
2017-02-17 04:02:18 +00:00
Niko Matsakis
f2d8a00191 erase late bound regions in get_vtable_methods()
Higher-ranked object types can otherwise cause late-bound regions to
sneak into the substs, leading to the false conclusion that some method
is unreachable.  The heart of this patch is from @arielb1.
2017-02-16 13:56:06 -05:00
Josh Driver
2d91e7aab8 Refactor macro resolution errors + add derive macro suggestions 2017-02-16 22:03:15 +10:30
bors
d77af7f639 Auto merge of #39876 - frewsxcv:rollup, r=frewsxcv
Rollup of 12 pull requests

- Successful merges: #39775, #39793, #39804, #39834, #39836, #39839, #39840, #39843, #39844, #39846, #39857, #39861
- Failed merges:
2017-02-16 05:52:46 +00:00
Corey Farwell
4a07be3bea Rollup merge of #39834 - cseale:feature-gate-static-recursion, r=est31
static recursion test added to compile-fail test suite

Issue #39059
r? @est31
2017-02-15 23:48:15 -05:00
Corey Farwell
01ccaa3673 Rollup merge of #39804 - seppo0010:recommend-five-traits, r=jonathandturner
Show five traits implementation in help when there are exactly five

Fixes #39802
2017-02-15 23:48:14 -05:00
Colm Seale
cf20d8e23c static recursion test added to compile-fail test suite
Issue #39059
    r? @est31
2017-02-15 20:13:24 +00:00
est31
aebd94fd3c Stabilize field init shorthand
Closes #37340.
2017-02-15 07:11:13 +01:00
Sebastian Waisbrot
ca54fc76ae Show five traits implementation in help when there are exactly five 2017-02-14 12:11:07 -03:00
Corey Farwell
4a919cba5b Rollup merge of #39813 - sanxiyn:non-camel-case-variant, r=petrochenkov
Use check_variant for non_camel_case_types lint

This way we automatically consider lint attributes.

Fix #38452.
2017-02-14 10:07:37 -05:00
Corey Farwell
8d17ef146b Rollup merge of #39785 - alexcrichton:no-thread-sanitizer, r=japaric
test: Remove sanitizer-thread test

Unfortunately it appears to spuriously fail so we can't gate on it
2017-02-14 10:07:34 -05:00
Corey Farwell
32b8f4ec98 Rollup merge of #39772 - cseale:staged_api_whitelist_removal, r=est31
Adding compile fail test for staged_api feature

Issue #39059
r? @est31

@est31 running the tests for this feature fails. Is that expected since this is the `compile-fail`suite?

I copied this test from the run-pass suite: `rust/src/test/run-pass/reachable-unnameable-type-alias.rs`. What are the differences between these suites in operation and why they are used?
2017-02-14 10:07:33 -05:00
Corey Farwell
c2ea734734 Rollup merge of #39730 - jseyfried:fix_empty_seq_rep_ice, r=nrc
macros: fix ICE on certain sequence repetitions

Fixes #39709.
r? @nrc
2017-02-14 10:07:30 -05:00
Seo Sanghyeon
255b5ed842 Use check_variant for non_camel_case_types lint 2017-02-14 19:46:48 +09:00
Colm Seale
07b3a8bd60 Adding compile fail test for staged_api feature
Issue #39059
r? @est31
2017-02-14 00:03:17 +00:00
Alex Crichton
30abe7bd58 test: Remove sanitizer-thread test
Unfortunately it appears to spuriously fail so we can't gate on it
2017-02-13 06:44:06 -08:00
Jake Goulding
1c998416ee Standardize lifetime and type parameter count mismatch errors
They now always say how many lifetime / type parameters were expected
and are explicit about stating "lifetime" or "type" instead of just
"parameter".
2017-02-13 09:08:55 -05:00
Jake Goulding
79d32e9948 Remove duplicated "parameter" in E0089 text
Closes #39732
2017-02-13 09:08:55 -05:00
bors
05a7f25cc4 Auto merge of #39456 - nagisa:mir-switchint-everywhere, r=nikomatsakis
[MIR] SwitchInt Everywhere

Something I've been meaning to do for a very long while. This PR essentially gets rid of 3 kinds of conditional branching and only keeps the most general one - `SwitchInt`. Primary benefits are such that dealing with MIR now does not involve dealing with 3 different ways to do conditional control flow. On the other hand, constructing a `SwitchInt` currently requires more code than what previously was necessary to build an equivalent `If` terminator. Something trivially "fixable" with some constructor methods somewhere (MIR needs stuff like that badly in general).

Some timings (tl;dr: slightly faster^1 (unexpected), but also uses slightly more memory at peak (expected)):

^1: Not sure if the speed benefits are because of LLVM liking the generated code better or the compiler itself getting compiled better. Either way, its a net benefit. The CORE and SYNTAX timings done for compilation without optimisation.

```
AFTER:
Building stage1 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 31.50 secs
    Finished release [optimized] target(s) in 31.42 secs
Building stage1 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 439.56 secs
    Finished release [optimized] target(s) in 435.15 secs

CORE: 99% (24.81 real, 0.13 kernel, 24.57 user); 358536k resident
CORE: 99% (24.56 real, 0.15 kernel, 24.36 user); 359168k resident
SYNTAX: 99% (49.98 real, 0.48 kernel, 49.42 user); 653416k resident
SYNTAX: 99% (50.07 real, 0.58 kernel, 49.43 user); 653604k resident

BEFORE:
Building stage1 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 31.84 secs
Building stage1 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 451.17 secs

CORE: 99% (24.66 real, 0.20 kernel, 24.38 user); 351096k resident
CORE: 99% (24.36 real, 0.17 kernel, 24.18 user); 352284k resident
SYNTAX: 99% (52.24 real, 0.56 kernel, 51.66 user); 645544k resident
SYNTAX: 99% (51.55 real, 0.48 kernel, 50.99 user); 646428k resident
```

cc @nikomatsakis @eddyb
2017-02-13 02:32:09 +00:00
bors
956e2bcbaa Auto merge of #39572 - jseyfried:fix_inert_attributes, r=nrc
macros: fix inert attributes from `proc_macro_derives` with `#![feature(proc_macro)]`

This PR refactors collection of `proc_macro_derive` invocations to fix #39347.

After this PR, the input to a `#[proc_macro_derive]` function no longer sees `#[derive]`s on the underlying item. For example, consider:
```rust
extern crate my_derives;
use my_derives::{Trait, Trait2};

#[derive(Copy, Clone)]
#[derive(Trait)]
#[derive(Trait2)]
struct S;
```

Today, the input to the `Trait` derive is `#[derive(Copy, Clone, Trait2)] struct S;`, and the input to the `Trait2` derive is `#[derive(Copy, Clone)] struct S;`. More generally, a `proc_macro_derive` sees all builtin derives, as well as all `proc_macro_derive`s listed *after* the one being invoked.

After this PR, both `Trait` and `Trait2` will see `struct S;`.
This is a [breaking-change], but I believe it is highly unlikely to cause breakage in practice.

r? @nrc
2017-02-12 23:21:15 +00:00
Guillaume Gomez
461efc734b Rollup merge of #39743 - GuillaumeGomez:rustdoc-test-output, r=alexcrichton
Add tested item in the rustdoc --test output

r? @alexcrichton

cc @SergioBenitez
2017-02-12 19:16:32 +01:00
Guillaume Gomez
be0e7498f0 Rollup merge of #39654 - ollie27:rustdoc_attributes, r=GuillaumeGomez
rustdoc: Show attributes on all item types

Currently attributes are only shown for structs, unions and enums but
they should be shown for all items. For example it is useful to know if a
function is `#[no_mangle]`.
2017-02-12 19:16:28 +01:00
bors
282fa87b55 Auto merge of #39680 - canndrew:uninhabited_from-infinite-loop, r=arielb1
Add recursion limit to inhabitedness check

Fixes #39489.
Add test aswell.
2017-02-12 07:20:31 +00:00
Jeffrey Seyfried
2cc61eebb7 Allow using inert attributes from proc_macro_derives with #![feature(proc_macro)]. 2017-02-12 07:20:04 +00:00
bors
410d807e46 Auto merge of #39554 - zackmdavis:assert_eq_has_a_terrible_error_message_when_given_a_trailing_comma, r=BurntSushi
improve error message when two-arg assert_eq! receives a trailing comma

Previously, `assert_eq!(left, right,)` (respectively, `assert_ne!(left,
right,)`; note the trailing comma) would result in a confusing "requires
at least a format string argument" error. In reality, a format string is
optional, but the trailing comma puts us into the "match a token tree of
zero or more tokens" branch of the macro (in order to support the
optional format string), and passing the empty token tree into
`format_args!` results in the confusing error. If instead we match a
token tree of one or more tokens, we get a much more sensible
"unexpected end of macro invocation" error.

While we're here, fix up a stray space before a comma in the match
guards.

Resolves #39369.

-----

**Before:**
```
$ rustc scratch.rs
error: requires at least a format string argument
 --> scratch.rs:2:5
  |
2 |     assert_eq!(1, 2,);
  |     ^^^^^^^^^^^^^^^^^^
  |
  = note: this error originates in a macro outside of the current crate

error: aborting due to previous error
```

**After:**
```
$ ./build/x86_64-unknown-linux-gnu/stage1/bin/rustc scratch.rs
error: unexpected end of macro invocation
 --> scratch.rs:2:20
  |
2 |     assert_eq!(1, 2,);
  |                    ^
```
2017-02-12 03:34:57 +00:00
Guillaume Gomez
c951ed7fb6 Add tested item in the rustdoc --test output 2017-02-11 16:36:31 +01:00
Corey Farwell
6866df669c Rollup merge of #39721 - whataloadofwhat:catch-unwind-bang, r=alexcrichton
Change std::panicking::try::Data into a union

No longer potentially call `mem::uninitialized::<!>()`

Fixes #39432
2017-02-10 23:41:38 -05:00
Corey Farwell
92cf7aecb4 Rollup merge of #39692 - oli-obk:patch-2, r=aturon
remove wrong packed struct test

This UB was found by running the test under [Miri](https://github.com/solson/miri) which rejects these unsafe unaligned loads. 😄
2017-02-10 23:41:35 -05:00
Jeffrey Seyfried
b3d73995da Fix ICE on certain sequence repetitions. 2017-02-10 23:58:18 +00:00
whataloadofwhat
ca92c51682 Change std::panicking::try::Data into a union
No longer potentially call `mem::uninitialized::<!>()`

Fixes #39432
2017-02-10 19:20:28 +00:00
Simonas Kazlauskas
49ccc106da Rebase fixups 2017-02-10 19:47:09 +02:00
Simonas Kazlauskas
1949bdf531 Fix tests 2017-02-10 19:47:08 +02:00
Simonas Kazlauskas
76d9a4e646 Fix codegen test 2017-02-10 19:44:00 +02:00
Simonas Kazlauskas
98d1db7fe3 If is now always a SwitchInt in MIR 2017-02-10 19:31:37 +02:00
Corey Farwell
84ad515793 Rollup merge of #39707 - durka:parsimonious-span-note, r=jonathandturner
change span_notes to notes in E0368/E0369

Fixes #39650.

All the uses of `span_note` in these errors were reusing the same span as the original error, which causes unnecessary repetition.

For an example, see the changes to [src/test/ui/span/issue-39018.stderr](https://github.com/rust-lang/rust/pull/39707/files?diff=unified#diff-46336f62958fdb34233db414cb9914a1R4).

r? @jonathandturner
2017-02-09 19:43:26 -05:00
Corey Farwell
af1ddb9ec5 Rollup merge of #39700 - msopena:master, r=est31
Adding compile fail test for const_indexing feature

First attempt at contributing to rust. Picked up an easy feature to test.

Issue #39059
r? @est31
2017-02-09 19:43:24 -05:00
Corey Farwell
ed7f3c4635 Rollup merge of #39674 - jseyfried:fix_token_tree_parsing_ICE, r=nrc
parser: fix ICE when parsing token trees after an error

Fixes #39388, fixes #39616.
r? @nrc
2017-02-09 19:43:21 -05:00
Alex Burka
9fffd14171 change span_notes to notes in E0368/E0369 2017-02-09 22:45:42 +00:00
bors
24a70eb598 Auto merge of #39694 - frewsxcv:rollup, r=frewsxcv
Rollup of 6 pull requests

- Successful merges: #39604, #39619, #39670, #39678, #39682, #39683
- Failed merges:
2017-02-09 21:58:10 +00:00