Commit Graph

70191 Commits

Author SHA1 Message Date
bors
f28df20026 Auto merge of #45771 - petrochenkov:crate, r=nikomatsakis
Support `::crate` in paths

cc https://github.com/rust-lang/rust/issues/45477
Fixes https://github.com/rust-lang/rust/issues/45229
2017-11-21 12:32:59 +00:00
Simon Sapin
13c1cbe749
Remove 1.23.0 release notes entry on const_fn
It doesn’t change anything for stable users in practice. See discussion in https://github.com/rust-lang/rust/pull/46148
2017-11-21 12:43:24 +01:00
Niko Matsakis
00732a31a0 check that def_id is a local closure in InferCtxt::fn_sig
Before we were assuming that *every* `fn_sig` must pertain to a local
closure.
2017-11-21 05:04:36 -05:00
bors
ebda7662db Auto merge of #45701 - cramertj:impl-trait-this-time, r=eddyb
impl Trait Lifetime Handling

This PR implements the updated strategy for handling `impl Trait` lifetimes, as described in [RFC 1951](https://github.com/rust-lang/rfcs/blob/master/text/1951-expand-impl-trait.md) (cc #42183).

With this PR, the `impl Trait` desugaring works as follows:
```rust
fn foo<T, 'a, 'b, 'c>(...) -> impl Foo<'a, 'b> { ... }
// desugars to
exists type MyFoo<ParentT, 'parent_a, 'parent_b, 'parent_c, 'a, 'b>: Foo<'a, 'b>;
fn foo<T, 'a, 'b, 'c>(...) -> MyFoo<T, 'static, 'static, 'static, 'a, 'b> { ... }
```
All of the in-scope (parent) generics are listed as parent generics of the anonymous type, with parent regions being replaced by `'static`. Parent regions referenced in the `impl Trait` return type are duplicated into the anonymous type's generics and mapped appropriately.

One case came up that wasn't specified in the RFC: it's possible to write a return type that contains multiple regions, neither of which outlives the other. In that case, it's not clear what the required lifetime of the output type should be, so we generate an error.

There's one remaining FIXME in one of the tests: `-> impl Foo<'a, 'b> + 'c` should be able to outlive both `'a` and `'b`, but not `'c`. Currently, it can't outlive any of them. @nikomatsakis and I have discussed this, and there are some complex interactions here if we ever allow `impl<'a, 'b> SomeTrait for AnonType<'a, 'b> { ... }`, so the plan is to hold off on this until we've got a better idea of what the interactions are here.

cc #34511.
Fixes #44727.
2017-11-21 10:00:18 +00:00
Simon Sapin
b9a7601913
Expand a couple points in 1.22.0 release notes 2017-11-21 08:37:34 +01:00
bors
bac7c53bc3 Auto merge of #45545 - durka:macro-backtrace, r=nrc
show macro backtrace with -Z flag

Fixes #39413 by adding a facility to restore the "old school" macro expansion backtraces (previously removed in 61865384b8).

The restored functionality is accessed through the flag `-Z external-macro-backtrace`. Errors showing the truncated backtraces will suggest this flag.

### Example

Code: <details>
`a/src/lib.rs`
```rust
#[macro_export]
macro_rules! a {
    () => { a!(@) };
    (@) => { a!(@@) };
    (@@) => {
        syntax error;
    }
}
```
`b/src/main.rs`
```rust
#[macro_use] extern crate a;

macro_rules! b {
    () => { b!(@) };
    (@) => { b!(@@) };
    (@@) => {
        syntax error;
    }
}

fn main() {
    a!();
    b!();
}
```
</details>

<br/><br/>
Running without env var (note: first error is from remote macro, second from local macro):

<details>

```
$ cargo +custom run
   Compiling b v0.1.0
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
  --> src/main.rs:12:5
   |
12 |     a!();
   |     ^^^^^
   |     |
   |     expected one of 8 possible tokens here
   |     unexpected token
   |
   = note: this error originates in a macro outside of the current crate (run with RUST_MACRO_BACKTRACE=1 for more info)

error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
  --> src/main.rs:7:16
   |
7  |         syntax error;
   |               -^^^^^ unexpected token
   |               |
   |               expected one of 8 possible tokens here
...
13 |     b!();
   |     ----- in this macro invocation

error: aborting due to 2 previous errors

error: Could not compile `b`.

To learn more, run the command again with --verbose.
```
</details>
The output is the same as today, except for an addition to the note which aids discoverability of the new environment variable.

<br/><br/>
Running _with_ env var:
<details>

```
$ RUST_MACRO_BACKTRACE=1 cargo +custom run
   Compiling b v0.1.0
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
 --> <a macros>:1:72
  |
1 | (  ) => { a ! ( @ ) } ; ( @ ) => { a ! ( @ @ ) } ; ( @ @ ) => { syntax error ;
  |                                                                       -^^^^^ unexpected token
  |                                                                       |
  |                                                                       expected one of 8 possible tokens here
src/main.rs:12:5: 12:10 note: in this expansion of a! (defined in <a macros>)
<a macros>:1:11: 1:20 note: in this expansion of a! (defined in <a macros>)
<a macros>:1:36: 1:47 note: in this expansion of a! (defined in <a macros>)

error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
 --> src/main.rs:7:16
  |
7 |         syntax error;
  |               -^^^^^ unexpected token
  |               |
  |               expected one of 8 possible tokens here
src/main.rs:12:5: 12:10 note: in this expansion of a! (defined in <a macros>)
<a macros>:1:11: 1:20 note: in this expansion of a! (defined in <a macros>)
<a macros>:1:36: 1:47 note: in this expansion of a! (defined in <a macros>)

error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
 --> src/main.rs:7:16
  |
7 |         syntax error;
  |               -^^^^^ unexpected token
  |               |
  |               expected one of 8 possible tokens here
src/main.rs:13:5: 13:10 note: in this expansion of b! (defined in src/main.rs)
src/main.rs:4:13: 4:18 note: in this expansion of b! (defined in src/main.rs)
src/main.rs:5:14: 5:20 note: in this expansion of b! (defined in src/main.rs)

error: aborting due to 2 previous errors

error: Could not compile `b`.

To learn more, run the command again with --verbose.
```
</details>

The output is hard to read, but better than nothing (and it's exactly what we used to have before the infamous `fix_multispans_in_std_macros`).

<br/><br/>
Wishlist:

- Save the actual source of macros in crate metadata, not just AST, so the output can be improved
    - Hopefully this would allow line numbers in the trace as well
- Show the actual macro invocations in the traces

r? @nrc
2017-11-21 06:42:14 +00:00
bors
421a2113a8 Auto merge of #45039 - QuietMisdreavus:doc-spotlight, r=GuillaumeGomez,QuietMisdreavus
show in docs whether the return type of a function impls Iterator/Read/Write

Closes #25928

This PR makes it so that when rustdoc documents a function, it checks the return type to see whether it implements a handful of specific traits. If so, it will print the impl and any associated types. Rather than doing this via a whitelist within rustdoc, i chose to do this by a new `#[doc]` attribute parameter, so things like `Future` could tap into this if desired.

### Known shortcomings

~~The printing of impls currently uses the `where` class over the whole thing to shrink the font size relative to the function definition itself. Naturally, when the impl has a where clause of its own, it gets shrunken even further:~~ (This is no longer a problem because the design changed and rendered this concern moot.)

The lookup currently just looks at the top-level type, not looking inside things like Result or Option, which renders the spotlights on Read/Write a little less useful:

<details><summary>`File::{open, create}` don't have spotlight info (pic of old design)</summary>

![image](https://user-images.githubusercontent.com/5217170/31209495-e59d027e-a950-11e7-9998-ceefceb71c07.png)

</details>

All three of the initially spotlighted traits are generically implemented on `&mut` references. Rustdoc currently treats a `&mut T` reference-to-a-generic as an impl on the reference primitive itself. `&mut Self` counts as a generic in the eyes of rustdoc. All this combines to create this lovely scene on `Iterator::by_ref`:

<details><summary>`Iterator::by_ref` spotlights Iterator, Read, and Write (pic of old design)</summary>

![image](https://user-images.githubusercontent.com/5217170/31209554-50b271ca-a951-11e7-928b-4f83416c8681.png)

</details>
2017-11-21 03:03:28 +00:00
Alexey Orlenko
0789a1df65
Fix a typo in ToSocketAddrs documentation
Fix a typo in ToSocketAddrs documentation: s/ToSocketsAddr/ToSocketAddrs
2017-11-21 01:53:36 +02:00
bors
1e44fee88d Auto merge of #46130 - kennytm:rollup, r=kennytm
Rollup of 9 pull requests

- Successful merges: #46082, #46088, #46092, #46107, #46119, #46121, #46122, #46124, #46128
- Failed merges:
2017-11-20 22:35:41 +00:00
Niko Matsakis
b9c766ccc0 fix example more 2017-11-20 16:53:48 -05:00
Vadim Petrochenkov
90f5cfdfbd Report special messages for path segment keywords in wrong positions 2017-11-21 00:21:24 +03:00
Vadim Petrochenkov
2e9b89ddc5 Support ::crate in paths 2017-11-21 00:21:24 +03:00
Guillaume Gomez
c00eaa9969 Strongly improve search path 2017-11-20 21:54:27 +01:00
Guillaume Gomez
09dcc5f361 Display negative traits implementation 2017-11-20 21:53:19 +01:00
kennytm
079a6e4cc2 Rollup merge of #46128 - Coding-Doctors:patch-1, r=dtolnay
Fix doc tests for trim_right_matches

First pr, but isn't anything big so hopefully it should all be good.
2017-11-21 03:14:49 +08:00
kennytm
2a2b2f4a5b Rollup merge of #46124 - rkruppe:no-llvm_unreachable, r=arielb1
[rustllvm] Use report_fatal_error over llvm_unreachable

This makes it more robust when assertions are disabled, crashing instead of causing UB.

Also introduces a tidy check to enforce this rule, which in turn necessitated making tidy run on `src/rustllvm`.

Fixes #44020
2017-11-21 03:14:48 +08:00
kennytm
07d16a78a0 Rollup merge of #46122 - malbarbo:docs, r=steveklabnik
Fix some docs summary nits
2017-11-21 03:14:47 +08:00
kennytm
04b9c25002 Rollup merge of #46121 - malbarbo:rc_arc_pointer, r=dtolnay
Print the address of the pointed value in Pointer impl for Rc and Arc

Fixes https://github.com/rust-lang/rust/issues/35384
2017-11-21 03:14:46 +08:00
kennytm
b32d9ada43 Rollup merge of #46119 - ritiek:master, r=arielb1
Fix typo in MIR "cannot move out of borrowed content"

I believe this all we need to change (#46018). Anyway, do let me know if there is anything else that needs to changed as well!
2017-11-21 03:14:45 +08:00
kennytm
ac92ea582f Rollup merge of #46107 - nyanzebra:develop, r=kennytm
Fixes spelling error in COMPILER_TESTS.md

Fixes a small spelling mistake :P
2017-11-21 03:14:44 +08:00
kennytm
fe2ec734bb Rollup merge of #46092 - sfackler:ppid, r=alexcrichton
Add process::parent_id

I have this as a Unix-only API since it seems like Windows doesn't have
a similar API.

r? @alexcrichton
2017-11-21 03:14:43 +08:00
kennytm
3b1cf4d3c7 Rollup merge of #46088 - vitiral:read_doc, r=steveklabnik
add doc for doing `Read` from `&str`

This information can be found on [stackoverflow](https://stackoverflow.com/questions/32674905/pass-string-to-function-taking-read-trait) but I think it would be beneficial if it was documented in the `Read` trait itself.

I had an *extremely* hard time finding this information, and "mocking" a reader with a string is an EXTREMELY common thing (I believe).
2017-11-21 03:14:42 +08:00
kennytm
2c16502b92 Rollup merge of #46082 - Enet4:mutex_from, r=sfackler
impl From for Mutex and RwLock

I felt that these implementations were missing, because doing `x.into()` works for other smart containers (such as `RefCell`), and in general I would say that the conversion makes sense.
2017-11-21 03:14:41 +08:00
kennytm
f0fcdbc021
Properly handle reexport of foreign items.
Handles `pub use` of `extern { fn, static, type }`. Also plug in some more
`match` arms where handling `extern type` is reasonable.

Fixed #46098.
2017-11-21 02:51:05 +08:00
Niko Matsakis
9af5a068a5 extend comment further to explain why we limit wf to upvar_tys 2017-11-20 13:49:18 -05:00
Benjamin Hoffmeyer
f69d4d44d8
Fix result for assert_eq 2017-11-20 13:47:42 -05:00
Benjamin Hoffmeyer
b3baa835fc
Fix doc tests for trim_right_matches 2017-11-20 13:37:56 -05:00
Niko Matsakis
2151e482ac fix example for E0644 2017-11-20 13:34:24 -05:00
Alex Burka
b34a7ffb25 address review comments 2017-11-20 18:03:20 +00:00
Taylor Cramer
450bbc5f94 Clippy is broken 2017-11-20 09:52:09 -08:00
Marco A L Barbosa
cbcaf736f8 Print the address of the pointed value in Pointer impl for Rc and Arc 2017-11-20 15:43:07 -02:00
bors
33374fa9d0 Auto merge of #46110 - steveklabnik:update-books, r=steveklabnik
Update books for next release

Since I was out last week I didn't get this done as early as usual, I don't know if beta has branched already or not.
2017-11-20 17:26:26 +00:00
Robin Kruppe
296aa96deb [rustllvm] Use report_fatal_error over llvm_unreachable
This makes it more robust when assertions are disabled,
crashing instead of causing UB.

Also introduces a tidy check to enforce this rule,
which in turn necessitated making tidy run on src/rustllvm.

Fixes #44020
2017-11-20 17:47:29 +01:00
Marco A L Barbosa
941852eef3 Fix some docs summary nits 2017-11-20 14:46:31 -02:00
Ritiek Malhotra
998e3c1aaa
Fix typo in MRI "cannot move out of borrowed content" 2017-11-20 21:26:21 +05:30
Simon Sapin
43e32b5346 Remove comment about a branch being optimized out, fix #45831
Most often, this code is used through the `std::heap::Heap`
and `#[gloabal_allocator]` indirection, so this branch is not
optimized out anymore.
2017-11-20 16:22:17 +01:00
Simon Sapin
2dd268b652 alloc_jemalloc: don’t assume MIN_ALIGN for small sizes
See previous commit’s message for what is expected of allocators
in general, and https://github.com/jemalloc/jemalloc/issues/1072
for discussion of what jemalloc does specifically.
2017-11-20 16:22:17 +01:00
Simon Sapin
21d899272a alloc_system: don’t assume MIN_ALIGN for small sizes, fix #45955
The GNU C library (glibc) is documented to always allocate with an alignment
of at least 8 or 16 bytes, on 32-bit or 64-bit platforms:
https://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html

This matches our use of `MIN_ALIGN` before this commit.
However, even when libc is glibc, the program might be linked
with another allocator that redefines the `malloc` symbol and friends.
(The `alloc_jemalloc` crate does, in some cases.)

So `alloc_system` doesn’t know which allocator it calls,
and needs to be conservative in assumptions it makes.

The C standard says:

https://port70.net/%7Ensz/c/c11/n1570.html#7.22.3
> The pointer returned if the allocation succeeds is suitably aligned
> so that it may be assigned to a pointer to any type of object
> with a fundamental alignment requirement

https://port70.net/~nsz/c/c11/n1570.html#6.2.8p2
> A fundamental alignment is represented by an alignment less than
> or equal to the greatest alignment supported by the implementation
> in all contexts, which is equal to `_Alignof (max_align_t)`.

`_Alignof (max_align_t)` depends on the ABI and doesn’t seem to have
a clear definition, but it seems to match our `MIN_ALIGN` in practice.

However, the size of objects is rounded up to the next multiple
of their alignment (since that size is also the stride used in arrays).
Conversely, the alignment of a non-zero-size object is at most its size.
So for example it seems ot be legal for `malloc(8)` to return a pointer
that’s only 8-bytes-aligned, even if `_Alignof (max_align_t)` is 16.
2017-11-20 15:56:53 +01:00
bors
e06138338f Auto merge of #45645 - fhartwig:39550, r=QuietMisdreavus
Make rustdoc not include self-by-value methods from Deref target

Fixes #39550
2017-11-20 14:47:40 +00:00
steveklabnik
a3917b2b86 Update books for next release
Also includes a fix in std::ops
2017-11-20 08:30:22 -05:00
Michael Woerister
0ea4b47650 incr.comp.: Make sure we don't lose unused green results from the query cache. 2017-11-20 13:11:03 +01:00
bors
26e881d00f Auto merge of #45998 - ollie27:doc_book_css, r=steveklabnik
Fix broken CSS for book redirect pages

rust.css has to be next to the font files so we shouldn't copy it for
only the book redirect pages, instead just use the version that is
already there.

This also removes the duplicate code creating version_info.html.

Fixes: #45974
2017-11-20 12:10:14 +00:00
Oliver Schneider
e7b2702172
Update ui test to rustc master 2017-11-20 12:42:38 +01:00
Niko Matsakis
61f31fd559 add a simple test that running with hir-tree doesn't go bonkers
Akin to the existing expanded test.
2017-11-20 05:58:11 -05:00
Scott McMurray
42208c1227 Handle shifts properly
* The overflow-checking shift items need to take a full 128-bit type, since they need to be able to detect idiocy like `1i128 << (1u128 << 127)`
* The unchecked ones just take u32, like the `*_sh?` methods in core
* Because shift-by-anything is allowed, cast into a new local for every shift
2017-11-20 01:54:43 -08:00
Marc-Antoine Perennou
b29a61e51b rustbuild: fix expectation message
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-11-20 10:02:21 +01:00
Oliver Schneider
3864d8943b
Address PR comments 2017-11-20 09:40:55 +01:00
Oliver Schneider
ddaf523aa4
The end of a span can be *before* the first char in a line 2017-11-20 09:37:54 +01:00
Oliver Schneider
78e269ee0b
Include rendered diagnostic in json 2017-11-20 09:37:54 +01:00
Oliver Schneider
2c2891b9f5
Add structured suggestions for proc macro use imports 2017-11-20 09:36:49 +01:00