Pietro Albini [Wed, 19 Dec 2018 10:47:12 +0000 (11:47 +0100)]
Rollup merge of #56907 - rumajo:master, r=kennytm,Centril
Fix grammar in compiler error for array iterators
This fixes a small grammatical mistake in the message the compiler gives when attempting to iterate directly over an array `arr` without calling `arr.iter()` or borrowing `&arr`.
Pietro Albini [Wed, 19 Dec 2018 10:47:09 +0000 (11:47 +0100)]
Rollup merge of #56820 - ljedrz:format_tweaks, r=alexcrichton
format-related tweaks
- remove an unreachable condition
- inline one-liners related to `parse_expr` (called in succession)
- refactor `report_invalid_references`
- refactor `verify_arg_type`
- minor stylistic improvements
Pietro Albini [Wed, 19 Dec 2018 10:47:07 +0000 (11:47 +0100)]
Rollup merge of #56689 - QuietMisdreavus:rustdoc-lint-group, r=pnkfelix
add a lint group for lints emitted by rustdoc
As rustdoc adds more lints that it specifically manages, it would be nice to be able to lump them all together. This gives us a new group just for that.
I deliberately didn't include `missing_docs` because this is kind of a stepping stone for moving our lints into tool lints (i.e. `#![warn(rustdoc::private_doc_tests)]`), since all of these are specifically emitted by rustdoc. If we want to move `missing_docs` out of the compiler, that's also an option, but it would create a surprising change of behavior.
I also took the chance to rewrite the lint descriptions of these lints to better match the style of the other lints. `>_>`
Pietro Albini [Wed, 19 Dec 2018 10:47:04 +0000 (11:47 +0100)]
Rollup merge of #56363 - Lucretiel:patch-3, r=shepmaster
Defactored Bytes::read
Removed unneeded refactoring of read_one_byte, which removed the unneeded dynamic dispatch (`dyn Read`) used by that function.
This function is only used in one place in the entire Rust codebase; there doesn't seem to be a reason for it to exist (and there especially doesn't seem to be a reason for it to use dynamic dispatch)
````
rustup rust-lang/rust#52994
Fix test
Line length fix
Remove references to sized for end users
Remove DUMMY_SP
Add suggestion for replacement
Update lint definitions
Lint for Vec<Box<T: Sized>> - Closes #3530
Fix doc_markdown mixed case false positive
question_mark: Suggest Some(opt?) for if-else
redundant_field_names: Do not trigger on path with type params
question_mark: Lint only early returns
question_mark: Fix applicability
Remove obsolete comment
new_without_default, partialeq_ne_impl: Use span_lint_node
Update .stderr after rebase
cargo fmt and remove stabilized feature
Make suggestion Applicability::MachineApplicable
Address review feedback
Extract method
Check array lengths to prevent OOB access
Add suggestion for explicit_write lint
Fix write_with_newline escaping false positive
````
bors [Mon, 17 Dec 2018 04:18:14 +0000 (04:18 +0000)]
Auto merge of #56642 - nikic:llvm-6, r=alexcrichton
Bump minimum required LLVM version to 6.0
Based on the discussion in #55842, while the overall position of Rust wrt LLVM continues to be contentious, there does seem to be a consensus that there is no need for continued support of LLVM 5. This PR bumps our version requirement to LLVM 6.0 and makes Travis run against that.
I hope that this is going to unblock #52694. If I understand correctly, while this issue still exists in LLVM 6, Ubuntu has backported the relevant patch.
bors [Sun, 16 Dec 2018 20:58:09 +0000 (20:58 +0000)]
Auto merge of #56875 - Centril:rollup, r=Centril
Rollup of 20 pull requests
Successful merges:
- #53506 (Documentation for impl From for AtomicBool and other Atomic types)
- #56343 (Remove not used mod)
- #56439 (Clearer error message for dead assign)
- #56640 (Add FreeBSD unsigned char platforms to std::os::raw)
- #56648 (Fix BTreeMap UB)
- #56672 (Document time of back operations of a Linked List)
- #56706 (Make `const unsafe fn` bodies `unsafe`)
- #56742 (infer: remove Box from a returned Iterator)
- #56761 (Suggest using `.display()` when trying to print a `Path`)
- #56781 (Update LLVM submodule)
- #56789 (rustc: Add an unstable `simd_select_bitmask` intrinsic)
- #56790 (Make RValue::Discriminant a normal Shallow read)
- #56793 (rustdoc: look for comments when scraping attributes/crates from doctests)
- #56826 (rustc: Add the `cmpxchg16b` target feature on x86/x86_64)
- #56832 (std: Use `rustc_demangle` from crates.io)
- #56844 (Improve CSS rule)
- #56850 (Fixed issue with using `Self` ctor in typedefs)
- #56855 (Remove u8 cttz hack)
- #56857 (Fix a small mistake regarding NaNs in a deprecation message)
- #56858 (Fix doc of `std::fs::canonicalize`)
Failed merges:
- #56741 (treat ref-to-raw cast like a reborrow: do a special kind of retag)
Rollup merge of #56858 - tbu-:pr_doc_canonicalize, r=shepmaster
Fix doc of `std::fs::canonicalize`
Point out that the final component of the path name might be a filename
(and not a directory name). Previously, the doc said that all components
of the path must be directory names, when it actually only ment all but
the final one.
Rollup merge of #56857 - tbu-:pr_doc_abssub, r=zackmdavis
Fix a small mistake regarding NaNs in a deprecation message
`max` on floats returns the other argument if one of them is NaN, which
would be `0.0` in this case. This is unlike the C functions `fdim` and
`fdimf` which return NaN if either of their arguments is NaN.
Furthermore this code doesn't actually work, because the 8 literal does not match the $BITS provided from the macro invocation, so effectively this was just dead code. Ref #43024.
What LLVM does is still not ideal for CPUs that only have bsf but not tzcnt, will create a patch for that later.
Rollup merge of #56826 - alexcrichton:atomic-u128, r=gnzlbg
rustc: Add the `cmpxchg16b` target feature on x86/x86_64
This appears to be called `cx16` in LLVM and a few other locations, but
the Intel Intrinsic Guide doesn't have a name for this and the CPU
manual from Intel only mentions `cmpxchg16b`, so that's the name chosen
here.
When scraping out crate-level attributes and `extern crate` statements, we wouldn't look for comments, so any presence of comments would shunt it and everything after it into "everything else". This could cause parsing issues when looking for `fn main` and `extern crate my_crate` later on, which would in turn cause rustdoc to incorrectly wrap a test with `fn main` when it already had one declared.
I took the opportunity to clean up the logic a little bit, but it would still benefit from a libsyntax-based loop like the `fn main` detection.
Rollup merge of #56790 - rust-lang:borrowck-niche-discriminants, r=nikomatsakis
Make RValue::Discriminant a normal Shallow read
Enum layout optimizations mean that the discriminant of an enum may not be stored in a tag disjoint from the rest of the fields of the enum. Stop borrow checking as though they are.
Run with MIRI to see why this is needed: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=09a3236685a06b6096e2e2e3968b852c.
This issue exists with the lexical borrow checker as well (see #45045) so migrate mode should prevent this from being immediately breaking.
Rollup merge of #56789 - alexcrichton:simd_select_bitmask, r=rkruppe
rustc: Add an unstable `simd_select_bitmask` intrinsic
This is going to be required for binding a number of AVX-512 intrinsics
in the `stdsimd` repository, and this intrinsic is the same as
`simd_select` except that it takes a bitmask as the first argument
instead of a SIMD vector. This bitmask is then transmuted into a `<NN x
i8>` argument, depending on how many bits it is.
Rollup merge of #56648 - RalfJung:btree, r=sfackler
Fix BTreeMap UB
BTreeMap currently causes UB by created a shared reference to a too-small allocation. This PR fixes that by introducing a `NodeHeader` type and using that until we really need access to the key/value arrays. Avoiding run-time checks in `into_key_slice` was somewhat tricky, see the comments embedded in the code.
I also adjusted `as_leaf_mut` to return a raw pointer, because creating a mutable reference asserts that there are no aliases to the pointee, but that's not always correct: We use `as_leaf_mut` twice to create two mutable slices for keys and values; the second call overlaps with the first slice and hence is not a unique pointer.
Rollup merge of #56439 - JohnGinger:master, r=nikomatsakis
Clearer error message for dead assign
I'm not that this is the right place for this (if it needs an RFC or not).
I had the problem where I misunderstood the compiler lint message https://github.com/rust-lang/rust/issues/56436 and other people seem to have had the same problem https://www.reddit.com/r/rust/comments/8cy9p4/value_assigned_to_is_never_read/.
I think this new wording might be slightly clearer (and help out beginners like me). I'm very new though, so there might be some nuance I'm missing that would make this more confusing or a bad idea for other reasons.
I thought I would create a PR to make it easy to change the code if the consensus was that it would make sense to make a change.
If this is the wrong place for this sort of thing I'll happily delete/move it.
Tobias Bucher [Sat, 15 Dec 2018 17:51:08 +0000 (18:51 +0100)]
Fix doc of `std::fs::canonicalize`
Point out that the final component of the path name might be a filename
(and not a directory name). Previously, the doc said that all components
of the path must be directory names, when it actually only ment all but
the final one.
Tobias Bucher [Sat, 15 Dec 2018 17:41:21 +0000 (18:41 +0100)]
Fix a small mistake regarding NaNs in a deprecation message
`max` on floats returns the other argument if one of them is NaN, which
would be `0.0` in this case. This is unlike the C functions `fdim` and
`fdimf` which return NaN if either of their arguments is NaN.
bors [Sat, 15 Dec 2018 16:56:10 +0000 (16:56 +0000)]
Auto merge of #56846 - pietroalbini:rollup, r=pietroalbini
Rollup of 7 pull requests
Successful merges:
- #56677 (#[must_use] on traits in stdlib)
- #56679 (overhaul external doc attribute diagnostics)
- #56682 (Update the stdsimd submodule)
- #56691 (fix install broken link)
- #56710 (Always set the RDRAND and RDSEED features on SGX)
- #56713 (Test capacity of ZST vector)
- #56841 (Add some unit tests to compiletest)
Furthermore this doesn't actually work, because the "8" literal does
not match the $BITS provided from the macro invocation, so effectively
this code was not being used anyway...
````
rustup rust-lang/rust#52994
Fix test
Line length fix
Remove references to sized for end users
Remove DUMMY_SP
Add suggestion for replacement
Update lint definitions
Lint for Vec<Box<T: Sized>> - Closes #3530
Fix doc_markdown mixed case false positive
question_mark: Suggest Some(opt?) for if-else
redundant_field_names: Do not trigger on path with type params
question_mark: Lint only early returns
question_mark: Fix applicability
Remove obsolete comment
new_without_default, partialeq_ne_impl: Use span_lint_node
Update .stderr after rebase
cargo fmt and remove stabilized feature
Make suggestion Applicability::MachineApplicable
Address review feedback
Extract method
Check array lengths to prevent OOB access
Add suggestion for explicit_write lint
Fix write_with_newline escaping false positive
````
Pietro Albini [Sat, 15 Dec 2018 13:47:39 +0000 (14:47 +0100)]
Rollup merge of #56713 - xfix:vec-test-zst-capacity, r=TimNN
Test capacity of ZST vector
Initially, #50233 accidentally changed the capacity of empty ZST. This was pointed out during code review. This commit adds a test to prevent capacity of ZST vectors from accidentally changing to prevent that from happening again.
Pietro Albini [Sat, 15 Dec 2018 13:47:38 +0000 (14:47 +0100)]
Rollup merge of #56710 - jethrogb:jb/sgx-target-features, r=alexcrichton
Always set the RDRAND and RDSEED features on SGX
Not sure if this is 100% correct.
This [Intel article](https://software.intel.com/en-us/articles/intel-software-guard-extensions-tutorial-part-5-enclave-development) goes in great depth regarding using (untrusted) CPUID to see whether RDRAND/RDSEED is supported, and explains what happens to the enclave if the CPUID result is faked.
I'd say that an implementation of SGX that doesn't make RDRAND available to the enclave is so severely limited/broken that it's ok if you get #UD in that case. The case is less clear for RDSEED, but it so far every processor released by Intel with SGX support also has RDSEED (including Gemini Lake).
Pietro Albini [Sat, 15 Dec 2018 13:47:34 +0000 (14:47 +0100)]
Rollup merge of #56679 - euclio:external-doc-parse, r=estebank
overhaul external doc attribute diagnostics
This PR improves the error handling and spans for the external doc attribute. Many cases that silently failed before now emit errors, spans are tightened, and the errors have help and suggestions.
I tried to address all the cases that users ran into in the tracking issue.
Philipp Hansch [Thu, 13 Dec 2018 20:57:23 +0000 (21:57 +0100)]
Bootstrap: Add testsuite for compiletest tool
The (currently) single unit test of the compiletest tool was never
executed on CI. At least I couldn't find any references of it in the
logs. This adds a test suite for compiletest so that our tester is
tested, too.
The compiletest tests can then also be executed with:
Pietro Albini [Sat, 15 Dec 2018 09:17:42 +0000 (10:17 +0100)]
Rollup merge of #56808 - jrvidal:broken-links, r=kennytm
Fixes broken links
Just a few broken links.
Not sure what to do about this one: https://github.com/rust-lang/rust/blame/master/src/doc/unstable-book/src/language-features/plugin.md#L135 (regex macros were removed a while ago in https://github.com/rust-lang/regex/commit/037595438947eeb4c63a0185065b0143a7f2ac2c).
Pietro Albini [Sat, 15 Dec 2018 09:17:39 +0000 (10:17 +0100)]
Rollup merge of #56769 - dvdhrm:uefi-target, r=alexcrichton
Add x86_64-unknown-uefi target
This adds a new rustc target-configuration called 'x86_64-unknown_uefi'.
Furthermore, it adds a UEFI base-configuration to be used with other
targets supported by UEFI (e.g., i386, armv7hl, aarch64, itanium, ...).
UEFI systems provide a very basic operating-system environment, meant
to unify how systems are booted. It is tailored for simplicity and fast
setup, as it is only meant to bootstrap other systems. For instance, it
copies most of the ABI from Microsoft Windows, rather than inventing
anything on its own. Furthermore, any complex CPU features are
disabled. Only one CPU is allowed to be up, no interrupts other than
the timer-interrupt are allowed, no process-separation is performed,
page-tables are identity-mapped, ...
Nevertheless, UEFI has an application model. Its main purpose is to
allow operating-system vendors to write small UEFI applications that
load their kernel and terminate the UEFI system. However, many other
UEFI applications have emerged in the past, including network-boot,
debug-consoles, and more.
This UEFI target allows to compile rust code natively as UEFI
applications. No standard library support is added, but libcore can be
used out-of-the-box if a panic-handler is provided. Furthermore,
liballoc works as well, if a `GlobalAlloc` handler is provided. Both
have been tested with this target-configuration.
Note that full libstd support is unlikely to happen. While UEFI does
have standardized interfaces for networking and alike, none of these
are mandatory and they are unlikely to be shipped in common consumer
firmwares. Furthermore, several features like process-separation are
not available (or only in very limited fashion). Those parts of libstd
would have to be masked.
Pietro Albini [Sat, 15 Dec 2018 09:17:37 +0000 (10:17 +0100)]
Rollup merge of #56758 - Manishearth:emoji-status-toolstate, r=kennytm
Add short emoji status to toolstate updates
I get a lot of these emails and it's good to know which ones I should be paying closer attention to -- i.e. the ones where clippy breaks. This adds a short emoji status report to the first line of the commit message, which shows up in notifications directly
I haven't been able to test it, and the actual emoji are just suggestions.
Pietro Albini [Sat, 15 Dec 2018 09:17:32 +0000 (10:17 +0100)]
Rollup merge of #56746 - pnkfelix:issue-56537-add-test-of-closure-using-region-from-containing-fn, r=nikomatsakis
Add test of current behavior (infer free region within closure body)
This behavior was previously not encoded in our test suite.
it is pretty important that we test this behavior. In particular, in #56537 I had proposed expanding the lifetime elision rules so that they would apply to some of the cases encoded in this test, which would cause them to start failing to compile successfully (because the lifetime attached to the return type would start being treated as connected to the lifetime on the input parameter to the lambda expression, which is explicitly *not* what the code wants in this particular case).
In other words, I am trying to ensure that anyone who tries such experiments with lifetime elision in the future quickly finds out why we don't support lifetime elision on lambda expressions (at least not in the naive manner described on #56537).
Pietro Albini [Sat, 15 Dec 2018 09:17:29 +0000 (10:17 +0100)]
Rollup merge of #56725 - piersfinlayson:master, r=alexcrichton
fix rust-lang/rust issue #50583
Rationale for the fix is in #50583. I've verified that before the fix /musl-armhf/lib/libc.a is riddled with the illegal variant of vmov.f64 and after the fix the version built doesn't contain any of these illegal instructions.
I originally thought that the arm-linux-gnueabi version also needed fixing - to add a -mfloat-abi-soft but that's unnecessary as it's compiled with the gnueabi (not hf) compiler (I've some a quick check that the libc.a produced doesn't include VFP instructions).