Commit Graph

81989 Commits

Author SHA1 Message Date
memoryruins
a7e877ebdd Add regression test for issue #48697
#48697
2018-08-14 10:25:54 -04:00
bors
5bb923988f Auto merge of #53033 - RalfJung:manually_dro, r=SimonSapin
unsized ManuallyDrop

I think this matches what @eddyb had in https://github.com/rust-lang/rust/pull/52711 originally.

~~However, I have never added a `CoerceUnsized` before so I am not sure if I did this right. I copied the `unstable` attribute on the `impl` from elsewhere, but AFAIK it is useless because `impl`'s are insta-stable... so shouldn't this rather say "stable since 1.30"?~~

This is insta-stable and hence requires FCP, at least.

Fixes https://github.com/rust-lang/rust/issues/47034
2018-08-14 08:32:59 +00:00
bors
a8763b5370 Auto merge of #52895 - draganmladjenovic:minmax_qnan, r=alexcrichton
run-pass/simd-intrinsic-float-minmax: Force use of qNaN on Mips

Workaround for #52746.
r? @gnzlbg
2018-08-14 06:31:10 +00:00
bors
3e05f80a37 Auto merge of #52923 - eddyb:relative-imports, r=petrochenkov
#[feature(uniform_paths)]: allow `use x::y;` to resolve through `self::x`, not just `::x`.

_Branch originally by @cramertj, based on @petrochenkov's [description on the internals forum](https://internals.rust-lang.org/t/relative-paths-in-rust-2018/7883/30?u=petrochenkov)._
_(note, however, that the approach has significantly changed since)_

Implements `#[feature(uniform_paths)]` from #53130, by treating unqualified `use` paths as maybe-relative. That is, `use x::y;`, where `x` is a plain identifier (not a keyword), is no longer the same as `use ::y;`, and before picking an external crate named `x`, it first looks for an item named `x` in the same module (i.e. `self::x`) and prefers that local item instead.

Such a "maybe-relative" `x` can only resolve to an external crate if it's listed in "`extern_prelude`" (i.e. `core` / `std` and all the crates passed to `--extern`; the latter includes Cargo dependencies) - this is the same condition as being able to refer to the external crate from an unqualified, non-`use` path.
All other crates must be explicitly imported with an absolute path, e.g. `use ::y;`

To detect an ambiguity between the external crate and the local item with the same name, a "canary" import (e.g. `use self::x as _;`), tagged with the `is_uniform_paths_canary` flag, is injected. As the initial implementation is not sophisticated enough to handle all possible ways in which `self::x` could appear (e.g. from macro expansion), this also guards against accidentally picking the external crate, when it might actually get "shadowed" later.
Also, more canaries are injected for each block scope around the `use`, as `self::x` cannot resolve to any items named `x` in those scopes, but non-`use` paths can, and that could be confusing or even backwards-incompatible.

Errors are emitted only if the main "canary" import succeeds while an external crate exists (or if any of the block-scoped ones succeed at all), and ambiguities have custom error reporting, e.g.:
```rust
#![feature(uniform_paths)]
pub mod foo {
    use std::io;
    pub mod std { pub mod io {} }
}
```
```rust
error: import from `std` is ambiguous
 --> test.rs:3:9
  |
3 |     use std::io;
  |         ^^^ could refer to external crate `::std`
4 |     pub mod std { pub mod io {} }
  |     ----------------------------- could also refer to `self::std`
  |
  = help: write `::std` or `self::std` explicitly instead
  = note: relative `use` paths enabled by `#![feature(uniform_paths)]`
```
Another example, this time with a block-scoped item shadowing a module-scoped one:
```rust
#![feature(uniform_paths)]
enum Foo { A, B }
fn main() {
    enum Foo {}
    use Foo::*;
}
```
```rust
error: import from `Foo` is ambiguous
 --> test.rs:5:9
  |
4 |     enum Foo {}
  |     ----------- shadowed by block-scoped `Foo`
5 |     use Foo::*;
  |         ^^^
  |
  = help: write `::Foo` or `self::Foo` explicitly instead
  = note: relative `use` paths enabled by `#![feature(uniform_paths)]`
```

Additionally, this PR, because replacing "the `finalize_import` hack" was a blocker:
* fixes #52140
* fixes #52141
* fixes #52705

cc @aturon @joshtriplett
2018-08-14 04:22:14 +00:00
Eduard-Mihai Burtescu
13bc0b5a48 rustc_resolve: also inject canaries to detect block scopes shadowing uniform_paths imports. 2018-08-14 07:06:50 +03:00
Eduard-Mihai Burtescu
2ad865d601 rustc_resolve: inject ambiguity "canaries" when #![feature(uniform_paths)] is enabled. 2018-08-14 07:06:50 +03:00
Taylor Cramer
39ce9ef00e #[feature(uniform_paths)]: allow use x::y; to resolve through self::x, not just ::x. 2018-08-14 07:06:50 +03:00
Eduard-Mihai Burtescu
f9b1176eef rustc_resolve: fix special-case for one-segment import paths. 2018-08-14 07:06:50 +03:00
Eduard-Mihai Burtescu
cd47831bf0 syntax: gensym the injected std/core extern crates in the Rust 2018 edition. 2018-08-14 07:06:46 +03:00
Eduard-Mihai Burtescu
5218a5cf35 syntax: add uniform_paths feature-gate. 2018-08-14 01:18:05 +03:00
bors
d5a448b3f4 Auto merge of #53270 - petrochenkov:macuse-regr, r=alexcrichton
Fix a few regressions from enabling macro modularization

The first commit restores the old behavior for some minor unstable stuff (`rustc_*` and `derive_*` attributes) and adds a new feature gate for arbitrary tokens in non-macro attributes.

The second commit fixes https://github.com/rust-lang/rust/issues/53205

The third commit fixes https://github.com/rust-lang/rust/issues/53144.
Same technique is used as for other things blocking expansion progress - if something causes indeterminacy too often, then prohibit it.
In this case referring to crate-local macro-expanded `#[macro_export]` macros via module-relative paths is prohibited, see comments in code for more details.

cc https://github.com/rust-lang/rust/pull/50911
2018-08-13 17:10:04 +00:00
bors
a78ae85e59 Auto merge of #53161 - michaelwoerister:cstrings, r=wesleywiser
Avoid many allocations for CStrings during codegen.

Giving in to my irrational fear of dynamic allocations. Let's see what perf says to this.
2018-08-13 11:19:07 +00:00
bors
147ca2d2a6 Auto merge of #53238 - nrc:update, r=kennytm
Update RLS

Should fix RLS toolstate
2018-08-13 06:42:15 +00:00
bors
ab93561b5f Auto merge of #53051 - varkor:trait-method-pattern-arguments-error, r=petrochenkov
Emit error for pattern arguments in trait methods

The error and check for this already existed, but the parser didn't try to parse trait method arguments as patterns, so the error was never emitted. This surfaces the error, so we get better errors than simple parse errors.

This improves the error message described in https://github.com/rust-lang/rust/issues/53046.

r? @petrochenkov
2018-08-13 02:28:13 +00:00
bors
5a0d2961ce Auto merge of #53297 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 15 pull requests

Successful merges:

 - #52955 (Update compiler test documentation)
 - #53019 (Don't collect() when size_hint is useless)
 - #53025 (Consider changing assert! to debug_assert! when it calls visit_with)
 - #53059 (Remove explicit returns where unnecessary)
 - #53165 ( Add aarch64-unknown-netbsd target)
 - #53210 (Deny future duplication of rustc-ap-syntax)
 - #53223 (A few cleanups for rustc_data_structures)
 - #53230 ([nll] enable feature(nll) on various crates for bootstrap: part 4)
 - #53231 (Add let keyword doc)
 - #53240 (Add individual documentation for <integer>`.swap_bytes`/.`reverse_bits`)
 - #53253 (Remove unwanted console log)
 - #53264 (Show that Command can be reused and remodified)
 - #53267 (Fix styles)
 - #53273 (Add links to std::char::REPLACEMENT_CHARACTER from docs.)
 - #53283 (wherein we suggest float for integer literals where a float was expected)

Failed merges:

r? @ghost
2018-08-12 21:52:22 +00:00
Guillaume Gomez
3959dca205
Rollup merge of #53283 - zackmdavis:and_the_case_of_the_flotation_device, r=estebank
wherein we suggest float for integer literals where a float was expected

@sunjay pointed out that this is a nice thing that we could do.

Resolves #53280.

r? @estebank
2018-08-12 23:27:05 +02:00
Guillaume Gomez
f618071c46
Rollup merge of #53273 - frewsxcv:frewsxcv-ufffd, r=GuillaumeGomez
Add links to std::char::REPLACEMENT_CHARACTER from docs.

There are a few places where we mention the replacement character in the
docs, and it could be helpful for users to utilize the constant which is
available in the standard library, so let’s link to it!
2018-08-12 23:27:04 +02:00
Guillaume Gomez
34956ac0f6
Rollup merge of #53267 - GuillaumeGomez:fix-styles, r=QuietMisdreavus
Fix styles

Fixes #53262.

r? @QuietMisdreavus
2018-08-12 23:27:02 +02:00
Guillaume Gomez
17d4bd0c0b
Rollup merge of #53264 - Havvy:patch-3, r=GuillaumeGomez
Show that Command can be reused and remodified

The prior documentation did not make it clear this was possible.

I wanted to make the `list_dir` example work on Windows, but I don't know if passing "/" will error or show the root of the current volume (e.g. `C:`).

r? @GuillaumeGomez
2018-08-12 23:27:01 +02:00
Guillaume Gomez
b0d7f91c4e
Rollup merge of #53253 - GuillaumeGomez:remove-console, r=kennytm
Remove unwanted console log

Forgot to remove a `console.log`, now it's fixed.

r? @QuietMisdreavus
2018-08-12 23:26:59 +02:00
Guillaume Gomez
b1b5c66e10
Rollup merge of #53240 - llogiq:doc-num-swap-reverse, r=joshtriplett
Add individual documentation for <integer>`.swap_bytes`/.`reverse_bits`
2018-08-12 23:26:58 +02:00
Guillaume Gomez
dfb122ecc6
Rollup merge of #53231 - GuillaumeGomez:let-keyword, r=QuietMisdreavus
Add let keyword doc

Part of #34601.

r? @rust-lang/docs
2018-08-12 23:26:57 +02:00
Guillaume Gomez
3e9a1a1b82
Rollup merge of #53230 - memoryruins:nll_bootstrap_4, r=nikomatsakis
[nll] enable feature(nll) on various crates for bootstrap: part 4

#53172

r? @nikomatsakis
2018-08-12 23:26:56 +02:00
Guillaume Gomez
f1ae95f7e2
Rollup merge of #53223 - ljedrz:cleanup_data_structures, r=oli-obk
A few cleanups for rustc_data_structures

- remove a redundant `clone()`
- make some calls to `.iter()` implicit
- collapse/simplify a few operations
- remove some explicit `return`s
- make `SnapshotMap::{commit, rollback_to}` take references
- remove unnecessary struct field names
- change `transmute()`s in `IdxSet::{from_slice, from_slice_mut}` to casts
- remove some unnecessary lifetime annotations
- split 2 long literals
2018-08-12 23:26:55 +02:00
Guillaume Gomez
0903b18e9f
Rollup merge of #53210 - alexcrichton:deny-rustc-syntax, r=nrc
Deny future duplication of rustc-ap-syntax

Enable the tidy check to forbid this!

Closes #53006
2018-08-12 23:26:54 +02:00
Guillaume Gomez
d509e31b93
Rollup merge of #53165 - jakllsch:netbsd-ad22a005-b917-47f3-8156-f717d36f6bbe, r=estebank
Add aarch64-unknown-netbsd target

Depends on #53116.
2018-08-12 23:26:52 +02:00
Guillaume Gomez
28e1a7ba5e
Rollup merge of #53059 - ljedrz:unneeded_returns, r=kennytm
Remove explicit returns where unnecessary
2018-08-12 23:26:51 +02:00
Guillaume Gomez
fbe6241064
Rollup merge of #53025 - ljedrz:debug_asserts_limited, r=varkor
Consider changing assert! to debug_assert! when it calls visit_with

The perf run from #52956 revealed that there were 3 benchmarks that benefited most from changing `assert!`s to `debug_assert!`s:

- issue #46449: avg -4.7% for -check
- deeply-nested (AKA #38528): avg -3.4% for -check
- regression #31157: avg -3.2% for -check

I analyzed their fixing PRs and decided to look for potentially heavy assertions in the files they modified. I noticed that all of the non-trivial ones contained indirect calls to `visit_with()`.

It might be a good idea to consider changing `assert!` to `debug_assert!` in those places in order to get the performance wins shown by the benchmarks.
2018-08-12 23:26:50 +02:00
Guillaume Gomez
7d3864954e
Rollup merge of #53019 - ljedrz:bad_collects, r=estebank
Don't collect() when size_hint is useless

This adjusts PRs #52738 and #52697 by falling back to calculating capacity and extending or pushing in a loop where `collect()` can't be trusted to calculate the right capacity.

It is a performance win.
2018-08-12 23:26:49 +02:00
Guillaume Gomez
0653c259c2
Rollup merge of #52955 - tromey:compiler-test-docs, r=nikomatsakis
Update compiler test documentation

Update the compiler test documentation to document ignore-gdb-version
and min-system-llvm-version; and expand the min-gdb-version,
min-lldb-version, and min-llvm-version documentation a little.
2018-08-12 23:26:48 +02:00
Vadim Petrochenkov
dd0a766e06 Prohibit using macro-expanded macro_export macros through module-relative paths 2018-08-12 22:07:09 +03:00
Zack M. Davis
58f660f025 wherein we suggest float for integer literals where a float was expected
Sunjay Varma pointed out that this is a nice thing that we could do.

Resolves #53280.
2018-08-12 10:20:35 -07:00
varkor
5c814e2e4e Clean up and add extra tests 2018-08-11 21:25:48 +01:00
varkor
49e9c5fe90 Add E0642 to parser error 2018-08-11 21:08:24 +01:00
varkor
e4c3b49fe7 Emit an error during parsing 2018-08-11 21:08:24 +01:00
varkor
a478cd41e3 Improve diagnostics 2018-08-11 21:08:24 +01:00
varkor
235905c080 Fix handling of trait methods with bodies and improve efficiency 2018-08-11 21:08:24 +01:00
varkor
b05f0bec1a Suggest replacing patterns with underscores 2018-08-11 21:08:24 +01:00
varkor
90a6954327 Emit error for pattern arguments in trait methods
The error and check for this already existed, but the parser didn't try to parse trait method arguments as patterns, so the error was never emitted. This surfaces the error, so we get better errors than simple parse errors.
2018-08-11 21:08:24 +01:00
Havvy (Ryan Scheel)
0070b46626 Fix indent 2018-08-11 13:02:49 -07:00
Corey Farwell
ec18991492 Add links to std::char::REPLACEMENT_CHARACTER from docs.
There are a few places where we mention the replacement character in the
docs, and it could be helpful for users to utilize the constant which is
available in the standard library, so let’s link to it!
2018-08-11 15:42:35 -04:00
Guillaume Gomez
f9f934f7fd Add let keyword doc 2018-08-11 20:06:46 +02:00
Vadim Petrochenkov
e7ee6fb2a2 Do not consider built-in attributes as candidates when resolving non-attribute macro invocations
This is needed to avoid regressions on stable channel
2018-08-11 17:02:47 +03:00
Vadim Petrochenkov
d2f56378da Feature gate arbitrary tokens in non-macro attributes with a separate gate
Feature gate `rustc_` and `derive_` with their own gates again instead of `custom_attribute`
2018-08-11 16:41:17 +03:00
Ryan Scheel
53d308fdf8 Show that Command can be reused and remodified
The prior documentation did not make it clear this was possible.
2018-08-11 05:26:12 -07:00
Guillaume Gomez
5a801c89d0 Fix styles 2018-08-11 13:34:15 +02:00
Nick Cameron
4076dc46ae
Update RLS 2018-08-11 14:54:21 +08:00
Jonathan A. Kollasch
538d1ba6d7 aarch64-unknown-netbsd: add openssl configuration 2018-08-10 15:53:20 -05:00
bors
0aa8d03202 Auto merge of #53177 - nikomatsakis:nll-redundant-borrows-and-escaping-values, r=pnkfelix
optimize redundant borrows and escaping paths in NLL

This builds on https://github.com/rust-lang/rust/pull/53168 and adds a commit that addresses https://github.com/rust-lang/rust/issues/53176 -- or at least I think it does. I marked this as WIP because I want to see the test results (and measure the performance). I also want to double check we're not adding in any unsoundness here.
2018-08-10 19:18:22 +00:00
Guillaume Gomez
e37391b389 Remove unwanted console log 2018-08-10 18:48:36 +02:00