Commit graph

44781 commits

Author SHA1 Message Date
Leif Arne Storset
427736931b Copyedit generics.md and traits.md
Squashed at reviewer's request:

Add heading at the end of the introductory material
Spice up introductory paragraphs a bit
Use quotes instead of <code> for phrase
Remove "other" in "other restrictions" (it's not obvious that any other
restrictions have been mentioned)
"Default methods" is a second-level heading, but is not a subsection of
"Where clause"
Reword "Default methods" introduction: it's not the "last feature" on
this page
2015-07-30 21:49:14 +02:00
Leif Arne Storset
556b0815d7 Using operator traits in generic structs 2015-07-30 21:49:13 +02:00
Leif Arne Storset
0e92165eaf Show impl<T>
This includes a new example with Rectangle, instead of reusing HasArea,
because fn area would require the Mul trait, and the added complexity of
that would be better left for the Operators and Overloading chapter.

Squashed at reviewer's request: Move teaser for trait bounds to bottom
2015-07-30 21:48:25 +02: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
bors
f0b7ede78a Auto merge of #26960 - Manishearth:wrapper-types, r=steveklabnik
@steveklabnik had suggested I do this.

This needs much review -- I tried reducing the informal tone but there's room for improvement.


r? @steveklabnik
2015-07-25 07:54:48 +00:00
Manish Goregaokar
8484aca046 Move wrapper types blog post into trpl 2015-07-25 11:02:41 +05:30
bors
e4f044662b Auto merge of #27233 - tbu-:pr_wtf8, r=alexcrichton 2015-07-25 04:25:33 +00:00
bors
d38e8a05b5 Auto merge of #26963 - Manishearth:improve-diag, r=steveklabnik
I'll be adding more commits to this PR as the weekend progresses. Was hoping to make this a mega-PR, but getting some eyes on this early would be nice too.

r? @steveklabnik

r? @eddyb on the object safety bits

cc @michaelsproul

Part of #24407
2015-07-25 01:01:32 +00: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
427238ce24 Rollup merge of #27251 - dhuseby:adding_snapshots, r=alexcrichton
@alexcrichton please upload the following snapshot files along with this PR:

https://github.com/dhuseby/rust-manual-snapshots/raw/master/rust-stage0-2015-07-17-d4432b3-bitrig-x86_64-af77768e0eb0f4c7ec5a8e36047a08053b54b230.tar.bz2
https://github.com/dhuseby/rust-manual-snapshots/raw/master/rust-stage0-2015-07-17-d4432b3-freebsd-i386-b049325e5b2efe5f4884f3dafda448c1dac49b4f.tar.bz2
https://github.com/dhuseby/rust-manual-snapshots/raw/master/rust-stage0-2015-07-17-d4432b3-freebsd-x86_64-a59e397188dbfe67456a6301df5ca13c7e238ab9.tar.bz2
2015-07-24 14:56:04 -04: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
Steve Klabnik
47c9c49602 Rollup merge of #27238 - steveklabnik:gh26927, r=huonw
FIxes #26927
2015-07-24 14:56:03 -04:00
Steve Klabnik
8b6b6c678b Rollup merge of #27235 - tbu-:pr_catch_panic_doc, r=steveklabnik
Fixes #27027.
2015-07-24 14:56:03 -04:00
Steve Klabnik
a160203e30 Rollup merge of #27229 - AlisdairO:diagnostics371, r=Manishearth
As title!

Part of #24407.
r? @Manishearth
2015-07-24 14:56:03 -04:00
Steve Klabnik
a75c21fc9c Rollup merge of #27220 - AlisdairO:diagnostics120, r=Manishearth
As title!

I should probably be bunching these up a bit more, but I'm not sure when my time is going to disappear on me.  Once my schedule stabilises I'll try to start batching them into larger PRs.

Part of #24407.
r? @Manishearth
2015-07-24 14:56:02 -04:00
Steve Klabnik
fafb1fa823 Rollup merge of #27212 - AlisdairO:diagnostics225, r=Manishearth
As title!

Part of #24407.
r? @Manishearth
2015-07-24 14:56:02 -04:00
Steve Klabnik
43edc1c35a Rollup merge of #27193 - aidanhs:aphs-advanced-linking-doc, r=steveklabnik
Continuation of #25685.
2015-07-24 14:56:02 -04:00
Steve Klabnik
e490ba9a40 Rollup merge of #27177 - echochamber:master, r=steveklabnik
Was browsing somebody else's code and came across a snippet using labels. Looking around, it seems like there was an example for this in [rustbyexample](http://rustbyexample.com/flow_control/loop/nested.html) but none in trpl.
2015-07-24 14:56:01 -04:00
Steve Klabnik
3fa9090242 Rollup merge of #27145 - apasel422:diagnostic-407-437-438, r=Manishearth 2015-07-24 14:56:01 -04:00
Steve Klabnik
bc51e80009 Rollup merge of #27137 - dhuseby:fixing_bitrig_linking, r=alexcrichton
fixes the linking error on bitrig.
2015-07-24 14:56:01 -04:00
Manish Goregaokar
c5889358f2 Address comments 2015-07-25 00:04:11 +05:30
Manish Goregaokar
522a9785e4 Add long diagnostic for E0276 2015-07-25 00:04:11 +05:30
Manish Goregaokar
b5317761b8 Add long diagnostic explanation for E0275 2015-07-25 00:04:11 +05:30
Manish Goregaokar
dc556bef43 Add long diagnostics for E0272-274 (on_unimplemented) 2015-07-25 00:04:10 +05:30
Manish Goregaokar
8590501b31 Add E0270 2015-07-25 00:04:10 +05:30
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
0fb8ab04bc Auto merge of #27136 - dhuseby:fixing_freebsd_linking, r=alexcrichton
freebsd linking fix.
2015-07-24 14:17:48 +00:00
Niko Matsakis
71d44189e0 minor rebase fixes 2015-07-24 08:24:35 -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
d075faa2ed nits 2015-07-24 04:53:43 -04: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
Niko Matsakis
a551697134 Don't be so eager to call unresolved inference variables an error. MC
is being used now before the final regionck stage and in some cases SOME
amount of unresolved inference is OK. In fact, we could probably just
allow inference variables as well with only minimal pain.
2015-07-24 04:53:19 -04:00
Niko Matsakis
4172c8237b Add some debugging to help identify when errors get reported. 2015-07-24 04:53:19 -04:00
Niko Matsakis
6b49f4ded7 Run the analysis process only once per closure, on the way up the tree.
This was the intention before but silly coding caused it to run twice if
there are nested closures.
2015-07-24 04:53:19 -04:00
Niko Matsakis
1e2677be72 Introduce ClosureSubsts rather than just having random fields in the
TyClosure variant; thread this through wherever closure substitutions
are expected, which leads to a net simplification. Simplify trans
treatment of closures in particular.
2015-07-24 04:53:17 -04:00
Niko Matsakis
69d62e04e5 introduce a Vec<Ty> to TyClosure for storing upvar types 2015-07-24 04:50:45 -04:00
bors
607f74df2a Auto merge of #27227 - eternaleye:patch-1, r=alexcrichton
Currently, `rustc` generates nondeterministic archives, which contain system timestamps. These don't really serve any useful purpose, and enabling deterministic archives moves us a little closer to completely deterministic builds. For a small toy library using `std::ops::{Deref,DerefMut}`, this change actually results in a bit-for-bit identical build every time.
2015-07-24 07:37:03 +00: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
Dave Huseby
a04b8391e0 switching to gnu archive format 2015-07-23 18:32:07 -07:00
Dave Huseby
02b394cef8 fixes #27124 for freebsd 2015-07-23 18:32:07 -07:00
Andy Caldwell
4f58db485d Make ICE an error and use a sensible error message 2015-07-24 01:10:25 +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
Tobias Bucher
c2fca7c957 Add unstable attribute to char::from_u32_unchecked 2015-07-24 01:58:38 +02:00
bors
69ca012564 Auto merge of #27224 - alexcrichton:configure-lto-right, r=brson
The LTO pass in the compiler forgot to call the `LLVMRustAddBuilderLibraryInfo`
function and configure other options such as merge_functions, vectorize_slp,
etc. This ended up causing linker errors on MSVC targets because the optimizer
didn't have the right knowledge that some system functions are missing on these
platforms.

This commit consolidates creation of PassManagerBuilder instances to one
function which is then called when needed. This ensures that the pass manager is
always correctly configured with the various target-specific information that
LLVM needs.

Overall, this fixes `-C lto -C opt-level=3` on 32-bit MSVC targets.
2015-07-23 23:38:36 +00: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