Commit Graph

61907 Commits

Author SHA1 Message Date
Niko Matsakis
d79ad36cf5 walk the bodies "in order" by traversing the crate
Otherwise the errors from borrowck come out in an unpredictable
order.
2017-02-28 08:43:47 -05:00
Niko Matsakis
3e9bddad7b remove Option from the tables field 2017-02-28 08:43:47 -05:00
Niko Matsakis
cc2e4cd7e3 use visit_all_bodies_in_krate for borrowck instead of item-likes 2017-02-28 08:43:47 -05:00
Niko Matsakis
085d71c3ef remove special-case code for statics and just use borrowck_fn
Fixes #38520
2017-02-28 08:43:47 -05:00
Niko Matsakis
a9ec8841ef make borrowck_fn and friends create bccx 2017-02-28 08:43:47 -05:00
Niko Matsakis
530b92cfdd remove the borrowck stats 2017-02-28 08:43:47 -05:00
Niko Matsakis
03e8b26f35 rewrite borrowck_fn to only use the body-id 2017-02-28 08:43:47 -05:00
Niko Matsakis
d885e4ce9d add visit_all_bodies_in_krate helper 2017-02-28 08:43:47 -05:00
Niko Matsakis
b3a482ca9b move the FreeRegionMap into TypeckTables 2017-02-28 08:43:47 -05:00
Corey Farwell
a851fc1441 Rollup merge of #40131 - MajorBreakfast:patch-3, r=steveklabnik
Make lifetime elision docs clearer

Previously it said
"It's forbidden to allow reasoning about types based on the item signature alone."

I think that sentence is wrong. Rust **uses** the item signatures to perform type inference within the body. I think what's meant is the other way around: It does not infer types for item signatures.

r? @steveklabnik
2017-02-28 08:33:10 -05:00
Corey Farwell
c4b6c98f35 Rollup merge of #40126 - GuillaumeGomez:fmt-write-docs, r=frewsxcv
Add missing docs and examples for fmt::Write

r? @frewsxcv
2017-02-28 08:33:09 -05:00
Corey Farwell
da703a810b Rollup merge of #40124 - koba-e964:patch-1, r=steveklabnik
Remove unnecessary "for"
2017-02-28 08:33:08 -05:00
Corey Farwell
6ac7bf5c67 Rollup merge of #40122 - robinst:process-add-example-for-writing-to-stdin, r=alexcrichton
Example for how to provide stdin using std::process::Command

Spawning a child process and writing to its stdin is a bit tricky due to
`as_mut` and having to use a limited borrow. An example for this might
help newer users.

r? @steveklabnik
2017-02-28 08:33:07 -05:00
Corey Farwell
15cd43b4aa Rollup merge of #40057 - GuillaumeGomez:html-issue, r=frewsxcv
Fix nightly-only experimental API display

Before:

<img width="1440" alt="screen shot 2017-02-23 at 12 53 09" src="https://cloud.githubusercontent.com/assets/3050060/23258119/0c9cf6f2-f9c7-11e6-9989-15b4346dade0.png">

After:

<img width="1440" alt="screen shot 2017-02-23 at 12 51 40" src="https://cloud.githubusercontent.com/assets/3050060/23258076/e6881118-f9c6-11e6-826c-442a73502b59.png">

r? @frewsxcv
2017-02-28 08:33:05 -05:00
Corey Farwell
2623d35a21 Rollup merge of #40056 - keeperofdakeys:contributing, r=alexcrichton
Replace ./configure with config.toml in README.md and CONTRIBUTING.md

Replace ./configure with config.toml in README.md and CONTRIBUTING.md, so that new users aren't confused about which build system to use, and how to configure the build process.
2017-02-28 08:33:04 -05:00
Corey Farwell
922a262c43 Rollup merge of #40047 - topecongiro:master, r=est31
Add compile fail test for unboxed_closures feature

Hello, this is my first contribution to rust.
Issue #39059.
2017-02-28 08:33:02 -05:00
Corey Farwell
5be0d9ff04 Rollup merge of #40033 - GuillaumeGomez:condvar-docs, r=frewsxcv
Add missing urls and examples for Condvar docs

r? @frewsxcv
2017-02-28 08:33:01 -05:00
Corey Farwell
227285fd86 Rollup merge of #39977 - frewsxcv:error-reporting-cleanup, r=eddyb
librustc error_reporting.rs cleanup.

Read some code in librustc, mainly in error_reporting.rs, and cleaned up some things along the way. I recommend looking at each commit individually or looking at the [whitespace insensitive diff](https://github.com/rust-lang/rust/pull/39977/files?w=1).
2017-02-28 08:33:00 -05:00
Josh Driver
fb2d763eee Replace ./configure with config.toml in README.md and CONTRIBUTING.md 2017-02-28 21:40:00 +10:30
Josef Brandl
3c5001f0dd Unit-like structs doc: Improve code sample 2017-02-28 11:28:54 +01:00
Guillaume Gomez
992dd205dd Add missing url in sync structs 2017-02-28 11:22:30 +01:00
Guillaume Gomez
5933560324 Add missing docs and examples for fmt::Write 2017-02-28 11:14:32 +01:00
bors
5872a8d78b Auto merge of #40135 - alexcrichton:split-android, r=aturon
travis: Split Android into dist/test images

PRs can't land againt beta right now because the android bot is filling up on
disk space. I don't really know what's going on but the android bot is the
longest one to run anyway so it'll benefit from being split up regardless.
2017-02-28 10:00:31 +00:00
Josef Brandl
344ad9d8fc Structs doc: Change "pointers" to "references" 2017-02-28 10:58:13 +01:00
bors
e1cb9ba221 Auto merge of #40008 - eddyb:lazy-12, r=nikomatsakis
[12/12] On-demand type-checking, const-evaluation, MIR building & const-qualification.

_This is the last of a series ([prev](https://github.com/rust-lang/rust/pull/38813)) of patches designed to rework rustc into an out-of-order on-demand pipeline model for both better feature support (e.g. [MIR-based](https://github.com/solson/miri) early constant evaluation) and incremental execution of compiler passes (e.g. type-checking), with beneficial consequences to IDE support as well.
If any motivation is unclear, please ask for additional PR description clarifications or code comments._

<hr>

As this contains all of the changes that didn't fit neatly into other PRs, I'll be elaborating a bit:

### User-facing changes
* when determining whether an `impl Trait` type implements an auto-trait (e.g. `Send` or `Sync`), the function the `impl Trait` came from has to be inferred and type-checking, disallowing cycles
  * this results from not having an obvious place to put the "deferred obligation" in on-demand atm
  * while we could model side-effects like that and "post-processing passes" better, it's still more limiting than being able to know the result in the original function (e.g. specialization) *and* there are serious problems around region-checking (if a `Send` impl required `'static`, it wasn't enforced)
* early const-eval requires type-checking and const-qualification to be performed first, which means:
  * you get the intended errors before (if any) constant evaluation error that is simply fallout
  * associated consts should always work now, and `const fn` type parameters are properly tracked
    * don't get too excited, array lengths still can't depend on type parameters
* #38864 works as intended now, with `Self` being allowed in `impl` bounds
* #32205 is largely improved, with associated types being limited to "exact match" `impl`s (as opposed to traversing the specialization graph to resolve unspecified type parameters to their defaults in another `impl` or in the `trait`) *while* checking for overlaps building the specialization graph for that trait - once all the trait impls' have been checked for coherence (including ahead-of-time/on-demand), it's uniform
* [crater report](https://gist.github.com/eddyb/bbb869072468c7e08d6d808e75938051) looks clean (aside from `clippy` which broke due to `rustc` internal changes)

### Compiler-internal changes
* `ty::Generics`
  * no longer contains the actual type parameter defaults, instead they're associated with the type parameter's `DefId`, like associated types in a trait definition
    * this allows computing `ty::Generics` as a leaf (reading only its own HIR)
  * holds a mapping from `DefIndex` of type parameters to their indices
* `ty::AdtDef`
  * only tracks `#[repr(simd)]` in its `ReprOptions` `repr` field
  * doesn't contain `enum` discriminant values, but instead each variant either refers to either an explicit value for its discriminant, or the distance from the last explicit discriminant, if any
    * the `.discriminants(tcx)` method produces an iterator of `ConstInt` values, looking up explicit discriminants in a separate map, if necessary
    * this allows computing `ty::AdtDef` as a leaf (reading only its own HIR)
* Small note: the two above (`Generics`, `AdtDef`), `TraitDef` and `AssociatedItem` should probably end up as part of the HIR, eventually, as they're trivially constructed from it
* `ty::FnSig`
  * now also holds ABI and unsafety, alongside argument types, return type and C variadicity
  * `&ty::BareFnTy` and `ty::ClosureTy` have been replaced with `PolyFnSig = Binder<FnSig>`
    * `BareFnTy` was interned and `ClosureTy` was treated as non-trivial to `Clone` because they had a `PolyFnSig` and so used to contain a `Vec<Ty>` (now `&[Ty]`)
* `ty::maps`
  * all the `DepTrackingMap`s have been grouped in a structure available at `tcx.maps`
  * when creating the `tcx`, a set of `Providers` (one `fn` pointer per map) is required for the local crate, and one for all other crates (i.e. metadata loading), `librustc_driver` plugging the various crates (e.g. `librustc_metadata`, `librustc_typeck`, `librustc_mir`) into it
  * when a map is queried and the value is missing, the appropriate `fn` pointer from the `Providers` of that crate is called with the `TyCtxt` and the key being queried, to produce the value on-demand
* `rustc_const_eval`
  * demands both `typeck_tables` and `mir_const_qualif` (in preparation for miri)
  * tracks `Substs` in `ConstVal::Function` for `const fn` calls
  * returns `TypeckError` if type-checking has failed (or cases that can only be reached if it had)
    * this error kind is never reported, resulting in less noisy/redundant diagnostics
  * fixes #39548 (testcase by @larsluthman, taken from #39812, which this supersedes)
* on-demand has so far been hooked up to:
  * `rustc_metadata::cstore_impl`: `ty`, `generics`, `predicates`, `super_predicates`, `trait_def`, `adt_def`, `variances`, `associated_item_def_ids`, `associated_item`, `impl_trait_ref`, `custom_coerce_unsized_kind`, `mir`, `mir_const_qualif`, `typeck_tables`, `closure_kind`, `closure_type`
  * `rustc_typeck::collect`: `ty`, `generics`, `predicates`, `super_predicates`, `type_param_predicates`, `trait_def`, `adt_def`, `impl_trait_ref`
  * `rustc_typeck::coherence`: `coherent_trait`, `coherent_inherent_impls`
  * `rustc_typeck::check`: `typeck_tables`, `closure_type`, `closure_kind`
  * `rustc_mir::mir_map`: `mir`
  * `rustc_mir::transform::qualify_consts`: `mir_const_qualif`
2017-02-28 07:59:25 +00:00
Eduard Burtescu
f702b20dfd rustc_save_analysis: don't pollute the codemap with fake files. 2017-02-28 08:30:07 +02:00
Alex Crichton
500076e141 travis: Split Android into dist/test images
PRs can't land againt beta right now because the android bot is filling up on
disk space. I don't really know what's going on but the android bot is the
longest one to run anyway so it'll benefit from being split up regardless.
2017-02-27 21:20:23 -08:00
bors
3b4d54ab88 Auto merge of #40095 - alexcrichton:sccache-mingw, r=brson
appveyor: Use sccache on pc-windows-gnu for caching

Now that mozilla/sccache#43 is fixed the caching works for MinGW on Windows. We
still can't use it for MSVC just yet, but I'll try to revive that branch at some
point.
2017-02-28 02:26:09 +00:00
topecongiro
988be44c36 Add compile fail test for unboxed_closures feature 2017-02-28 11:18:50 +09:00
Guillaume Gomez
bd704baaf1 Update tests accordingly 2017-02-28 00:27:29 +01:00
Guillaume Gomez
d06f72d062 Apply the same transformation to every types 2017-02-28 00:27:19 +01:00
Josef Brandl
b70f929396 Make lifetime elision docs clearer 2017-02-27 21:49:05 +01:00
Alex Crichton
ac0521e526 travis: Fix typos in linux-tested-targets
These flags were supposed to be relevant for musl, not for gnu

cc #39979
2017-02-27 12:46:43 -08:00
Alex Crichton
65b46098b7 appveyor: Use sccache on pc-windows-gnu for caching
Now that mozilla/sccache#43 is fixed the caching works for MinGW on Windows. We
still can't use it for MSVC just yet, but I'll try to revive that branch at some
point.
2017-02-27 11:51:44 -08:00
Cengiz Can
e136bf6a4c Format note.rs with rustfmt 2017-02-27 22:30:47 +03:00
Cengiz Can
2f8ef50f7d Lower moved fn's visibility to supermodule 2017-02-27 22:23:00 +03:00
Cengiz Can
d21b0e35e7 Move two large error_reporting fn's to a separate file 2017-02-27 22:09:13 +03:00
bors
4be034e622 Auto merge of #38165 - Yamakaky:better-backtrace, r=petrochenkov
Improve backtrace formating while panicking.

Fixes #37783.

Done:

- Fix alignment of file paths for better readability
- `RUST_BACKTRACE=full` prints all the informations (current behaviour)
- `RUST_BACKTRACE=(short|yes)` is the default and does:
  - Skip irrelevant frames at the beginning and the end
  - Remove function address
  - Remove the current directory from the absolute paths
  - Remove `::hfabe6541873` at the end of the symbols
- `RUST_BACKTRACE=(0|no)` disables the backtrace.
- `RUST_BACKTRACE=<everything else>` is equivalent to `short` for
  backward compatibility.
- doc
- More uniform printing across platforms.

Removed, TODO in a new PR:

- Remove path prefix for libraries and libstd

Example of short backtrace:
```rust
fn fail() {
    panic!();
}

fn main() {
    let closure = || fail();
    closure();
}
```
Short:
```
thread 'main' panicked at 'explicit panic', t.rs:2
Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: t::fail
            at ./t.rs:2
   1: t::main::{{closure}}
            at ./t.rs:6
   2: t::main
            at ./t.rs:7
```
Full:
```
thread 'main' panicked at 'This function never returns!', t.rs:2
stack backtrace:
   0:     0x558ddf666478 - std::sys:👿:backtrace::tracing:👿:unwind_backtrace::hec84c9dd8389cc5d
                               at /home/yamakaky/dev/rust/rust/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1:     0x558ddf65d90e - std::sys_common::backtrace::_print::hfa25f8b31f4b4353
                               at /home/yamakaky/dev/rust/rust/src/libstd/sys_common/backtrace.rs:71
   2:     0x558ddf65cb5e - std::sys_common::backtrace::print::h9b711e11ac3ba805
                               at /home/yamakaky/dev/rust/rust/src/libstd/sys_common/backtrace.rs:60
   3:     0x558ddf66796e - std::panicking::default_hook::{{closure}}::h736d216e74748044
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:355
   4:     0x558ddf66743c - std::panicking::default_hook::h16baff397e46ea10
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:371
   5:     0x558ddf6682bc - std::panicking::rust_panic_with_hook::h6d5a9bb4eca42c80
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:559
   6:     0x558ddf64ea93 - std::panicking::begin_panic::h17dc549df2f10b99
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:521
   7:     0x558ddf64ec42 - t::diverges::he6bc43fc925905f5
                               at /tmp/p/t.rs:2
   8:     0x558ddf64ec5a - t::main::h0ffc20356b8a69c0
                               at /tmp/p/t.rs:6
   9:     0x558ddf6687f5 - core::ops::FnOnce::call_once::hce41f19c0db56f93
  10:     0x558ddf667cde - std::panicking::try::do_call::hd4c8c97efb4291df
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:464
  11:     0x558ddf698d77 - __rust_try
  12:     0x558ddf698c57 - __rust_maybe_catch_panic
                               at /home/yamakaky/dev/rust/rust/src/libpanic_unwind/lib.rs:98
  13:     0x558ddf667adb - std::panicking::try::h2c56ed2a59ec1d12
                               at /home/yamakaky/dev/rust/rust/src/libstd/panicking.rs:440
  14:     0x558ddf66cc9a - std::panic::catch_unwind::h390834e0251cc9af
                               at /home/yamakaky/dev/rust/rust/src/libstd/panic.rs:361
  15:     0x558ddf6809ee - std::rt::lang_start::hb73087428e233982
                               at /home/yamakaky/dev/rust/rust/src/libstd/rt.rs:57
  16:     0x558ddf64ec92 - main
  17:     0x7fecb869e290 - __libc_start_main
  18:     0x558ddf64e8b9 - _start
  19:                0x0 - <unknown>
```
2017-02-27 17:21:37 +00:00
Hiroki Kobayashi
e998666a77 Remove unnecessary "for" 2017-02-28 00:47:24 +09:00
Yamakaky
6398b2078d
This test is too hard to maintain cross-platform 2017-02-27 10:31:36 -05:00
bors
0ed75e1f47 Auto merge of #40121 - king6cong:fix-typo, r=apasel422
fix typo
2017-02-27 14:58:13 +00:00
Robin Stocker
8079bf35c5 Example for how to provide stdin using std::process::Command
Spawning a child process and writing to its stdin is a bit tricky due to
`as_mut` and having to use a limited borrow. An example for this might
help newer users.
2017-02-27 17:04:18 +11:00
king6cong
c01a6fec8c fix typo 2017-02-27 11:18:11 +08:00
bors
cb1f6492dd Auto merge of #40115 - MajorBreakfast:patch-2, r=steveklabnik
Loop docs: Present perfect instead of simple past

Sounds better with present perfect because there's a link to the present.

I'm not a native speaker, though. So, plz check whether it really is better ;)

r? @steveklabnik
2017-02-27 02:20:29 +00:00
Yamakaky
52bed53e99
Also ignore std::panic 2017-02-26 20:39:08 -05:00
bors
8e08bd61a1 Auto merge of #40102 - pmer:pmer/use-macos-term-in-docs, r=steveklabnik
doc: Use "macOS" terminology consistently

One line in the documentation used the term macOS while the other six used OSX. Be consistent and use the current product brand of macOS.
2017-02-27 00:06:11 +00:00
Yamakaky
d0fe018cd4
Remove unused 2017-02-26 15:53:55 -05:00
bors
60a0edc6c2 Auto merge of #39738 - keeperofdakeys:vec-docs, r=GuillaumeGomez
Add notes about capacity effects to Vec::truncate()

Add notes about the effects of Vec::truncate() and Vec::clear() on the capacity of a vector.
2017-02-26 20:36:10 +00:00
Guillaume Gomez
5ac7a035af Put the const type and value into <code> 2017-02-26 18:55:07 +01:00
bors
44e9e0a6cf Auto merge of #40112 - alexcrichton:fetch-all, r=brson
travis: Make more network requests retryable

This commit attempts to move more network operations to being retryable through
various operations. For example git submodule updates, downloading snapshots,
etc, are now all in retryable steps.

Hopefully this commit can cut down on the number of network failures we've been
seeing!
2017-02-26 15:15:23 +00:00