Commit Graph

78011 Commits

Author SHA1 Message Date
Mark Simulacrum
bf832c2a89
Rollup merge of #50602 - Screwtapello:update-canonicalize-docs, r=cramertj
Update canonicalize docs

I was recently working with file-paths in Rust, and I felt let down by the `std::fs::canonicalize` docs, so I figured I should submit a PR with some suggestions.

I was looking for a method to turn a relative path into an absolute path. The `canonicalize` docs didn't mention the words "relative" or "absolute", but they did mention resolving symlinks (which is a kind of canonicalisation and does not imply converting to absolute), so I assumed that's all it did. To remedy this, I've added the word "absolute" to the description of both `std::fs::canonicalize` and `std::path::Path::canonicalize`.

After calling `canonicalize` on Windows, I ran into a bunch of other problems I would not have expected from the function's behaviour on Linux. Specifically, if you call `canonicalize` on a path:

  - it's allowed to be much longer than it otherwise would
  - `.join("a/slash/delimited/path")` gives you a broken path that Windows can't use, where the same operation would have worked perfectly without `canonicalize` (if the path were short enough)
  - the resulting path may confuse other Windows programs if you pass it to them on the command-line, or write it to a config file that they read, etc.

...so I tried to summarize those behaviours too.

If I understand correctly, those behaviours are a side-effect of calling `GetFinalPathNameByHandle`, and the documentation says `canonicalize` might not call that function in future, so maybe those side-effects shouldn't be part of the function's documentation. However, I bet there's a lot of applications deliberately calling `canonicalize` just for the path-length-extension alone, so that particular side-effect is de-facto part of the `canonicalize` interface.
2018-05-12 07:32:29 -06:00
Mark Simulacrum
b9c9fac1a4
Rollup merge of #50558 - whitfin:issue-50500, r=michaelwoerister
Remove all reference to DepGraph::work_products

This is an attempt at fixing #50500. It will remove the `work_products` key from `DepGraphData` completely, in favour of just passing the relevant data around. I went in a little blindly; everything appears to work just fine but I'd appreciate any additional advice people.

I didn't want to remove too much of what was already there, so I kept the structure pretty much the same (aside from some naming tweaks) - if anyone has suggestions on how to streamline it a little better, happy to follow up.

r? @michaelwoerister
2018-05-12 07:32:28 -06:00
Mark Simulacrum
d7f5e1f5d1
Rollup merge of #50550 - llogiq:fmt-result, r=petrochenkov
use fmt::Result where applicable

This is a quite boring PR, but I think the type alias improves readability, so why not use it?
2018-05-12 07:32:27 -06:00
Mark Simulacrum
3603d241d8
Rollup merge of #50545 - rizakrko:const_time, r=oli-obk
Made some functions in time module const

They may be const, or i missed something?
2018-05-12 07:32:25 -06:00
Mark Simulacrum
60f9fc2d13
Rollup merge of #50544 - Eijebong:cleanup_deps, r=alexcrichton
Cleanup some dependencies
2018-05-12 07:32:24 -06:00
Nikita Popov
a70ef4cb49 Set PrepareForThinLTO flag when using ThinLTO
The LLVM PassManager has a PrepareForThinLTO flag, which is intended
when compilation occurs in conjunction with linking by ThinLTO. The
flag has two effects:

 * The NameAnonGlobal pass is run after all other passes, which
   ensures that all globals have a name.
 * In optimized builds, a number of late passes (mainly related to
   vectorization and unrolling) are disabled, on the rationale that
   these a) will increase codesize of the intermediate artifacts
   and b) will be run by ThinLTO again anyway.

This patch enables the use of PrepareForThinLTO if Thin or ThinLocal
linking is used.

The background for this change is the CI failure in #49479, which
we assume to be caused by the NameAnonGlobal pass not being run.
As this changes which passes LLVM runs, this might have performance
(or other) impact, so we want to land this separately.
2018-05-12 14:07:20 +02:00
bors
e6db79f2ca Auto merge of #50352 - porglezomp:btree-no-empty-alloc, r=Gankro
Don't allocate when creating an empty BTree

Following the discussion in #50266, this adds a static instance of `LeafNode` that empty BTrees point to, and then replaces it on `insert`, `append`, and `entry`. This avoids allocating for empty maps.

Fixes #50266

r? @Gankro
2018-05-12 09:42:11 +00:00
Sébastien Marie
f430d7c3c7 add aarch64-unknown-openbsd support 2018-05-12 10:27:34 +02:00
Sébastien Marie
0bef240277 openbsd-i686: use lld as linker by default
standard binutils on openbsd is too old to do proper job with i128
code.
2018-05-12 10:27:04 +02:00
bors
5f98fe714e Auto merge of #50476 - zackmdavis:tame_unreachable_pub_suggestion, r=Manishearth
don't make crazy suggestion for unreachable braced pub-use

The Higher Intermediate Representation doesn't have spans for visibility
keywords, so we were assuming that the first whitespace-delimited token
in the item span was the `pub` to be weakened. This doesn't work for
brace-grouped `use`s, which get lowered as if they were several
individual `use` statements, but with spans that only cover the braced
path-segments. Constructing a correct suggestion here presents some
challenges—until someone works those out, we can at least protect the
dignity of our compiler by not offering any suggestion at all for `use` items.

This resolves #50455 (but again, it would be desirable in the future to
make a correct suggestion instead of copping out like this).

r? @Manishearth
2018-05-12 05:42:10 +00:00
Dan Robertson
f6a46cf4d1
typeck: Fix ICE with struct update syntax
If check_expr_struct_fields fails, do not continue to record update.
If we continue to record update, the struct may cause us to ICE later
on indexing a field that may or may not exist.
2018-05-12 02:47:58 +00:00
bors
c705877b1d Auto merge of #50249 - Zoxc:allocation-const, r=oli-obk
Introduce ConstValue and use it instead of miri's Value for constant values

r? @oli-obk
2018-05-12 01:48:11 +00:00
Tobias Bucher
4ce24269bb Do not silently truncate offsets for read_at/write_at on emscripten
Generate an IO error if the offset is out of bounds for the system call.
2018-05-12 02:31:38 +02:00
bors
388df823e8 Auto merge of #50161 - rizakrko:impl_note, r=estebank
added missing implementation hint

Fixes [#50151](https://github.com/rust-lang/rust/issues/50151).
Actually, i don't know, should following code
`let x = |ref x: isize| { x += 1; };`
emit
`note: an implementation of std::ops::AddAssign might be missing for &isize`
or
`note: this is a reference to a type that + can be applied to; you need to dereference this variable once for this operation to work`
or both
2018-05-11 23:06:27 +00:00
varkor
16c088d325 Display the name of the failed file in tidy/libcoretest 2018-05-11 21:36:24 +01:00
Alex Crichton
12f92e9640 rustc: Only suggest deleting extern crate if it works
This commit updates one of the edition lints to only suggest deleting `extern
crate` if it actually works. Otherwise this can yield some confusing behavior
with rustfix specifically where if you accidentally deny the `rust_2018_idioms`
lint in the 2015 edition it's suggesting features that don't work!
2018-05-11 12:57:01 -07:00
bors
0cd465087d Auto merge of #50105 - mixi:crt-included, r=alexcrichton
Use the correct crt*.o files when linking musl targets.

This is supposed to support optionally using the system copy of musl
libc instead of the included one if supported. This currently only
affects the start files, which is enough to allow building rustc on musl
targets.

Most of the changes are analogous to crt-static.

Excluding the start files is something musl based distributions usually patch into their copy of rustc:
  - https://github.com/alpinelinux/aports/blob/eb064c8/community/rust/musl-fix-linux_musl_base.patch
  - https://github.com/voidlinux/void-packages/blob/77400fc/srcpkgs/rust/patches/link-musl-dynamically.patch

For third-party distributions that not yet carry those patches it would be nice if it was supported without the need to patch upstream sources.

## Reasons
### What breaks?
Some start files were missed when originally writing the logic to swap in musl start files (gcc comes with its own start files, which are suppressed by -nostdlib, but not manually included later on). This caused #36710, which also affects rustc with the internal llvm copy or any other system libraries that need crtbegin/crtend.

### How is it fixed?
The system linker already has all the logic to decide which start files to include, so we can just defer to it (except of course if it doesn't target musl).

### Why is it optional?
In #40113 it was first tried to remove the start files, which broke compiling musl-targeting static binaries with a glibc-targeting compiler. This is why it eventually landed without removing the start files. Being an option side-steps the issue.

### Why are the start files still installed?
This has the nice side-effect, that the produced rust-std-* binaries can still be used by on a glibc-targeting system with a rustc built against glibc.

## Does it work?
With the following build script (using [musl-cross-make](https://github.com/richfelker/musl-cross-make)): https://shadowice.org/~mixi/rust-musl/build.sh, I was able to cross-compile a musl-host musl-targeting rustc on a glibc-based system. The resulting binaries are at https://shadowice.org/~mixi/rust-musl/binaries/. This also requires #50103 and #50104 (which are also applied to the branch the build script uses).
2018-05-11 19:46:16 +00:00
Alex Crichton
6de899f42d rustc: Include semicolon when removing extern crate
Currently the lint for removing `extern crate` suggests removing `extern crate`
most of the time, but the rest of the time it suggest replacing it with `use
crate_name`. Unfortunately though when spliced into the original code you're
replacing

    extern crate foo;

with

    use foo

which is syntactically invalid! This commit ensure that the trailing semicolon
is included in rustc's suggestion to ensure that the code continues to compile
afterwards.
2018-05-11 12:44:00 -07:00
Alex Crichton
0588bcadf8 rustc: Allow an edition's feature on that edition
This commit fixes a hard error where the `#![feature(rust_2018_preview)]`
feature was forbidden to be mentioned when the `--edition 2018` flag was passed.
This instead silently accepts that feature gate despite it not being necessary.
It's intended that this will help ease the transition into the 2018 edition as
users will, for the time being, start off with the `rust_2018_preview` feature
and no longer immediately need to remove it.

Closes #50662
2018-05-11 09:15:48 -07:00
varkor
fd85de1459 Ignore non .rs files for tidy libcoretest
Previously, any file would be read, which is both unnecessary, and causes issues if irrelevant non-Unicode files were read (e.g. `.DS_STORE`).
2018-05-11 17:04:50 +01:00
bors
6ecbe9b7f7 Auto merge of #50650 - oli-obk:clippy, r=Manishearth
Update the clippy and miri submodules

r? @Manishearth
2018-05-11 15:40:35 +00:00
Isaac Whitfield
8402a58528 Update an old method name in debug logging 2018-05-11 08:09:53 -07:00
Isaac Whitfield
0a4fbe326a Update naming in line with PR comments 2018-05-11 08:09:53 -07:00
Isaac Whitfield
5c83422a5b Neaten a couple of long signatures 2018-05-11 08:09:53 -07:00
Isaac Whitfield
d23cbc3fbe Catch a bad reference in use clauses 2018-05-11 08:09:53 -07:00
Isaac Whitfield
89a8f2c103 Remove shared access to DepGraph::work_products 2018-05-11 08:09:53 -07:00
bors
fe63e479d1 Auto merge of #50332 - Zoxc:interner-split, r=michaelwoerister
Only lookup types in one interner
2018-05-11 13:26:13 +00:00
Roman Stoliar
17c56d409e resolved merge conflict 2018-05-11 15:14:23 +03:00
Roman Stoliar
d9b71d2156 fixed double ref hint 2018-05-11 15:12:53 +03:00
Roman Stoliar
747d5d99cd [wip] fixed some error, added missing test 2018-05-11 15:12:53 +03:00
Roman Stoliar
56fbc63456 unary op filter, dereference hint 2018-05-11 15:12:53 +03:00
Roman Stoliar
2f6945c776 added missing implementation hint 2018-05-11 15:12:30 +03:00
Oliver Schneider
847bb14ee7
Update the clippy and miri submodules 2018-05-11 14:11:06 +02:00
John Kåre Alsaker
0aa92acda7 Add a query to convert from ConstValue to Allocation 2018-05-11 13:01:44 +02:00
John Kåre Alsaker
fdd9787777 Introduce ConstValue and use it instead of miri's Value for constant values 2018-05-11 13:01:44 +02:00
bors
41707d8df9 Auto merge of #50620 - alexcrichton:change-names-again, r=nikomatsakis
Rename the 2018 edition lint names

* `rust_2018_breakage` -> `rust_2018_compatibility` - the lint for ensuring
  that your code, in the 2015 edition, is compatible with the 2018 edition's
  semantics. This is required to pass *before* you enable the 2018 edition.
* `rust_2018_migration` -> `rust_2018_idioms` - the lint for writing idiomatic
  code after you've already enabled the 2018 edition
2018-05-11 07:28:51 +00:00
Johannes Nixdorf
490d05055a compiletest: escape CXX the same way as CC for MSVC 2018-05-11 09:02:14 +02:00
Johannes Nixdorf
bd94bf5738 Add a test for issue 36710. 2018-05-11 09:02:14 +02:00
bors
6923fb512a Auto merge of #50609 - alexcrichton:no-nll-preview, r=nikomatsakis
Remove `nll` from `rust_2018_preview`

NLL isn't quite ready yet so gonna hold off on inserting it into the preview.
2018-05-11 04:45:25 +00:00
kennytm
c3b23b3b14
AppVeyor: Dump crash log on failure. 2018-05-11 12:30:50 +08:00
Zack M. Davis
7006018745 don't make crazy suggestion for unreachable braced pub-use
The Higher Intermediate Representation doesn't have spans for visibility
keywords, so we were assuming that the first whitespace-delimited token
in the item span was the `pub` to be weakened. This doesn't work for
brace-grouped `use`s, which get lowered as if they were several
individual `use` statements, but with spans that only cover the braced
path-segments. Constructing a correct suggestion here presents some
challenges—until someone works those out, we can at least protect the
dignity of our compiler marking the suggestion for `use` items as
potentially incorrect.

This resolves #50455 (but again, it would be desirable in the future to
make a correct suggestion instead of copping out like this).
2018-05-10 20:48:18 -07:00
bors
4e5a155a93 Auto merge of #50440 - nikomatsakis:single-use-lifetimes, r=cramertj
Improve single-use and zero-use lifetime lints

The code now correctly identifies *when* to lint -- or more correctly, anyhow -- but it doesn't yet offer suggestions for how to fix.

(I just remembered when writing this I had meant to go back over some of these cases around e.g. impl Trait and double check that everything is right...)

cc #44752

r? @cramertj
2018-05-11 02:14:25 +00:00
Niko Matsakis
6f98ee95d8 ensure lint are issued in a stable order 2018-05-10 19:39:00 -04:00
bors
a006328126 Auto merge of #50611 - alexcrichton:rollup, r=alexcrichton
Rollup of 18 pull requests

Successful merges:

 - #49423 (Extend tests for RFC1598 (GAT))
 - #50010 (Give SliceIndex impls a test suite of girth befitting the implementation (and fix a UTF8 boundary check))
 - #50447 (Fix update-references for tests within subdirectories.)
 - #50514 (Pull in a wasm fix from LLVM upstream)
 - #50524 (Make DepGraph::previous_work_products immutable)
 - #50532 (Don't use Lock for heavily accessed CrateMetadata::cnum_map.)
 - #50538 ( Make CrateNum allocation more thread-safe. )
 - #50564 (Inline `Span` methods.)
 - #50565 (Use SmallVec for DepNodeIndex within dep_graph.)
 - #50569 (Allow for specifying a linker plugin for cross-language LTO)
 - #50572 (Clarify in the docs that `mul_add` is not always faster.)
 - #50574 (add fn `into_inner(self) -> (Idx, Idx)` to RangeInclusive (#49022))
 - #50575 (std: Avoid `ptr::copy` if unnecessary in `vec::Drain`)
 - #50588 (Move "See also" disambiguation links for primitive types to top)
 - #50590 (Fix tuple struct field spans)
 - #50591 (Restore RawVec::reserve* documentation)
 - #50598 (Remove unnecessary mutable borrow and resizing in DepGraph::serialize)
 - #50606 (Retry when downloading the Docker cache.)

Failed merges:

 - #50161 (added missing implementation hint)
 - #50558 (Remove all reference to DepGraph::work_products)
2018-05-10 23:33:13 +00:00
Alex Crichton
2c5d13dc9c Skip a memory-hungry test that OOMs
Attempting to fix https://travis-ci.org/rust-lang/rust/jobs/377407894 via some
selective ignoring tests
2018-05-10 14:11:17 -07:00
bors
acd3871ba1 Auto merge of #50331 - MartinHusemann:master, r=Kimundi
Map the stack guard page with max protection on NetBSD

On NetBSD the initial mmap() protection of a mapping can not be made
less restrictive with mprotect().

So when mapping a stack guard page, use the maximum protection
we ever want to use, then mprotect() it to the permission we
want it to have initially.

Fixes #50313
2018-05-10 21:02:24 +00:00
Roman Stoliar
4d8d0a6f85 const time
added rustc_const_unstable attribute

extended tests

added conversion test

fixed tidy test

added feature attribute
2018-05-10 22:10:11 +03:00
Aaron DeVore
2ae8accd24 fs::write: Add example writing a &str 2018-05-10 11:47:31 -07:00
Eduard-Mihai Burtescu
9235c9ff46 rustc: leave space for fields of uninhabited types to allow partial initialization. 2018-05-10 21:30:06 +03:00
Alex Crichton
d636aec351 Rename the 2018 edition lint names
* `rust_2018_breakage` -> `rust_2018_compatibility` - the lint for ensuring
  that your code, in the 2015 edition, is compatible with the 2018 edition's
  semantics. This is required to pass *before* you enable the 2018 edition.
* `rust_2018_migration` -> `rust_2018_idioms` - the lint for writing idiomatic
  code after you've already enabled the 2018 edition
2018-05-10 11:28:11 -07:00