Commit graph

11336 commits

Author SHA1 Message Date
Simonas Kazlauskas
77e9228b4a Improve invalid recursive types diagnostic 2015-07-29 01:57:24 +03:00
bors
55ede7ed8e Auto merge of #27234 - oli-obk:move_get_name_get_ident_to_impl, r=eddyb
this has quite some fallout. but also made lots of stuff more readable imo

[breaking-change] for plugin authors
2015-07-28 21:14:28 +00:00
Ariel Ben-Yehuda
757b0c176f prohibit the lhs of an @-pattern being a constant
as this breaks code that worked under some conditions, this is a
[breaking-change]

Fixes #27033
Fixes #27077
2015-07-28 19:51:08 +03:00
Ariel Ben-Yehuda
bd01175234 clarify the parenthetical notation stability error message
This also calls the right API, which e.g. prevents a suggestion
for #![feature(unboxed_closures)] on stable.

Fixes #26970
2015-07-28 19:21:24 +03:00
Oliver Schneider
00a5e66f81 remove get_ident and get_name, make as_str sound 2015-07-28 18:07:20 +02:00
bors
661a5ad38e Auto merge of #26173 - pnkfelix:fsk-trans-nzmove-take3, r=nikomatsakis
Add dropflag hints (stack-local booleans) for unfragmented paths in trans.  Part of #5016.

Added code to maintain these hints at runtime, and to conditionalize drop-filling and calls to destructors.

In this early stage of my incremental implementation strategy, we are using hints, so we are always free to leave out a flag for a path -- then we just pass `None` as the dropflag hint in the corresponding schedule cleanup call. But, once a path has a hint, we must at least maintain it: i.e. if the hint exists, we must ensure it is never set to "moved" if the data in question might actually have been initialized. It remains sound to conservatively set the hint to "initialized" as long as the true drop-flag embedded in the value itself is up-to-date.

I hope the commit series has been broken up to be readable; most of the commits in the series should build (though I did not always check this).

----

Oh, I think this technically qualifies as a:
[breaking-change]
because it removes drop-filling in some cases where one could previously observe it. That should only affect `unsafe` code; no safe code should be able to inspect whether the drop-fill was present or not. For an example of code that needed to change to account for this, see commit a81c24ae0216ab47df59acd724f8a33124fb6d97 (a unit test of the `move_val_init` intrinsic).  I have not encountered actual code that needed to be updated to account for the change, since this should only be skipping the drop-filling on *moved* values, not on dropped one, and so even types that use `unsafe_no_drop_flag` should be unchanged by this particular PR. (Their time will come later.)
2015-07-28 15:15:00 +00:00
Felix S. Klock II
ff14eaf054 Revise intrinsic-move-val test to not require knowledge of whether filling drop is in use. 2015-07-28 16:15:05 +02:00
bors
ec49d01c88 Auto merge of #27330 - alexcrichton:reenable-lto-syntax-extension, r=huonw
The functionality this was testing was removed somewhere along the line, and
this commit restores what it was testing.

Closes #20586
2015-07-28 12:53:28 +00:00
Björn Steinbrink
218eccfa4e Fix de-deduplication for closure debuginfo
Closure variables represent the closure environment, not the closure
function, so the identifier used to ensure that the debuginfo is unique
for each kind of closure needs to be based on the closure upvars and not
the function signature.
2015-07-28 10:58:22 +02:00
bors
5b72fa42d4 Auto merge of #27309 - eddyb:snapshot-infdef, r=alexcrichton
FreeBSD i386 snapshot is missing, failed tests (possibly spurious).
r? @alexcrichton
2015-07-28 08:51:21 +00:00
bors
bbda6f9cca Auto merge of #27304 - alexcrichton:revert-picky-dllimport, r=brson
This reverts commit a0efd3a3d9.

This commit caused a lot of unintended breakage for many Cargo builds. The problem is that Cargo compiles build scripts with `-C prefer-dynamic`, so the standard library is always dynamically linked and hence any imports need to be marked with `dllimport`. Dependencies of build scripts, however, were compiled as rlibs and did not have their imports tagged with `dllimport`, so build scripts would fail to link.

While known that this situation would break, it was unknown that it was a common scenario in the wild. As a result I'm just reverting these heuristics for now.
2015-07-27 18:09:22 +00:00
Alex Crichton
f01119c221 test: Fix lto-syntax-extension
The functionality this was testing was removed somewhere along the line, and
this commit restores what it was testing.

Closes #20586
2015-07-27 10:42:04 -07:00
Eduard Burtescu
cc09b1a08c Turn on box(PLACE) expr deprecation warning post-snapshot. 2015-07-27 18:11:43 +03:00
bors
d019a49ac8 Auto merge of #27315 - eefriedman:improper-ctypes-void-ret, r=alexcrichton
Fixes issue #27302.
2015-07-27 11:49:45 +00:00
Eli Friedman
21b514ff30 In improper-ctypes lint, handle functions which explicitly return ().
Fixes issue #27302.
2015-07-26 19:21:53 -07:00
Eduard Burtescu
c46f913244 typeck: handle unsized structs in type hints by recursing into their last field. 2015-07-27 00:31:08 +03:00
bors
cf7e825ecd Auto merge of #27272 - eefriedman:closure-const-crash, r=nikomatsakis
Fixes issue #27268.

r? @nikomatsakis
2015-07-26 17:51:30 +00:00
Alex Crichton
316e1b0d41 Revert "trans: Be a little more picky about dllimport"
This reverts commit a0efd3a3d9.
2015-07-26 10:19:11 -07:00
bors
a5c12f4e39 Auto merge of #26870 - jroesch:default-typaram-fallback, r=nikomatsakis
This PR completes [RFC 213](https://github.com/rust-lang/rfcs/blob/master/text/0213-defaulted-type-params.md) by allowing default type parameters to influence inference. This is almost certainly a breaking change due to interactions between default type parameters and the old fallback algorithm used for integral and floating point literals.

The error messages still require polish but I wanted to get early review and feedback from others on the the changes, error messages, and test cases. I also imagine we will want to run anywhere from 1-3 versions of this on crater and evaluate the impact, and it would be best to get that ball rolling. 

The only outstanding issue I'm aware of is that type alias defaults don't work. It seems this may require significant restructuring, since during inference type aliases have already been expanded. @nikomatsakis might be able to provide some clarity here.

r? @nikomatsakis 

cc @eddyb @Gankro @aturon @brson
2015-07-26 10:39:18 +00:00
bors
9a196aa173 Auto merge of #27283 - arielb1:free-self-2, r=eddyb
Fixes #27281

r? @eddyb
2015-07-26 07:58:43 +00:00
Jared Roesch
55621b6199 Add feature gate 2015-07-25 20:05:42 -07:00
Jared Roesch
9da04b2bd1 Make default error reporting deterministic 2015-07-25 19:57:59 -07:00
Jared Roesch
d732f7323b Add cross-crate error message tests 2015-07-25 19:57:59 -07:00
Jared Roesch
ed3fbba797 Fix error message spans 2015-07-25 19:57:59 -07:00
Jared Roesch
e85787102f Clean up test cases 2015-07-25 19:57:58 -07:00
Jared Roesch
49eb2c6763 Remove defaults table and attach defaults directly to tyvars 2015-07-25 19:57:58 -07:00
Jared Roesch
bbdca2c8ad Correctly collect defaults from type alises in astconv 2015-07-25 19:57:57 -07:00
Jared Roesch
bbcb13da88 Implement Default TyParam fallback
This patch allows type parameter defaults to influence type inference. This is a possible breaking change since it effects the way type inference works and will have different behavior when mixing defaults and literal fallback.
2015-07-25 19:57:57 -07: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
Eli Friedman
eefeba08f8 Fix an ICE with a closure in a constant.
Fixes issue #27268.
2015-07-24 17:00:37 -07:00
Ariel Ben-Yehuda
bfbc7bc45d handle all type variants correctly in dropck
This fixes a few soundness bugs in dropck, so to anyone who relied on them,
this is a
[breaking-change]

Fixes #24086.
Fixes #25389.
Fixes #25598.
Fixes #25750.
Fixes #26641.
Fixes #26657.
Fixes #27240.
Fixes #27241.
2015-07-24 23:46:17 +03: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