Commit Graph

51675 Commits

Author SHA1 Message Date
Jeffrey Seyfried
21064d097e Refactor away resolve_imports::Shadowable and rename shadowable -> is_prelude 2016-03-25 22:18:30 +00:00
bors
64a13a4660 Auto merge of #31908 - jseyfried:disallow_shadowed_traits, r=nikomatsakis
Disallow methods from traits that are not in scope

This PR only allows a trait method to be used if the trait is in scope (fixes #31379).
This is a [breaking-change]. For example, the following would break:
```rust
mod foo {
    pub trait T { fn f(&self) {} }
    impl T for () {}
}

mod bar { pub use foo::T; }

fn main() {
    pub use bar::*;
    struct T; // This shadows the trait `T`,
    ().f() // making this an error.
}
```
r? @nikomatsakis
2016-03-25 05:03:13 -07:00
bors
f1578d37dc Auto merge of #32428 - nikomatsakis:scopes-in-mir, r=nagisa
Scopes in mir

This PR adds scopes to MIR. There is a tree of scopes (each represented by a `ScopeId`). Every statement, variable, and terminator now has an associated scope and span.  It also adds a `-Z dump-mir` switch one can use to conveniently examine the MIR as optimizations proceed.

The intention is two-fold. First, to support MIR debug-info. This PR does not attempt to modify trans to make use of the scope information, however.

Second, in a more temporary capacity, to support the goal of moving regionck and borowck into the MIR. To that end, the PR also constructs a "scope auxiliary" table storing the extent of each span (this is kept separate from the main MIR, since it contains node-ids) and the dom/post-dom of the region in the graph where the scope occurs. When we move to non-lexical lifetimes, I expect this auxiliary information to be discarded, but that is still some ways in the future (requires, at minimum, an RFC, and there are some thorny details to work out -- though I've got an in-progress draft).

Right now, I'm just dropping this auxiliary information after it is constructed. I was debating for some time whether to add some sort of sanity tests, but decided to just open this PR instead, because I couldn't figure out what such a test would look like (and we don't have independent tests for this today beyond the regionck and borrowck tests).

I'd prefer not to store the auxiliary data into any kind of "per-fn" map. Rather, I'd prefer that we do regionck/borrowck/whatever-else immediately after construction -- that is, we build the MIR for fn X and immediately thereafter do extended correctness checking on it. This will reduce peak memory usage and also ensure that the auxiliary data doesn't exist once optimizations begin. It also clarifies the transition point where static checks are complete and MIR can be more freely optimized.

cc @rust-lang/compiler @nagisa
2016-03-24 23:12:57 -07:00
bors
40deb279a8 Auto merge of #32396 - nodakai:range-contains, r=alexcrichton
Add core::ops::Range*::contains() as per rust-lang/rust#32311
2016-03-24 19:38:43 -07:00
bors
d7a71687ef Auto merge of #32346 - nikomatsakis:no-erased-regions, r=eddyb
Remove `ErasedRegions` from substs

This commit removes the `ErasedRegions` enum from `Substs`. Instead, in trans, we just generate a vector of `ReStatic` of suitable length. The goal is both general cleanup and to help pave the way for a glorious future where erasure is used in type check.

r? @eddyb

One concern: might be nice to do some profiling. Not sure the best way to do that. Perhaps I'll investigate running nrc's test suite locally.
2016-03-24 14:22:26 -07:00
Niko Matsakis
c5d74be4ed remove empty_substs_for_node_id 2016-03-24 14:01:28 -04:00
Niko Matsakis
f3ac50927a remove ErasedRegions from substitutions
This hack has long since outlived its usefulness; the transition to
trans passing around full substitutions is basically done. Instead of
`ErasedRegions`, just supply substitutions with a suitable number of
`'static` entries, and invoke `erase_regions` when needed (the latter of
which we already do).
2016-03-24 14:01:28 -04:00
Niko Matsakis
c74339052d rewrite foreign types lint not to trawl the HIR
It no longer reads from `ast_ty_to_ty_cache`, which was very wrong. It
also correctly handles higher-ranked regions.
2016-03-24 14:01:28 -04:00
bors
dcfb8d72e9 Auto merge of #32465 - steveklabnik:rollup, r=steveklabnik
Rollup of 6 pull requests

- Successful merges: #32276, #32416, #32452, #32459, #32462, #32464
- Failed merges:
2016-03-24 09:25:02 -07:00
Steve Klabnik
b2dfb7c0a2 Rollup merge of #32464 - GuillaumeGomez:patch-6, r=steveklabnik
Improve some Option code example

Part of #29366.

r? @steveklabnik
2016-03-24 10:37:24 -04:00
Steve Klabnik
bce02a207a Rollup merge of #32462 - tclfs:patch-1, r=steveklabnik
Docs: some tiny corrections

TNT->`tnt`
firecracker->`firecracker`
2016-03-24 10:37:24 -04:00
Steve Klabnik
38c6593592 Rollup merge of #32459 - nrc:json-err-text, r=nikomatsakis
Include source text in JSON errors
2016-03-24 10:37:24 -04:00
Steve Klabnik
a3b9b42d44 Rollup merge of #32452 - GuillaumeGomez:patch-5, r=steveklabnik
Add code examples for libstd/time

Fixes #29379.

r? @steveklabnik
2016-03-24 10:37:24 -04:00
Steve Klabnik
7a38ac8e87 Rollup merge of #32416 - GuillaumeGomez:patch-3, r=steveklabnik
Add doc example to clone trait

Fixes #29346.

r? @steveklabnik
2016-03-24 10:37:23 -04:00
Steve Klabnik
87aee45988 Rollup merge of #32276 - brson:doc, r=alexcrichton
doc: Stdin is not writable
2016-03-24 10:37:23 -04:00
Niko Matsakis
091a00797e pacify the merciless tidy 2016-03-24 09:23:15 -04:00
Guillaume Gomez
b922d1a405 Improve some Option code example 2016-03-24 13:24:39 +01:00
Niko Matsakis
ed7c30b888 rework MIR visitor
We now visit more things (e.g., types) and also follow a deliberate
style designed to reduce omissions.
2016-03-24 06:23:59 -04:00
Tang Chenglong
ceaf5dfdc1 Docs: some tiny corrections
TNT->`tnt`
firecracker->`firecracker`
2016-03-24 14:49:40 +08:00
bors
dc1f6831eb Auto merge of #32219 - brson:lints, r=alexcrichton
Make warnings of renamed and removed lints themselves lints

This adds the `renamed_and_removed_lints` warning, defaulting
to the warning level.

Fixes #31141
2016-03-23 23:09:47 -07:00
Nick Cameron
9757516f12 Include source text in JSON errors 2016-03-24 15:32:42 +13:00
NODA, Kai
a21c5f267a
Add core::ops::Range*::contains() as per rust-lang/rust#32311
Signed-off-by: NODA, Kai <nodakai@gmail.com>
2016-03-24 08:57:45 +08:00
Niko Matsakis
0769865f7f rewrite scope drop to be iterative
while I'm at it, remove the "extra caching" that I was doing for no good
reason except laziness. Basically before I was caching at each scope in
the chain, but there's not really a reason to do that, since the cached
entry point at level N is always equal to the last cached exit point
from level N-1.
2016-03-23 20:46:38 -04:00
Brian Anderson
addde1fd6f Make warnings of renamed and removed lints themselves lints
This adds the `renamed_and_removed_lints` warning, defaulting
to the warning level.

Fixes #31141
2016-03-23 23:41:48 +00:00
Brian Anderson
b013ad55aa doc: Stdin is locked for reads, not writes 2016-03-23 23:39:01 +00:00
bors
43843d06ea Auto merge of #32455 - TimNN:patch-1, r=alexcrichton
add naked function tracking issue # to feature gate definition
2016-03-23 16:24:39 -07:00
Niko Matsakis
a276e755e7 introduce "call-site-scope" as the outermost scope
also, when exiting a scope, assign the final goto terminator with the
target scope's id
2016-03-23 16:42:55 -04:00
Niko Matsakis
1c0fa34310 Update borrowck to use repr::* instead of a mix
We should probably settle on some conventions here. In MIR code, I have
generally been importing `*`, but perhaps borrowck does not want to do
that.
2016-03-23 16:42:54 -04:00
Niko Matsakis
2b96cfb143 add comments on remaining fields 2016-03-23 16:42:54 -04:00
Niko Matsakis
c36707a284 Add ScopeAuxiliaryVec, return MIR+aux via tuple
It's nice to be able to index with a scope-id,
but coherence rules prevent us from implementing
`Index<ScopeId>` for `Vec<ScopeAuxiliary>`, and I'd
prefer that `ScopeAuxiliary` remain in librustc_mir,
just for compilation time reasons.
2016-03-23 16:42:54 -04:00
Niko Matsakis
70d0123082 Address nit: Remove ScopedDataVec newtype 2016-03-23 16:42:54 -04:00
Niko Matsakis
b3d2059b08 Address nit: block.unit() 2016-03-23 16:42:54 -04:00
Niko Matsakis
c1a53a60e7 Address nit: doc-comments on fields 2016-03-23 16:42:54 -04:00
Niko Matsakis
a2bab6f3e1 Address nit: use doc-comments for fields of VarDecl 2016-03-23 16:42:53 -04:00
Niko Matsakis
14a5657a9a Rename MirPlusPlus to MirAndScopeAuxiliary 2016-03-23 16:42:53 -04:00
Niko Matsakis
f66fd8972f replace DUMMY_SP on resume with span from fn 2016-03-23 16:42:53 -04:00
Niko Matsakis
cb04e495dc rewrite drop code
This was triggered by me wanting to address a use of DUMMY_SP, but
actually I'm not sure what would be a better span -- I guess the span
for the function as a whole.
2016-03-23 16:42:53 -04:00
Niko Matsakis
f976e222e9 fix bug in simplify_cfg with inf. loops 2016-03-23 16:42:53 -04:00
Niko Matsakis
a61c1759c7 allow dumping intermediate IR with -Z dump-mir 2016-03-23 16:42:53 -04:00
Niko Matsakis
0d93989cf5 adjust pretty printer to print scopes / auxiliary 2016-03-23 16:42:53 -04:00
Niko Matsakis
d32bde3311 augment MIR pretty printer to print scopes 2016-03-23 16:42:52 -04:00
Niko Matsakis
caac0b969f reformat mir text pretty printer 2016-03-23 16:42:52 -04:00
Niko Matsakis
9d00deee96 add span/scope-id to terminator 2016-03-23 16:42:52 -04:00
Niko Matsakis
3a16f57fbb extend Terminator into a struct so it can have additional fields 2016-03-23 16:42:52 -04:00
Niko Matsakis
e752d4cde3 track the innermost scope for every stmt 2016-03-23 16:37:48 -04:00
Niko Matsakis
323d7f4e98 record a scope for each VarDecl 2016-03-23 16:37:48 -04:00
Niko Matsakis
464c02e336 integrate scopes into MIR 2016-03-23 16:37:48 -04:00
bors
98f0a9128f Auto merge of #32454 - eddyb:rollup, r=eddyb
Rollup of 11 pull requests

- Successful merges: #32404, #32420, #32423, #32425, #32429, #32430, #32431, #32434, #32437, #32441, #32443
- Failed merges:
2016-03-23 12:33:04 -07:00
Tim Neumann
7027521daa add naked function tracking issue # to feature gate definition 2016-03-23 17:14:19 +01:00
Eduard-Mihai Burtescu
2e9b40f576 Rollup merge of #32443 - tclfs:patch-8, r=steveklabnik
Docs: Change "statements" to "expressions" on `match`

I apt to use `expressions` over `statements`, because `match` is a expression in essence, though it can become a statement when followed a semicolon.
2016-03-23 17:59:16 +02:00