Commit Graph

35725 Commits

Author SHA1 Message Date
Nick Cameron
e55b793ddd save-analysis: give the correct fully qualified name for fields in struct variants 2014-12-28 11:33:29 +13:00
Nick Cameron
35a6f6247b Fix spans for use view statements and their treatment in save-analysis 2014-12-28 10:28:01 +13:00
bors
0201334439 auto merge of #20244 : japaric/rust/bc-no-move, r=nikomatsakis
closes #19141
closes #20193
closes #20228

---

Currently whenever we encounter `let f = || {/* */}`, we *always* type check the RHS as a *boxed* closure. This is wrong when the RHS is `move || {/* */}` (because boxed closures can't capture by value) and generates all sort of badness during trans (see issues above). What we *should* do is always type check `move || {/* */}` as an *unboxed* closure, but ~~I *think* (haven't tried)~~ (2) this is not feasible right now because we have a limited form of kind (`Fn` vs `FnMut` vs `FnOnce`) inference that only works when there is an expected type (1).

In this PR, I've chosen to generate a type error whenever `let f = move || {/* */}` is encountered. The error asks the user to annotate the kind of the unboxed closure (e.g. `move |:| {/* */}`). Once annotated, the compiler will type check the RHS as an unboxed closure which is what the user wants.

r? @nikomatsakis 

(1) AIUI it only triggers in this scenario:

``` rust
fn is_uc<F>(_: F) where F: FnOnce() {}

fn main() {
    is_uc(|| {});  // type checked as unboxed closure with kind `FnOnce`
}
```

(2) I checked, and it's not possible because `check_unboxed_closure` expects a `kind` argument, but we can't supply that argument in this case (i.e. `let f = || {}`, what's the kind?). We could force the `FnOnce` kind in that case, but that's ad hoc. We should try to infer the kind depending on how the closure is used afterwards, but there is no inference mechanism to do that (at least, not right now).
2014-12-27 15:28:36 +00:00
bors
4a4c89c7a4 auto merge of #20119 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakis
More work on opt-in built in traits. `Send` and `Sync` are not opt-in, `OwnedPtr` renamed to `UniquePtr` and the `Send` and `Sync` traits are now unsafe.

NOTE: This likely needs to be rebased on top of the yet-to-land snapshot.

r? @nikomatsakis 

cc #13231
2014-12-27 13:11:48 +00:00
Flavio Percoco
1a73ccc8db Make trait's impls consistent for unix/windows 2014-12-27 13:00:20 +01:00
Flavio Percoco
11f71ec701 Implement Sync/Send for windows' UnixStream 2014-12-27 12:40:25 +01:00
bors
9be54be15b auto merge of #20238 : barosl/rust/regex-repeater-panic, r=huonw
This bug has also affected the `regex!` macro, which has caused an ICE when such an invalid expression is provided.

Fixes #20208.
2014-12-27 09:21:48 +00:00
bors
16e4fef9bf auto merge of #20158 : nikomatsakis/rust/fn-inference-refactor, r=eddyb
Various refactorings simplifying the mem-categorization and regionck interface. This is working towards an improvement for closure-and-upvar-mode inference.

r? @eddyb
2014-12-27 06:58:35 +00:00
bors
18842f89f0 auto merge of #20143 : csouth3/rust/vecmap-reserve, r=Gankro
Implement `reserve_len` and `reserve_len_exact` for `VecMap` in accordance with rust-lang/rfcs#509.
2014-12-27 04:41:53 +00:00
bors
3c60bc02ce auto merge of #19254 : nick29581/rust/dxr-glob, r=pcwalton
There is also some work here to make resolve a bit more stable - it no longer overwrites a specific import with a glob import.

r?
2014-12-27 00:48:41 +00:00
Nick Cameron
4b92a5a229 Rebasing changes 2014-12-27 12:30:36 +13:00
Flavio Percoco
f5d619caf9 Implement Sync/Send for windows TCP types 2014-12-26 23:01:47 +01:00
bors
c06edbad34 auto merge of #20133 : apasel422/rust/binary_heap, r=alexcrichton
Some more tidying up.
2014-12-26 21:51:48 +00:00
Nick Cameron
dbde7419cc Fix fallout 2014-12-27 09:55:25 +13:00
Nick Cameron
df0c6d9385 save-analysis: emit names of items that a glob import actually imports.
There is also some work here to make resolve a bit more stable - it no longer overwrites a specific import with a glob import.

[breaking-change]

Import shadowing of single/list imports by globs is now forbidden. An interesting case is where a glob import imports a re-export (`pub use`) of a single import. This still counts as a single import for the purposes of shadowing .You can usually fix any bustage by re-ordering such imports. A single import may still shadow (override) a glob import or the prelude.
2014-12-27 09:55:25 +13:00
Flavio Percoco
bb315f25f8 Implement RaceBox for StdinReader 2014-12-26 17:26:33 +01:00
Flavio Percoco
52072dec0f Add a Racy type to bench tests 2014-12-26 17:26:33 +01:00
Flavio Percoco
29b3698f7f Implement Sync/Send for ArcInner and Weak 2014-12-26 17:26:33 +01:00
Flavio Percoco
84a6684c65 Impl Sync/Send for Rawlink 2014-12-26 17:26:33 +01:00
Flavio Percoco
d35ebcb483 Make Barrier and Condvar Sync/Send 2014-12-26 17:26:33 +01:00
Flavio Percoco
607f60712c Keep track of the whole error chain 2014-12-26 17:26:33 +01:00
Flavio Percoco
8818693496 Relax Arc bounds don't require Sync+Send
Besides the above making sense, it'll also allow us to make `RacyCell`
private and use UnsafeCell instead.
2014-12-26 17:26:33 +01:00
Flavio Percoco
7df17a2868 Rename UniquePtr to Unique
Mostly following the convention in RFC 356
2014-12-26 17:26:33 +01:00
Flavio Percoco
51d2fefd91 Implement Sync for some windows sys types 2014-12-26 17:26:33 +01:00
Flavio Percoco
e2116c8fba Move RacyCell to std::comm
RacyCell is not exactly what we'd like as a final implementation for
this. Therefore, we're moving it under `std::comm` and also making it
private.
2014-12-26 17:26:33 +01:00
Flavio Percoco
f436f9ca29 Make Send and Sync traits unsafe 2014-12-26 17:26:33 +01:00
Flavio Percoco
686ce664da Rename OwnedPtr to UniquePtr 2014-12-26 17:26:33 +01:00
Flavio Percoco
fb803a8570 Require types to opt-in Sync 2014-12-26 17:26:32 +01:00
Jorge Aparicio
5b0c8acd69 typeck: boxed closures can't capture by value
closes #19141
closes #20193
closes #20228
2014-12-26 11:20:34 -05:00
bors
bd3cf4c05f auto merge of #20218 : alexcrichton/rust/jemalloc-sections, r=luqmana
It's quite possible that small programs don't use all of jemalloc, and building
with -ffunction-sections and -fdata-sections allows the linker (via
--gc-sections) to strip out all unused code at link time. This decreases the
size of a "hello world" executable for me from 716K to 482K with no measurable
impact on link time. After this patch jemalloc is still the largest portion of
our hello world executables, but this helps cut down on the size at least
somewhat!
2014-12-26 06:31:47 +00:00
Barosl Lee
0bd8534ca7 Prevent Regex::new() from panicking when a non-AST item is repeated
This bug has also affected the regex! macro, which has caused an ICE
when such an invalid expression is provided.

Fixes #20208.
2014-12-26 14:02:51 +09:00
bors
c43efee6de auto merge of #20183 : japaric/rust/doctests, r=alexcrichton
#20075 introduced a bug where unmarked code fences weren't considered as doctests. This PR fixes the logic.

---

This passed `check-stage1-rustdoc`, and I manually checked that:

``` rust
//! ```
//! println!("Hello")
//! ```
//!
//! ``` rust
//! println!("Hello")
//! ```
//!
//! ``` sh
//! println!("Hello")
//! ```
//!
//! ``` ignore
//! println!("Hello")
//! ```
```

Generated:

``` rust
running 3 tests
test _2 ... ignored
test _0 ... ok
test _1 ... ok
```

I'd love to add that as a test, but I have no idea how to do that with our testing infrastructure. If anyone knows how, do let me know!

r? @alexcrichton 
@seanmonstar feedback?
2014-12-26 03:01:42 +00:00
bors
5ba6102657 auto merge of #20180 : jroesch/rust/clean-where-predicate, r=alexcrichton
Add support for all variants of ast::WherePredicate in clean/mod.rs. Fixes #20048, but will need modification when EqualityPredicates are fully implemented in #20041.
2014-12-25 18:01:36 +00:00
bors
f673e9841f auto merge of #20167 : michaelwoerister/rust/for-loop-var, r=alexcrichton
... really this time `:)`

I went for the simpler fix after all since it turned out to become a bit too complicated to extract the current iteration value from its containing `Option` with the different memory layouts it can have. It's also what we already do for match bindings.

I also extended the new test case to include the "simple identifier" case.

Fixes #20127, fixes #19732
2014-12-25 14:21:47 +00:00
Niko Matsakis
4856456dd7 Move mem-categorization more things to use TYPER for the method origin 2014-12-25 07:04:07 -05:00
Niko Matsakis
a583ba2fa0 Remove McResult from the mem-categorization interface. 2014-12-25 07:04:07 -05:00
Niko Matsakis
8f770f10b2 Extend Typer interface to include expr_ty_adjusted so that we can
remove another direct dependency on tcx from euv.
2014-12-25 07:04:07 -05:00
Niko Matsakis
f3ff084d01 Remove the regionck impl of Typer and just use fcx. This requires
modifying fcx to remove type variables where possible, but that's it.
2014-12-25 07:04:07 -05:00
Niko Matsakis
230d0eb003 Use the typer in ExprUseVisitor and do not hard code to tcx 2014-12-25 07:04:07 -05:00
bors
ead198c513 auto merge of #20024 : mneumann/rust/dragonfly-fixes3, r=alexcrichton 2014-12-25 05:11:36 +00:00
Alex Crichton
58d808f988 mk: Build jemalloc with -ffunction-sections
It's quite possible that small programs don't use all of jemalloc, and building
with -ffunction-sections and -fdata-sections allows the linker (via
--gc-sections) to strip out all unused code at link time. This decreases the
size of a "hello world" executable for me from 716K to 482K with no measurable
impact on link time. After this patch jemalloc is still the largest portion of
our hello world executables, but this helps cut down on the size at least
somewhat!
2014-12-24 20:20:01 -08:00
bors
65248c5e05 auto merge of #19934 : tomjakubowski/rust/rustdoc-unboxed-closures-redux, r=alexcrichton
We render HRTB and the unboxed closure trait sugar (the so-called 
"parenthesized" notation) where appropriate. Also address the new
`for` syntax on the old closures.
2014-12-25 01:01:42 +00:00
bors
7e11b22713 auto merge of #20117 : lfairy/rust/rename-include-bin, r=alexcrichton
According to [RFC 344][], methods that return `&[u8]` should have names ending in `bytes`. Though `include_bin!` is a macro not a method, it seems reasonable to follow the convention anyway.

We keep the old name around for now, but trigger a deprecation warning when it is used.

[RFC 344]: https://github.com/rust-lang/rfcs/blob/master/text/0344-conventions-galore.md

[breaking-change]
2014-12-24 20:47:12 +00:00
bors
14597f980a auto merge of #19813 : barosl/rust/autoderef-type-inference-ice, r=pnkfelix
`check::autoderef()` returns a `ty_err` when it fails to infer the type. `probe::probe()` should respect this failure and fail together to prevent further corruption.

Fixes #19692.
Fixes #19583.
Fixes #19297.
2014-12-24 18:37:07 +00:00
Tom Jakubowski
64b5464f30 rustdoc: Use Fn trait sugar for external paths
Fix #19909
2014-12-24 11:18:27 -06:00
Tom Jakubowski
c639cf6ee9 rustdoc: Use unboxed closure sugar
This unfortunately leaves sugaring Fn/FnMut/FnOnce on cross-crate
re-exports for future work.

cc #19909
2014-12-24 11:18:27 -06:00
Tom Jakubowski
37225288be rustdoc: render higher-rank trait bounds
Fix #19915
2014-12-24 11:18:27 -06:00
Tom Jakubowski
b39e99cfc7 rustdoc: render for<> on old closure lifetimes 2014-12-24 10:32:49 -06:00
bors
29ad8539b9 auto merge of #20060 : Aatch/rust/enum-repr, r=alexcrichton
The previous behaviour of using the smallest type possible caused LLVM
to treat padding too conservatively, causing poor codegen. This commit
changes the behaviour to use an alignment-sized integer as the
discriminant. This keeps types the same size, but helps LLVM understand
the data structure a little better, resulting in better codegen.
2014-12-24 16:21:23 +00:00
Andrew Paseltiner
fe9f1beae2 clean up BinaryHeap code 2014-12-24 10:08:33 -05:00