Commit Graph

69365 Commits

Author SHA1 Message Date
Niko Matsakis
bfc696ad8a add comments to region_infer, restructure a bit 2017-11-02 04:40:50 -04:00
Niko Matsakis
cafbd99c38 extend NLL regions to include free region indices and add outlives 2017-11-02 04:40:50 -04:00
Niko Matsakis
7b30e8d668 convert (lexical) region errors to warn when NLL is enabled 2017-11-02 04:40:50 -04:00
Niko Matsakis
87c0c32768 add regions_that_outlive to FreeRegionMap 2017-11-02 04:40:49 -04:00
Niko Matsakis
3db1a95a3f add/fix various comments to BitMatrix
Notably, the (hitherto unused) `less_than` method was not at all what it
purported to be. It in fact computes the opposite.
2017-11-02 04:40:49 -04:00
Niko Matsakis
de201b40c9 ignore region errors if NLL is enabled
This way, NLL can report them later.
2017-11-02 04:40:49 -04:00
Niko Matsakis
81f6ce5ce3 rename Lookup to TyContext and pass more info when visiting tys 2017-11-02 04:40:49 -04:00
bors
a7d98c7837 Auto merge of #45630 - joshleeb:iss35241, r=estebank
Improve display of error E0308

Ref. Forgetting to call a variant constructor causes a confusing error message #35241.

This PR modifies [`note_type_err`](b7041bfab3/src/librustc/infer/error_reporting/mod.rs (L669-L674)) to display a `help` message when a `TyFnPtr` or `TyFnDef` are found and the return type, of the function or function pointer, is the same as the type that is expected.

The output of compiling

```rust
struct Foo(u32);

fn test() -> Foo { Foo }

fn main() {}
```

is now

```bash
$ rustc src/test/ui/issue-35241.rs
error[E0308]: mismatched types
  --> src/test/ui/issue-35241.rs:13:20
   |
13 | fn test() -> Foo { Foo }
   |              ---   ^^^ expected struct `Foo`, found fn item
   |              |
   |              expected `Foo` because of return type
   |
   = help: did you mean `Foo { /* fields */ }`?
   = note: expected type `Foo`
              found type `fn(u32) -> Foo {Foo::{{constructor}}}`

error: aborting due to previous error
```
2017-11-02 08:30:03 +00:00
Mikhail Modin
d9e64ebaaa change mir stage in test 2017-11-02 10:21:36 +03:00
Mikhail Modin
59d3184624 add one more sample 2017-11-02 09:43:36 +03:00
Mikhail Modin
cb2867da88 fix pre binding false edges 2017-11-02 09:43:36 +03:00
Mikhail Modin
a954dcc72e fix opt-mir test and remove false edge if no guard 2017-11-02 09:43:36 +03:00
Mikhail Modin
2d71c5f10c add TerminatorKind::FalseEdges and use it in matches 2017-11-02 09:43:36 +03:00
bors
2379faa933 Auto merge of #45468 - Xanewok:crate-source, r=nrc
Emit crate disambiguators in save-analysis data

Needed for https://github.com/nrc/rls-analysis/issues/93.
Blocked by https://github.com/nrc/rls-data/pull/11. (For now, this pulls my branch [rls-data/crate-source](https://github.com/Xanewok/rls-data/tree/crate-source))

This will allow to disambiguate different crates types/versions when indexing resulting save-analysis data (most importantly allow to support bin+lib and different crate versions).

r? @nrc
2017-11-02 03:36:50 +00:00
Nick Cameron
5d3be12a4d save-analysis: fix issue with sub-exprs in for loops
Fixes https://github.com/nrc/rls-analysis/issues/78
2017-11-02 14:35:39 +13:00
Paul Daniel Faria
97692afda9 newindex_type macro: make index private by default and allow pub through config 2017-11-01 21:25:37 -04:00
Paul Daniel Faria
bf1198eb1f newtype_index: Support simpler serializable override, custom derive, and fix mir_opt tests 2017-11-01 20:12:53 -04:00
Paul Daniel Faria
b46e42fe2a Clean up macro argument matches so they satisfy tidy checks 2017-11-01 20:12:10 -04:00
Paul Daniel Faria
4e496de26d Add derive and doc comment capabilities to newtype_index macro 2017-11-01 20:12:10 -04:00
bors
d5b69d4670 Auto merge of #45306 - whitequark:ref_slice, r=alexcrichton
Bring back slice::ref_slice as slice::from_ref.

These functions were deprecated and removed in 1.5, but such simple
functionality shouldn't require using unsafe code, and it isn't
cluttering libstd too much.

The original removal was quite contentious (see #27774), since then
we've had precedent for including such nuggets of functionality (see rust-lang/rfcs#1789),
and @nikomatsakis has provided a lot of use cases in https://github.com/rust-lang/rfcs/pull/1789#issuecomment-314640034.
Hence this PR.

I'm not too sure what to do with stability, feel free to correct me.
It seems pointless to go through stabilization for these functions though.

cc @aturon
2017-11-02 00:06:16 +00:00
laurent
ed20f3b5c0 Remove the redundant span_label. 2017-11-01 23:43:32 +00:00
Nick Cameron
20c64e8155 save-analysis: corrects reference for tuple struct and unit struct literals
Fixes https://github.com/nrc/rls-analysis/issues/77
2017-11-02 11:28:56 +13:00
whitequark
1cc88be2eb De-stabilize core::slice::{from_ref, from_ref_mut}. 2017-11-01 22:21:29 +00:00
Nick Cameron
82a8968ce0 save-analysis: handle types in turbofish
fixes https://github.com/nrc/rls-analysis/issues/52
2017-11-02 09:22:44 +13:00
Nick Cameron
c1d3e441a8 save-analysis: handle function types in bounds
This special cases the function type sugar in paths and deals with traits bounds as just the path parts. That required refactoring the path collector to distinguish between variable decls and references in patterns, basically just to please the borrow checker.

cc https://github.com/nrc/rls-analysis/issues/37
2017-11-02 08:12:05 +13:00
bors
2be4cc0402 Auto merge of #45538 - nikomatsakis:nll-liveness, r=pnkfelix
enable non-lexical lifetimes in the MIR borrow checker

This PR, joint work with @spastorino, fills out the NLL infrastructure and integrates it with the borrow checker. **Don't get too excited:** it includes still a number of hacks (the subtyping code is particularly hacky). However, it *does* kinda' work. =)

The final commit demonstrates this by including a test that -- with both the AST borrowck and MIR borrowck -- reports an error by default. But if you pass `-Znll`, you only get an error from the AST borrowck, demonstrating that the integration succeeds:

```
struct MyStruct {
    field: String
}

fn main() {
    let mut my_struct = MyStruct { field: format!("Hello") };

    let value = &my_struct.field;
    if value.is_empty() {
        my_struct.field.push_str("Hello, world!");
        //~^ ERROR cannot borrow (Ast)
    }
}
```
2017-11-01 18:14:13 +00:00
bors
a3f990dc08 Auto merge of #45472 - michaelwoerister:incr-comp-caching-base, r=nikomatsakis
incr.comp.: Implement compiler diagnostic persistence.

This PR implements storing and loading diagnostics that the compiler generates and thus allows for emitting warnings during incremental compilation without actually re-evaluating the thing the warning originally came from. It also lays some groundwork for storing and loading type information and MIR in the incr. comp. cache.

~~It is still work in progress:~~
- ~~There's still some documentation to be added.~~
- ~~The way anonymous queries are handled might lead to duplicated emissions of warnings. Not sure if there is a better way or how frequent such duplication would be in practice.~~

Diagnostic message duplication is addressed separately in #45519.

r? @nikomatsakis
2017-11-01 14:28:11 +00:00
Lance John
bf95f9f185
Fix typo. 2017-11-01 21:02:08 +08:00
Guillaume Gomez
ee7e372bbf Remove duplicated results in the search 2017-11-01 13:41:43 +01:00
Guillaume Gomez
e8db5adcce fix function not appearing in first tab when appearing in another one. Thanks to @Seeker14491 for this one! 2017-11-01 13:41:43 +01:00
Guillaume Gomez
f6a546e14d Be more flexible when looking for something by using levenshtein method 2017-11-01 13:41:43 +01:00
Guillaume Gomez
6f21008aba Better check for returned value 2017-11-01 13:41:43 +01:00
Guillaume Gomez
56dbb3e32d Keep displaying good information when query is made 2017-11-01 13:41:43 +01:00
Ralf Jung
71534c45cc RwLock guards are Sync if T is
Currently, the compiler requires `T` to also be `Send`.  There is no reason for
that.  `&Rw{Read,Write}LockGuard` only provides a shared referenced to `T`, sending
that across threads is safe if `T` is `Sync`.
2017-11-01 13:39:44 +01:00
bors
2f581cf9d6 Auto merge of #45435 - eddyb:binop-subtype-lhs, r=nikomatsakis
rustc_typeck: use subtyping on the LHS of binops.

Fixes #45425.

r? @nikomatsakis
2017-11-01 09:40:15 +00:00
bors
740286657a Auto merge of #45674 - kennytm:rollup, r=kennytm
Rollup of 14 pull requests

- Successful merges: #45450, #45579, #45602, #45619, #45624, #45644, #45646, #45648, #45649, #45650, #45652, #45660, #45664, #45671
- Failed merges:
2017-11-01 07:04:17 +00:00
laurent
d336f022d5 Preserve original formatting. 2017-11-01 06:46:58 +00:00
laurent
175cfbf129 Remove the parser snapshot hack. 2017-11-01 06:45:34 +00:00
kennytm
028455082e Rollup merge of #45671 - est31:master, r=alexcrichton
Tidy: track rustc_const_unstable feature gates as well

This is important for the unstable book stub generation.
2017-11-01 13:32:21 +08:00
kennytm
e2554b36fc Rollup merge of #45664 - mbrubeck:docs, r=estebank
Fix incorrect error type in Read::byte docs

None
2017-11-01 13:32:20 +08:00
kennytm
0ec40c1704 Rollup merge of #45660 - Cldfire:suggest-rename-import, r=estebank
Suggest renaming import if names clash

Closes https://github.com/rust-lang/rust/issues/32354.

The output for the example in the issue looks like this:

```
~/p/local-rust-dev-testing ❯❯❯ cargo +local-s1 build
   Compiling local-rust-dev-testing v0.1.0 (file:///home/cldfire/programming_projects/local-rust-dev-testing)
error[E0252]: the name `ConstructorExtension` is defined multiple times
  --> src/main.rs:49:5
   |
48 | use extension1::ConstructorExtension;
   |     -------------------------------- previous import of the trait `ConstructorExtension` here
49 | use extension2::ConstructorExtension;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `ConstructorExtension` reimported here
   |
   = note: `ConstructorExtension` must be defined only once in the type namespace of this module
help: You can use `as` to change the binding name of the import
   |
49 | use extension2::ConstructorExtension as OtherConstructorExtension;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...
```

This is my first PR that touches the compiler in any way, so if there's something else I need to do here (e.g. add a test), please let me know :).
2017-11-01 13:32:19 +08:00
kennytm
63ad1293cc Rollup merge of #45652 - malbarbo:x32-2, r=alexcrichton
More fixes for x86_64-unknown-linux-gnux32

This update libc (all libc testing are passing) and fixes NR_GETRANDOM.

Fix all but one run-pass test (lto-unwind.rs, see https://github.com/rust-lang/rust/issues/45416)
2017-11-01 13:32:18 +08:00
kennytm
2d53d94c3b Rollup merge of #45650 - michaelwoerister:per-crate-type-symbol-threshold, r=alexcrichton
Take crate-type into account when generating symbol export lists (linker version scripts)

r? @alexcrichton
cc https://github.com/rust-lang/rust/issues/45613
2017-11-01 13:32:17 +08:00
kennytm
57b4658a2b Rollup merge of #45649 - tbu-:pr_doc_bufread_eof, r=estebank
Add a hint what `BufRead` functions do on EOF
2017-11-01 13:32:16 +08:00
kennytm
e9b5c86c03 Rollup merge of #45648 - tbu-:pr_doc_unix_ext, r=estebank
Update doc comment for the Unix extension module

It was a bit outdated, claimed to be able to do less than it actually
could.
2017-11-01 13:32:15 +08:00
kennytm
cf0fe06bb9 Rollup merge of #45646 - sinkuu:dead-code-alias-in-pat, r=arielb1
Count type aliases used in patterns as usage by dead_code lint

Fixes #45614.
2017-11-01 13:32:14 +08:00
kennytm
26af3e1c4e Rollup merge of #45644 - zackmdavis:edit_disallowed_inner_attr_note, r=estebank
edit and fix bad spacing of inner-attribute-not-allowed note

This multiline string literal was missing a backslash, leaving an awkward
newline and 35 spaces in the middle of the message.

But while we're here, the existing message seems kind of long in comparison to
similar notes: to cut it down, we excise the mentions of doc comments, which
seems sensible because we know that this erroneous attribute is not a doc
comment (notice the `is_sugared_doc: false` at the end of the function; if it
had been a doc comment, that error would get set in the `token::DocComment`
match branch of `parse_outer_attributes`).
2017-11-01 13:32:13 +08:00
kennytm
28b18790f7 Rollup merge of #45624 - glaubitz:bootstrap-sparc64, r=kennytm
bootstrap: Add missing cputype matching for sparc64

Trying to configure rust natively on sparc64-unknown-linux-gnu currently fails with:

```
root@deb4g:/local_scratch/glaubitz/rust/rust# ./configure --host=sparc64-unknown-linux-gnu --enable-local-rust --local-rust-root=/usr/local
configure: processing command line
configure:
configure: build.host           := ['sparc64-unknown-linux-gnu']
configure: build.rustc          := /usr/local/bin/rustc
configure: build.cargo          := /usr/local/bin/cargo
configure: build.rustc          := /usr/local/bin/rustc
configure: build.cargo          := /usr/local/bin/cargo
configure: build.configure-args := ['--host=sparc64-unknown-linux-gnu', '--enable ...
unknown cpu type: sparc64
root@deb4g:/local_scratch/glaubitz/rust/rust#
```

This is trivially fixed by defining sparc64 as a valid cputype.
2017-11-01 13:32:12 +08:00
kennytm
18fa54f835 Rollup merge of #45619 - mneumann:fix-bootstrap-dragonfly, r=alexcrichton
Support Dragonfly when building Openssl
2017-11-01 13:32:11 +08:00
kennytm
e01dcf4b75 Rollup merge of #45602 - petrochenkov:ospan, r=michaelwoerister
Optimize some span operations

Do not decode span data twice/thrice/etc unnecessarily.
Applied to stable hashing and all methods in `impl Span`.

Follow up to https://github.com/rust-lang/rust/pull/44646
r? @michaelwoerister
2017-11-01 13:32:10 +08:00