Commit Graph

52336 Commits

Author SHA1 Message Date
Eduard Burtescu
6742b239ac rustc_metadata: remove all unnecessary tables from astencode. 2016-09-20 20:08:03 +03:00
Eduard Burtescu
d2ea3daad1 rustc_metadata: group the tags into root tags and item tags. 2016-09-20 20:08:03 +03:00
Eduard Burtescu
89736e8671 rustc: remove ImplOrTraitItemId and TraitDef's associated_type_names. 2016-09-20 20:08:03 +03:00
Eduard Burtescu
8734aaa33e rustc_metadata: move more RBML tags to auto-serialization. 2016-09-20 20:08:02 +03:00
Eduard Burtescu
88c5679c4e rustc_metadata: remove ty{en,de}code and move to auto-derived serialization. 2016-09-20 20:08:01 +03:00
Eduard Burtescu
bcbb4107a1 rustc_metadata: side-step ty{en,de}code for everything but Ty. 2016-09-20 20:08:01 +03:00
Eduard Burtescu
0863012fb9 Remove librbml and the RBML-tagged auto-encoder/decoder. 2016-09-20 20:08:01 +03:00
Eduard Burtescu
2ce0e6d4e7 rustc_trans: use the TypeId hashing mechanism instead of metadata. 2016-09-20 20:08:00 +03:00
Eduard Burtescu
02c4155d2c rustc: remove hir::fold. 2016-09-20 20:08:00 +03:00
Eduard Burtescu
ed593bed88 rustc_metadata: go back to not using the opaque format. 2016-09-20 20:08:00 +03:00
Eduard Burtescu
903ec52ba9 rustc: replace uses of NodeId in Def, other than closures and labels. 2016-09-20 20:08:00 +03:00
Eduard Burtescu
fc363cb482 rustc_metadata: go only through rustc_serialize in astencode. 2016-09-20 20:07:54 +03:00
Eduard Burtescu
91e7239db4 rustc_metadata: combine DecodeContext and rbml::reader::Decoder. 2016-09-20 20:07:16 +03:00
mcarton
726c2b6e9b
Don't ICE when a float can't be parsed 2016-09-20 18:25:00 +02:00
Eduard Burtescu
97864d41a6 rustc_metadata: encode miscellaneous information opaquely. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
3cbe4b8bce rustc_metadata: sign-extend when decoding signed integers. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
d47fd9eb5a rustc_metadata: use specialization for {en,de}coding Ty and Substs. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
82197287a2 rustc_metadata: combine EncodeContext and rbml::writer::Encoder. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
7b073343db rustc_metadata: remove astencode tests. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
78ace66b6a rustc_metadata: remove extension traits from astencode. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
87db6b9e65 rustc_metadata: remove redundant lifetimes from astencode::DecodeContext. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
3ad8aa6b87 rbml: move the tagged encoder/decoder to librustc_metadata. 2016-09-20 19:21:33 +03:00
Eduard Burtescu
a79104e0c6 serialize: extend with specialization-based encoding/decoding multi-dispatch. 2016-09-20 19:21:33 +03:00
Nick Platt
429ba7ba9a Minor correction in sort_by_key doc comment 2016-09-20 11:20:33 -04:00
bors
c772948b68 Auto merge of #36388 - pcwalton:copy-propagation, r=nikomatsakis
librustc_mir: Implement def-use chains and trivial copy propagation on MIR.

This only supports trivial cases in which there is exactly one def and
one use.

Currently, some random unrelated MIR tests are failing, probably just because they haven't been updated.

r? @eddyb
2016-09-20 08:01:01 -07:00
Felix S. Klock II
c41a806e4e Workaround #34427 by using memset of 0 on ARM to set the discriminant. 2016-09-20 15:58:46 +02:00
Nicholas Nethercote
80a44779f7 Lazily allocate TypedArena's first chunk.
Currently `TypedArena` allocates its first chunk, which is usually 4096
bytes, as soon as it is created. If no allocations are ever made from
the arena then this allocation (and the corresponding deallocation) is
wasted effort.

This commit changes `TypedArena` so it doesn't allocate the first chunk
until the first allocation is made.

This change speeds up rustc by a non-trivial amount because rustc uses
`TypedArena` heavily: compilation speed (producing debug builds) on
several of the rustc-benchmarks increases by 1.02--1.06x. The change
should never cause a slow-down because the hot `alloc` function is
unchanged. It does increase the size of `TypedArena` by one `usize`
field, however.

The commit also fixes some out-of-date comments.
2016-09-20 22:00:29 +10:00
Patrick Walton
480287ec3b librustc: Implement def-use chains and trivial copy propagation on MIR.
This only supports trivial cases in which there is exactly one def and
one use.
2016-09-19 19:18:38 -07:00
bors
cbd84aeb73 Auto merge of #34942 - porglezomp:master, r=sfackler
Fix overflow checking in unsigned pow()

The pow() method for unsigned integers produced 0 instead of trapping overflow for certain inputs. Calls such as 2u32.pow(1024) produced 0 when they should trap an overflow. This also adds tests for the correctly handling overflow in unsigned pow().

This was previously fixed for signed integers in #28248, but it seems unsigned integers got missed that time.

For issue number #34913
2016-09-19 19:03:52 -07:00
jacobpadkins
8b02aa1c80 fixed the safety header/wording in option.rs 2016-09-19 17:55:44 -05:00
bors
e0547019eb Auto merge of #36102 - GuillaumeGomez:rustc_metadata_diagnostics, r=jonathandturner
Rustc metadata diagnostics

r? @jonathandturner
2016-09-19 13:23:12 -07:00
Jonathan Turner
2ea3ab3a90 Add the ability to merge spans to codemap 2016-09-19 12:31:56 -07:00
Patrick Walton
2e6a91812c librustc: Add a new nop statement to the MIR.
This is useful when passes want to remove statements without affecting
`Location`s.
2016-09-19 11:17:12 -07:00
bors
412a637704 Auto merge of #36471 - nnethercote:rm-to_binop, r=sanxiyn
Remove unused Token::to_binop function

Just some dead code removal.
2016-09-19 08:32:05 -07:00
Guillaume Gomez
313fb8fbf2 Replace 'e.g.' by 'i.e.' 2016-09-19 14:08:57 +02:00
bors
5f6f838448 Auto merge of #36545 - Cobrand:wild-print-fix, r=sfackler
Remove stray println! when invoking error E0316

Removed a wild println! statement that has been here for over a year and a half.

Closes #36543
2016-09-18 21:01:49 -07:00
bors
bfac5d6d9f Auto merge of #36523 - Mark-Simulacrum:format-args-link, r=GuillaumeGomez
Add links between format_args! macro and std::fmt::Arguments struct

r? @GuillaumeGomez
2016-09-18 17:25:01 -07:00
aclarry
af67f0b389 Fix name of error test file 2016-09-18 18:55:19 -04:00
bors
55bf6a4f87 Auto merge of #36487 - nrc:save-doc-urls, r=@eddyb
save-analysis: better 'parent' info

In particular, this fixes some bugs displaying doc URLs for method calls.
2016-09-18 14:00:02 -07:00
Nick Cameron
48e69e029b save-analysis: better 'parent' info
In particular, this fixes some bugs displaying doc URLs for method calls.
2016-09-19 07:17:49 +12:00
bors
33927757ae Auto merge of #36390 - frewsxcv:panic-set-hook, r=GuillaumeGomez
Add basic doc examples for `std::panic::{set_hook, take_hook}`.

None
2016-09-18 10:34:48 -07:00
Corey Farwell
e0d554a883 Add regression test for #9837.
Fixes https://github.com/rust-lang/rust/issues/9837
2016-09-18 13:01:40 -04:00
Eitan Adler
0c252ffbab per timnn 2016-09-18 07:36:02 -07:00
Corey Farwell
5505ebc31d Add basic doc examples for std::panic::{set_hook, take_hook}. 2016-09-18 10:03:34 -04:00
Vanja Cosic
b67a8439f9 Updated "Ownership". Trying to fix #34865
- Reword
- Add link
2016-09-18 14:43:14 +02:00
Guillaume Gomez
b4c739dbdd Add missing Eq implementations 2016-09-18 14:26:49 +02:00
bors
22d15eaca9 Auto merge of #36555 - jseyfried:issue_36540, r=eddyb
Visit and fold macro invocations in the same order

Fixes #36540.
r? @nrc
2016-09-18 04:11:51 -07:00
bors
f39039e6e5 Auto merge of #36527 - nnethercote:last_token_kind, r=jseyfried
Optimize the parser's last token handling.

The parser currently makes a heap copy of the last token in four cases:
identifiers, paths, doc comments, and commas. The identifier and
interpolation cases are unused, and for doc comments and commas we only
need to record their presence, not their value.

This commit consolidates the last token handling and avoids the
unnecessary copies by replacing `last_token`, `last_token_eof`, and
`last_token_interpolated` with a new field `last_token_kind`. This
simplifies the parser slightly and speeds up parsing on some files by
3--4%.
2016-09-18 00:48:51 -07:00
Eitan Adler
fad6a09c94 remove duplicate duplicate words 2016-09-17 23:36:59 -07:00
Eitan Adler
9c3cf06b29 inherit from object 2016-09-17 23:31:06 -07:00
Eitan Adler
4f11a39e26 invisible isn't a tag 2016-09-17 23:30:42 -07:00
Eitan Adler
ccb78d20cd border-color > border 2016-09-17 23:30:22 -07:00
Eitan Adler
101d987d29 add missing semi-colon 2016-09-17 23:29:00 -07:00
Eitan Adler
73d2653417 duplicate the 2016-09-17 23:19:03 -07:00
Eitan Adler
1a4a723dda remove useless semicolon from python 2016-09-17 23:10:12 -07:00
Eitan Adler
22c66c4b38 modern style classes 2016-09-17 23:09:21 -07:00
Eitan Adler
733fe1d25c make functions static where possible 2016-09-17 23:08:31 -07:00
Eitan Adler
3545785041 Remove unused code 2016-09-17 23:07:11 -07:00
Eitan Adler
1a67298f20 prefer tuple to array 2016-09-17 23:06:45 -07:00
Eitan Adler
266ef889e3 pep8 prefers triple quoted with double quotes 2016-09-17 23:05:20 -07:00
Eitan Adler
f7811c1ca6 Fix order of @import
In CSS 2.1, any @import rules must precede all other rules (except the
@charset rule, if present).
2016-09-17 22:56:22 -07:00
Eitan Adler
8de97dddfd simplify python code 2016-09-17 22:52:00 -07:00
Eitan Adler
a6d804ede8 Browsers do not consistently handle non-integer values for font-size. 2016-09-17 22:51:13 -07:00
bors
0b03ba1f55 Auto merge of #36502 - TimNN:correct-cancel, r=jseyfried
correctly cancel some errors

Fixes #36499.

I also (proactively) changed all other calls in `parser.rs` to use `Handler::cancel`.
2016-09-17 20:57:05 -07:00
bors
d37e54b419 Auto merge of #36504 - pcwalton:and-star, r=eddyb
librustc_mir: Remove `&*x` when `x` has a reference type.

This introduces a new `InstCombine` pass for us to place such peephole
optimizations.

r? @eddyb
2016-09-17 17:30:22 -07:00
Jeffrey Seyfried
c7e4ae0d8d Add regression test. 2016-09-17 23:40:17 +00:00
Jeffrey Seyfried
2cee9ec3b3 Ensure that macro invocations are folded and visited the same order. 2016-09-17 23:40:15 +00:00
bors
32571c05c8 Auto merge of #36508 - nagisa:llvm-backport, r=eddyb
Up the LLVM

Fixes #36474

The relevant patch to rust-llvm is at https://github.com/rust-lang/llvm/pull/51

r? @alexcrichton
2016-09-17 12:02:34 -07:00
Simonas Kazlauskas
d104e5bfb7 Up the LLVM
Fixes #36474
2016-09-17 18:40:40 +03:00
bors
fb62f4d544 Auto merge of #36490 - bluss:zip-slightly-despecialized-edition, r=alexcrichton
Remove data structure specialization for .zip() iterator

Go back on half the specialization, the part that changed the Zip
struct's fields themselves depending on the types of the iterators.

Previous PR: #33090

This means that the Zip iterator will always carry two usize fields,
which are sometimes unused. If a whole for loop using a .zip() iterator is
inlined, these are simply removed and have no effect.

The same improvement for Zip of for example slice iterators remain, and
they still optimize well. However, like when the specialization of zip
was merged, the compiler is still very sensistive to the exact context.

For example this code only autovectorizes if the function is used, not
if the code in zip_sum_i32 is inserted inline where it was called:

```rust
fn zip_sum_i32(xs: &[i32], ys: &[i32]) -> i32 {
    let mut s = 0;
    for (&x, &y) in xs.iter().zip(ys) {
        s += x * y;
    }
    s
}

fn zipdot_i32_default_zip(b: &mut test::Bencher)
{
    let xs = vec![1; 1024];
    let ys = vec![1; 1024];

    b.iter(|| {
        zip_sum_i32(&xs, &ys)
    })
}
```

Include a test that checks that `Zip<T, U>` is covariant w.r.t. T and U.

Fixes #35727
2016-09-17 08:23:44 -07:00
bors
cde61ba7f7 Auto merge of #36485 - nnethercote:char_lit-2, r=nagisa
Overhaul char_lit()

This commit does the following.

- Removes parsing support for '\X12', '\u123456' and '\U12345678' char
  literals. These are no longer valid Rust and rejected by the lexer.
  (This strange-sounding situation occurs because the parser rescans
  char literals to compute their value.)

- Rearranges the function so that all the escaped values are handled in
  a single `match`. The error-handling strategy is based on the one used
  by byte_lit().
2016-09-17 02:51:13 -07:00
bors
141012dd52 Auto merge of #36482 - jseyfried:dont_load_unconfigured_noninline_modules, r=nrc
Avoid loading and parsing unconfigured non-inline modules.

For example, `#[cfg(any())] mod foo;` will always compile after this PR, even if `foo.rs` and `foo/mod.rs` do not exist or do not contain valid Rust.

Fixes #36478 and fixes #27873.

r? @nrc
2016-09-16 23:29:15 -07:00
bors
9dc9f340cc Auto merge of #36468 - michaelwoerister:collect-vtable-drop-glue, r=eddyb
trans: Let the collector find drop-glue for all vtables, not just VTableImpl.

This fixes #36260. So far, the collector has only recorded drop-glue for insertion into a vtable if the vtable was for an impl. But there's actually no reason why it shouldn't do just the same for closure vtables, afaict.

r? @eddyb
cc @rust-lang/compiler
2016-09-16 19:52:53 -07:00
Cobrand
d8b2cfeae6 Remove stray println! when invoking error E0316 2016-09-16 23:52:03 +02:00
Mark-Simulacrum
ad63215732 Add links between format_args! macro and std::fmt::Arguments struct 2016-09-16 15:33:53 -06:00
bors
d4037fc476 Auto merge of #36444 - jseyfried:macro_rules_ext, r=nrc
Remove variant `MacroRulesTT` of `SyntaxExtension`

r? @nrc
2016-09-16 14:15:13 -07:00
Mikhail Modin
82639d4f04 fix top level attr spans 2016-09-16 21:44:15 +03:00
bors
55a61a1175 Auto merge of #36536 - jonathandturner:rollup, r=jonathandturner
Rollup of 8 pull requests

- Successful merges: #36383, #36424, #36480, #36484, #36505, #36509, #36519, #36521
- Failed merges:
2016-09-16 10:45:35 -07:00
Patrick Walton
e8a44d29b6 librustc_mir: Remove &*x when x has a reference type.
This introduces a new `InstCombine` pass for us to place such peephole
optimizations.
2016-09-16 09:30:51 -07:00
Jonathan Turner
ab7425dcd4 Rollup merge of #36521 - Mark-Simulacrum:documentation-fix, r=apasel422
Fix language in documentation comment.
2016-09-16 09:29:49 -07:00
Jonathan Turner
919cbc0168 Rollup merge of #36519 - Mark-Simulacrum:example-asmut, r=GuillaumeGomez
Add example in AsMut trait documentation

Let me know of any changes I should make.

r? @GuillaumeGomez
2016-09-16 09:29:49 -07:00
Jonathan Turner
c6f1db6f60 Rollup merge of #36509 - nagisa:rustbuild-py3, r=alexcrichton
Try to support py3 with rustbuild better

Annoying to have it fail when you run with `python` only to have to rerun later with `python2`.

r? @alexcrichton
2016-09-16 09:29:49 -07:00
Jonathan Turner
390e8bd15d Rollup merge of #36505 - nagisa:temp-stack-size, r=eddyb
Default RUST_MIN_STACK to 16MiB for now

Temporary(?) workaround to https://github.com/rust-lang/rust/issues/35408.

cc @nikomatsakis if you want to veto the idea.

r? @eddyb
2016-09-16 09:29:48 -07:00
Jonathan Turner
ff224e7d8d Rollup merge of #36484 - frewsxcv:patch-33, r=eddyb
Don't ignore a doc code-block we can compile.
2016-09-16 09:29:48 -07:00
Jonathan Turner
77c7ff5b46 Rollup merge of #36480 - tshepang:stronger-pause, r=steveklabnik
doc: make that sound better
2016-09-16 09:29:48 -07:00
Jonathan Turner
d48f17b21e Rollup merge of #36424 - kmcallister:gh-29361-marker-docs, r=GuillaumeGomez
Tweak std::marker docs

Fixes #29361.

r? @GuillaumeGomez
2016-09-16 09:29:48 -07:00
Jonathan Turner
9eac7bdd09 Rollup merge of #36383 - GuillaumeGomez:e0049, r=jonathandturner
Update E0049 to new error format

Fixes #35210.
Part of #35233.

r? @jonathandturner
2016-09-16 09:29:48 -07:00
bors
c6673db58d Auto merge of #36353 - arielb1:union-drops, r=pnkfelix
a few move-checker improvements

This fixes moves out of unions and prohibits moves out of slices (see the individual commits).

r? @pnkfelix
2016-09-16 07:23:18 -07:00
Ariel Ben-Yehuda
5c5f75223c fix test fallout 2016-09-16 16:02:43 +03:00
Ariel Ben-Yehuda
eeedc144be fix dynamic drop for unions
Moving out of a union is now treated like moving out of its parent type.

Fixes #36246
2016-09-16 15:08:32 +03:00
Ariel Ben-Yehuda
7b25e88602 forbid moves out of slices
The wording of RFC #495 enables moves out of slices. Unfortuantely, non-zeroing
moves out of slices introduce a very annoying complication: as slices can
vary in their length, indexes from the start and end may or may not overlap
depending on the slice's exact length, which prevents assigning a particular
drop flag for each individual element.

For example, in the code

```Rust
fn foo<T>(a: Box<[Box<[T]>]>, c: bool) -> T {
    match (a, c) {
        (box [box [t, ..], ..], true) => t,
        (box [.., box [.., t]], false) => t,
        _ => panic!()
    }
}
```

If the condition is false, we have to drop the first element
of `a`, unless `a` has size 1 in which case we drop all the elements
of it but the last.

If someone comes with a nice way of handling it, we can always re-allow
moves out of slices.

This is a [breaking-change], but it is behind the `slice_patterns` feature
gate and was not allowed until recently.
2016-09-16 15:08:32 +03:00
Ariel Ben-Yehuda
eb19cd6575 groundwork refactoring of gather_moves 2016-09-16 15:08:32 +03:00
bors
8394685b83 Auto merge of #36441 - alexcrichton:rustbuild-target, r=brson
rustbuild: Fix cross-compiles to MinGW on Linux

Closes #36290
Closes #36291
2016-09-16 04:01:01 -07:00
bors
89500e9341 Auto merge of #36338 - estebank:primitive-shadow, r=jseyfried
Be more specific when type parameter shadows primitive type

When a type parameter shadows a primitive type, the error message
was non obvious. For example, given the file `file.rs`:

```rust
trait Parser<T> {
    fn parse(text: &str) -> Option<T>;
}

impl<bool> Parser<bool> for bool {
    fn parse(text: &str) -> Option<bool> {
        Some(true)
    }
}

fn main() {
    println!("{}", bool::parse("ok").unwrap_or(false));
}
```

The output was:

```bash
% rustc file.rs
error[E0308]: mismatched types
 --> file.rs:7:14
  |
7 |         Some(true)
  |              ^^^^ expected type parameter, found bool a
  |
  = note: expected type `bool`
  = note:    found type `bool`

error: aborting due to previous error
```

We now show extra information about the type:

```bash
% rustc file.rs
error[E0308]: mismatched types
 --> file.rs:7:14
  |
7 |         Some(true)
  |              ^^^^ expected type parameter, found bool a
  |
  = note: expected type `bool` (type parameter)
  = note:    found type `bool` (bool)

error: aborting due to previous error
```

Fixes #35030
2016-09-16 00:39:27 -07:00
Nicholas Nethercote
8075d54606 Optimize the parser's last token handling.
The parser currently makes a heap copy of the last token in four cases:
identifiers, paths, doc comments, and commas. The identifier and
interpolation cases are unused, and for doc comments and commas we only
need to record their presence, not their value.

This commit consolidates the last token handling and avoids the
unnecessary copies by replacing `last_token`, `last_token_eof`, and
`last_token_interpolated` with a new field `last_token_kind`. This
simplifies the parser slightly and speeds up parsing on some files by
3--4%.
2016-09-16 15:46:40 +10:00
bors
a36e069288 Auto merge of #36213 - josephDunne:dist_version, r=brson
Add rustc version info (git hash + date) to dist tarball

a fix for #32444
2016-09-15 20:48:58 -07:00
Esteban Küber
68e8624d05 Specify when type parameter shadows primitive type
When a type parameter shadows a primitive type, the error message
was non obvious. For example, given the file `file.rs`:

```rust
trait Parser<T> {
    fn parse(text: &str) -> Option<T>;
}

impl<bool> Parser<bool> for bool {
    fn parse(text: &str) -> Option<bool> {
        Some(true)
    }
}

fn main() {
    println!("{}", bool::parse("ok").unwrap_or(false));
}
```

The output was:

```bash
% rustc file.rs
error[E0308]: mismatched types
 --> file.rs:7:14
  |
7 |         Some(true)
  |              ^^^^ expected type parameter, found bool
  |
  = note: expected type `bool`
  = note:    found type `bool`

error: aborting due to previous error
```

We now show extra information about the type:

```bash
% rustc file.rs
error[E0308]: mismatched types
 --> file.rs:7:14
  |
7 |         Some(true)
  |              ^^^^ expected type parameter, found bool
  |
  = note: expected type `bool` (type parameter)
  = note:    found type `bool` (bool)

error: aborting due to previous error
```

Fixes #35030
2016-09-15 20:06:29 -07:00
Michael Woerister
cf976fe2cd Adapt codegen-unit test cases to new behaviour 2016-09-15 22:09:49 -04:00
Mark-Simulacrum
102ee5e70a Add example in AsMut trait documentation 2016-09-15 19:47:04 -06:00
Michael Woerister
bfa6fdc72c trans: Allow base::internalize_symbols() to internalize #[no_mangle] symbols 2016-09-15 20:39:58 -04:00
bors
5511a93c8a Auto merge of #36439 - alexcrichton:fix-rustbuild, r=japaric
rustbuild: Fix dependency tracking with new Cargo

The recent Cargo update changed filenames, which broke a lot of incremental
rustbuild builds. What it thought were the output files were indeed no longer
the output files! (wreaking havoc).

This commit updates this to stop guessing filenames of Cargo and just manage
stamp files instead.
2016-09-15 17:19:09 -07:00
Nicholas Nethercote
63ded0518a Overhaul char_lit().
This commit does the following.

- Removes parsing support for '\X12', '\u123456' and '\U12345678' char
  literals. These are no longer valid Rust and rejected by the lexer.
  (This strange-sounding situation occurs because the parser rescans
  char literals to compute their value.)

- Rearranges the function so that all the escaped values are handled in
  a single `match`, and changes the error-handling to use vanilla
  assert!() and unwrap().
2016-09-16 09:13:43 +10:00
Simonas Kazlauskas
3f79310174 Try to support py3 with rustbuild better 2016-09-16 01:52:26 +03:00
Jeffrey Seyfried
f9a08cc982 Remove irrelevant test. 2016-09-15 21:17:21 +00:00
Jeffrey Seyfried
2abdc8805c Remove MacroRulesTT. 2016-09-15 21:16:51 +00:00
Jeffrey Seyfried
0ddb66c4c7 Allow IdentMacroExpander::expand to access the ident macro invocation's attributes. 2016-09-15 20:57:54 +00:00
Jeffrey Seyfried
21ba8160f2 Move fields single_step and keep_macs from MacroExpander to ExpansionConfig. 2016-09-15 20:57:38 +00:00
Simonas Kazlauskas
ffaebadc99 Default RUST_MIN_STACK to 16MiB for now 2016-09-15 23:40:48 +03:00
bors
1265cbf4e0 Auto merge of #36393 - petrochenkov:ancient, r=eddyb
Remove some obsolete code from the compiler
2016-09-15 13:34:11 -07:00
Tim Neumann
9f4e908360 correctly cancel some errors 2016-09-15 22:12:22 +02:00
Keegan McAllister
b735c1bc78 Tweak std::marker docs
Fixes #29361.
2016-09-15 12:31:17 -07:00
Michael Woerister
928c3981b6 Adapt run-make/sep-comp-inlining test case to new behaviour 2016-09-15 14:46:35 -04:00
Jonathan Turner
d7428944c2 Fix wording for out-of-crate macro error 2016-09-15 10:12:56 -07:00
bors
d1acabeaa2 Auto merge of #35992 - SimonSapin:rc-arc-ptr-eq, r=alexcrichton
Add `pub fn ptr_eq(this: &Self, other: &Self) -> bool` to Rc and Arc

Servo and Kuchiki have had helper functions doing this for some time.
2016-09-15 09:58:26 -07:00
Simon Sapin
5ce9feeb8c Add std::ptr::eq, for referential equality of &T references.
Fixes https://github.com/rust-lang/rfcs/issues/1155
2016-09-15 18:48:16 +02:00
Simon Sapin
eba2270a9c Add pub fn ptr_eq(this: &Self, other: &Self) -> bool to Rc and Arc.
Servo and Kuchiki have had helper functions doing this for some time.
2016-09-15 18:48:16 +02:00
Michael Woerister
c10176ef66 trans: Only translate #[inline] functions if they are used somewhere. 2016-09-15 11:40:16 -04:00
bors
dc75933aba Auto merge of #36491 - Manishearth:rollup, r=Manishearth
Rollup of 9 pull requests

- Successful merges: #36384, #36405, #36425, #36429, #36438, #36454, #36459, #36461, #36463
- Failed merges: #36444
2016-09-15 06:14:26 -07:00
Manish Goregaokar
ec08128882 Rollup merge of #36463 - eugene-bulkin:duration-checked-ops, r=alexcrichton
Add checked operation methods to Duration

Addresses #35774.
2016-09-15 18:16:22 +05:30
Manish Goregaokar
0c9dc539df Rollup merge of #36461 - nikomatsakis:issue-36053, r=arielb1
clear obligations-added flag with nested fulfillcx

This flag is a debugging measure designed to detect cases where we start
a snapshot, create type variables, register obligations involving those
type variables in the fulfillment cx, and then have to unroll the
snapshot, leaving "dangling type variables" behind.  HOWEVER, in some
cases the flag is wrong. In particular, we sometimes create a
"mini-fulfilment-cx" in which we enroll obligations. As long as this
fulfillment cx is fully drained before we return, this is not a problem,
as there won't be any escaping obligations in the main cx. So we add a
fn to save/restore the flag.

Fixes #36053.

r? @arielb1
2016-09-15 18:16:22 +05:30
Manish Goregaokar
959f764f8b Rollup merge of #36459 - nikomatsakis:issue-35546, r=eddyb
invoke drop glue with a ptr to (data, meta)

This is done by creating a little space on the stack. Hokey, but it's the simplest fix I can see, and I am in "kill regressions" mode right now.

Fixes #35546

r? @eddyb
2016-09-15 18:16:21 +05:30
Manish Goregaokar
69a7f92a7f Rollup merge of #36454 - bluss:slice-primitive-index, r=alexcrichton
Use primitive indexing in slice's Index/IndexMut

[T]'s Index implementation is normally not used for indexing, instead
the compiler supplied indexing is used.

Use the compiler supplied version in Index/IndexMut.

This removes an inconsistency:

Compiler supplied bound check failures look like this:

thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'

If you convince Rust to use the Index impl for slices, bounds check
failure looks like this instead:

thread 'main' panicked at 'assertion failed: index < self.len()'

The latter is used if you for example use Index generically:

```rust
use std::ops::Index;
fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }

foo(&[1, 2, 3][..])
```
2016-09-15 18:16:21 +05:30
Manish Goregaokar
bab9238a1e Rollup merge of #36438 - jseyfried:node_ids_in_expansion, r=nrc
Assign node ids during macro expansion

After this PR,
 - The `ExtCtxt` can access `resolve`'s `Resolver` through the trait object `ext::base::Resolver`.
  - The `Resolver` trait object can load macros and replaces today's `MacroLoader` trait object.
  - The macro expander uses the `Resolver` trait object to resolve macro invocations.
 - The macro expander assigns node ids and builds the `Resolver`'s `macros_at_scope` map.
   - This is groundwork for merging import resolution and expansion.
 - Performance of expansion together with node id assignment improves by ~5%.

**EDIT:** Since Github is reordering the commits, here is `git log`:
 - b54e1e3997: Differentiate between monotonic and non-monotonic expansion and only assign node ids during monotonic expansion.
 - 78c0039878: Expand generated test harnesses and macro registries.
 - f3c2dca353: Remove scope placeholders from the crate root.
 - c86c8d41a2: Perform node id assignment and `macros_at_scope` construction during the `InvocationCollector` and `PlaceholderExpander` folds.
 - 72a636975f: Move macro resolution into `librustc_resolve`.
 - 20b43b2323: Rewrite the unit tests in `ext/expand.rs` as a `compile-fail` test.
 - a9821e1658: Refactor `ExtCtxt` to use a `Resolver` instead of a `MacroLoader`.
 - 60440b226d: Refactor `noop_fold_stmt_kind` out of `noop_fold_stmt`.
 - 50f94f6c95: Avoid needless reexpansions.

r? @nrc
2016-09-15 18:16:21 +05:30
Manish Goregaokar
23e0c24cad Rollup merge of #36429 - durka:patch-30, r=nagisa
fix "X is not a member of trait Y" span labels

Fixes #36428.
2016-09-15 18:16:21 +05:30
Manish Goregaokar
7494bc7c50 Rollup merge of #36425 - michaelwoerister:stable-projection-bounds, r=eddyb
Fix indeterminism in ty::TraitObject representation.

Make sure that projection bounds in `ty::TraitObject` are sorted in a way that is stable across compilation sessions and crate boundaries.

This PR
+  moves `DefPathHashes` up into `librustc` so it can be used there to create a stable sort key for `DefId`s,
+ changes `PolyExistentialProjection::sort_key()` to take advantage of the above,
+ and removes the unused `PolyProjectionPredicate::sort_key()` and `ProjectionTy::sort_key()` methods.

Fixes #36155
2016-09-15 18:16:20 +05:30
Manish Goregaokar
ebef6ad0e4 Rollup merge of #36405 - solson:typo, r=eddyb
Delete stray ` character in error message.
2016-09-15 18:16:20 +05:30
Manish Goregaokar
726850170d Rollup merge of #36384 - petrochenkov:derclone, r=alexcrichton
Improve shallow `Clone` deriving

`Copy` unions now support `#[derive(Clone)]`.
Less code is generated for `#[derive(Clone, Copy)]`.
+
Unions now support `#[derive(Eq)]`.
Less code is generated for `#[derive(Eq)]`.

---
Example of code reduction:
```
enum E {
	A { a: u8, b: u16 },
	B { c: [u8; 100] },
}
```
Before:
```
fn clone(&self) -> E {
    match (&*self,) {
        (&E::A { a: ref __self_0, b: ref __self_1 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            ::std::clone::assert_receiver_is_clone(&(*__self_1));
            *self
        }
        (&E::B { c: ref __self_0 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            *self
        }
    }
}
```
After:
```
fn clone(&self) -> E {
    {
        let _: ::std::clone::AssertParamIsClone<u8>;
        let _: ::std::clone::AssertParamIsClone<u16>;
        let _: ::std::clone::AssertParamIsClone<[u8; 100]>;
        *self
    }
}
```

All the matches are removed, bound assertions are more lightweight.
`let _: Checker<CheckMe>;`, unlike `checker(&check_me);`, doesn't have to be translated by rustc_trans and then inlined by LLVM, it doesn't even exist in MIR, this means faster compilation.

---
Union impls are generated like this:
```
union U {
	a: u8,
	b: u16,
	c: [u8; 100],
}
```
```
fn clone(&self) -> U {
    {
        let _: ::std::clone::AssertParamIsCopy<Self>;
        *self
    }
}
```

Fixes https://github.com/rust-lang/rust/issues/36043
cc @durka
r? @alexcrichton
2016-09-15 18:16:19 +05:30
Ulrik Sverdrup
af1a3ffbeb Remove data structure specialization for .zip() iterator
Go back on half the specialization, the part that changed the Zip
struct's fields themselves depending on the types of the iterators.

This means that the Zip iterator will always carry two usize fields,
which are unused. If a whole for loop using a .zip() iterator is
inlined, these are simply removed and have no effect.

The same improvement for Zip of for example slice iterators remain, and
they still optimize well. However, like when the specialization of zip
was merged, the compiler is still very sensistive to the exact context.

For example this code only autovectorizes if the function is used, not
if the code in zip_sum_i32 is inserted inline it was called:

```
fn zip_sum_i32(xs: &[i32], ys: &[i32]) -> i32 {
    let mut s = 0;
    for (&x, &y) in xs.iter().zip(ys) {
        s += x * y;
    }
    s
}

fn zipdot_i32_default_zip(b: &mut test::Bencher)
{
    let xs = vec![1; 1024];
    let ys = vec![1; 1024];

    b.iter(|| {
        zip_sum_i32(&xs, &ys)
    })
}
```

Include a test that checks that Zip<T, U> is covariant w.r.t. T and U.
2016-09-15 13:00:15 +02:00
bors
e2c64d1690 Auto merge of #36372 - sfackler:sum-prod-overflow, r=alexcrichton
Inherit overflow checks for sum and product

We have previously documented the fact that these will panic on overflow, but I think this behavior is what people actually want/expect. `#[rustc_inherit_overflow_checks]` didn't exist when we discussed these for stabilization.

r? @alexcrichton

Closes #35807
2016-09-15 02:43:01 -07:00
Jeffrey Seyfried
6f0ee45502 Add regression test. 2016-09-15 08:16:20 +00:00
Jeffrey Seyfried
b232f6d9fe Avoid loading and parsing unconfigured non-inline modules. 2016-09-15 08:16:18 +00:00
bors
16ff9e22cd Auto merge of #36347 - knight42:str-replacen, r=alexcrichton
Implement std::str::replacen

Replaces first N matches of a pattern with another string.

```
assert_eq!("acaaa".replacen(a, "b", 3), "bcbba")
```
2016-09-14 20:29:15 -07:00
Corey Farwell
5cab9525ae Don't ignore a doc code-block we can compile. 2016-09-14 22:49:36 -04:00
Eugene Bulkin
b6321bd133 Add feature crate attribute for duration_checked_ops to docs 2016-09-14 17:13:06 -07:00
Eugene Bulkin
f2eb4f11d0 Fix doc-tests for Duration 2016-09-14 15:41:19 -07:00
bors
6ffdda1ba1 Auto merge of #36293 - liigo:docblock-short, r=steveklabnik
rustdoc: don't collapse `docblock-short`

![docblock-short](https://cloud.githubusercontent.com/assets/346530/18267298/137d2542-7451-11e6-9c8e-dd4e1f1fea29.png)
2016-09-14 15:39:23 -07:00
Tshepang Lekhonkhobe
a6da082e10 doc: make that sound better 2016-09-14 22:47:56 +02:00
bors
5bdf79bf37 Auto merge of #36270 - petrochenkov:pipwarnagain, r=nikomatsakis
Make `private_in_public` compatibility lint warn-by-default again

More details: https://internals.rust-lang.org/t/regression-report-stable-2016-08-16-vs-beta-2016-08-26/3930/10

r? @nikomatsakis
2016-09-14 12:04:30 -07:00
Ulrik Sverdrup
a4ee9c6e96 core: Use primitive indexing in slice's Index/IndexMut
[T]'s Index implementation is normally not used for indexing, instead
the compiler supplied indexing is used.

Use the compiler supplied version in Index/IndexMut.

This removes an inconsistency:

Compiler supplied bound check failures look like this:

thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'

If you convince Rust to use the Index impl for slices, bounds check
failure looks like this instead:

thread 'main' panicked at 'assertion failed: index < self.len()'

The latter is used if you for example use Index generically::

   use std::ops::Index;
   fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }

   foo(&[1, 2, 3][..])
2016-09-14 20:19:35 +02:00
Guillaume Gomez
35584629f4 Update E0049 to new error format 2016-09-14 19:03:18 +02:00
bors
5a5736db91 Auto merge of #36472 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests

- Successful merges: #36334, #36335, #36363, #36374, #36467
- Failed merges:
2016-09-14 08:28:05 -07:00
Alex Burka
0d3d23bdee add stronger warning to CString::from_raw 2016-09-14 15:24:04 +00:00
Guillaume Gomez
e368cdd2d5 Rollup merge of #36467 - frewsxcv:ipaddr, r=GuillaumeGomez
Add doc examples for std::net::IpAddr construction.

None
2016-09-14 17:15:37 +02:00
Guillaume Gomez
a89690ec00 Rollup merge of #36396 - athulappadan:Default-docs, r=bluss
Documentation of what Default does for each type

Addresses #36265
I haven't changed the following types due to doubts:

1)src/libstd/ffi/c_str.rs
2)src/libcore/iter/sources.rs
3)src/libcore/hash/mod.rs
4)src/libcore/hash/mod.rs
5)src/librustc/middle/privacy.rs

r? @steveklabnik
2016-09-14 17:15:37 +02:00
Guillaume Gomez
4476b7b43b Rollup merge of #36374 - dangcheng:patch-1, r=steveklabnik
book: fix mistake (File::open -> File::create)
2016-09-14 17:15:37 +02:00
Guillaume Gomez
99c2f72814 Rollup merge of #36363 - GuillaumeGomez:add_urls, r=steveklabnik
Add urls

r? @steveklabnik
2016-09-14 17:15:37 +02:00
Guillaume Gomez
d939cbeefe Rollup merge of #36334 - GuillaumeGomez:run_but, r=steveklabnik
Set run button transparent instead of invisible

r? @steveklabnik

And of course a screenshot:

![screenshot from 2016-09-08 01-15-45](https://cloud.githubusercontent.com/assets/3050060/18331849/31fe1f8c-7562-11e6-9ae9-1dab44089ec6.png)
2016-09-14 17:15:36 +02:00
Niko Matsakis
6353e30bb2 clear obligations-added flag with nested fulfillcx
This flag is a debugging measure designed to detect cases where we start
a snapshot, create type variables, register obligations involving those
type variables in the fulfillment cx, and then have to unroll the
snapshot, leaving "dangling type variables" behind.  HOWEVER, in some
cases the flag is wrong. In particular, we sometimes create a
"mini-fulfilment-cx" in which we enroll obligations. As long as this
fulfillment cx is fully drained before we return, this is not a problem,
as there won't be any escaping obligations in the main cx. So we add a
fn to save/restore the flag.
2016-09-14 11:04:39 -04:00
bors
97b561a094 Auto merge of #35667 - ollie27:rustdoc_opaque_structs, r=steveklabnik
rustdoc: Don't add extra newlines for fully opaque structs

Changes the definition for braced structs with only private or hidden fields to save space on the page.

Before:
```
pub struct Vec<T> {
    // some fields omitted
}
```
After:
```
pub struct Vec<T> { /* fields omitted */ }
```

This also cleans up empty braced structs.

Before:
```
pub struct Foo {
}
```
After:
```
pub struct Foo {}
```

[before](https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html) [after](https://ollie27.github.io/rust_doc_test/std/vec/struct.Vec.html)

cc #34713
2016-09-14 04:57:47 -07:00
Nicholas Nethercote
4715985b07 Remove unused Token::to_binop function. 2016-09-14 15:57:16 +10:00