Commit Graph

80293 Commits

Author SHA1 Message Date
Niko Matsakis ed36698031 compute region values using SCCs not iterative flow
The strategy is this:

- we compute SCCs once all outlives constraints are known
- we allocate a set of values **per region** for storing liveness
- we allocate a set of values **per SCC** for storing the final values
- when we add a liveness constraint to the region R, we also add it
  to the final value of the SCC to which R belongs
- then we can apply the constraints by just walking the DAG for the
  SCCs and union'ing the children (which have their liveness
  constraints within)

There are a few intermediate refactorings that I really ought to have
broken out into their own commits:

- reverse the constraint graph so that `R1: R2` means `R1 -> R2` and
  not `R2 -> R1`. This fits better with the SCC computation and new
  style of inference (`->` now means "take value from" and not "push
  value into")
  - this does affect some of the UI tests, since they traverse the
    graph, but mostly the artificial ones and they don't necessarily
    seem worse
- put some things (constraint set, etc) into `Rc`. This lets us root
  them to permit mutation and iteration. It also guarantees they don't
  change, which is critical to the correctness of the algorithm.
- Generalize various helpers that previously operated only on points
  to work on any sort of region element.
2018-07-13 01:29:10 -04:00
Niko Matsakis 862c0dd851 make `RegionValues` generic over its domain
We used to store one value per RegionVid; we will soon be storing one
value per SCC.
2018-07-12 00:38:40 -04:00
Niko Matsakis 0052ddd8ae introduce a generic SCC computation 2018-07-12 00:38:40 -04:00
Niko Matsakis dab206f8b5 strengthen `Idx` to require `Ord + Hash`
You should always be able to know that any `T` where `T: Idx`
can be used in a `BTreeMap` and a `FxHashMap`.
2018-07-12 00:38:40 -04:00
Niko Matsakis 90c90ba542 rename `control_flow_graph` to `graph` 2018-07-12 00:38:40 -04:00
Niko Matsakis 3c30415e96 rename `graph` to `control_flow_graph::implementation` 2018-07-12 00:38:40 -04:00
Niko Matsakis 28c483b946 deconstruct the `ControlFlowGraph` trait into more granular traits 2018-07-12 00:38:40 -04:00
Niko Matsakis 5fa240e96a rename `constraint_set` to `constraints`
also promote to its own directory, make local to nll
2018-07-12 00:38:40 -04:00
Niko Matsakis d54e7e32b2 introduce `ConstraintGraph`, stop mutating constraints in place
Encapsulate the dependencies more cleanly.
2018-07-12 00:38:38 -04:00
Niko Matsakis 8fa24bbc57 generate reborrow constraints at type check time 2018-07-12 00:32:42 -04:00
Niko Matsakis fbb7306347 fix `debug!` 2018-07-12 00:28:34 -04:00
bors 295858eba7 Auto merge of #52100 - nielx:fix/rust_driver-stacklimit, r=cramertj
Haiku: work around the lack of setrlimit

The default Unix codepath fails, because Haiku does not implement
setrlimit for stack size. Thus we create an additional path.

By default, Haiku has the desired 16 MB stack, therefore in general
we do not have to spawn a new thread. The code has been written in
such a way that any changes in Haiku or in Rust will be adapted to.
2018-07-10 01:07:23 +00:00
bors 5b525916ee Auto merge of #51899 - gnzlbg:llvm501, r=alexcrichton
bump minimum LLVM version to 5.0

Closes #51878 .

r? @alexcrichton

--

cc @cuviper @infinity0
2018-07-09 23:08:51 +00:00
bors 9bd8458c92 Auto merge of #50250 - csmoe:wf_traitref, r=scalexm
Chalk lowering rule: WellFormed-TraitRef

Address chalk lowering "Implemented-From-Env" as part of #49177.
r? @nikomatsakis
2018-07-09 21:01:58 +00:00
scalexm 37c5c0bf9c Change wording 2018-07-09 21:20:26 +02:00
bors bdd185c897 Auto merge of #51956 - GuillaumeGomez:shutdown-doc-lints, r=oli-obk
Fix rustdoc run failures by shutting down definitely some lints

Fixes #51661.

cc @oli-obk @arielb1 @eddyb
2018-07-09 18:50:37 +00:00
Guillaume Gomez 66beb4e5b4 add comment about lints whitelisting 2018-07-09 18:10:08 +02:00
gnzlbg 3b36ce64a5 revert travis-ci changes 2018-07-09 17:25:00 +02:00
bors c6807bb1b2 Auto merge of #52159 - SimonSapin:alloc-prelude, r=alexcrichton
Add the `alloc::prelude` module

It contains the re-exports that are in `std::prelude::v1` but not in `core::prelude::v1`.

Calling it prelude is somewhat of a misnomer since (unlike those modules in `std` or `core`) its contents are never implicitly imported in modules. Rather it is intended to be used with an explicit glob import like `use alloc::prelude::*;`. However there is precedent for the same misnomer with `std::io::prelude`, for example.

This new module is unstable with the same feature name as the `alloc` care. They are proposed for stabilization together in RFC https://github.com/rust-lang/rfcs/pull/2480.
2018-07-09 14:29:59 +00:00
gnzlbg fe75f617c3 run asmjs and emscripten builds on CI (temporary) 2018-07-09 11:35:53 +02:00
gnzlbg 23dfb42ab3 still support LLVM4 for emscripten 2018-07-09 11:35:53 +02:00
gnzlbg 52d7740277 bump llvm version of failing codegen test 2018-07-09 11:35:53 +02:00
gnzlbg 4ff90c7e0a bump minimum LLVM version to 5.0 2018-07-09 11:35:52 +02:00
bors c30acc7187 Auto merge of #52160 - euclio:include-macros, r=oli-obk
add regression test for #48835

Fixes #48835.

The underlying issue was fixed in #51978.
2018-07-09 08:41:43 +00:00
bors ec039c7cb1 Auto merge of #52066 - benjaminp:obligation-select, r=Mark-Simulacrum
Remove obsolete documentation from FufillmentContext::select comment.

The `only_new_obligations` parameter has not existed since 43756934d2.
2018-07-09 06:38:47 +00:00
bors a80a610a4c Auto merge of #52166 - orlp:master, r=joshtriplett
Performance improvement of Vec's swap_remove.

The old implementation *literally* swapped and then removed, which resulted in unnecessary move instructions. The new implementation does use unsafe code, but is easy to see that it is correct.

Fixes https://github.com/rust-lang/rust/issues/52150.
2018-07-09 04:42:27 +00:00
Orson Peters e529dfd590 Removed a single trailing space. Oops. 2018-07-09 06:31:24 +02:00
Orson Peters 6faa295cec Reimplemented Vec's swap_remove to not rely on pop. 2018-07-09 06:13:58 +02:00
Orson Peters 295768ae8f Performance improvement of Vec's swap_remove. 2018-07-09 05:01:39 +02:00
Andy Russell 1be1d90662
add regression test for #48835
Fixes #48835.

The underlying issue was fixed in #51978.
2018-07-08 16:45:01 -04:00
bors 960f6046c6 Auto merge of #52152 - fabric-and-ink:edit-file-open-example, r=frewsxcv
Edit code example for File::open

It looked kinda strange and is now aligned with the other examples for `File`.
2018-07-08 16:08:54 +00:00
bors 0e6b713dd5 Auto merge of #52106 - PramodBisht:issue/52049, r=oli-obk
Don't suggest `let` bindings if they don't help with borrows

@oli-obk I have added a condition to address #52049, right now, this is on WIP because I think code change is also required on `error_reporting.rs`. Plus I need to check if any test cases fail.
I will ping you again if everything passes

r? @oli-obk
2018-07-08 14:08:36 +00:00
Fabian Drinck f580b983b1 Edit code example for File::open 2018-07-08 16:07:09 +02:00
bors 0c0315cfd9 Auto merge of #51955 - zackmdavis:item_semi, r=oli-obk
clarify why we're suggesting removing semicolon after braced items

Previously (issue #46186, pull-request #46258), a suggestion was added
to remove the semicolon after we fail to parse an item, but issue #51603
complains that it's still insufficiently obvious why. Let's add a note.

Resolves #51603.
2018-07-08 02:51:54 +00:00
bors 9342f293e9 Auto merge of #51590 - bjorn3:codegen_llvm_extract, r=alexcrichton
Mostly fix metadata_only backend and extract some code out of rustc_codegen_llvm

Removes dependency on the `ar` crate and removes the `llvm.enabled` config option in favour of setting `rust.codegen-backends` to `[]`.
2018-07-08 00:52:36 +00:00
Simon Sapin 5b795cf57e Reformat std prelude source to show it is the sum of core and alloc preludes 2018-07-07 23:16:27 +02:00
Simon Sapin b842177cfa Add the `alloc::prelude` module
It contains the re-exports that are in `std::prelude::v1`
but not in `core::prelude::v1`.

Calling it prelude is somewhat of a misnomer since (unlike those modules
in `std` or `core`) its contents are never implicitly imported in modules.
Rather it is intended to be used with an explicit glob import like
`use alloc::prelude::*;`.
However there is precedent for the same misnomer with `std::io::prelude`,
for example.

This new module is unstable with the same feature name as the `alloc` care.
They are proposed for stabilization together in RFC
https://github.com/rust-lang/rfcs/pull/2480
2018-07-07 23:08:43 +02:00
bors 9fd3d7899a Auto merge of #52132 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 3 pull requests

Successful merges:

 - #52087 (Update musl to 1.1.19 and add patch to fix tls issue)
 - #52107 (removed redundant header file import in rustllvm.h)
 - #52131 (Ship clippy in manifests)

Failed merges:

r? @ghost
2018-07-07 16:21:28 +00:00
Mark Rousskov cea56a109d
Rollup merge of #52131 - Mark-Simulacrum:ship-clippy, r=kennytm
Ship clippy in manifests

cc @Manishearth
r? @kennytm
2018-07-07 08:27:02 -06:00
Mark Rousskov f532daa2e5
Rollup merge of #52107 - PramodBisht:feature/52105, r=rkruppe
removed redundant header file import in rustllvm.h

fix #52105
removed redundant header file import in rustllvm.h
cc @wqweto
2018-07-07 08:27:01 -06:00
Mark Rousskov 6cc38a599a
Rollup merge of #52087 - malbarbo:musl-1.1.19, r=alexcrichton
Update musl to 1.1.19 and add patch to fix tls issue

This fixes https://github.com/rust-lang/rust/issues/48967
2018-07-07 08:27:00 -06:00
Mark Rousskov c98f25b373 Ship clippy in manifests 2018-07-07 08:17:24 -06:00
bors e44906e80c Auto merge of #52109 - michaelwoerister:ir-objs, r=alexcrichton
When doing linker-plugin based LTO, write LLVM bitcode obj-files instead of embedding the bitcode into the regular object file.

This PR makes the compiler emit LLVM bitcode object files instead of regular object files with the IR embed when compiling for linker-plugin-based LTO. The reasoning for switching the strategy is this:
- Embedding bitcode in a section of the object file actually makes us save bitcode twice in rlibs and Rust dylibs, once for linker-based LTO and once for rustc-based LTO. That's a waste of space.
- When compiling for plugin-based LTO, one usually has no use for the machine code also present in the object file. Generating it is a waste of time.
- When compiling for plugin-based LTO, `rustc` will skip running ThinLTO because the linker will do that anyway. This has the side effect of then generating poorly optimized machine code, which makes it even less useful (and may lead to users not knowing why their code is slow instead of getting an error).
- Not having machine code available makes it impossible for the linker to silently fall back to not inlining stuff across language boundaries.
- This is what Clang does and according to [the documentation](https://llvm.org/docs/BitCodeFormat.html#native-object-file-wrapper-format) is the better supported option.
- The current behavior (minus the runtime performance problems) is still available via `-Z embed-bitcode` (we might want to do this for `libstd` at some point).

r? @alexcrichton
2018-07-07 14:09:49 +00:00
Pramod Bisht ab767eecb0 Added UI testcases for #52049 2018-07-07 15:51:50 +05:30
bors 5a7e0f8764 Auto merge of #51993 - TheDarkula:master, r=oli-obk
Omitted the walks in visit_expr() and visit_stmt()

@oli-obk
2018-07-07 09:09:43 +00:00
bjorn3 23c0b3b75c Update Cargo.lock 2018-07-07 11:05:21 +02:00
bjorn3 ff12beb875 Revert changes to bootstrap, rustc_driver and fix {core,std}simd 2018-07-07 10:56:07 +02:00
bjorn3 163cb572a4 Hopefully fix it 2018-07-07 10:56:06 +02:00
bjorn3 a5330415aa Only use coresimd when codegen_backend is LLVM 2018-07-07 10:56:06 +02:00
bjorn3 c7c534fa0e Move llvm_target_features back to llvm_util 2018-07-07 10:55:47 +02:00