Commit graph

15791 commits

Author SHA1 Message Date
Michael Woerister
0a77a58857 Add test cases for cyclic specialization graph construction 2017-05-16 15:04:32 +02:00
Michael Woerister
513cc6d538 Make incr. comp. test case dependent on specific ICH instead of SVH 2017-05-15 15:27:49 +02:00
Mark Simulacrum
e71d4404bd Rollup merge of #41946 - qnighy:disallow-dot-underscore-in-float, r=petrochenkov
Disallow ._ in float literal.

This patch makes lexer stop parsing number literals before `._`, as well as before `.a`. Underscore itself is still allowed like in `4_000_000.000_000_`.

Fixes a half part of #41723. The other is `""_`.
2017-05-13 20:55:11 -06:00
Mark Simulacrum
cfea522226 Rollup merge of #41939 - eddyb:trait-assoc-const-default, r=petrochenkov
rustc_resolve: don't deny outer type parameters in embedded constants.

This solves a problem noted at https://github.com/rust-lang/rust/issues/29646#issuecomment-300929548, where an associated const default in a trait couldn't refer to `Self` or type parameters, due to inaccuracies in lexical scoping.

I've also allowed "embedded expressions" (`[T; expr]`,  `[x; expr]`, `typeof expr`) to refer to type parameters in scope. *However*, the typesystem still doesn't handle #34344.
Fully resolving that issue requires breaking cycles more aggressively (e.g. lazy evaluation), *even* in when the expression doesn't depend on type parameters, to type-check it at all, and then also type-level "constant projections" (in the vein of `{expr}` from const generics).
2017-05-13 20:55:10 -06:00
bors
826d8f3850 Auto merge of #41914 - eddyb:region-refactor, r=nikomatsakis
rustc: simpler ParameterEnvironment and free regions.

The commits describe the slow transformation but the highlights are:
* `ReEarlyBound` is considered free, with a scope based on the item that defined the lifetime parameter, and the root body of the `RegionMaps` in use, removing the need for `free_substs`
* `liberate_late_bound_regions` and `implicit_region_bound` moved to typeck
* `CodeExtent` not interned at all now - ideally it would be 2 `u32` but it's small anyway

Future work building up on this could include:
* `ParameterEnvironment` becoming just the result of `predicates_of`
  * interning makes my "parent chain" scheme unnecessary
* `implicit_region_bound` could be retrieved from `RegionMaps`
* renaming `CodeExtent` to `Scope`
  * generalizing "call site" to "use site" or something better to include constants
* renaming `RegionMaps` to `ScopeTree` and its API to talk about "parents" explicitly
2017-05-13 17:56:09 +00:00
Eduard-Mihai Burtescu
dc7ffbeca4 rustc_resolve: don't deny outer type parameters in embedded constants. 2017-05-13 17:45:54 +03:00
Eduard-Mihai Burtescu
2da080e779 rustc: treat ReEarlyBound as free without replacing it with ReFree. 2017-05-13 17:42:59 +03:00
Eduard-Mihai Burtescu
6d4c2141b5 rustc: use DefId instead of CodeExtent for FreeRegion's scope. 2017-05-13 17:42:59 +03:00
bors
77f1bec6f5 Auto merge of #41920 - arielb1:inline-drop, r=eddyb
remove the #[inline] attribute from drop_in_place

Apparently LLVM has exponential code growth while inlining landing pads
if that attribute is present.

Fixes #41696.

beta-nominating  because regression.
r? @eddyb
2017-05-13 13:59:19 +00:00
Ariel Ben-Yehuda
237dbe939a add min-llvm-version 2017-05-13 14:38:15 +03:00
Mark Simulacrum
cf4fac6ec5 Rollup merge of #41923 - eddyb:issue-41744, r=arielb1
rustc_trans: do not attempt to truncate an i1 const to i1.

Fixes #41744 by skipping the truncation when it'd be a noop anyway.
2017-05-12 18:57:33 -06:00
Mark Simulacrum
1f7266205f Rollup merge of #41876 - oli-obk:diagnosing_diagnostics, r=nagisa
Refactor suggestion diagnostic API to allow for multiple suggestions

r? @jonathandturner

cc @nrc @petrochenkov
2017-05-12 18:57:28 -06:00
Masaki Hara
7b535e1096
Disallow ._ in float literal. 2017-05-12 22:00:06 +09:00
bors
e19ccb71c8 Auto merge of #41757 - alexcrichton:stabilize-crt-static, r=japaric
rustc: Stabilize `-C target-feature=+crt-static`

This commit stabilizes the `crt-static` feature accepted by the compiler. Note
that this does not stabilize the `#[cfg]` attribute for `crt-static` as
that's going to be covered by #29717. This only stabilizes a few small pieces:

* The `crt-static` feature as accepted by the `-C target-feature` flag, and its
  connection with the platform-specific definition of `crt-static`.
* The semantics of `--print cfg` printing out activated `crt-static` feature, if
  available.

This should be enough to get the benefits of `crt-static` on stable Rust with
MSVC and with musl, but sidsteps the issue of stabilizing #29717 first.

Closes #37406
2017-05-12 07:33:10 +00:00
bors
141e8a6a02 Auto merge of #41716 - nikomatsakis:issue-41677, r=arielb1
enforce WF conditions after generalizing

Add a `WF(T')` obligation after generalizing `T` to `T'`, if `T'` contains an unconstrained type variable in a bivariant context.

Fixes #41677.

Beta nominating -- regression.

r? @arielb1
2017-05-12 05:02:10 +00:00
Eduard-Mihai Burtescu
68c1ce9170 rustc_trans: do not attempt to truncate an i1 const to i1. 2017-05-12 00:14:31 +03:00
Ariel Ben-Yehuda
b0c80a93e4 remove the #[inline] attribute from drop_in_place
Apparently LLVM has exponential code growth while inlining landing pads
if that attribute is present.

Fixes #41696.
2017-05-11 23:17:11 +03:00
Niko Matsakis
2490ee5080 correct various error messages that changed
The new messages seem universally better. I think these result because
we recognize that we are in an invariant context more often.
2017-05-11 14:52:26 -04:00
Niko Matsakis
a4151ff3c4 add a WF obligation if a type variable appears in bivariant position 2017-05-11 14:52:26 -04:00
Niko Matsakis
d22d1feae1 do not fetch variance for items when equating
Fixes #41849. Problem was that evaluating the constant expression
required evaluating a trait, which would equate types, which would
request variance information, which it would then discard. However,
computing the variance information would require determining the type of
a field, which would evaluate the constant expression.

(This problem will potentially arise *later* as we move to more sophisticated
constants, however, where we need to check subtyping. We can tackle that
when we come to it.)
2017-05-11 10:54:19 -04:00
Corey Farwell
4ad75b317f Rollup merge of #41873 - michaelwoerister:fix-filemap-hash-lookup, r=nikomatsakis
ICH: Handle case of removed FileMaps.

This PR fixes a bug introduced in #41709 where removing a source file between compilation sessions would cause an ICE:
https://travis-ci.org/rust-icci/crossbeam/jobs/230582234#L633

r? @nikomatsakis
2017-05-11 00:21:26 -04:00
Corey Farwell
a00e182053 Rollup merge of #41192 - zackw:eprintln, r=alexcrichton
Add `eprint!` and `eprintln!` macros to the prelude.

These are exactly the same as `print!` and `println!` except that they write to stderr instead of stdout.  Issues #39228 and #40528; previous PR #39229; accepted RFC rust-lang/rfcs#1869; proposed revision to The Book rust-lang/book#615.

I have _not_ revised this any since the original submission; I will do that later this week.  I wanted to get this PR in place since it's been quite a while since the RFC was merged.

Known outstanding review comments:

* [x] @steveklabnik requested a new chapter for the unstable version of The Book -- please see if the proposed revisions to the second edition cover it.
* [x] @nodakai asked if it were possible to merge the internal methods `_print` and `_eprint` - not completely, since they both refer to different internal globals which we don't want to expose, but I will see if some duplication can be factored out.

Please let me know if I missed anything.
2017-05-11 00:21:24 -04:00
Zack Weinberg
72588a2b2a Skip print-stdout-eprint-stderr test on emscripten 2017-05-10 15:28:25 -04:00
Oliver Schneider
f859f2585b Update a compile-fail test 2017-05-10 17:05:33 +02:00
Zack Weinberg
4ab3bcb9ca Fix up stability annotations per feedback. 2017-05-10 09:52:16 -04:00
Zack Weinberg
76127275a0 Add eprint! and eprintln! macros to the prelude.
These are exactly the same as `print!` and `println!` except that
they write to stderr instead of stdout.  Issue #39228.
2017-05-10 09:29:16 -04:00
Oliver Schneider
e2f781c7ea
Example usage of multiple suggestions 2017-05-10 13:20:27 +02:00
Michael Woerister
84a40c1443 ICH: Handle case of removed FileMaps. 2017-05-10 12:35:36 +02:00
Guillaume Gomez
cc4afe0f65 Improve E0477 error message 2017-05-09 20:51:18 +02:00
bors
f3fc547194 Auto merge of #41709 - michaelwoerister:close-metadata-ich-holes, r=nikomatsakis
incr.comp.: Hash more pieces of crate metadata to detect changes there.

This PR adds incr. comp. hashes for non-`Entry` pieces of data in crate metadata.

The first part of it I like: `EntryBuilder` is refactored into the more generally applicable `IsolatedEncoder` which provides means of encoding something into metadata while also feeding the encoded data into an incr. comp. hash. We already did this for `Entry`, now we are doing it for various other pieces of data too, like the set of exported symbols and so on. The hashes generated there are persisted together with the per-`Entry` hashes and are also used for dep-graph dirtying the same way.

The second part of the PR I'm not entirely happy with: In order to make sure that we don't forget registering a read to the new `DepNodes` introduced here, I added the `Tracked<T>` struct. This struct wraps a value and requires a `DepNode` when accessing the wrapped value. This makes it harder to overlook adding read edges in the right places and works just fine.
However, crate metadata is already used in places where there is no `tcx` yet or even in places where no `cnum` has been assigned -- this makes it harder to apply this feature consistently or implement it ergonomically. The result is not too bad but there's a bit more code churn and a bit more opportunity to get something wrong than I would have liked. On the other hand, wrapping things in `Tracked<T>` already has revealed some bugs, so there's definitely some value in it.

This is still a work in progress:
- [x] I need to write some test cases.
- [x] Accessing the CodeMap should really be dependency tracked too, especially with the new path-remapping feature.

cc @nikomatsakis
2017-05-09 11:55:37 +00:00
bors
c2d53dce7e Auto merge of #41777 - nikomatsakis:issue-41697-mir-dump-cycle, r=arielb1
dump-mir was causing cycles by invoking item-path-str at bad times

Workaround for now, but probably a better fix is to opt **in** to using the types for impls (if we do that at all; maybe filename/line is better).

Fixes #41697
2017-05-09 09:27:50 +00:00
Corey Farwell
2f0deec98b Rollup merge of #41838 - z1mvader:fix_fn_args_coerce_closure, r=nikomatsakis
Fixed argument inference for closures when coercing into 'fn'

This fixes https://github.com/rust-lang/rust/issues/41755. The tests  `compile-fail/closure-no-fn.rs` and `compile-fail/issue-40000.rs` were modified. A new test `run-pass/closure_to_fn_coercion-expected-types.rs` was added

r? @nikomatsakis
2017-05-08 22:34:52 -04:00
Corey Farwell
f4c4334472 Rollup merge of #41828 - arielb1:lvalue-ops, r=eddyb
try to fix lvalue ops for real

Hopefully this is the last PR needed.

Fixes #41726.
Fixes #41742.
Fixes #41774.
2017-05-08 22:34:50 -04:00
Corey Farwell
933df894a6 Rollup merge of #41827 - qnighy:allow-bare-cr-in-nondoc-comment, r=estebank
Allow bare CR in ////-style comment.

Fixes #40624 in a way that bare CR is allowed in all non-doc comments.
2017-05-08 22:34:49 -04:00
Corey Farwell
1940c31c92 Rollup merge of #41520 - estebank:trace-macro, r=nikomatsakis
Use diagnostics for trace_macro instead of println

When using `trace_macro`, use `span_label`s instead of `println`:

```rust
note: trace_macro
  --> $DIR/trace-macro.rs:14:5
   |
14 |     println!("Hello, World!");
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: expands to `println! { "Hello, World!" }`
   = note: expands to `print! { concat ! ( "Hello, World!" , "\n" ) }`
```

Fix #22597.
2017-05-08 22:34:47 -04:00
Corey Farwell
c104db4801 Rollup merge of #41293 - est31:floating_literal_match, r=nikomatsakis
Implement the illegal_floating_point_literal_pattern compat lint

Adds a future-compatibility lint for the [breaking-change] introduced by issue #41620 . cc issue #41255 .
2017-05-08 22:34:46 -04:00
bors
f1140a3317 Auto merge of #41515 - eddyb:non-static-assoc-const, r=nikomatsakis
rustc: treat const bodies like fn bodies in middle::region.

Allows `T::ASSOC_CONST` to be used without a `T: 'static` bound.

cc @rust-lang/compiler @rust-lang/lang
2017-05-08 23:02:30 +00:00
Christian Poveda
82e0736391 massive refactor 2017-05-08 16:39:47 -05:00
Christian Poveda
78b27373dc added test 2017-05-08 16:34:29 -05:00
Christian Poveda
8aaae945ea first part of issue-40000.rs is now passing 2017-05-08 16:17:26 -05:00
Christian Poveda
170c4340f6 dividied closure-no-fn.rs into three different tests 2017-05-08 16:04:49 -05:00
Niko Matsakis
cadf187347 dump-mir was causing cycles by invoking item-path-str at bad times
Workaround for now, but probably a better fix is to opt **in** to using
the types for impls (if we do that at all; maybe filename/line is
better).
2017-05-08 15:59:02 -04:00
Ariel Ben-Yehuda
052d071bb2 try to fix lvalue ops for real
Hopefully this is the last PR needed.

Fixes #41726.
Fixes #41742.
Fixes #41774.
2017-05-08 17:05:03 +03:00
Masaki Hara
0e8e45c740
Allow bare CR in ////-style comment. 2017-05-08 22:29:24 +09:00
Michael Woerister
6a5e2a5a9e incr.comp.: Hash more pieces of crate metadata to detect changes there. 2017-05-08 12:31:26 +02:00
bors
a478e46eb7 Auto merge of #40857 - estebank:recursive, r=arielb1
Point at fields that make the type recursive

On recursive types of infinite size, point at all the fields that make
the type recursive.

```rust
struct Foo {
    bar: Bar,
}

struct Bar {
    foo: Foo,
}
```

outputs

```
error[E0072]: recursive type `Foo` has infinite size
 --> file.rs:1:1
1 | struct Foo {
  | ^^^^^^^^^^ recursive type has infinite size
2 |     bar: Bar,
  |     -------- recursive here
  |
  = help: insert indirection (e.g., a `Box`, `Rc`, or `&`) at some point to make `Foo` representable

error[E0072]: recursive type `Bar` has infinite size
 --> file.rs:5:1
  |
5 | struct Bar {
  | ^^^^^^^^^^ recursive type has infinite size
6 |     foo: Foo,
  |     -------- recursive here
  |
  = help: insert indirection (e.g., a `Box`, `Rc`, or `&`) at some point to make `Bar` representable
```
2017-05-07 13:57:36 +00:00
bors
ced823e267 Auto merge of #41785 - Mark-Simulacrum:issue-41783, r=GuillaumeGomez
Allow # to appear in rustdoc code output.

"##" at the start of a trimmed rustdoc line is now cut to "#" and then
shown. If the user wanted to show "##", they can type "###".

I'm somewhat concerned about the potential implications for users, since this does make a potentially backwards-incompatible change. Previously, `##` had no special handling, and now we do change it. However, I'm not really sure what we can do here to improve this, and I can't think of any cases where `##` would likely be correct in a code block, though of course I could be wrong.

Fixes #41783.
2017-05-07 10:52:26 +00:00
bors
5b31bf8511 Auto merge of #41668 - kennytm:fix-issue-41652, r=jonathandturner
Fix issue #41652

Fix issue #41652. Don't print anything in `render_source_line()` if no source code is given.

(cc @jonathandturner #34789)
2017-05-07 00:41:30 +00:00
Mark Simulacrum
ffe12b1274 Allow # to appear in rustdoc code output.
"##" at the start of a trimmed rustdoc line is now cut to "#" and then
shown. If the user wanted to show "##", they can type "###".
2017-05-06 18:07:04 -06:00
acdenisSK
bb34a3e16b Update the .stderr file for the "an" changes 2017-05-06 18:49:01 +02:00