]> git.lizzy.rs Git - rust.git/log
rust.git
8 years agoRollup merge of #34356 - matklad:cstr-docs, r=GuillaumeGomez
Guillaume Gomez [Tue, 21 Jun 2016 21:54:28 +0000 (23:54 +0200)]
Rollup merge of #34356 - matklad:cstr-docs, r=GuillaumeGomez

Document `CStr::as_ptr` dangers.

r? @steveklabnik

Hi! I've tried to document `CString::new("hello").unwrap().as_ptr()` footgun. Related [RFC] and the original [discussion].

[RFC]: https://github.com/rust-lang/rfcs/pull/1642
[discussion]: https://users.rust-lang.org/t/you-should-stop-telling-people-that-safe-rust-is-always-safe/6094

8 years agoAuto merge of #34155 - ollie27:unzip, r=alexcrichton
bors [Tue, 21 Jun 2016 09:18:42 +0000 (02:18 -0700)]
Auto merge of #34155 - ollie27:unzip, r=alexcrichton

Remove unzip() SizeHint hack

This was using an invalid iterator so is likely to end with buggy
behaviour.

It also doesn't even benefit many type in std including Vec so removing it
shouldn't cause any problems.

Fixes: #33468
8 years agoAuto merge of #34189 - eddyb:mir-trans-imm, r=nagisa
bors [Tue, 21 Jun 2016 04:04:48 +0000 (21:04 -0700)]
Auto merge of #34189 - eddyb:mir-trans-imm, r=nagisa

trans: generalize immediate temporaries to all MIR locals.

Added `Mir::local_index` which gives you an unified index for `Arg`, `Var`, `Temp` and `ReturnPointer`.
Also available is `Mir::count_locals` which returns the total number of the above locals.
This simplifies a lot of the code which can treat all of the local lvalues in the same manner.
If we had `-> impl Iterator`, I could have added a bunch of useful `Ty` or `Lvalue` iterators for all locals.
We could of course manually write such iterators as they are needed.

The only place which currently takes advantage of unified locals is trans' alloca elision.
Currently it's not as good as it could be, due to our usage of `llvm.dbg.declare` in debug mode.
But passing some arguments and variables as immediates has some effect on release-mode `libsyntax`:

Old trans:
```
time: 11.500; rss: 710MB        translation
time: 0.002; rss: 710MB assert dep graph
time: 0.000; rss: 710MB serialize dep graph
  time: 4.410; rss: 628MB       llvm function passes [0]
  time: 84.485; rss: 633MB      llvm module passes [0]
  time: 23.898; rss: 634MB      codegen passes [0]
  time: 0.002; rss: 634MB       codegen passes [0]
time: 113.408; rss: 634MB       LLVM passes
```
`-Z orbit`, previously:
```
time: 12.588; rss: 723MB        translation
time: 0.002; rss: 723MB assert dep graph
time: 0.000; rss: 723MB serialize dep graph
  time: 4.597; rss: 642MB       llvm function passes [0]
  time: 77.347; rss: 646MB      llvm module passes [0]
  time: 24.703; rss: 648MB      codegen passes [0]
  time: 0.002; rss: 615MB       codegen passes [0]
time: 107.233; rss: 615MB       LLVM passes
```
`-Z orbit`, after this PR:
```
time: 13.820; rss: 672MB        translation
time: 0.002; rss: 672MB assert dep graph
time: 0.000; rss: 672MB serialize dep graph
  time: 3.969; rss: 591MB       llvm function passes [0]
  time: 72.294; rss: 595MB      llvm module passes [0]
  time: 24.610; rss: 597MB      codegen passes [0]
  time: 0.002; rss: 597MB       codegen passes [0]
time: 101.439; rss: 597MB       LLVM passes
```

8 years agoAuto merge of #34186 - GuillaumeGomez:err-code-check, r=alexcrichton
bors [Mon, 20 Jun 2016 22:54:17 +0000 (15:54 -0700)]
Auto merge of #34186 - GuillaumeGomez:err-code-check, r=alexcrichton

Implementation of #34168

r? @brson

cc @alexcrichton
cc @steveklabnik
cc @jonathandturner

I only updated `librustc_privacy/diagnostics.rs`, and I already found a case where the code doesn't throw the expected error code (E0448).

Fixes #34168.

8 years agotrans: generalize immediate temporaries to all MIR locals.
Eduard Burtescu [Mon, 20 Jun 2016 20:55:14 +0000 (23:55 +0300)]
trans: generalize immediate temporaries to all MIR locals.

8 years agotrans: noop drops don't need their lvalue in an alloca.
Eduard Burtescu [Thu, 9 Jun 2016 15:15:15 +0000 (18:15 +0300)]
trans: noop drops don't need their lvalue in an alloca.

8 years agotrans: derefs don't need the pointer in an alloca.
Eduard Burtescu [Thu, 9 Jun 2016 15:14:47 +0000 (18:14 +0300)]
trans: derefs don't need the pointer in an alloca.

8 years agotrans: split trans_consume off from trans_operand.
Eduard Burtescu [Thu, 9 Jun 2016 15:13:16 +0000 (18:13 +0300)]
trans: split trans_consume off from trans_operand.

8 years agoAdd error code flag
Guillaume Gomez [Thu, 9 Jun 2016 22:34:46 +0000 (00:34 +0200)]
Add error code flag

8 years agoAuto merge of #33950 - srinivasreddy:rtstartup_rustfmt, r=Manishearth
bors [Mon, 20 Jun 2016 09:32:07 +0000 (02:32 -0700)]
Auto merge of #33950 - srinivasreddy:rtstartup_rustfmt, r=Manishearth

run rustfmt on rtstartup folder

8 years agoAuto merge of #34348 - dsprenkels:issue-34194-test, r=alexcrichton
bors [Mon, 20 Jun 2016 05:18:52 +0000 (22:18 -0700)]
Auto merge of #34348 - dsprenkels:issue-34194-test, r=alexcrichton

Add regression test for #34194

This pull request adds a regression test for #34194.

Closes #34194.

8 years agoAuto merge of #34340 - marudor:master, r=japaric
bors [Mon, 20 Jun 2016 00:22:54 +0000 (17:22 -0700)]
Auto merge of #34340 - marudor:master, r=japaric

fix build for clang 8.0

With 10.12 and XCode 8-beta we got clang 8.
Simple addition as clang 8 will build as well.

8 years agoAuto merge of #34335 - ollie27:docs_collections_mods, r=GuillaumeGomez
bors [Sun, 19 Jun 2016 19:56:13 +0000 (12:56 -0700)]
Auto merge of #34335 - ollie27:docs_collections_mods, r=GuillaumeGomez

Add short summaries to btree modules

Also improve hash_map and hash_set module short summaries.

These are missing from [here](https://doc.rust-lang.org/nightly/std/collections/#modules).

r? @steveklabnik

8 years agoDocument `CStr::as_ptr` dangers.
Aleksey Kladov [Sun, 19 Jun 2016 08:55:34 +0000 (11:55 +0300)]
Document `CStr::as_ptr` dangers.

8 years agoAuto merge of #34313 - frewsxcv:panicking-example, r=steveklabnik
bors [Sun, 19 Jun 2016 09:24:15 +0000 (02:24 -0700)]
Auto merge of #34313 - frewsxcv:panicking-example, r=steveklabnik

Add example in docs for `std::thread::panicking`.

None

8 years agoAuto merge of #34351 - Stebalien:issue-22434, r=sfackler
bors [Sun, 19 Jun 2016 06:18:14 +0000 (23:18 -0700)]
Auto merge of #34351 - Stebalien:issue-22434, r=sfackler

Add test case for #22434

Closes #22434

8 years agoAuto merge of #34295 - jseyfried:cfg_decoration, r=eddyb
bors [Sun, 19 Jun 2016 03:12:09 +0000 (20:12 -0700)]
Auto merge of #34295 - jseyfried:cfg_decoration, r=eddyb

Perform `cfg` attribute processing on decorator-generated items

Fixes https://users.rust-lang.org/t/unused-attribute-warning-for-custom-derive-attribute/6180.
r? @nrc

8 years agoAuto merge of #34350 - Stebalien:test-30276, r=eddyb
bors [Sun, 19 Jun 2016 00:07:15 +0000 (17:07 -0700)]
Auto merge of #34350 - Stebalien:test-30276, r=eddyb

Add test case for #30276

Make sure that treating a DST tuple constructor as a function doesn't ICE.

Closes #30276

8 years agoAdd test case for #22434
Steven Allen [Sat, 18 Jun 2016 22:43:44 +0000 (18:43 -0400)]
Add test case for #22434

Closes #22434

8 years agoAdd test case for #30276
Steven Allen [Sat, 18 Jun 2016 22:29:52 +0000 (18:29 -0400)]
Add test case for #30276

Make sure that treating a DST tuple constructor as a function doesn't ICE.

Closes #30276

8 years agoAuto merge of #34310 - erickt:tuple-struct-attrs, r=nrc
bors [Sat, 18 Jun 2016 21:02:32 +0000 (14:02 -0700)]
Auto merge of #34310 - erickt:tuple-struct-attrs, r=nrc

Pretty-print attributes on tuple structs and add tests

This adds support to the pretty printer to print attributes added to tuple struct elements.  Furthermore, it adds a test that makes sure we will print attributes on all variant data types.

8 years agoAdd regression test for #34194
Daan Sprenkels [Sat, 18 Jun 2016 18:05:44 +0000 (20:05 +0200)]
Add regression test for #34194

8 years agoAuto merge of #34342 - GuillaumeGomez:E0406, r=eddyb
bors [Sat, 18 Jun 2016 17:58:25 +0000 (10:58 -0700)]
Auto merge of #34342 - GuillaumeGomez:E0406, r=eddyb

Removed unused E0406 and unused functions

Fixes #34301.

It removes the unused E0406 and also unused functions.

cc @eddyb

8 years agoRemove unused functions calls and unused E0406
Guillaume Gomez [Fri, 17 Jun 2016 10:33:55 +0000 (12:33 +0200)]
Remove unused functions calls and unused E0406

8 years agoAuto merge of #34336 - petrochenkov:icemctuple, r=arielb1
bors [Sat, 18 Jun 2016 14:20:12 +0000 (07:20 -0700)]
Auto merge of #34336 - petrochenkov:icemctuple, r=arielb1

Fix ICE in memory categorization of tuple patterns

Fixes https://github.com/rust-lang/rust/issues/34334

It seems to be ok for `pat_ty` to return `Err` even if type checking is done, because it uses `infcx.node_ty` which is supposed to return `Err` for all kinds of erroneous types so its callers could quickly bail out with `?`.

r? @arielb1

8 years agoAuto merge of #34314 - tshepang:misnamed, r=steveklabnik
bors [Sat, 18 Jun 2016 08:58:28 +0000 (01:58 -0700)]
Auto merge of #34314 - tshepang:misnamed, r=steveklabnik

doc: fix mis-named binding & remove not needed `mut`

8 years agofix build for clang 8.0
marudor [Sat, 18 Jun 2016 08:38:11 +0000 (10:38 +0200)]
fix build for clang 8.0

8 years agoFix ICE in memory categorization of tuple patterns
Vadim Petrochenkov [Fri, 17 Jun 2016 23:49:44 +0000 (02:49 +0300)]
Fix ICE in memory categorization of tuple patterns

8 years agoAdd short summaries to btree modules
Oliver Middleton [Fri, 17 Jun 2016 22:48:30 +0000 (23:48 +0100)]
Add short summaries to btree modules

Also improve hash_map and hash_set module short summaries.

8 years agoAuto merge of #34323 - GuillaumeGomez:unreachable_not_unreachable, r=pnkfelix
bors [Fri, 17 Jun 2016 22:33:00 +0000 (15:33 -0700)]
Auto merge of #34323 - GuillaumeGomez:unreachable_not_unreachable, r=pnkfelix

Fix panic when using debug in rustc

When I was using `println!("{:?}")` [here](https://github.com/rust-lang/rust/blob/master/src/librustc_resolve/lib.rs#L1610) and [here](https://github.com/rust-lang/rust/blob/master/src/librustc_typeck/collect.rs#L836), I was able to get into this `unreachache`.

8 years agoAdd example in docs for `std::thread::panicking`.
Corey Farwell [Thu, 16 Jun 2016 21:11:17 +0000 (23:11 +0200)]
Add example in docs for `std::thread::panicking`.

8 years agoAuto merge of #34292 - ollie27:rustdoc_depr_impl, r=GuillaumeGomez
bors [Fri, 17 Jun 2016 18:12:00 +0000 (11:12 -0700)]
Auto merge of #34292 - ollie27:rustdoc_depr_impl, r=GuillaumeGomez

rustdoc: Add stability notices to impl items

Also fixes missing stability notices on methods with no docs.

For example [`f64::is_positive`](https://doc.rust-lang.org/nightly/std/primitive.f64.html#method.is_positive) is missing its deprecation message.

8 years agoAuto merge of #34322 - pnkfelix:fix-rustc-ctags, r=alexcrichton
bors [Fri, 17 Jun 2016 14:58:33 +0000 (07:58 -0700)]
Auto merge of #34322 - pnkfelix:fix-rustc-ctags, r=alexcrichton

Fixed the `TAGS.rustc.emacs` and `TAGS.rustc.vi` make targets.

(They were added to `ctags.mk` in PR #33256, but I guess I must have
 only tested running `make TAGS.emacs TAGS.rustc.emacs` and not `make
 TAGS.rustc.emacs` on its own.)

8 years agoAuto merge of #33090 - bluss:special-zip-2, r=aturon
bors [Fri, 17 Jun 2016 10:36:32 +0000 (03:36 -0700)]
Auto merge of #33090 - bluss:special-zip-2, r=aturon

Specialize .zip() for efficient slice and slice iteration

The idea is to introduce a private trait TrustedRandomAccess and specialize .zip() for random access iterators into a counted loop.

The implementation in the PR is internal and has no visible effect in the API

Why a counted loop? To have each slice iterator compile to just a pointer, and both pointers are indexed with the same loop counter value in the generated code. When this succeeds, copying loops are readily recognized and replaced with memcpy and addition loops autovectorize well.

The TrustedRandomAccess approach works very well on the surface. Microbenchmarks optimize well, following the ideas above, and that is a dramatic improvement of .zip()'s codegen.

```rust
// old zip before this PR: bad, byte-for-byte loop
// with specialized zip: memcpy
pub fn copy_zip(xs: &[u8], ys: &mut [u8]) {
    for (a, b) in ys.iter_mut().zip(xs) {
        *a = *b;
    }
}

// old zip before this PR: single addition per iteration
// with specialized zip: vectorized
pub fn add_zip(xs: &[f32], ys: &mut [f32]) {
    for (a, b) in ys.iter_mut().zip(xs) { *a += *b; }
}

// old zip before this PR: single addition per iteration
// with specialized zip: vectorized (!!)
pub fn add_zip3(xs: &[f32], ys: &[f32], zs: &mut [f32]) {
    for ((a, b), c) in zs.iter_mut().zip(xs).zip(ys) { *a += *b * *c; }
}
```

Yet in more complex situations, the .zip() loop can still fall back to its old behavior where phantom null checks throw in fake premature end of the loop conditionals. Remember that a NULL inside
Option<(&T, &T)> makes it a `None` value and a premature (in this case)
end of the loop.

So even if we have 1) an explicit `Some` in the code and 2) the types of the pointers are `&T` or `&mut T` which are nonnull, we can still get a phantom null check at that point.

One example that illustrates the difference is `copy_zip` with slice versus Vec arguments. The involved iterator types are exactly the same, but the Vec version doesn't compile down to memcpy. Investigating into this, the function argument metadata emitted to llvm plays the biggest role. As eddyb summarized, we need nonnull for the loop to autovectorize and noalias for it to replace with memcpy.

There was an experiment to use `assume` to add a non-null assumption on each of the two elements in the specialized zip iterator, but this only helped in some of the test cases and regressed others. Instead I think the nonnull/noalias metadata issue is something we need to solve separately anyway.

These have conditionally implemented TrustedRandomAccess

- Enumerate
- Zip

These have not implemented it

- Map is sideeffectful. The forward case would be workable, but the double ended case is complicated.
- Chain, exact length semantics unclear
- Filter, FilterMap, FlatMap and many others don't offer random access and/or exact length

8 years agoFix panic when using debug
Guillaume Gomez [Fri, 17 Jun 2016 10:33:55 +0000 (12:33 +0200)]
Fix panic when using debug

8 years agoFixed the `TAGS.rustc.emacs` and `TAGS.rustc.vi` make targets.
Felix S. Klock II [Fri, 17 Jun 2016 10:07:48 +0000 (12:07 +0200)]
Fixed the `TAGS.rustc.emacs` and `TAGS.rustc.vi` make targets.

(They were added to `ctags.mk` in PR #33256, but I guess I must have
 only tested running `make TAGS.emacs TAGS.rustc.emacs` and not `make
 TAGS.rustc.emacs` on its own.)

8 years agoPretty-print attributes on tuple structs and add tests
Erick Tryzelaar [Fri, 17 Jun 2016 09:05:19 +0000 (10:05 +0100)]
Pretty-print attributes on tuple structs and add tests

This adds support to the pretty printer to print attributes
added to tuple struct elements.  Furthermore, it adds a test
that makes sure we will print attributes on all variant data
types.

8 years agoAuto merge of #34306 - arielb1:mir-dump-fixes, r=eddyb
bors [Fri, 17 Jun 2016 04:57:06 +0000 (21:57 -0700)]
Auto merge of #34306 - arielb1:mir-dump-fixes, r=eddyb

Fixes for `-Z dump-mir`

Do not overwrite the parent MIR when dumping promoted MIR.

r? @eddyb

8 years agoAuto merge of #34315 - Manishearth:rollup, r=Manishearth
bors [Fri, 17 Jun 2016 02:07:41 +0000 (19:07 -0700)]
Auto merge of #34315 - Manishearth:rollup, r=Manishearth

Rollup of 4 pull requests

- Successful merges: #34298, #34302, #34307, #34312
- Failed merges:

8 years agoRollup merge of #34312 - erickt:add-try, r=nikomatsakis
Manish Goregaokar [Thu, 16 Jun 2016 23:12:04 +0000 (00:12 +0100)]
Rollup merge of #34312 - erickt:add-try, r=nikomatsakis

Revert using ? for try! in the libsyntax pretty printer

The use of ...?instead of try!(...) in libsyntax makes extracting libsyntax into syntex quite painful since it's not stable yet. This makes backports take a much longer time and causes a lot of problems for the syntex dependencies. Even if it was, it'd take a few release cycles until syntex would be able to use it. Since it's not stable and that this feature is just syntax sugar, it would be most helpful if we could remove it.

cc #34311

8 years agoRollup merge of #34307 - nagisa:more-cache, r=arielb1
Manish Goregaokar [Thu, 16 Jun 2016 23:12:04 +0000 (00:12 +0100)]
Rollup merge of #34307 - nagisa:more-cache, r=arielb1

[MIR] Cache drops for early scope exits

Previously we would rebuild all drops on every early exit from a scope, which for code like:

```rust
match x {
    A => return 1,
    B => return 2,
    ...
    C => return 27
}
```

would produce 27 exactly same chains of drops for each return, basically a `O(n*m)` explosion. [This](https://cloud.githubusercontent.com/assets/679122/16125192/3355e32c-33fb-11e6-8564-c37cab2477a0.png) is such a case for a match on 80-variant enum with 3 droppable variables in scope.

For [`::core::iter::Iterator::partial_cmp`](https://github.com/rust-lang/rust/blob/6edea2cfda2818f0a76f4bac2d18a30feb54c137/src/libcore/iter/iterator.rs#L1909) the CFG looked like [this](https://cloud.githubusercontent.com/assets/679122/16122708/ce0024d8-33f0-11e6-93c2-e1c44b910db2.png) (after initial SimplifyCfg). With this patch the CFG looks like [this](https://cloud.githubusercontent.com/assets/679122/16122806/294fb16e-33f1-11e6-95f6-16c5438231af.png) instead.

Some numbers (overall very small wins, however neither of the crates have many cases which abuse this corner case):

|                         | old time | old rss | new time | new rss  |
|-------------------------|----------|---------|----------|----------|
| core dump               | 0.879        |   224MB     |   0.871  |  223MB   |
| core MIR passes         | 0.759        | 224MB       | 0.718    | 223MB    |
| core MIR codegen passes | 1.762        | 230MB       | 1.442    | 228MB    |
| core trans              | 3.263        | 279MB       | 3.116    | 278MB    |
| core llvm passes        | 5.611        | 263MB       | 5.565    | 263MB    |
| std dump                | 0.487        |   190MB     |   0.475  |  192MB   |
| std MIR passes          | 0.311       | 190MB       | 0.288    | 192MB    |
| std MIR codegen passes  | 0.753        | 195MB       | 0.720    | 197MB    |
| std trans               | 2.589        | 287MB       | 2.523    | 287MB    |
| std llvm passes         | 7.268        | 245MB       | 7.447    | 246MB    |

8 years agoRollup merge of #34302 - retep998:🐇-sanity-is-overrated-🐇, r=alexcrichton
Manish Goregaokar [Thu, 16 Jun 2016 23:12:04 +0000 (00:12 +0100)]
Rollup merge of #34302 - retep998:🐇-sanity-is-overrated-🐇, r=alexcrichton

Fix issue where rustbuild expected msvc to have ar

I made `cc2ar` return an `Option`.

r? @alexcrichton

8 years agoRollup merge of #34298 - nrc:save-parent, r=eddyb
Manish Goregaokar [Thu, 16 Jun 2016 23:12:04 +0000 (00:12 +0100)]
Rollup merge of #34298 - nrc:save-parent, r=eddyb

save-analysis: some tweaks

8 years agoAuto merge of #34272 - jseyfried:simplify_gated_cfg_checking, r=nrc
bors [Thu, 16 Jun 2016 23:09:45 +0000 (16:09 -0700)]
Auto merge of #34272 - jseyfried:simplify_gated_cfg_checking, r=nrc

Simplify gated cfg checking

r? @nrc

8 years agodoc: fix mis-named binding & remove not needed `mut`
Tshepang Lekhonkhobe [Thu, 16 Jun 2016 21:20:22 +0000 (23:20 +0200)]
doc: fix mis-named binding & remove not needed `mut`

8 years agoCache drops for early scope exits
Simonas Kazlauskas [Thu, 16 Jun 2016 15:28:30 +0000 (18:28 +0300)]
Cache drops for early scope exits

Previously we would rebuild all drops on every early exit from a scope, which for code like:

```rust
match x {
    a => return 1,
    b => return 2,
    ...
    z => return 27
}
```

would produce 27 exactly same chains of drops for each return, a O(n*m) explosion in drops.

8 years agoRevert using ? for try! in the libsyntax pretty printer
Erick Tryzelaar [Thu, 16 Jun 2016 20:16:55 +0000 (21:16 +0100)]
Revert using ? for try! in the libsyntax pretty printer

The use of ...?instead of try!(...) in libsyntax makes
extracting libsyntax into syntex quite painful since it's
not stable yet. This makes backports take a much longer time
and causes a lot of problems for the syntex dependencies. Even
if it was, it'd take a few release cycles until syntex would
be able to use it. Since it's not stable and that this feature
is just syntax sugar, it would be most helpful if we could remove
it.

cc #34311

8 years agoSimplify gated cfg checking
Jeffrey Seyfried [Sat, 11 Jun 2016 01:37:24 +0000 (01:37 +0000)]
Simplify gated cfg checking

8 years agoAuto merge of #34187 - luser:extern-crate-abspaths, r=michaelwoerister
bors [Thu, 16 Jun 2016 19:13:25 +0000 (12:13 -0700)]
Auto merge of #34187 - luser:extern-crate-abspaths, r=michaelwoerister

Add an abs_path member to FileMap, use it when writing debug info.

Fixes #34179.

When items are inlined from extern crates, the filename in the debug info
is taken from the FileMap that's serialized in the rlib metadata.
Currently this is just FileMap.name, which is whatever path is passed to rustc.
Since libcore and libstd are built by invoking rustc with relative paths,
they wind up with relative paths in the rlib, and when linked into a binary
the debug info uses relative paths for the names, but since the compilation
directory for the final binary, tools trying to read source filenames
will wind up with bad paths. We noticed this in Firefox with source
filenames from libcore/libstd having bad paths.

This change stores an absolute path in FileMap.abs_path, and uses that
if available for writing debug info. This is not going to magically make
debuggers able to find the source, but it will at least provide sensible
paths.

8 years agoAdd an abs_path member to FileMap, use it when writing debug info.
Ted Mielczarek [Thu, 9 Jun 2016 20:36:20 +0000 (16:36 -0400)]
Add an abs_path member to FileMap, use it when writing debug info.

When items are inlined from extern crates, the filename in the debug info
is taken from the FileMap that's serialized in the rlib metadata.
Currently this is just FileMap.name, which is whatever path is passed to rustc.
Since libcore and libstd are built by invoking rustc with relative paths,
they wind up with relative paths in the rlib, and when linked into a binary
the debug info uses relative paths for the names, but since the compilation
directory for the final binary, tools trying to read source filenames
will wind up with bad paths. We noticed this in Firefox with source
filenames from libcore/libstd having bad paths.

This change stores an absolute path in FileMap.abs_path, and uses that
if available for writing debug info. This is not going to magically make
debuggers able to find the source, but it will at least provide sensible
paths.

8 years agoAuto merge of #34296 - dsprenkels:issue-23122-tests, r=alexcrichton
bors [Thu, 16 Jun 2016 16:26:36 +0000 (09:26 -0700)]
Auto merge of #34296 - dsprenkels:issue-23122-tests, r=alexcrichton

Add regression tests for #23122

This PR adds two regression tests for #23122.

Closes #23122.

8 years agofix MirSource::Promoted handling
Ariel Ben-Yehuda [Thu, 16 Jun 2016 14:30:09 +0000 (17:30 +0300)]
fix MirSource::Promoted handling

8 years agostop having `'static` in dump-mir names
Ariel Ben-Yehuda [Thu, 16 Jun 2016 13:52:37 +0000 (16:52 +0300)]
stop having `'static` in dump-mir names

8 years agouse a different filename for original and promoted MIRs
Ariel Ben-Yehuda [Thu, 16 Jun 2016 13:52:20 +0000 (16:52 +0300)]
use a different filename for original and promoted MIRs

8 years agoAuto merge of #34239 - jseyfried:fix_macro_use_scope_regression, r=nrc
bors [Thu, 16 Jun 2016 13:37:18 +0000 (06:37 -0700)]
Auto merge of #34239 - jseyfried:fix_macro_use_scope_regression, r=nrc

Revert a change in the scope of macros imported from crates to fix a regression

Fixes #34212.
The regression was caused by #34032, which changed the scope of macros imported from extern crates to match the scope of macros imported from modules.
r? @nrc

8 years agoFix issue where rustbuild expected msvc to have ar
Peter Atashian [Thu, 16 Jun 2016 12:38:06 +0000 (08:38 -0400)]
Fix issue where rustbuild expected msvc to have ar

Signed-off-by: Peter Atashian <retep998@gmail.com>
8 years agoAuto merge of #34216 - jseyfried:nested_cfg_attr, r=nrc
bors [Thu, 16 Jun 2016 10:49:55 +0000 (03:49 -0700)]
Auto merge of #34216 - jseyfried:nested_cfg_attr, r=nrc

Support nested `cfg_attr` attributes

Support arbitrarily deeply nested `cfg_attr` attributes (e.g. `#[cfg_attr(foo, cfg_attr(bar, baz))]`).
This makes configuration idempotent.

Currently, the nighties do not support any `cfg_attr` nesting. Stable and beta support just one level of `cfg_attr` nesting (expect for attributes on macro-expanded nodes, where no nesting is supported).

This is a [breaking-change]. For example, the following would break:
```rust
macro_rules! m { () => {
    #[cfg_attr(all(), cfg_attr(all(), cfg(foo)))]
    fn f() {}
} }
m!();

fn main() { f() } //~ ERROR unresolved name `f`
```
r? @nrc

8 years agosave-analysis: add a decl_id for methods
Nick Cameron [Thu, 16 Jun 2016 10:28:39 +0000 (11:28 +0100)]
save-analysis: add a decl_id for methods

This is non-null if the method is in a (non-inherent) impl and in that case will be the id for the method declaration in the implemented trait.

8 years agoAuto merge of #34290 - arielb1:short-ladder, r=eddyb
bors [Thu, 16 Jun 2016 08:01:26 +0000 (01:01 -0700)]
Auto merge of #34290 - arielb1:short-ladder, r=eddyb

don't generate drop ladder steps for fields that don't need dropping

cc @eddyb

This should help with #34166

8 years agoStrip unconfigured nodes from decorator-generated AST
Jeffrey Seyfried [Thu, 16 Jun 2016 06:44:53 +0000 (06:44 +0000)]
Strip unconfigured nodes from decorator-generated AST

8 years agoAdd regression tests for #23122
Daan Sprenkels [Thu, 16 Jun 2016 07:46:25 +0000 (09:46 +0200)]
Add regression tests for #23122

8 years agoAvoid expanding decorator-generated items twice
Jeffrey Seyfried [Thu, 16 Jun 2016 06:44:07 +0000 (06:44 +0000)]
Avoid expanding decorator-generated items twice

8 years agofix codegen-units fallout
Ariel Ben-Yehuda [Thu, 16 Jun 2016 06:26:44 +0000 (09:26 +0300)]
fix codegen-units fallout

8 years agoAuto merge of #34000 - estebank:missingargs, r=jseyfried
bors [Thu, 16 Jun 2016 05:12:26 +0000 (22:12 -0700)]
Auto merge of #34000 - estebank:missingargs, r=jseyfried

Show types of all args when missing args

When there're missing arguments in a function call, present a list of
all the expected types:

```rust
fn main() {
    t("");
}

fn t(a: &str, x: String) {}
```

```bash
% rustc file.rs
file.rs:3:5: 2:8 error: this function takes 2 parameters but 0
parameters were supplied [E0061]
file.rs:3     t();
              ^~~
file.rs:3:5: 2:8 help: run `rustc --explain E0061` to see a detailed explanation
file.rs:3:5: 2:8 note: the following parameter types were expected: &str, std::string::String
error: aborting due to previous error
```

Fixes #33649

8 years agoAuto merge of #34291 - Manishearth:rollup, r=Manishearth
bors [Thu, 16 Jun 2016 02:25:45 +0000 (19:25 -0700)]
Auto merge of #34291 - Manishearth:rollup, r=Manishearth

Rollup of 4 pull requests

- Successful merges: #34207, #34268, #34270, #34290
- Failed merges:

8 years agoShow types of all args when missing args
Esteban Küber [Wed, 1 Jun 2016 01:23:22 +0000 (18:23 -0700)]
Show types of all args when missing args

When there're missing arguments in a function call, present a list of
all the expected types:

```rust
fn main() {
    t("");
}

fn t(a: &str, x: String) {}
```

```bash
% rustc file.rs
file.rs:3:5: 2:8 error: this function takes 2 parameters but 0
parameters were supplied [E0061]
file.rs:3     t();
              ^~~
file.rs:3:5: 2:8 help: run `rustc --explain E0061` to see a detailed explanation
file.rs:3:5: 2:8 note: the following parameter types were expected: &str, std::string::String
error: aborting due to previous error
```

Fixes #33649

8 years agoRollup merge of #34270 - gkoz:error_file_exists, r=alexcrichton
Manish Goregaokar [Wed, 15 Jun 2016 21:59:20 +0000 (22:59 +0100)]
Rollup merge of #34270 - gkoz:error_file_exists, r=alexcrichton

Add ERROR_FILE_EXISTS to ErrorKind conversion on Windows

Bug report: https://users.rust-lang.org/t/detecting-error-kind-for-opening-file/6215
Reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx#error_file_exists

8 years agoRollup merge of #34268 - zackmdavis:if_let_over_none_unit_arm, r=jseyfried
Manish Goregaokar [Wed, 15 Jun 2016 21:59:20 +0000 (22:59 +0100)]
Rollup merge of #34268 - zackmdavis:if_let_over_none_unit_arm, r=jseyfried

prefer `if let` to match with `None => ()` arm in some places

Casual grepping revealed some places in the codebase (some of which
antedated `if let`'s December 2014 stabilization in c200ae5a) where we
were using a match with a `None => ()` arm where (in the present
author's opinion) an `if let` conditional would be more readable. (Other
places where matching to the unit value did seem to better express the
intent were left alone.)

It's likely that we don't care about making such trivial,
non-functional, sheerly æsthetic changes.

But if we do, this is a patch.

8 years agoRollup merge of #34207 - petrochenkov:nohyg, r=jseyfried
Manish Goregaokar [Wed, 15 Jun 2016 21:59:20 +0000 (22:59 +0100)]
Rollup merge of #34207 - petrochenkov:nohyg, r=jseyfried

Remove last traces of identifier hygiene from HIR

https://github.com/rust-lang/rust/pull/34095/commits/e783a0a5e39d5ae2fa147508197d09a51530fae8 removed the [last](https://github.com/rust-lang/rust/pull/33654#discussion_r63415218) [use](https://github.com/rust-lang/rust/pull/33654#discussion_r63416284) of hygiene at post-resolve compilation stages, so we can avoid renaming during lowering to HIR and just keep original names.

r? @nrc

8 years agorustdoc: Add stability notices to impl items
Oliver Middleton [Wed, 15 Jun 2016 22:55:11 +0000 (23:55 +0100)]
rustdoc: Add stability notices to impl items

Also fixes missing stability notices on methods with no docs.

8 years agodon't generate drop ladder steps for fields that don't need dropping
Ariel Ben-Yehuda [Wed, 15 Jun 2016 21:24:31 +0000 (00:24 +0300)]
don't generate drop ladder steps for fields that don't need dropping

8 years agoAuto merge of #34220 - srinivasreddy:rf_cargotest, r=brson
bors [Wed, 15 Jun 2016 20:11:19 +0000 (13:11 -0700)]
Auto merge of #34220 - srinivasreddy:rf_cargotest, r=brson

run rustfmt on cargotest folder in src/tools/cargotest

8 years agoAuto merge of #34218 - srinivasreddy:rf_linkchecker, r=brson
bors [Wed, 15 Jun 2016 17:28:30 +0000 (10:28 -0700)]
Auto merge of #34218 - srinivasreddy:rf_linkchecker, r=brson

run rustfmt on linkchecker folderin src/tools/linkchecker

8 years agoprefer `if let` to match with `None => ()` arm in some places
Zack M. Davis [Tue, 14 Jun 2016 05:43:30 +0000 (22:43 -0700)]
prefer `if let` to match with `None => ()` arm in some places

Casual grepping revealed some places in the codebase (some of which
antedated `if let`'s December 2014 stabilization in c200ae5a) where we
were using a match with a `None => ()` arm where (in the present
author's opinion) an `if let` conditional would be more readable. (Other
places where matching to the unit value did seem to better express the
intent were left alone.)

It's likely that we don't care about making such trivial,
non-functional, sheerly æsthetic changes.

But if we do, this is a patch.

8 years agoAuto merge of #33300 - seanmonstar:map-entry-take, r=alexcrichton
bors [Wed, 15 Jun 2016 14:37:27 +0000 (07:37 -0700)]
Auto merge of #33300 - seanmonstar:map-entry-take, r=alexcrichton

Map::Entry methods to recover key and value together

See https://github.com/rust-lang/rust/issues/32281#issuecomment-213066344

8 years agoMap::Entry::take() method to recover key and value together
Sean McArthur [Tue, 14 Jun 2016 12:22:41 +0000 (05:22 -0700)]
Map::Entry::take() method to recover key and value together

8 years agoAuto merge of #34180 - durka:patch-24, r=brson
bors [Wed, 15 Jun 2016 11:48:29 +0000 (04:48 -0700)]
Auto merge of #34180 - durka:patch-24, r=brson

derive Hash (and not Copy) for ranges

Fixes #34170.

Also, `RangeInclusive` was `Copy` by mistake -- fix that, which is a [breaking-change] to that unstable type.

8 years agoFix a docs typo
Gleb Kozyrev [Tue, 14 Jun 2016 16:47:05 +0000 (19:47 +0300)]
Fix a docs typo

8 years agoTest ErrorKind::AlreadyExists for files
Gleb Kozyrev [Tue, 14 Jun 2016 16:45:42 +0000 (19:45 +0300)]
Test ErrorKind::AlreadyExists for files

8 years agoAuto merge of #34263 - ollie27:docs_ip, r=alexcrichton
bors [Wed, 15 Jun 2016 03:36:31 +0000 (20:36 -0700)]
Auto merge of #34263 - ollie27:docs_ip, r=alexcrichton

Improve IP reserved address docs

- Add links to all RFCs to make it clear these are not Rust RFCs.
- Correct RFC numbers to match the numbers in [RFC 6890](https://tools.ietf.org/html/rfc6890)
- Clean up formatting to show addresses and ranges in parentheses like (255.255.255.255)

r? @steveklabnik

8 years agoAuto merge of #34245 - ollie27:rustdoc_redirect_rename, r=alexcrichton
bors [Wed, 15 Jun 2016 00:11:05 +0000 (17:11 -0700)]
Auto merge of #34245 - ollie27:rustdoc_redirect_rename, r=alexcrichton

rustdoc: Fix redirect pages for renamed reexports

We need to use the name of the target not the name of the current item
when creating the link.

An example in `std` is [`std::sys::ext`](https://doc.rust-lang.org/nightly/std/sys/ext/index.html).

8 years agoAuto merge of #34221 - srinivasreddy:rm_redundant, r=alexcrichton
bors [Tue, 14 Jun 2016 20:42:28 +0000 (13:42 -0700)]
Auto merge of #34221 - srinivasreddy:rm_redundant, r=alexcrichton

remove redundant test case in bitvector.rs

`bitvec_iter_works_2` does exactly same as `bitvec_iter_works_1`, so i removed it.

8 years agoAuto merge of #34234 - GuillaumeGomez:bad_inlining, r=steveklabnik
bors [Tue, 14 Jun 2016 14:49:56 +0000 (07:49 -0700)]
Auto merge of #34234 - GuillaumeGomez:bad_inlining, r=steveklabnik

Fix invalid inlining

r? @steveklabnik

So to put a context. @nox found an issue on the generated doc:

![screenshot from 2016-06-11 19-53-38](https://cloud.githubusercontent.com/assets/3050060/15987898/f7341de0-303b-11e6-9cd7-f2a6df423ee7.png)

So as you can see, the two variants are on the same where they shouldn't. I found out that the issue is also on structs:

![screenshot from 2016-06-11 19-53-31](https://cloud.githubusercontent.com/assets/3050060/15987900/0f66c5de-303c-11e6-90fc-5e49d11b6903.png)

And so such is the result of the PR:

![screenshot from 2016-06-12 01-15-21](https://cloud.githubusercontent.com/assets/3050060/15987904/19d9183c-303c-11e6-91c1-7c3f1163fbb0.png)
![screenshot from 2016-06-12 01-15-24](https://cloud.githubusercontent.com/assets/3050060/15987905/1b5d2db0-303c-11e6-8f43-9a8ad2371007.png)

8 years agorustdoc: Fix redirect pages for renamed reexports
Oliver Middleton [Sun, 12 Jun 2016 17:27:17 +0000 (18:27 +0100)]
rustdoc: Fix redirect pages for renamed reexports

We need to use the name of the target not the name of the current item
when creating the link.

8 years agospecialize zip: Use associated type for specialized zip struct data
Ulrik Sverdrup [Fri, 22 Apr 2016 16:47:42 +0000 (18:47 +0200)]
specialize zip: Use associated type for specialized zip struct data

The associated type must be 'static to avoid dropck related errors.

8 years agospecialize zip: Add benchmarks
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: Add benchmarks

8 years agospecialize zip: Add codegen test
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: Add codegen test

8 years agospecialize zip: TrustedRandomAccess for Enumerate
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: TrustedRandomAccess for Enumerate

8 years agospecialize zip: TrustedRandomAccess for Zip
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: TrustedRandomAccess for Zip

8 years agospecialize zip: Specialize .zip() for TrustedRandomAccess iterators
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: Specialize .zip() for TrustedRandomAccess iterators

This allows common iterator compositions like a.zip(b) where a, b
are slice::{Iter, IterMut} compile to *much* better code.

8 years agospecialize zip: Implement TrustedRandomAccess for slice iterators
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: Implement TrustedRandomAccess for slice iterators

8 years agospecialize zip: Introduce TrustedRandomAccess trait
Ulrik Sverdrup [Thu, 21 Apr 2016 19:35:39 +0000 (21:35 +0200)]
specialize zip: Introduce TrustedRandomAccess trait

8 years agoAuto merge of #34232 - ollie27:rustdoc_inline, r=alexcrichton
bors [Tue, 14 Jun 2016 12:04:38 +0000 (05:04 -0700)]
Auto merge of #34232 - ollie27:rustdoc_inline, r=alexcrichton

rustdoc: Don't inline #[doc(hidden)] pub use

Currently if a `#[doc(hidden)] pub use` item is inlined the `hidden`
attribute is ignored so the item can appear in the docs. By never inlining
such imports, they can be stripped.

An example in `std` is [`__OsLocalKeyInner`](https://doc.rust-lang.org/nightly/std/thread/struct.__OsLocalKeyInner.html) which clearly should not be documented.

8 years agoAdd ERROR_FILE_EXISTS to ErrorKind conversion on Windows
Gleb Kozyrev [Tue, 14 Jun 2016 09:04:24 +0000 (12:04 +0300)]
Add ERROR_FILE_EXISTS to ErrorKind conversion on Windows

Bug report:
https://users.rust-lang.org/t/detecting-error-kind-for-opening-file/6215
Reference:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx#error_file_exists

8 years agoAuto merge of #34266 - liigo:patch-8, r=Manishearth
bors [Tue, 14 Jun 2016 07:24:33 +0000 (00:24 -0700)]
Auto merge of #34266 - liigo:patch-8, r=Manishearth

reference: link to proper ffi attributes

8 years agoAuto merge of #33749 - jseyfried:fix_call_site_span, r=nrc
bors [Tue, 14 Jun 2016 04:07:30 +0000 (21:07 -0700)]
Auto merge of #33749 - jseyfried:fix_call_site_span, r=nrc

Fix macro call site spans

Fix macro call site spans.
r? @nrc

8 years agoreference: link to proper ffi attributes
Liigo Zhuang [Tue, 14 Jun 2016 02:50:48 +0000 (10:50 +0800)]
reference: link to proper ffi attributes

8 years agoAuto merge of #34262 - dsprenkels:enum_pattern_resolve_ice, r=eddyb
bors [Tue, 14 Jun 2016 01:26:30 +0000 (18:26 -0700)]
Auto merge of #34262 - dsprenkels:enum_pattern_resolve_ice, r=eddyb

Add regression test for #33293

This PR adds a regression test for #33293.

Closes #33293.
r? @eddyb

8 years agoReplace `println!("");` invocations with calls to a dummy function in debuginfo test
Jeffrey Seyfried [Sat, 28 May 2016 08:30:08 +0000 (01:30 -0700)]
Replace `println!("");` invocations with calls to a dummy function in debuginfo test

8 years agoImprove IP reserved address docs
Oliver Middleton [Mon, 13 Jun 2016 22:49:04 +0000 (23:49 +0100)]
Improve IP reserved address docs

- Add links to all RFCs to make it clear these are not Rust RFCs.
- Correct RFC numbers to match the numbers in [RFC 6890](https://tools.ietf.org/html/rfc6890)
- Clean up formatting to show addresses and ranges in parentheses like (255.255.255.255)