Commit Graph

73373 Commits

Author SHA1 Message Date
bors
3f92e8d898 Auto merge of #46455 - petrochenkov:pimpl, r=nikomatsakis
syntax: Rewrite parsing of impls

Properly parse impls for the never type `!`
Recover from missing `for` in `impl Trait for Type`
Prohibit inherent default impls and default impls of auto traits (https://github.com/rust-lang/rust/issues/37653#issuecomment-348687794, https://github.com/rust-lang/rust/issues/37653#issuecomment-348688785)
Change wording in more diagnostics to use "auto traits"
Fix some spans in diagnostics
Some other minor code cleanups in the parser
Disambiguate generics and qualified paths in impls (parse `impl <Type as Trait>::AssocTy { ... }`)
Replace the future-compatibility hack from https://github.com/rust-lang/rust/pull/38268 with actually parsing generic parameters
Add a test for https://github.com/rust-lang/rust/issues/46438
2018-01-14 16:56:15 +00:00
Vadim Petrochenkov
60c48dd16a syntax: Disambiguate generics and qualified paths 2018-01-14 18:10:19 +03:00
Vadim Petrochenkov
d19e4c4a85 syntax: Rewrite parsing of impls
Properly parse impls for the never type `!`
Recover from missing `for` in `impl Trait for Type`
Prohibit inherent default impls and default impls of auto traits
Change wording in more diagnostics to use "auto traits"
Some minor code cleanups in the parser
2018-01-14 18:10:05 +03:00
bors
adc9d86363 Auto merge of #47322 - nikomatsakis:nll-ice, r=pnkfelix
resolve type and region variables in "NLL dropck"

Fixes #47022.

r? @pnkfelix
2018-01-14 14:11:59 +00:00
bors
5d6f6e65ff Auto merge of #47274 - Manishearth:rustdoc-span, r=QuietMisdreavus
Use correct line offsets for doctests

Not yet tested.

This doesn't handle char positions. It could if I collected a map of char offsets and lines, but this is a bit more work and requires hooking into the parser much more (unsure if it's possible).

r? @QuietMisdreavus

(fixes #45868)
2018-01-14 11:28:27 +00:00
bors
48ab4cde54 Auto merge of #47268 - EdSchouten:cloudabi-libstd, r=alexcrichton
Implement libstd for CloudABI.

Though CloudABI is strongly inspired by POSIX, its absence of features that don't work well with capability-based sandboxing makes it different enough that adding bits to `sys/unix` will make things a mess. This change therefore adds CloudABI specific platform code under `sys/cloudabi`.

One of the goals of this implementation is to build as much as possible directly on top of CloudABI's system call layer, as opposed to using the C library. This is preferred, as the system call layer is supposed to be stable, whereas the C library ABI technically is not. An advantage of this approach is that it allows us to implement certain interfaces, such as mutexes and condition variables more optimally. They can be lighter than the ones provided by pthreads.

This change disables some modules that cannot realistically be implemented right now. For example, libstd's pathname abstraction is not designed with POSIX `*at()` (e.g., `openat()`) in mind. The `*at()` functions are the only set of file system APIs available on CloudABI. There is no global file system namespace, nor a process working directory. Discussions on how to port these modules over are outside the scope of this change.
2018-01-14 08:49:10 +00:00
bors
fd0f29237c Auto merge of #47261 - estebank:immutable-arg, r=petrochenkov
Assignment to immutable argument: diagnostic tweak

Re #46659.
2018-01-14 06:09:14 +00:00
bors
b762c2d9dd Auto merge of #47223 - alexcrichton:new-target-feature, r=eddyb
rustc: Tweak `#[target_feature]` syntax

This is an implementation of the `#[target_feature]` syntax-related changes of
[RFC 2045][rfc]. Notably two changes have been implemented:

* The new syntax is `#[target_feature(enable = "..")]` instead of
  `#[target_feature = "+.."]`. The `enable` key is necessary instead of the `+`
  to indicate that a feature is being enabled, and a sub-list is used for
  possible expansion in the future. Additionally within this syntax the feature
  names being enabled are now whitelisted against a known set of target feature
  names that we know about.

* The `#[target_feature]` attribute can only be applied to unsafe functions. It
  was decided in the RFC that invoking an instruction possibly not defined for
  the current processor is undefined behavior, so to enable this feature for now
  it requires an `unsafe` intervention.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/2045-target-feature.md
2018-01-14 03:27:35 +00:00
bors
80e2e67f4c Auto merge of #46832 - Diggsey:bufread-cheaper-seek, r=alexcrichton
BufRead: Only flush the internal buffer if seeking outside of it.

Fixes #31100

r? @dtolnay
2018-01-14 00:42:11 +00:00
Alex Crichton
0ecaa67e90 rustc: Refactor attribute checking to operate on HIR
This'll enable running queries that could be cached and overall be more amenable
to the query infastructure.
2018-01-13 16:07:13 -08:00
bors
cf4c3cbe55 Auto merge of #47416 - petrochenkov:remove-impl-for-dot-dot, r=petrochenkov
Remove `impl Foo for .. {}` in favor `auto trait Foo {}`

Rebase of https://github.com/rust-lang/rust/pull/46480 with restored parsing support.
2018-01-13 21:48:12 +00:00
Diggory Blake
c96f30257a Add note to documentation 2018-01-13 18:44:25 +00:00
Diggory Blake
562ba04e45 Implement "seek_relative" 2018-01-13 18:39:37 +00:00
Alex Crichton
5f006cebfc rustc: Tweak #[target_feature] syntax
This is an implementation of the `#[target_feature]` syntax-related changes of
[RFC 2045][rfc]. Notably two changes have been implemented:

* The new syntax is `#[target_feature(enable = "..")]` instead of
  `#[target_feature = "+.."]`. The `enable` key is necessary instead of the `+`
  to indicate that a feature is being enabled, and a sub-list is used for
  possible expansion in the future. Additionally within this syntax the feature
  names being enabled are now whitelisted against a known set of target feature
  names that we know about.

* The `#[target_feature]` attribute can only be applied to unsafe functions. It
  was decided in the RFC that invoking an instruction possibly not defined for
  the current processor is undefined behavior, so to enable this feature for now
  it requires an `unsafe` intervention.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/2045-target-feature.md
2018-01-13 10:07:18 -08:00
Vadim Petrochenkov
22598776b0 Re-add support for impl Trait for .. to the parser 2018-01-13 19:26:49 +03:00
leonardo.yvens
8b4d852f32 Address review. 2018-01-13 18:49:28 +03:00
leonardo.yvens
4e3953bbdd Parse auto trait inside fns.
Also refactored parsing auto traits.
2018-01-13 18:49:28 +03:00
leonardo.yvens
9ccd3ac178 Fix rustdoc 2018-01-13 18:48:01 +03:00
leonardo.yvens
3bb2ff05eb Move coherence/overlap.rs into coherence/mod.rs
`fn check_impl` was feeling lonely with a file all for itself.
2018-01-13 18:48:00 +03:00
leonardo.yvens
edd52b1975 Remove wfcheck for auto traits, remove dead error codes
The WF checks are now done as an AST validation.
2018-01-13 18:48:00 +03:00
leonardo.yvens
02b5fee732 Adjust tests for removal of impl Foo for .. {} 2018-01-13 18:48:00 +03:00
leonardo.yvens
f93183adb4 Remove impl Foo for .. in favor of auto trait Foo
No longer parse it.
Remove AutoTrait variant from AST and HIR.
Remove backwards compatibility lint.
Remove coherence checks, they make no sense for the new syntax.
Remove from rustdoc.
2018-01-13 18:48:00 +03:00
bors
e6072a7b38 Auto merge of #47251 - rkruppe:rm-simd-attr, r=eddyb
Remove deprecated unstable attribute #[simd]

The `#[simd]` attribute has been deprecated since c8b6d5b23c back in 2015. Any nightly crates using it have had ample time to switch to `#[repr(simd)]`, and if they didn't they're likely broken by now anyway.

r? @eddyb
2018-01-13 15:29:31 +00:00
bors
9b2f8ac29e Auto merge of #47242 - estebank:issue-15980, r=petrochenkov
`struct` pattern parsing and diagnostic tweaks

 - Recover from struct parse error on match and point out missing match
   body.
 - Point at struct when finding non-identifier while parsing its fields.
 - Add label to "expected identifier, found {}" error.

Fix #15980.
2018-01-13 12:42:33 +00:00
bors
ca092937aa Auto merge of #47181 - michaelwoerister:var-len-def-index, r=eddyb
Use DefIndex encoding that works better with on-disk variable length integer representations.

Use the least instead of the most significant bit for representing the address space.

r? @eddyb
2018-01-13 09:11:59 +00:00
bors
6cf081c8c5 Auto merge of #46592 - o01eg:fix-45345, r=alexcrichton
Fix 45345

There is a fix for https://github.com/rust-lang/rust/issues/45345

It re-introduces `CFG_LIBDIR_RELATIVE` which was broken when migration from `configure` script to `x.py`.

Other commits fix errors which happen after rustbuild cleanups.
2018-01-13 05:02:04 +00:00
bors
6eff103aa1 Auto merge of #46461 - zackmdavis:elemental_method_suggestion_jamboree, r=estebank
type error method suggestions use whitelisted identity-like conversions

![method_jamboree_summit](https://user-images.githubusercontent.com/1076988/33523646-e5c43184-d7c0-11e7-98e5-1bff426ade86.png)

Previously, on a type mismatch (and if this wasn't preëmpted by a
higher-priority suggestion), we would look for argumentless methods
returning the expected type, and list them in a `help` note. This had two
major shortcomings: firstly, a lot of the suggestions didn't really make
sense (if you used a &str where a String was expected,
`.to_ascii_uppercase()` is probably not the solution you were hoping
for). Secondly, we weren't generating suggestions from the most useful
traits! We address the first problem with an internal
`#[rustc_conversion_suggestion]` attribute meant to mark methods that keep
the "same value" in the relevant sense, just converting the type. We
address the second problem by making `FnCtxt.probe_for_return_type` pass
the `ProbeScope::AllTraits` to `probe_op`: this would seem to be safe
because grep reveals no other callers of `probe_for_return_type`.

Also, structured suggestions are pretty and good for RLS and friends.

Unfortunately, the trait probing is still not all one would hope for: at a
minimum, we don't know how to rule out `into()` in cases where it wouldn't
actually work, and we don't know how to rule in `.to_owned()` where it
would. Issues #46459 and #46460 have been filed and are ref'd in a FIXME.

This is hoped to resolve #42929, #44672, and #45777.
2018-01-13 02:15:19 +00:00
bors
51b0b3734c Auto merge of #47392 - kennytm:rollup, r=kennytm
Rollup of 24 pull requests

- Successful merges: #46985, #47069, #47081, #47185, #47282, #47283, #47288, #47289, #47298, #47305, #47306, #47307, #47310, #47324, #47328, #47331, #47340, #47343, #47344, #47352, #47357, #47365, #47375, #47382
- Failed merges: #47334
2018-01-12 20:28:19 +00:00
kennytm
c12eabfb11
Rollup merge of #47382 - topecongiro:issue-43105, r=eddyb
Ignore CTFE errors while lowering patterns

Closes #43105.

r? @eddyb
2018-01-13 03:17:08 +08:00
kennytm
21ac84e094
Rollup merge of #47375 - overvenus:duration-examples, r=dtolnay
Fix examples of Duration::subsec_millis and Duration::subsec_micros

Update examples of `Duration::subsec_millis` and `Duration::subsec_micros`, because they are not for these two methods actually.
2018-01-13 03:17:06 +08:00
kennytm
722838fa72
Rollup merge of #47365 - Diggsey:issue-42630, r=alexcrichton
Re-enable num tests on wasm

Issue #42630 was closed but the tests are still ignored, supposedly they should pass now.
2018-01-13 03:17:05 +08:00
kennytm
db36d18b9d
Rollup merge of #47357 - whentze:osstr-doc-fix, r=GuillaumeGomez
Fix docs for OsStr

At present, there are two small issues with the [docs](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) for std::ffi::OsStr:
- The docs say "OsStr is to OsString as String is to &str: the former in each pair are borrowed references; the latter are owned strings.". The latter pair is mixed up: String is the owned variant whereas &str is the borrowed reference.
- The doc links to String and &str are broken and render as [String] and [&str].

This PR fixes these issues.
2018-01-13 03:17:03 +08:00
kennytm
a63121c59a
Rollup merge of #47352 - EdSchouten:cloudabi-libtest, r=kennytm
Make libtest build on CloudABI.

Just like on UNIX systems, we need to use sysconf() to obtain the number
of CPUs. Extend the existing cfg()'s to match CloudABI as well.
2018-01-13 03:17:01 +08:00
kennytm
f589482c57
Rollup merge of #47344 - topecongiro:fixed-ices, r=alexcrichton
Add tests to fixed issues.

Closes #36792. Closes #38091. Closes #39687. Closes #42148. Closes #42956.
2018-01-13 03:17:00 +08:00
kennytm
b480366445
Rollup merge of #47343 - goffrie:master, r=jseyfried
Glued tokens can themselves be joint.

When gluing two tokens, the second of which is joint, the result should also be
joint.
This fixes an issue with joining three `Dot` tokens to make a `DotDotDot` - the
intermediate `DotDot` would not be joint and therefore we would not attempt to
glue the last `Dot` token, yielding `.. .` instead of `...`.

r? @jseyfried
2018-01-13 03:16:58 +08:00
kennytm
cf70a48ce4
Rollup merge of #47340 - alercah:typo-fix, r=GuillaumeGomez
Fix typo.
2018-01-13 03:16:55 +08:00
kennytm
30dbbb528d Rollup merge of #47331 - michaelwoerister:measure-depgraph-loading, r=alexcrichton
Add -Ztime-passes line for dep-graph loading.

We measure how much time the background thread spends on loading the dep-graph but not how long the main thread is blocked while the background thread is still working. Let's change that!
2018-01-13 02:26:37 +08:00
kennytm
7ffdabd401 Rollup merge of #47328 - mbrubeck:fs_read, r=sfackler
Use the new fs_read_write functions in rustc internals

Uses `fs::read` and `fs::write` (added by #45837) where appropriate, to simplify code and dog-food these new APIs.  This also improves performance, when combined with #47324.
2018-01-13 02:26:35 +08:00
kennytm
52770e69ac Rollup merge of #47324 - mbrubeck:len, r=sfackler
Pre-allocate in fs::read and fs::read_string

This is a simpler alternative to #46340 and #45928, as requested by the libs team.
2018-01-13 02:26:35 +08:00
kennytm
426036b517 Rollup merge of #47310 - bmusin:patch-1, r=sfackler
fix typo rwlock.rs

Hi. Fixed typo: contained -> content
2018-01-13 02:26:34 +08:00
kennytm
9bedbcc9bf Rollup merge of #47307 - dlrobertson:fix_panic_strings, r=kennytm
Fix panic strings.

 - Fix panic string in `check_ast_crate`.
 - Update panic string for Duration subtraction on overflow/underflow.

Not sure if the changes to `Duration` are helpful/needed. Mostly just a nit.
Otherwise this is just a one character change :)

On another note: I hit the panic in `check_ast_crate` when compiling
[m-labs/smoltcp] with the following:

```
cargo test --doc --no-default-features --features "std socket-raw"`
```

[m-labs/smoltcp]: https://github.com/m-labs/smoltcp
2018-01-13 02:26:33 +08:00
kennytm
df8f2c6eda Rollup merge of #47306 - alexreg:dataflow-analysis, r=eddyb
Don't track local_needs_drop separately in qualify_consts.

None
2018-01-13 02:26:32 +08:00
kennytm
f4ff4c01f1 Rollup merge of #47305 - cramertj:better-calendar-alone, r=eddyb
Use copy/clone closures to simplify calendar test

Split out from #47304

r? @eddyb
2018-01-13 02:26:31 +08:00
kennytm
e40a6fb133 Rollup merge of #47298 - cramertj:path-as-modrs, r=nikomatsakis
Treat #[path] files as mod.rs files

Fixes https://github.com/rust-lang/rust/issues/46936, cc @briansmith, @SergioBenitez, @nikomatsakis.

This (insta-stable) change treats files included via `#[path = "bla.rs"] mod foo;` as though they were `mod.rs` files. Namely, it allows them to include `mod` statements and looks for the child modules in sibling directories, rather than in relative `modname/childmodule.rs` files as happens for non-`mod.rs` files.

This change makes the `non_modrs_mods` feature backwards compatible with the existing usage in https://github.com/briansmith/ring, several versions of which are currently broken in beta. If we decide to merge, this change should be backported to beta.

cc https://github.com/rust-lang/rust/issues/37872

r? @jseyfried
2018-01-13 02:26:30 +08:00
kennytm
8aab0cc861 Rollup merge of #47289 - etaoins:skip-linker-output-non-utf8-test-on-apple, r=kennytm
Skip linker-output-non-utf8 test on Apple

This test fails on APFS filesystems with the following error:

```shell
mkdir: /Users/ryan/Code/rust/build/x86_64-apple-darwin/test/run-make/linker-output-non-utf8.stage2-x86_64-apple-darwin/zzz�: Illegal byte sequence
```

The mkdir does succeed on an HFS+ volume mounted on the same system:
```shell
$ mkdir zzz$$'\xff'
$ ls
zzz47432\xff
```

This is due to APFS now requiring that all paths are valid UTF-8. As APFS will be the default filesystem for all new Darwin-based systems the most straightforward fix is to skip this test on Darwin as well as Windows.
2018-01-13 02:26:29 +08:00
kennytm
1233602283 Rollup merge of #47288 - cuviper:jobserver-pipe2, r=alexcrichton
Update jobserver to 0.1.9

Fix for `ENOSYS` when calling `pipe2`, alexcrichton/jobserver-rs#5.

r? @alexcrichton
2018-01-13 02:26:28 +08:00
kennytm
0d199d56ea Rollup merge of #47283 - malbarbo:musl-1.1.18, r=alexcrichton
Update musl to 1.1.18

According to http://www.musl-libc.org/download.html:

This release corrects regressions in glob() and armv4t build failure
introduced in the previous release, and includes an important bug fix
for posix_spawnp in the presence of a large PATH environment variable.
2018-01-13 02:26:27 +08:00
kennytm
f30f18f5c3 Rollup merge of #47282 - malbarbo:i586-musl, r=alexcrichton
Add i586-unknown-linux-musl target
2018-01-13 02:26:26 +08:00
kennytm
6ac0888ad2 Rollup merge of #47185 - ritiek:ui-test-failed-output, r=nikomatsakis
Show only stderr diff when a ui test fails

Addresses #46826.

This PR will print the normalized output if expected text is empty otherwise it will just print the diff.

Should we also show a few (actual == expected) lines above & below when displaying the diff? What about indicating line numbers as well so one can quickly check mismatch lines in .stderr file?
2018-01-13 02:26:25 +08:00
kennytm
b35cb1ee93 Rollup merge of #47081 - pietroalbini:fix-nested-tree-dump, r=nrc
Fix nested imports not included in the save_analysis output

This PR fixes #46823.

The bug was caused by the old access level checking code, which checked against the root UseTree even for nested trees. The problem with that is, for nested trees the root is lowered as an empty `ListStem`, which is not reachable by definition. The new code computes the access level with each tree's own ID, and with the root tree's visibility.

I tested this manually and it works, but I'm not really satisfied with that. I looked at the existing tests though, and no one checked for the save_analysis output as far as I can see. How should I proceed with that? I think having a test about this would be really nice.
2018-01-13 02:26:24 +08:00