1
Fork 0
Commit graph

121713 commits

Author SHA1 Message Date
Ralf Jung
bca9e90f9f
Rollup merge of #73353 - davidtwco:issue-73003-non-structural-match-ty-closures, r=varkor
structural_match: non-structural-match ty closures

Fixes #73003.

This PR adds a `Closure` variant to `NonStructuralMatchTy` in `structural_match`, fixing an ICE which can occur when `impl_trait_in_bindings` is used with constants.
2020-06-15 09:57:37 +02:00
Ralf Jung
192e9bde80
Rollup merge of #73351 - gnodarse:patch-1, r=ecstatic-morse
Update E0446.md

The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself):
https://github.com/rust-lang/rust/issues/30905
https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
2020-06-15 09:57:35 +02:00
Ralf Jung
1f3e4e6e3e
Rollup merge of #73342 - schteve:master, r=jonas-schievink
Fix iterator copied() documentation example code

The documentation for copied() gives example code with variable v_cloned instead of v_copied. This seems like a copy/paste error from cloned() and it would be clearer to use v_copied.
2020-06-15 09:57:33 +02:00
Ralf Jung
35cfde1484
Rollup merge of #73341 - jonas-schievink:matchdoc, r=davidtwco
_match.rs: fix module doc comment

It was applied to a `use` item, not to the module
2020-06-15 09:57:32 +02:00
Ralf Jung
ec0cb57403
Rollup merge of #73336 - lzutao:pattern-group, r=sfackler
Group `Pattern::strip_*` method together
2020-06-15 09:57:30 +02:00
Ralf Jung
5193c5d608
Rollup merge of #72598 - Aaron1011:feature/fnmut-capture-span, r=nikomatsakis
Display information about captured variable in `FnMut` error

Fixes #69446

When we encounter a region error involving an `FnMut` closure, we
display a specialized error message. However, we currently do not
tell the user which upvar was captured. This makes it difficult to
determine the cause of the error, especially when the closure is large.

This commit records marks constraints involving closure upvars
with `ConstraintCategory::ClosureUpvar`. When we decide to 'blame'
a `ConstraintCategory::Return`, we additionall store
the captured upvar if we found a `ConstraintCategory::ClosureUpvar` in
the path.

When generating an error message, we point to relevant spans if we have
closure upvar information available. We further customize the message if
an `async` closure is being returned, to make it clear that the captured
variable is being returned indirectly.
2020-06-15 09:57:28 +02:00
Ralf Jung
e6510babc7
Rollup merge of #72584 - CAD97:stabilize-58957, r=dtolnay
Stabilize vec::Drain::as_slice

and add `AsRef<[T]> for Drain<'_, T>`.

Tracking issue: #58957. Does not stabilize `slice::IterMut::as_slice` yet. cc @cuviper
This PR proposes stabilizing just the `vec::Drain::as_slice` part of that tracking issue.

My ultimate goal here: being able to use `for<T, I: Iterator<Item=T> + AsRef<[T]>> I` to refer to `vec::IntoIter`, `vec::Drain`, and eventually `array::IntoIter`, as an approximation of the set of by-value iterators that can be "previewed" as by-ref iterators. (Actually expressing that as a trait requires GAT.)
2020-06-15 09:57:26 +02:00
Ralf Jung
3d41252fcc
Rollup merge of #72556 - matthew-mcallister:trait-alias-inherent-impl, r=estebank
Fix trait alias inherent impl resolution

Fixes #60021 and fixes #72415.

Obviously, the fix was very easy, but getting started with the testing and debugging rust compiler was an interesting experience. Now I can cross it off my bucket list!
2020-06-15 09:57:24 +02:00
Ralf Jung
372cb9b69c
Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis
Explain move errors that occur due to method calls involving `self`

When calling a method that takes `self` (e.g. `vec.into_iter()`), the method receiver is moved out of. If the method receiver is used again, a move error will be emitted::

```rust
fn main() {
    let a = vec![true];
    a.into_iter();
    a;
}
```

emits

```
error[E0382]: use of moved value: `a`
 --> src/main.rs:4:5
  |
2 |     let a = vec![true];
  |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3 |     a.into_iter();
  |     - value moved here
4 |     a;
  |     ^ value used here after move
```

However, the error message doesn't make it clear that the move is caused by the call to `into_iter`.

This PR adds additional messages to move errors when the move is caused by using a value as the receiver of a `self` method::

```
error[E0382]: use of moved value: `a`
   --> vec.rs:4:5
    |
2   |     let a = vec![true];
    |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3   |     a.into_iter();
    |     ------------- value moved due to this method call
4   |     a;
    |     ^ value used here after move
    |
note: this function takes `self`, which moves the receiver
   --> /home/aaron/repos/rust/src/libcore/iter/traits/collect.rs:239:5
    |
239 |     fn into_iter(self) -> Self::IntoIter;
```

TODO:

- [x] Add special handling for `FnOnce/FnMut/Fn` - we probably don't want to point at the unstable trait methods
- [x] Consider adding additional context for operations (e.g. `Shr::shr`) when the call was generated using the operator syntax (e.g. `a >> b`)
- [x] Consider pointing to the method parent (impl or trait block) in addition to the method itself.
2020-06-15 09:57:22 +02:00
Ralf Jung
5c61a8dc34
Rollup merge of #71824 - ecstatic-morse:const-check-post-drop-elab, r=oli-obk
Check for live drops in constants after drop elaboration

Resolves #66753.

This PR splits the MIR "optimization" pass series in two and introduces a query–`mir_drops_elaborated_and_const_checked`–that holds the result of the `post_borrowck_cleanup` analyses and checks for live drops. This query is invoked in `rustc_interface` for all items requiring const-checking, which means we now do `post_borrowck_cleanup` for items even if they are unused in the crate.

As a result, we are now more precise about when drops are live. This is because drop elaboration can e.g. eliminate drops of a local when all its fields are moved from. This does not mean we are doing value-based analysis on move paths, however; Storing a `Some(CustomDropImpl)` into a field of a local will still set the qualifs for that entire local.

r? @oli-obk
2020-06-15 09:57:20 +02:00
gnodarse
8361ee5b38
Update E0446.md
The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself):
https://github.com/rust-lang/rust/issues/30905
https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
2020-06-14 14:25:19 -04:00
David Wood
79e08bbc99
structural_match: non-structural-match ty closures
This commit adds a `Closure` variant to `NonStructuralMatchTy` in
`structural_match`, fixing an ICE which can occur when
`impl_trait_in_bindings` is used with constants.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-14 19:20:56 +01:00
Steve Heindel
5a846d7de6 Fix iterator copied() documentation example code 2020-06-14 09:19:57 -04:00
Jonas Schievink
c7ad3ad991 _match.rs: fix module doc comment
It was applied to a `use` item, not to the module
2020-06-14 14:53:36 +02:00
bors
4fb54ed484 Auto merge of #73089 - tmiasko:musl-1.1.24, r=kennytm
Update musl to 1.1.24

Release notes since previous version 1.1.22:

## 1.1.23 release notes

### new features:
- riscv64 port
- configure now allows customizing AR and RANLIB vars
- header-level support for new linux features in 5.1

### major internal changes:
- removed extern __syscall; syscall header code is now fully self-contained

### performance:
- new math library implementation for log/exp/pow
- aarch64 dynamic tlsdesc function is streamlined

### compatibility & conformance:
- O_TTY_INIT is now defined
- sys/types.h no longer pollutes namespace with sys/sysmacros.h in any profile
- powerpc asm is now compatible with clang internal assembler

### changes for new POSIX interpretations:
- fgetwc now sets stream error indicator on encoding errors
- fmemopen no longer rejects 0 size

### bugs fixed:
- static TLS for shared libraries was allocated wrong on "Variant I" archs
- crash in dladdr reading through uninitialized pointer on non-match
- sigaltstack wrongly errored out on invalid ss_size when doing SS_DISABLE
- getdents function misbehaved with buffer length larger than INT_MAX
- set*id could deadlock after fork from multithreaded process

### arch-specfic bugs fixed:
- s390x SO_PEERSEC definition was wrong
- passing of 64-bit syscall arguments was broken on microblaze
- posix_fadvise was broken on mips due to missing 7-arg syscall support
- vrregset_t layout and member naming was wrong on powerpc64

## 1.1.24 release notes

### new features:
- GLOB_TILDE extension to glob
- non-stub catgets localization API, using netbsd binary catalog format
- posix_spawn file actions for [f]chdir (extension, pending future standard)
- secure_getenv function (extension)
- copy_file_range syscall wrapper (Linux extension)
- header-level support for new linux features in 5.2

### performance:
- new fast path for lrint (generic C version) on 32-bit archs

### major internal changes:
- functions involving time are overhauled to be time64-ready in 32-bit archs
- x32 uses the new time64 code paths to replace nasty hacks in syscall glue

### compatibility & conformance:
- support for powerpc[64] unaligned relocation types
- powerpc[64] and sh sys/user.h no longer clash with kernel asm/ptrace.h
- select no longer modifies timeout on failure (or at all)
- mips64 stat results are no longer limited to 32-bit time range
- optreset (BSD extension) now has a public declaration
- support for clang inconsistencies in wchar_t type vs some 32-bit archs
- mips r6 syscall asm no longer has invalid lo/hi register clobbers
- vestigial asm declarations of __tls_get_new are removed (broke some tooling)
- riscv64 mcontext_t mismatch glibc's member naming is corrected

### bugs fixed:
- glob failed to match broken symlinks consistently
- invalid use of interposed calloc to allocate initial TLS
- various dlsym symbol resolution logic errors
- semctl with SEM_STAT_ANY didn't work
- pthread_create with explicit scheduling was subject to priority inversion
- pthread_create failure path had data race for thread count
- timer_create with SIGEV_THREAD notification had data race getting timer id
- wide printf family failed to support l modifier for float formats

### arch-specific bugs fixed:
- x87 floating point stack imbalance in math asm (i386-only CVE-2019-14697)
- x32 clock_adjtime, getrusage, wait3, wait4 produced junk (struct mismatches)
- lseek broken on x32 and mipsn32 with large file offsets
- riscv64 atomics weren't compiler barriers
- riscv64 atomics had broken asm constraints (missing earlyclobber flag)
- arm clone() was broken when compiled as thumb if start function returned
- mipsr6 setjmp/longjmp did not preserve fpu register state correctly

Fixes #71099.
2020-06-14 10:37:36 +00:00
bors
10326d804e Auto merge of #73232 - RalfJung:miri-no-default, r=Mark-Simulacrum
x.py: do not build Miri by default on stable/beta

Fixes https://github.com/rust-lang/rust/issues/73117

Do I need to do anything to make sure Miri is still built by the tools CI builder? Are there other tools that should be off-by-default?

Also, unfortunately the `DEFAULT` associated const has no doc comment, so I have no idea what it does, or why there are semmingly two places where the default build of tools is controlled.
2020-06-14 06:42:40 +00:00
bors
d3d3a14f2f Auto merge of #73188 - mati865:use-preinstalled-msys2, r=pietroalbini
Use preinstalled msys2

Fixes https://github.com/rust-lang/rust/issues/65767
2020-06-14 03:10:53 +00:00
Lzu Tao
d82dd43387 Group Pattern::strip_* method together 2020-06-14 01:01:07 +00:00
Dylan MacKenzie
2dcf7dbb86 Add tests for const_precise_live_drops 2020-06-13 11:05:13 -07:00
Dylan MacKenzie
9e2ee322e8 Update incorrect error code docs 2020-06-13 11:05:13 -07:00
Dylan MacKenzie
21ddf4d903 Ensure that drop_elaboration_and_check_consts runs for all const items 2020-06-13 11:05:13 -07:00
Dylan MacKenzie
a43e486e8d Add MIR phase and query for drop elaboration 2020-06-13 11:05:13 -07:00
Dylan MacKenzie
f5370faa6c Add CheckLiveDrops pass 2020-06-13 11:05:12 -07:00
Dylan MacKenzie
a77f046c69 Add feature gate for precise live drop checking 2020-06-13 11:05:11 -07:00
Dylan MacKenzie
d73674e1e3 Make Qualifs getters public 2020-06-13 11:04:29 -07:00
Dylan MacKenzie
cecfa43fb4 Move check_op logic to ops module 2020-06-13 11:04:29 -07:00
bors
06e47688bf Auto merge of #73316 - Dylan-DPC:rollup-zgouwou, r=Dylan-DPC
Rollup of 8 pull requests

Successful merges:

 - #72932 (Clarify the behaviour of Pattern when used with methods like str::contains)
 - #73066 (Querify whether a type has structural equality (Take 2))
 - #73194 (Prefer the associated constants for pattern matching error)
 - #73241 (Add/update comments about MinGW late_link_args)
 - #73267 (Use the built cargo for cargotest.)
 - #73290 (Fix links when pinging notification groups)
 - #73302 (Adjusted some doctests in libcore to use `should_panic`.)
 - #73308 (pretty/asm.rs should only be tested for x86_64 and not AArch64)

Failed merges:

r? @ghost
2020-06-13 15:50:56 +00:00
Dylan DPC
8d97ccf954
Rollup merge of #73308 - yerke:fix-pretty-asm-rs-test-for-aarch64, r=Amanieu
pretty/asm.rs should only be tested for x86_64 and not AArch64

pretty/asm.rs should only be tested for x86_64 and not AArch64
closes #73134
r?  @Amanieu
2020-06-13 16:47:56 +02:00
Dylan DPC
a879f9cdf6
Rollup merge of #73302 - JakobDegen:should-panic-documentation, r=Mark-Simulacrum
Adjusted some doctests in libcore to use `should_panic`.

Fixes #73196 .

I grepped libstd and libcore for all the instances of this pattern that I could find, but its possible that I missed some of course. If anyone knows of any more, please let me know and I will add them to the PR.
2020-06-13 16:47:54 +02:00
Dylan DPC
0bbc651869
Rollup merge of #73290 - LeSeulArtichaut:patch-1, r=Dylan-DPC
Fix links when pinging notification groups

I think a blank line is necessary for the link to be applied.
Not sure who to assign, r? @Dylan-DPC
2020-06-13 16:47:53 +02:00
Dylan DPC
6a42f7ded8
Rollup merge of #73267 - ehuss:cargotest-this-cargo, r=Mark-Simulacrum
Use the built cargo for cargotest.

cargotest was using the beta (bootstrap) cargo. This changes it so that it will use the locally built cargo. This is intended to provide a sort of smoke test to ensure Cargo is functional. This *shouldn't* have any real impact on the CI build time.  The cargotest job also happens to run cargo's testsuite, so it should already be building cargo.

Note: This will fail until #73266 is merged.
2020-06-13 16:47:51 +02:00
Dylan DPC
61a59a57c9
Rollup merge of #73241 - mati865:mingw-libs-order-comment, r=petrochenkov
Add/update comments about MinGW late_link_args
2020-06-13 16:47:49 +02:00
Dylan DPC
f738423e6b
Rollup merge of #73194 - lzutao:INT-patterns, r=dtolnay
Prefer the associated constants for pattern matching error

Resolved this comment: https://github.com/rust-lang/rust/issues/68490#issuecomment-641614383
2020-06-13 16:47:47 +02:00
Dylan DPC
6ad8cbdc7d
Rollup merge of #73066 - ecstatic-morse:query-structural-eq2, r=pnkfelix
Querify whether a type has structural equality (Take 2)

Alternative to #72177.

Unlike in #72177, this helper method works for all types, falling back to a query for `TyKind::Adt`s that determines whether the `{Partial,}StructuralEq` traits are implemented.

This is my preferred interface for this method. I think this is better than just documenting that the helper only works for ADTs. If others disagree, we can just merge #72177 with the fixes applied. This has already taken far too long.
2020-06-13 16:47:45 +02:00
Dylan DPC
2cc267245d
Rollup merge of #72932 - poliorcetics:pattern-contains-behaviour, r=hanna-kruppe
Clarify the behaviour of Pattern when used with methods like str::contains

Fixes #45507.

I used the previous work by @Emerentius (thanks !), added a paragraph and checked the links (they work for me but I'm not against someone else checking them too).
2020-06-13 16:47:40 +02:00
Mateusz Mikuła
5a841b922c Add/update comments about MinGW late_link_args 2020-06-13 14:19:24 +02:00
Yerkebulan Tulibergenov
249a46f56c pretty/asm.rs should only be tested for x86_64 and not AArch64 2020-06-13 00:41:39 -07:00
Jake Degen
3ab4b380aa Adjusted some doctests in libcore to use should_panic.
Previously, some doctests were spawning new threads and joining them to
indicate that a particular call should panic; this hurt readability, so
the tests have been adjusted to simply call the method and use the
`should_panic` marker.
2020-06-13 00:12:07 -04:00
Lzu Tao
c755292859 Prefer the associated consts for pattern matching error 2020-06-13 01:18:18 +00:00
bors
1fb612bd15 Auto merge of #73277 - RalfJung:miri-caller-location, r=oli-obk
fix caller_location intrinsic for Miri

Fixes https://github.com/rust-lang/rust/issues/73272

r? @oli-obk Cc @Aaron1011
2020-06-13 00:55:34 +00:00
bors
f4fbb93113 Auto merge of #73262 - wesleywiser:simplifyarmidentity_beta_regression, r=oli-obk
Disable the `SimplifyArmIdentity` pass

This pass is buggy so I'm disabling it to fix a stable-to-beta
regression.

Related to #73223
2020-06-12 19:38:15 +00:00
LeSeulArtichaut
b126f329f9
Fix links when pinging notification groups 2020-06-12 20:33:18 +02:00
Dylan MacKenzie
280176178b Make type_marked_structural private 2020-06-12 08:55:52 -07:00
Dylan MacKenzie
1dd45612f8 Use "reflexive equality" in docs 2020-06-12 08:55:16 -07:00
Dylan MacKenzie
bd4bd59ad7 Helper method for whether type has structural equality
This helper method works for all types, falling back to a query for
`TyKind::Adt`s to determine whether the implement the
`{Partial,}StructuralEq` traits.
2020-06-12 08:50:17 -07:00
bors
7c78a5f97d Auto merge of #73276 - Dylan-DPC:rollup-hfd81qw, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #72906 (Migrate to numeric associated consts)
 - #73178 (expand: More precise locations for expansion-time lints)
 - #73225 (Allow inference regions when relating consts)
 - #73236 (Clean up E0666 explanation)
 - #73273 (Fix Zulip pings)

Failed merges:

r? @ghost
2020-06-12 13:10:57 +00:00
Wesley Wiser
f1605834a5 Disable the SimplifyArmIdentity pass on beta
This pass is buggy so I'm disabling it to fix a stable-to-beta
regression.

Related to #73223
2020-06-12 08:33:46 -04:00
Ralf Jung
b4bd180e5e fix caller_location intrinsic for Miri 2020-06-12 12:35:37 +02:00
Dylan DPC
77ede48ada
Rollup merge of #73273 - LeSeulArtichaut:patch-1, r=Dylan-DPC
Fix Zulip pings

r? @Dylan-DPC
2020-06-12 12:28:31 +02:00
Dylan DPC
b4cb12fd21
Rollup merge of #73236 - GuillaumeGomez:cleanup-e0666, r=Dylan-DPC
Clean up E0666 explanation

r? @Dylan-DPC
2020-06-12 12:28:29 +02:00