Commit Graph

4264 Commits

Author SHA1 Message Date
Eli Friedman
8ebf95257b Allow recursive static variables.
There isn't any particularly good reason for this restriction, so just
get rid of it, and fix trans to handle this case.
2015-07-24 19:17:45 -07:00
bors
82d40cb2ba Auto merge of #27265 - steveklabnik:rollup, r=steveklabnik
- Successful merges: #27137, #27145, #27177, #27193, #27212, #27220, #27229, #27235, #27238, #27244, #27251
- Failed merges:
2015-07-24 19:04:31 +00:00
Steve Klabnik
628654b198 Rollup merge of #27244 - Detegr:master, r=eddyb
Hi all.
This is my first contribution to Rust and fixes an issue causing an invalid error message to be presented to the user when using unit struct as length of a repeat expression, issue #27008. The solution is based on suggestions by @oli-obk, but as I'm a complete newbie to this, I have no clue if I got them right :)
The biggest concern I have is that if the `NodeId` I'm returning is the correct one or not (it's not meaningful in this case but I think it would be nice to get it right).
2015-07-24 14:56:04 -04:00
bors
5e6b534362 Auto merge of #27087 - nikomatsakis:closure-exploration, r=nrc
Refactors the "desugaring" of closures to expose the types of the upvars. This is necessary to be faithful with how actual structs work. The reasoning of the particular desugaring that I chose is explained in a fairly detailed comment.

As a side-effect, recursive closure types are prohibited unless a trait object intermediary is used. This fixes #25954 and also eliminates concerns about unrepresentable closure types that have infinite size, I believe. I don't believe this can cause regressions because of #25954.

(As for motivation, besides #25954 etc, this work is also intended as refactoring in support of incremental compilation, since closures are one of the thornier cases encountered when attempting to split node-ids into item-ids and within-item-ids. The goal is to eliminate the "internal def-id" distinction in astdecoding. However, I have to do more work on trans to really make progress there.)

r? @nrc
2015-07-24 16:36:32 +00:00
bors
9413a926fc Auto merge of #27215 - pnkfelix:fsk-placer-take-5-just-in, r=nikomatsakis
Macro desugaring of `in PLACE { BLOCK }` into "simpler" expressions following the in-development "Placer" protocol.

Includes Placer API that one can override to integrate support for `in` into one's own type.  (See [RFC 809].)

[RFC 809]: https://github.com/rust-lang/rfcs/blob/master/text/0809-box-and-in-for-stdlib.md

Part of #22181

Replaced PR #26180.

Turns on the `in PLACE { BLOCK }` syntax, while leaving in support for the old `box (PLACE) EXPR` syntax (since we need to support that at least until we have a snapshot with support for `in PLACE { BLOCK }`.

(Note that we are not 100% committed to the `in PLACE { BLOCK }` syntax.  In particular I still want to play around with some other alternatives.  Still, I want to get the fundamental framework for the protocol landed so we can play with implementing it for non `Box` types.)

----

Also, this PR leaves out support for desugaring-based `box EXPR`.  We will hopefully land that in the future, but for the short term there are type-inference issues injected by that change that we want to resolve separately.
2015-07-24 10:12:20 +00:00
Niko Matsakis
f8931a7933 Add regression test for #25368. Fixes #25368. 2015-07-24 04:53:43 -04:00
Niko Matsakis
37aad77ce2 Add regression test for #25954 (cyclic closure type), which is now
impossible.
2015-07-24 04:53:43 -04:00
Niko Matsakis
7ba288dced Unify the upvar variables found in closures with the actual types of the
upvars after analysis is done. Remove the `closure_upvars` helper and
just consult this list of type variables directly.
2015-07-24 04:53:41 -04:00
bors
68e0d13bfd Auto merge of #26583 - eefriedman:lint-ffi, r=nrc
Makes the lint a bit more accurate, and improves the quality of the diagnostic
messages by explicitly returning an error message.
2015-07-24 02:40:42 +00:00
Eli Friedman
6fa17b43d3 Rewrite the improper_ctypes lint.
Makes the lint a bit more accurate, and improves the quality of the diagnostic
messages by explicitly returning an error message.

The new lint is also a little more aggressive: specifically, it now
rejects tuples, and it recurses into function pointers.
2015-07-23 17:03:04 -07:00
Felix S. Klock II
d066a7b506 update compile-fail/pushpop-unsafe-rejects.rs to reflect switch from saturated to checked arith. 2015-07-23 23:39:28 +02:00
Antti Keränen
e981311ec2 eval_const_expr_partial now returns ConstVal::Struct instead of None for unit-struct path expressions. Fixes #27008 2015-07-23 23:23:56 +03:00
Eli Friedman
b2213498c4 Resolve lifetime parameters for foreign functions.
Pretty straightforward; just need to make sure to explicitly handle
the generic parameters of each ast::ForeignItemFn.

Fixes #26587.
2015-07-22 22:37:20 -07:00
Steve Klabnik
5f04b1b384 Rollup merge of #27202 - apasel422:issue-21174, r=alexcrichton 2015-07-22 12:56:52 -04:00
Steve Klabnik
db0e0efa78 Rollup merge of #27131 - apasel422:issue-20162, r=arielb1
closes #20162
2015-07-22 12:56:48 -04:00
Felix S. Klock II
9d6cc05a06 uncomment feature-gate testing for in PLACE BLOCK now that its in the parser. 2015-07-22 15:34:01 +02:00
Felix S. Klock II
80465334aa Update issue-14084.rs test to reflect changes to error output. 2015-07-22 15:34:00 +02:00
Felix S. Klock II
4a5fb4bd2a Add necessary feature gate opt-in for the pushpop_unsafe test. 2015-07-22 15:34:00 +02:00
Felix S. Klock II
bb952358aa Factor feature gate tests for box syntax into two separate files.
The two tests are separate since the current implementation performs
the feature gate checks at distinct phases in the compilation, with an
`abort_if_errors` calls separating them.
2015-07-22 15:34:00 +02:00
Felix S. Klock II
b325e4f28e Add feature-gates for desugaring-based box and placement-in.
update test/compile-fail/feature-gate-box-expr.rs to reflect new feature gates.

Part of what lands with Issue 22181.
2015-07-22 15:33:59 +02:00
Felix S. Klock II
1829fa5199 Hack for "unsafety hygiene" -- push_unsafe! and pop_unsafe!.
Even after expansion, the generated expressions still track depth of
such pushes (i.e. how often you have "pushed" without a corresponding
"pop"), and we add a rule that in a context with a positive
`push_unsafe!` depth, it is effectively an `unsafe` block context.

(This way, we can inject code that uses `unsafe` features, but still
contains within it a sub-expression that should inherit the outer
safety checking setting, outside of the injected code.)

This is a total hack; it not only needs a feature-gate, but probably
should be feature-gated forever (if possible).

ignore-pretty in test/run-pass/pushpop-unsafe-okay.rs
2015-07-22 15:33:59 +02:00
bors
d4d4206e56 Auto merge of #26683 - eefriedman:const-eval-hint, r=pnkfelix
The "hint" mechanism is essentially used as a workaround to compute
types for expressions which have not yet been type-checked. This
commit clarifies that usage, and limits the effects to the places
where it is currently necessary.

Fixes #26210.
2015-07-22 12:49:06 +00:00
Andrew Paseltiner
18f115c2bb update compile-fail test for #21174 to account for #27127 2015-07-21 16:58:26 -04:00
bors
5dbddfb210 Auto merge of #26935 - oli-obk:const_val_description, r=eddyb
r? @eddyb 

Adding new variants is annoying as one needs to modify all these places that **don't** handle the new variant.

I chose not to use `Display` as I don't think it is appropriate.
2015-07-21 16:14:46 +00:00
bors
2afe47d168 Auto merge of #27160 - brson:revdoc, r=huonw
This reverts commit 00130cff99.

As mentioned in a regression report[1], this caused a notable amount
of breakage. Because there's a plan to mitigate[2] this type of
breakage, I'm reverting this until then.

[1]: https://internals.rust-lang.org/t/new-crater-reports-1-1-stable-vs-beta-2015-07-10-and-nightly-2015-07-10/2358
[2]: https://github.com/rust-lang/rfcs/pull/1193
2015-07-21 11:32:54 +00:00
Nick Cameron
bf34187a2f Test 2015-07-21 21:55:19 +12:00
bors
2fe870a5a7 Auto merge of #26831 - arielb1:lifetime-fixes, r=nikomatsakis
r? @nikomatsakis
2015-07-20 19:46:46 +00:00
Brian Anderson
9191a78955 Revert "Fix missing_docs lint for const and static."
This reverts commit 00130cff99.

As mentioned in a regression report[1], this caused a notable amount
of breakage.  Because there's a plan to mitigate[2] this type of
breakage, I'm reverting this until then.

[1]: https://internals.rust-lang.org/t/new-crater-reports-1-1-stable-vs-beta-2015-07-10-and-nightly-2015-07-10/2358
[2]: https://github.com/rust-lang/rfcs/pull/1193
2015-07-20 10:44:46 -07:00
bors
18557500cb Auto merge of #27026 - nagisa:overflowing-unsigned, r=pnkfelix
This commit fixes the negate_unsigned feature gate to appropriately
account for inferred variables.

This is technically a [breaking-change], but I’d consider it a bug fix.

cc @brson for your relnotes.

Fixes https://github.com/rust-lang/rust/issues/24676
Fixes #26840 
Fixes https://github.com/rust-lang/rust/issues/25206
2015-07-20 16:38:33 +00:00
bors
32a12c8dd0 Auto merge of #27118 - apasel422:issue-20825, r=alexcrichton
closes #20825
2015-07-20 10:20:58 +00:00
Simonas Kazlauskas
0ca8e4994e Convert negate_unsigned feature gate to a warning 2015-07-20 12:24:16 +03:00
bors
ef04b07239 Auto merge of #27120 - apasel422:associated-item-error, r=arielb1
Previously, these would both be labeled as methods.
2015-07-20 01:46:20 +00:00
bors
be23d44a53 Auto merge of #27065 - marcusklaas:loop-label, r=nrc
This closes https://github.com/rust-lang/rust/issues/27042.

I'd love to know if there's a way to make a regression test for this!
2015-07-20 00:13:22 +00:00
Ariel Ben-Yehuda
34309cdf12 implement 'a:'static region bounds
Fixes #22863.
2015-07-20 00:16:35 +03:00
Andrew Paseltiner
60734a65de add test for #15919
closes #15919
2015-07-19 17:06:13 -04:00
Andrew Paseltiner
b684826cab add test for #20162
closes #20162
2015-07-19 15:39:26 -04:00
Andrew Paseltiner
ce856a55f6 add separate errors for out-of-place associated consts and types
Previously, these would both be labeled as methods.
2015-07-19 15:32:24 -04:00
Andrew Paseltiner
7d984ef6df split "has incompatible type for trait" errors into multiple lines
closes #21332
2015-07-18 21:14:36 -04:00
Andrew Paseltiner
adf753e529 add tests for #20825
closes #20825
2015-07-18 18:03:30 -04:00
bors
a27fed7cbd Auto merge of #27096 - apasel422:issue-26217, r=nikomatsakis
closes #26217

r? @nikomatsakis
2015-07-18 11:02:58 +00:00
Marcus Klaas
12963606d0 Include label in the span of loops 2015-07-18 11:53:55 +02:00
bors
3f50dca386 Auto merge of #27085 - Ryman:gh17546, r=alexcrichton
This also changes how variant values are printed in errors, they are no
longer printed in their parent scope. As far as I can tell, this is
leftover from pre-namespacing of enums.

Closes #17546.
2015-07-18 06:02:50 +00:00
Eli Friedman
6bdfb05347 Clarify the usage of "hints" in const_eval.
The "hint" mechanism is essentially used as a workaround to compute
types for expressions which have not yet been type-checked. This
commit clarifies that usage, and limits the effects to the places
where it is currently necessary.

Fixes #26210.
2015-07-17 18:29:34 -07:00
Andrew Paseltiner
27188bbefe treat for<'a> T: 'a as T: 'static
closes #26217
2015-07-17 15:41:34 -04:00
bors
e05ac3938b Auto merge of #27045 - nikomatsakis:better-object-defaults-error, r=pnkfelix
Transition to the new object lifetime defaults, replacing the old defaults completely.

r? @pnkfelix 

This is a [breaking-change] as specified by [RFC 1156][1156] (though all cases that would break should have been receiving warnings starting in Rust 1.2). Types like `&'a Box<Trait>` (or `&'a Rc<Trait>`, etc) will change from being interpreted as `&'a Box<Trait+'a>` to `&'a Box<Trait+'static>`. To restore the old behavior, write the `+'a` explicitly. For example, the function:


```rust
trait Trait { }
fn foo(x: &Box<Trait>) { ... }
```

would be rewritten as:

```rust
trait Trait { }
fn foo(x: &'a Box<Trait+'a>) { ... }
```

if one wanted to preserve the current typing.

[1156]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md
2015-07-17 18:35:50 +00:00
Kevin Butler
b416762a5f Improve error message for variant values used as types
This also changes how variant values are printed in errors, they are no
longer printed in their parent scope. As far as I can tell, this is
leftover from pre-namespacing of enums.

Closes #17546.
2015-07-17 15:24:02 +01:00
Manish Goregaokar
ef9b9cebe3 Rollup merge of #25993 - nham:fix_23969, r=nikomatsakis
Adds two error codes, one for duplicate associated constants and one for types. I'm not certain these should each have their own code, but E0201 is already solely for duplicate associated functions so at least it kinda matches. This will lead to somewhat redundant error explanations, but that's nothing new!

Fixes #23969.
2015-07-17 19:06:23 +05:30
Manish Goregaokar
7c202a39c1 Fixup test 2015-07-16 16:37:41 +05:30
Manish Goregaokar
b64af26625 Rollup merge of #27018 - arielb1:enum-update, r=eddyb
Fixes #26948.

r? @eddyb
2015-07-16 16:37:39 +05:30
Manish Goregaokar
31d6716d9c Rollup merge of #26988 - frewsxcv:regression-tests, r=alexcrichton
"body": null,
2015-07-16 16:37:39 +05:30