Commit graph

10905 commits

Author SHA1 Message Date
bors
9a196aa173 Auto merge of #27283 - arielb1:free-self-2, r=eddyb
Fixes #27281

r? @eddyb
2015-07-26 07:58:43 +00:00
Ariel Ben-Yehuda
11aa8756c1 Substitute free lifetimes in Self::T
Fixes #27281
2015-07-25 21:25:51 +03:00
bors
7276d8b761 Auto merge of #27258 - nikomatsakis:issue-26952, r=eddyb
Correct regression in type-inference caused by failing to reconfirm that
the object trait matches the required trait during trait selection.  The
existing code was checking that the object trait WOULD match (in a
probe), but never executing the match outside of a probe.

This corrects various regressions observed in the wild, including
issue #26952. Fixes #26952.

r? @eddyb 
cc @frankmcsherry
2015-07-25 18:16:51 +00:00
bors
e333e6a0dc Auto merge of #26630 - eefriedman:recursive-static, r=pnkfelix
***Edit: Fixed now.*** I'm pretty sure the way I'm using LLVMReplaceAllUsesWith here is
unsafe... but before I figure out how to fix that, I'd like a
reality-check: is this actually useful?
2015-07-25 14:50:13 +00:00
bors
04badd6a97 Auto merge of #27253 - bossmc:unbalanced-delimiters-cause-ice, r=nikomatsakis
This introduces a test for #23389 and improves the error behaviour to treat the malformed LHS as an error, not a compiler bug.

The parse phase that precedes the call to `check_lhs_nt_follows` could possibly be enhanced to police the format itself (which the old code suggests was the original intention), but I'm not sure that's any nicer than just parsing the matcher as generic rust code and then policing the specific requirements for being a macro matcher afterwards (as this does).

Fixes #23389
2015-07-25 11:20:15 +00:00
Eli Friedman
0eea0f6e90 Allow writing types which "can't" be instantiated.
The borrow checker doesn't allow constructing such a type at runtime
using safe code, but there isn't any reason to ban them in the type checker.

Included in this commit is an example of a neat static doubly-linked list.

Feature-gated under the static_recursion gate to be on the safe side, but
there are unlikely to be any reasons this shouldn't be turned on by
default.
2015-07-24 19:18:16 -07:00
Eli Friedman
742e1242d9 Add static_recursion feature gate. 2015-07-24 19:17:58 -07:00
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
Niko Matsakis
4726bb46b0 Correct regression in type-inference caused by failing to reconfirm that
the object trait matches the required trait during trait selection.  The
existing code was checking that the object trait WOULD match (in a
probe), but never executing the match outside of a probe.

This corrects various regressions observed in the wild, including
issue #26952. Fixes #26952.
2015-07-24 12:24:37 -04: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
c9ef1a5c19 Auto merge of #27208 - alexcrichton:msvc-less-dllimport, r=brson
Currently you can hit a link error on MSVC by only referencing static items from
a crate (no functions for example) and then link to the crate statically (as all
Rust crates do 99% of the time). A detailed investigation can be found [on
github][details], but the tl;dr is that we need to stop applying dllimport so
aggressively.

This commit alters the application of dllimport on constants to only cases where
the crate the constant originated from will be linked as a dylib in some output
crate type. That way if we're just linking rlibs (like the motivation for this
issue) we won't use dllimport. For the compiler, however, (which has lots of
dylibs) we'll use dllimport.

[details]: https://github.com/rust-lang/rust/issues/26591#issuecomment-123513631

cc #26591
2015-07-24 05:13:39 +00: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
Andy Caldwell
93dd75a509 Fix license statement 2015-07-24 01:39:47 +00:00
Andy Caldwell
610d1e312f Add test for issue #23389 2015-07-24 01:09:52 +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
Felix S. Klock II
565df576e8 Update suggestion from parenthesized-box-expr-message to reflect new output spacing. 2015-07-23 16:02:27 +02:00
Felix S. Klock II
5682e2a1aa fix pretty printing tests by opting into the features that the expanded code needs. 2015-07-23 16:02:27 +02: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
5f0c9983f6 Rollup merge of #27158 - apasel422:issue-14382, r=alexcrichton
closes #14382
2015-07-22 12:56:50 -04:00
Steve Klabnik
2375ef5327 Rollup merge of #27154 - apasel422:issue-10436, r=Gankro
closes #10436
2015-07-22 12:56:49 -04:00
Steve Klabnik
cb5d9a311d Rollup merge of #27147 - apasel422:issue-19404, r=alexcrichton
closes #19404
2015-07-22 12:56:48 -04:00
Steve Klabnik
70bbdd7eb6 Rollup merge of #27146 - apasel422:issue-14229, r=alexcrichton
closes #14229
2015-07-22 12:56:48 -04:00
Steve Klabnik
0ac7438c9b Rollup merge of #27140 - dotdash:test-26468, r=luqmana
The fix for #26468 was made upstream and landed with the LLVM update in #27076.

Closes #26468
2015-07-22 12:56:48 -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
505cd8a3cc Add test of placement-in syntax, analogous to new-box-syntax.rs 2015-07-22 15:34:01 +02:00
Felix S. Klock II
7a700341e7 refine set of allowed warnings in new-box-syntax.rs test. 2015-07-22 15:34:01 +02:00
Felix S. Klock II
a81f88d4d6 Add actual use of the struct Structure lying dormant in new-box-syntax.rs.
The original test program exercised the (garbage-collected heap)
allocation form `box (GC) ...`, feeding an instance of `Structure` in
as the expression. This obviously went away when `GC` went away, but
there's no reason for us not to include an appropriate unit test here
for the same form, just for heap-allocated instances of `Structure`.
2015-07-22 15:34:01 +02: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
e0b44797ce Add new feature gate opt-in necessary for new-box-syntax.rs. 2015-07-22 15:34:00 +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
a9d79978b6 Update the intrinsic-move-val.rs test to reflect its newer signature. 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
Alex Crichton
a0efd3a3d9 trans: Be a little more picky about dllimport
Currently you can hit a link error on MSVC by only referencing static items from
a crate (no functions for example) and then link to the crate statically (as all
Rust crates do 99% of the time). A detailed investigation can be found [on
github][details], but the tl;dr is that we need to stop applying dllimport so
aggressively.

This commit alters the application of dllimport on constants to only cases where
the crate the constant originated from will be linked as a dylib in some output
crate type. That way if we're just linking rlibs (like the motivation for this
issue) we won't use dllimport. For the compiler, however, (which has lots of
dylibs) we'll use dllimport.

[details]: https://github.com/rust-lang/rust/issues/26591#issuecomment-123513631

cc #26591
2015-07-21 21:31:25 -07:00
bors
90904204d6 Auto merge of #27185 - pnkfelix:test-cyclic-collections, r=alexcrichton
This test attempts to exercise cyclic structure in much of `std::collections`

(as much as is possible; e.g. things like `EnumSet` and `BitVec` do not really support carrying references at all, so trying to represent cyclic structure within them dooes not really make sense.)

This work should land before we make future revisions to `dropck`; that is, I am attempting to catch potential regressions to cases where we supported cyclic structure circa Rust 1.2.
2015-07-22 04:21:46 +00:00
bors
39a780dcbe Auto merge of #27093 - Manishearth:closure-label-shadow, r=pnkfelix
Fixes #25343

To be honest I'm not sure if this is the right fix (I haven't yet fully understood the code),
but it seems to work. I'll look closer at the code when I have some time, in the meantime if this
is the right fix it would be nice to get verification from someone who does understand the code 😄

r? @pnkfelix
2015-07-21 22:23:34 +00:00
Andrew Paseltiner
18f115c2bb update compile-fail test for #21174 to account for #27127 2015-07-21 16:58:26 -04:00
Andrew Paseltiner
e6d8434cb3 add test for #14382
closes #14382
2015-07-21 14:39:40 -04:00