2360 Commits

Author SHA1 Message Date
Ariel Ben-Yehuda
d938ba4769 coherence: check builtin impls after the specialization graph is ready
Fixes #33187.
2017-01-03 21:50:18 +02:00
Ariel Ben-Yehuda
7309babf17 coherence: code cleanup 2017-01-03 21:50:18 +02:00
Ariel Ben-Yehuda
f8a2f9838d coherence: move the builtin trait checks to their own module
no functional changes
2017-01-03 21:50:18 +02:00
Simonas Kazlauskas
7a3704c500 Fix rebase fallout
This commit includes manual merge conflict resolution changes from a rebase by @est31.
2016-12-30 15:17:27 +01:00
Simonas Kazlauskas
d4d5be18b7 Feature gate the 128 bit types
Dangling a carrot in front of a donkey.

This commit includes manual merge conflict resolution changes from a rebase by @est31.
2016-12-30 15:17:25 +01:00
Simonas Kazlauskas
b0e55a83a8 Such large. Very 128. Much bits.
This commit introduces 128-bit integers. Stage 2 builds and produces a working compiler which
understands and supports 128-bit integers throughout.

The general strategy used is to have rustc_i128 module which provides aliases for iu128, equal to
iu64 in stage9 and iu128 later. Since nowhere in rustc we rely on large numbers being supported,
this strategy is good enough to get past the first bootstrap stages to end up with a fully working
128-bit capable compiler.

In order for this strategy to work, number of locations had to be changed to use associated
max_value/min_value instead of MAX/MIN constants as well as the min_value (or was it max_value?)
had to be changed to use xor instead of shift so both 64-bit and 128-bit based consteval works
(former not necessarily producing the right results in stage1).

This commit includes manual merge conflict resolution changes from a rebase by @est31.
2016-12-30 15:15:44 +01:00
Eduard-Mihai Burtescu
4aae835803 rustc: always print nested nodes where a HIR map is available. 2016-12-28 11:29:20 +02:00
Eduard-Mihai Burtescu
f64e73b6ec rustc: simplify constant cross-crate loading and rustc_passes::consts. 2016-12-28 11:29:19 +02:00
Eduard-Mihai Burtescu
f89856be6c rustc: move function arguments into hir::Body. 2016-12-28 11:29:19 +02:00
Eduard-Mihai Burtescu
e64f64a2fc rustc: separate bodies for static/(associated)const and embedded constants. 2016-12-28 11:27:57 +02:00
Eduard-Mihai Burtescu
864928297d rustc: separate TraitItem from their parent Item, just like ImplItem. 2016-12-28 11:21:45 +02:00
Eduard-Mihai Burtescu
6ebb6fdbee hir: lower ImplicitSelf to resolved Self TyQPath's. 2016-12-28 11:21:45 +02:00
Vadim Petrochenkov
09aba18e10 More systematic error reporting in path resolution 2016-12-26 15:01:49 +03:00
bors
44ad63e487 Auto merge of #38490 - jseyfried:def_id_vis, r=nrc
Use `DefId`s instead of `NodeId`s for `pub(restricted)` visibilities

This is groundwork for hygiene 2.0, specifically privacy checking hygienic intercrate name resolutions.
r? @nrc
2016-12-25 21:32:37 +00:00
Jeffrey Seyfried
41f1e189ee Use DefIds instead of NodeIds for pub(restricted) visibilities. 2016-12-24 00:23:03 +00:00
Chris Morgan
40b9352aa3 Fix Markdown list formatting.
The Markdown engine used by the book can cope with a single leading space
on the list marker:

    Like this:

     * List item

    Rather than like this:

    * List item

… but it’s not the typical convention employed in the book, and moreover
the Markdown engine used for producing the error index *can’t* cope with
it (its behaviour looks like a bug, as it appears to lose one of the two
line breaks as well, but that’s immaterial here).

So, we shift to a single convention which doesn’t trigger bugs in the
Markdown renderer.
2016-12-22 17:35:53 +05:30
bors
439c3128d7 Auto merge of #38099 - GuillaumeGomez:cast_suggestions, r=nikomatsakis
Cast suggestions

r? @nikomatsakis
2016-12-21 07:28:16 +00:00
Guillaume Gomez
f439a24ca2 Fix linter issue 2016-12-20 11:37:15 +01:00
Niko Matsakis
6ea1fbb52b recover from unresolved inference variable at end of autoderef
When we are scanning for suggestions, an unresolved inference variable
is not a hard error.
2016-12-20 11:37:15 +01:00
Niko Matsakis
5d41be3629 don't special case having 1 item 2016-12-20 11:37:15 +01:00
Guillaume Gomez
25a2d13cde Allow multiple suggestions 2016-12-20 11:37:15 +01:00
Niko Matsakis
88e9430dbb call impl_or_trait_item() instead instead of associated_item()
The older method was not aware of the return type possibility.
2016-12-20 11:37:15 +01:00
Guillaume Gomez
044b07dd20 Update to last master 2016-12-20 11:37:15 +01:00
Niko Matsakis
3bb3278e53 revert a lot of the changes to method probe internals 2016-12-20 11:37:15 +01:00
Niko Matsakis
ec5847a698 rewrite return type probing to use the "probe by name" path
We now do two phases. First, we gather up the list of candidates with
suitable return types and extract their names. Then we filter those to
see which are applicable and we return that.

It might be nice to do the "filter by return type" as a second step,
but this is ok for now.
2016-12-20 11:37:15 +01:00
Niko Matsakis
579e52692f make probe_for generic over final operation 2016-12-20 11:37:15 +01:00
Guillaume Gomez
18b33579e1 splitting methods into smaller ones, add docs, better variable naming 2016-12-20 11:37:15 +01:00
Guillaume Gomez
b5686422e1 improve suggestions output and add ui test 2016-12-20 11:37:15 +01:00
Guillaume Gomez
eaa2ddb04f fix tests 2016-12-20 11:37:15 +01:00
Guillaume Gomez
66057a7f72 Fix invalid probe path 2016-12-20 11:37:15 +01:00
Guillaume Gomez
c11fe553df Create check_ref method to allow to check coercion with & types 2016-12-20 11:37:15 +01:00
Guillaume Gomez
b2d0ec0eb4 Fix coercion ICE 2016-12-20 11:37:15 +01:00
Guillaume Gomez
8057d485d4 Move matches return type method 2016-12-20 11:37:15 +01:00
Guillaume Gomez
07a3ede5f2 Return DiagnosticBuilder to add help suggestions 2016-12-20 11:37:15 +01:00
Guillaume Gomez
021d97d1c5 Move suggestion list creation to coerce check 2016-12-20 11:37:15 +01:00
Esteban Küber
868fb030cc When cast needs a dereference point at full cast
After the fix of #37453 in PR #37369, instead of pointing at only the
cast type, point at the full cast span when a cast needs a dereference:

```
error: casting `&{float}` as `f32` is invalid
  --> ../../../src/test/ui/mismatched_types/cast-rfc0401.rs:81:30
   |
81 |     vec![0.0].iter().map(|s| s as f32).collect::<Vec<f32>>();
   |                              ^^^^^^^^ cannot cast `&{float}` as `f32`
   |
help: did you mean `*s`?
  --> ../../../src/test/ui/mismatched_types/cast-rfc0401.rs:81:30
   |
81 |     vec![0.0].iter().map(|s| s as f32).collect::<Vec<f32>>();
   |                              ^
```

instead of

```
error: casting `&{float}` as `f32` is invalid
  --> ../../../src/test/ui/mismatched_types/cast-rfc0401.rs:81:35
   |
81 |     vec![0.0].iter().map(|s| s as f32).collect::<Vec<f32>>();
   |                              -    ^^^
   |                              |
   |                              |
   |                              did you mean `*s`?
   |                              cannot cast `&{float}` as `f32`
```
2016-12-14 17:33:03 -08:00
bors
5e2f37fca9 Auto merge of #38057 - KiChjang:display-formal-type-param, r=nikomatsakis
Display better error messages for E0282

Fixes #36554.
2016-12-12 00:22:30 +00:00
Guillaume Gomez
ed3c483aa8 Change error to E0572 2016-12-08 21:03:46 -08:00
Guillaume Gomez
b1dd793acd Update to last master 2016-12-08 20:49:33 -08:00
Guillaume Gomez
64de44e0a1 Set back Ty parameter to FnCntxt 2016-12-08 20:49:33 -08:00
Guillaume Gomez
8dee5ab805 Add E0571 test 2016-12-08 20:49:33 -08:00
Guillaume Gomez
5a065641fd Add checkup for return statement outside of a function 2016-12-08 20:49:33 -08:00
bors
b5d0f90929 Auto merge of #38036 - Mark-Simulacrum:polish-2, r=nagisa,eddyb
Simplify calling find_implied_output_region.

@nnethercote added the optimization that find_implied_output_region
takes a closure as an optimization in #37014, but passing an iterator is
simpler, and more ergonomic for callers.
2016-12-06 17:38:26 +00:00
Mark-Simulacrum
cc6edb2726 Simplify calling find_implied_output_region.
@nnethercote added the optimization that find_implied_output_region
takes a closure as an optimization in #37014, but passing an iterator is
simpler, and more ergonomic for callers.
2016-12-06 06:59:07 -07:00
Mark-Simulacrum
296ec5f9b7 Refactor FnSig to contain a Slice for its inputs and outputs. 2016-12-05 22:33:38 -07:00
Mark-Simulacrum
1eab19dba8 Refactor ty::FnSig to privatize all fields 2016-12-05 22:22:49 -07:00
bors
09991241fd Auto merge of #38121 - jonathandturner:better_e0061, r=nikomatsakis
Point arg num mismatch errors back to their definition

This PR updates the arg num errors (like E0061) to point back at the function definition where they were defined.

Before:

```
error[E0061]: this function takes 2 parameters but 1 parameter was supplied
  --> E0061.rs:18:7
   |
18 |     f(0);
   |       ^
   |
   = note: the following parameter types were expected:
   = note: u16, &str
```

Now:

```
error[E0061]: this function takes 2 parameters but 1 parameter was supplied
  --> E0061.rs:18:7
   |
11 | fn f(a: u16, b: &str) {}
   | ------------------------ defined here
...
18 |     f(0);
   |       ^ expected 2 parameters
```

This is an incremental improvement.  We probably want to underline only the function name and also have support for functions defined in crates outside of the current crate.

r? @nikomatsakis
2016-12-06 00:17:24 +00:00
Keith Yeung
3d069e1b38 Add TypeVariableOrigin enum 2016-12-03 17:12:28 -08:00
Corey Farwell
9aef89eb45 Rollup merge of #38065 - estebank:fix-37618, r=jonathandturner
Show `Trait` instead of `<Struct as Trait>` in E0323

For a given file

```
trait Foo {
    fn bar(&self);
}

pub struct FooConstForMethod;

impl Foo for FooConstForMethod {
    const bar: u64 = 1;
}
```

show

```
error[E0323]: item `bar` is an associated const, which doesn't match its trait `Foo`
```

instead of

```
error[E0323]: item `bar` is an associated const, which doesn't match its trait `<FooConstForMethod as Foo>`
```

Fix #37618
2016-12-03 15:39:52 -05:00
Corey Farwell
ca0c8395a0 Rollup merge of #38028 - Mark-Simulacrum:polish, r=nikomatsakis
Refactor one_bound_for_assoc_type to take an Iterator instead of Vec

I doubt the performance implications will be serious, but it will avoid allocating one-element Vecs for the successful case (and avoid allocating vecs at all for any case, too).

`--stage 2` tests passed locally.
2016-12-03 15:39:51 -05:00