Commit graph

14465 commits

Author SHA1 Message Date
bors
ba2e892249 Auto merge of #37447 - estebank:non-duplicate-definition-error, r=nrc
Show one error for duplicated type definitions

For the following code:

``` rustc
struct Bar;
struct Bar;

fn main () {
}
```

show

``` nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to previous error
```

instead of

``` nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error[E0428]: a value named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to 2 previous errors
```

Fixes #35767.
2016-11-11 05:55:04 -08:00
bors
4da129d984 Auto merge of #37246 - goffrie:no-loop, r=jseyfried
Don't spin expanding stmt macros.

If we can't make progress when parsing a macro expansion as a statement then we should just bail.

This alleviates the symptoms shown in e.g. #37113 and #37234 but it doesn't fix the problem that parsing invalid enum bodies (and others) leaves the parser in a crappy state.

I'm not sold on this strategy (checking `tokens_consumed`), so if anyone has a better idea, I'm all ears!
2016-11-11 02:51:01 -08:00
bors
280362a02d Auto merge of #36615 - sinkuu:e0243_0244, r=nrc
Make E0243/E0244 message consistent with E0107

E0243/E0233 prints `expected {}, found {}` on the span note, while E0107 prints it on the first line. This is confusing when both error occur simultaneously.

This PR makes E0243/E0233 print `expected {}, found {}` on the first line.

Code:

``` rust
struct Foo<'a, 'b> {
    s: &'a str,
    t: &'b str,
}

type Bar<T, U> = Foo<T, U>;
```

rustc output (before):

```
error[E0107]: wrong number of lifetime parameters: expected 2, found 0
 --> test.rs:6:18
  |
6 | type Bar<T, U> = Foo<T, U>;
  |                  ^^^^^^^^^ expected 2 lifetime parameters

error[E0244]: wrong number of type arguments
 --> test.rs:6:18
  |
6 | type Bar<T, U> = Foo<T, U>;
  |                  ^^^^^^^^^ expected no type arguments, found 2
```

rustc output (after):

```
error[E0107]: wrong number of lifetime parameters: expected 2, found 0
 --> /tmp/test.rs:6:18
  |
6 | type Bar<T, U> = Foo<T, U>;
  |                  ^^^^^^^^^ expected 2 lifetime parameters

error[E0244]: wrong number of type arguments: expected 0, found 2
 --> /tmp/test.rs:6:18
  |
6 | type Bar<T, U> = Foo<T, U>;
  |                  ^^^^^^^^^ expected no type arguments
```
2016-11-10 23:44:44 -08:00
bors
3dced6f71e Auto merge of #37645 - jseyfried:fix_crate_var_in_custom_derives, r=nrc
Fix regression involving custom derives on items with `$crate`

The regression was introduced in #37213.

I believe we cannot make the improvements from #37213 work with the current custom derive setup (c.f. https://github.com/rust-lang/rust/issues/37637#issuecomment-258959145) -- we'll have to wait for `TokenStream`'s API to improve.

Fixes #37637.
r? @nrc
2016-11-10 11:25:17 -08:00
bors
bc1cc1db6d Auto merge of #37687 - nox:patch-1, r=eddyb
Work around a borrow surviving too long (fixes #37686)
2016-11-10 08:18:21 -08:00
Anthony Ramine
84239dfc4a Work around a borrow surviving too long (fixes #37686) 2016-11-10 14:43:46 +01:00
Jeffrey Seyfried
67eeb0a720 Add regression test. 2016-11-10 11:21:23 +00:00
Jeffrey Seyfried
f35eff2c57 Test #[macro_reexport]ing custom derives. 2016-11-10 11:19:38 +00:00
Jeffrey Seyfried
0a998b86e9 Support #[macro_reexport]ing custom derives. 2016-11-10 11:19:34 +00:00
Jeffrey Seyfried
dd0781ea25 Register and stability check #[no_link] crates. 2016-11-10 09:21:29 +00:00
bors
b46ce08df5 Auto merge of #37678 - eddyb:rollup, r=eddyb
Rollup of 5 pull requests

- Successful merges: #37402, #37412, #37661, #37664, #37667
- Failed merges:
2016-11-09 18:22:47 -08:00
Esteban Küber
43aed325aa Show one error for duplicated type definitions
For the following code:

```rustc
struct Bar;
struct Bar;

fn main () {
}
```

show

```nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to previous error
```

instead of

```nocode
error[E0428]: a type named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error[E0428]: a value named `Bar` has already been defined in this module
  --> src/test/compile-fail/E0428.rs:12:1
   |
11 | struct Bar;
   | ----------- previous definition of `Bar` here
12 | struct Bar;
   | ^^^^^^^^^^^

error: aborting due to 2 previous errors
```
2016-11-09 16:19:49 -08:00
Eduard Burtescu
8e9106c531 tests: fix fallout in pretty-printing output exact-match tests. 2016-11-10 01:44:53 +02:00
Eduard Burtescu
9ce1044bd5 tests: fix fallout in flowgraph graphviz comparison dot files. 2016-11-10 01:44:53 +02:00
Eduard Burtescu
6b3cc0b8c8 rustc_typeck: correctly track "always-diverges" and "has-type-errors". 2016-11-10 01:44:53 +02:00
Eduard Burtescu
49772fbf5d syntax: don't fake a block around closures' bodies during parsing. 2016-11-10 01:44:45 +02:00
bors
0b46947d35 Auto merge of #37603 - arielb1:max-slice-length, r=nikomatsakis
_match: correct max_slice_length logic

The logic used to be wildly wrong, but before the HAIR patch its wrongness was in most cases hidden by another bug.

Fixes #37598.

r? @nikomatsakis
2016-11-09 15:13:58 -08:00
bors
da2ce22768 Auto merge of #37670 - eddyb:rollup, r=eddyb
Rollup of 15 pull requests

- Successful merges: #36868, #37134, #37229, #37250, #37370, #37428, #37432, #37472, #37524, #37614, #37622, #37627, #37636, #37644, #37654
- Failed merges: #37463, #37542, #37645
2016-11-09 11:58:25 -08:00
Eduard-Mihai Burtescu
60c74b76c4 Rollup merge of #37654 - michaelwoerister:test-let-ich, r=nikomatsakis
ICH: Add tests for let- and match-expressions.

r? @nikomatsakis
2016-11-09 20:51:19 +02:00
Eduard-Mihai Burtescu
5ebd7c50a0 Rollup merge of #37614 - keeperofdakeys:proc_macro, r=jseyfried
macros 1.1: Allow proc_macro functions to declare attributes to be mark as used

This PR allows proc macro functions to declare attribute names that should be marked as used when attached to the deriving item. There are a few questions for this PR.

- Currently this uses a separate attribute named `#[proc_macro_attributes(..)]`, is this the best choice?
- In order to make this work, the `check_attribute` function had to be modified to not error on attributes marked as used. This is a pretty large change in semantics, is there a better way to do this?
- I've got a few clones where I don't know if I need them (like turning `item` into a `TokenStream`), can these be avoided?
- Is switching to `MultiItemDecorator` the right thing here?

Also fixes https://github.com/rust-lang/rust/issues/37563.
2016-11-09 20:51:18 +02:00
Eduard-Mihai Burtescu
bd9969fb11 Rollup merge of #37428 - estebank:generic-type-error-span, r=sanxiyn
Point to type argument span when used as trait

Given the following code:

``` rust
struct Foo<T: Clone>(T);

use std::ops::Add;

impl<T: Clone, Add> Add for Foo<T> {
  type Output = usize;

  fn add(self, rhs: Self) -> Self::Output {
    unimplemented!();
  }
}
```

present the following output:

``` nocode
error[E0404]: `Add` is not a trait
 --> file3.rs:5:21
  |
5 | impl<T: Clone, Add> Add for Okok<T> {
  |                ---  ^^^ expected trait, found type parameter
  |                |
  |                type parameter defined here
```

Fixes #35987.
2016-11-09 20:51:16 +02:00
Eduard-Mihai Burtescu
7f2853fda3 Rollup merge of #37370 - estebank:signature-2-empire-strikes-back, r=nikomatsakis
Include type of missing trait methods in error

Provide either a span pointing to the original definition of missing
trait items, or a message with the inferred definitions.

Fixes #24626. Follow up to PR #36371.

If PR #37369 lands, missing trait items that present a multiline span will be able to show the entirety of the item definition on the error itself, instead of just the first line.
2016-11-09 20:51:16 +02:00
Eduard-Mihai Burtescu
f433209248 Rollup merge of #36868 - petrochenkov:adtstab, r=nikomatsakis
Partially stabilize RFC 1506 "Clarify relationships between ADTs"

Lifted restrictions on tuple structs/variants are stabilized, i.e. `S{..}` can be used with any structs and empty tuple structs are permitted without feature gate.
Numeric fields in struct expressions/patterns `S { 0: a, 1: b }` are **NOT** stabilized.
This was implemented 1.5 months ago in Rust 1.12, but this is a tiny technical change that could probably go even without RFC/stabilization period.

cc https://github.com/rust-lang/rust/issues/35626 https://github.com/rust-lang/rust/pull/36871
r? @nikomatsakis
2016-11-09 20:51:15 +02:00
bors
bca365e688 Auto merge of #36520 - estebank:dataless-enum, r=brson
Reword error when data-less enum variant called as function

Given a file like:

``` rust
enum Test {
    Variant,
    Variant2 {a: u32},
}

fn main(){
    let x = Test::Variant("Hello");
    let y = Test::Variant2("World");
}
```

Both errors now look similar:

``` bash
error[E0423]: `Test::Variant2` is the name of a struct or struct variant, but this expression uses it like a function name
  --> file3.rs:10:13
   |
10 |     let y = Test::Variant2("Hello");
   |             ^^^^^^^^^^^^^^ struct called like a function
   |
   = help: did you mean to write: `Test::Variant2 { /* fields */ }`?

error: `Test::Variant` is the name of a data-less enum, but this expression uses it like a function name
 --> file3.rs:9:13
  |
9 |     let x = Test::Variant("World");
  |             ^^^^^^^^^^^^^^^^^^^^^^ data-less enum called like a function
  |
  = help: did you mean to write: `Test::Variant`?
note: defined here
 --> file3.rs:2:5
  |
2 |     Variant,
  |     ^^^^^^^

error: aborting due to previous error
```

Re: #28533
2016-11-09 08:51:23 -08:00
Esteban Küber
3edb4fc563 Point to type argument span when used as trait
Given the following code:

```rust
struct Foo<T: Clone>(T);

use std::ops::Add;

impl<T: Clone, Add> Add for Foo<T> {
    type Output = usize;

    fn add(self, rhs: Self) -> Self::Output {
      unimplemented!();
    }
}
```

present the following output:

```nocode
error[E0404]: `Add` is not a trait
 --> file3.rs:5:21
  |
5 | impl<T: Clone, Add> Add for Okok<T> {
  |                ---  ^^^ expected trait, found type parameter
  |                |
  |                type parameter defined here
```
2016-11-08 14:17:18 -08:00
Steve Klabnik
5bfc21dcb6 Rollup merge of #37610 - oldmanmike:unary-and-binary-tests, r=michaelwoerister
Add unary and binary tests for incr-comp

This is my draft of tests for unary and binary expressions as desired by #37520 for use in the test suite for hashes in incremental compilation. Feedback would be wonderful, if there's any changes I need to make I would appreciate the code review.

?r @michaelwoerister
2016-11-08 16:20:57 -05:00
Michael Woerister
5d186d0ddd ICH: Add test case for match-expressions 2016-11-08 15:58:06 -05:00
Michael Woerister
f7d2a813d5 ICH: Add test case for let-expressions. 2016-11-08 15:57:56 -05:00
Vadim Petrochenkov
ab5ba049bc Partially stabilize RFC 1506 "Clarify relationships between ADTs" 2016-11-08 22:34:05 +03:00
Josh Driver
134ef4f793 Revert "Point macros 1.1 errors to the input item"
This reverts commit 3784067edc.
Any errors in the derived output now point at the derive attribute
instead of the item.
2016-11-08 23:03:56 +10:30
Josh Driver
31a508e118 Allow proc_macro functions to whitelist specific attributes
By using a second attribute `attributes(Bar)` on
proc_macro_derive, whitelist any attributes with
the name `Bar` in the deriving item. This allows
a proc_macro function to use custom attribtues
without a custom attribute error or unused attribute
lint.
2016-11-08 23:03:56 +10:30
bors
38a959a543 Auto merge of #36843 - petrochenkov:dotstab, r=nikomatsakis
Stabilize `..` in tuple (struct) patterns

I'd like to nominate `..` in tuple and tuple struct patterns for stabilization.
This feature is a relatively small extension to existing stable functionality and doesn't have known blockers.
The feature first appeared in Rust 1.10 6 months ago.
An example of use: https://github.com/rust-lang/rust/pull/36203

Closes https://github.com/rust-lang/rust/issues/33627
r? @nikomatsakis
2016-11-08 02:06:45 -08:00
bors
57f971bc16 Auto merge of #36365 - matthew-piziak:silent-overflow, r=eddyb
fix silent overflows on `Step` impls

Part of https://github.com/rust-lang/rust/issues/36110

r? @eddyb
2016-11-07 11:48:16 -08:00
oldmanmike
5a2997d3d8 Fix typos and redundant code 2016-11-07 13:59:48 -05:00
oldmanmike
e2ca47ab1a Apply changes recommended in code review
Said code review and recommendations can be found here:
https://github.com/rust-lang/rust/pull/37610
2016-11-07 12:42:20 -05:00
bors
09fc1af9d8 Auto merge of #37506 - jseyfried:improve_shadowing_checks, r=nrc
macros: improve shadowing checks

This PR improves macro-expanded shadowing checks to work with out-of-(pre)order expansion.

Out-of-order expansion became possible in #37084, so this technically a [breaking-change] for nightly.
The regression test from this PR is an example of code that would break.

r? @nrc
2016-11-06 19:12:28 -08:00
Joe Neeman
6829c3ded8 Add test for issue 18060. 2016-11-06 16:32:49 +01:00
sinkuu
1a819a2298 Make E0243/0244 message consistent with E0107 2016-11-06 20:51:21 +09:00
oldmanmike
21814a5ebb Add unary and binary tests for incr-comp 2016-11-05 21:31:57 -04:00
Esteban Küber
40c2c0f833 Include type of missing trait methods in error
Provide either a span pointing to the original definition of missing
trait items, or a message with the inferred definitions.
2016-11-05 13:26:22 -07:00
Alex Crichton
18ee04b3df Merge branch 'gdb-next-gen' of https://github.com/TimNN/rust into rollup 2016-11-05 10:51:34 -07:00
Alex Crichton
11251e59b9 Fix tests from the rollup 2016-11-05 10:51:04 -07:00
Alex Crichton
e126f3c6c6 Merge branch 'selfgate' of https://github.com/petrochenkov/rust into rollup 2016-11-05 10:50:47 -07:00
Alex Crichton
9847bd3d68 Rollup merge of #37596 - est31:master, r=alexcrichton
Add error when proc_macro_derive is used not on functions

Fixes #37590
2016-11-05 10:50:25 -07:00
Alex Crichton
b9cbbe184a Rollup merge of #37569 - jseyfried:improve_expansion_perf, r=eddyb
macros: improve expansion performance

This PR fixes that regression, further improves performance on recursive, `tt`-heavy workloads, and makes a variety of other improvements to parsing and expansion performance.

Expansion performance improvements:

| Test case      | Run-time | Memory usage |
| -------------- | -------- | ------------ |
| libsyntax      | 8%       | 10%          |
| librustc       | 15%      | 6%           |
| librustc_trans | 30%      | 6%           |
| #37074         | 20%      | 15%          |
| #34630         | 40%      | 8%           |

r? @eddyb
2016-11-05 10:50:24 -07:00
Alex Crichton
7c7bc2c296 Rollup merge of #37564 - Mark-Simulacrum:sized-ice, r=eddyb
Fix ICE when querying DefId on Def::Err.

Also moves computations into check that `kind_id` is `Ok(_)`, which is in theory an optimization, though I expect it's minor.

Fixes #37534.

r? @eddyb.
2016-11-05 10:50:23 -07:00
Alex Crichton
b4aee37224 Rollup merge of #37557 - TimNN:fix-36954, r=eddyb
Use DefId's in const eval for cross-crate const fn's

Fixes #36954.

r? @eddyb

cc @raphaelcohn
2016-11-05 10:50:23 -07:00
Alex Crichton
8a38b24d95 Rollup merge of #37501 - alexcrichton:windows-subsystem, r=brson
rustc: Add knowledge of Windows subsystems.

This commit is an implementation of [RFC 1665] which adds support for the
`#![windows_subsystem]` attribute. This attribute allows specifying either the
"windows" or "console" subsystems on Windows to the linker.

[RFC 1665]: https://github.com/rust-lang/rfcs/blob/master/text/1665-windows-subsystem.md

Previously all Rust executables were compiled as the "console" subsystem which
meant that if you wanted a graphical application it would erroneously pop up a
console whenever opened. When compiling an application, however, this is
undesired behavior and the "windows" subsystem is used instead to have control
over user interactions.

This attribute is validated, but ignored on all non-Windows platforms.

cc #37499
2016-11-05 10:50:23 -07:00
Ariel Ben-Yehuda
d3ddb85eb1 _match: correct max_slice_length logic
The logic used to be wildly wrong, but before the HAIR patch its
wrongness was hidden by another bug.

Fixes #37598.
2016-11-05 13:32:35 +02:00
est31
ecd79a125b Add error when proc_macro_derive is used not on functions
Fixes #37590
2016-11-04 23:52:20 +01:00