Commit Graph

85291 Commits

Author SHA1 Message Date
kennytm
360f32abf4
Rollup merge of #55421 - CAD97:patch-1, r=kennytm
Add ManuallyDrop::take

Tracking issue: #55422

Proposed in this form in https://internals.rust-lang.org/t/mini-rfc-manuallydrop-take/8679,
see that thread for some history.

A small convenience wrapper for `ManuallyDrop` that makes a pattern (taking ownership of the contained data in drop) more obvious.
2018-10-28 21:32:03 +08:00
kennytm
b565e5d575
Rollup merge of #55412 - oli-obk:min_const_fn_ice, r=estebank
Fix an ICE in the min_const_fn analysis

fixes https://github.com/rust-lang/rust/issues/55395

cc @Centril
2018-10-28 21:23:41 +08:00
kennytm
7a95c285f7
Rollup merge of #55406 - rick68:patch-16, r=varkor
Update string.rs

remove unused variable i in example String::with_capacity()
2018-10-28 21:23:38 +08:00
kennytm
316a4432be
Rollup merge of #55389 - meven:master, r=shepmaster
Remove unnecessary mut in iterator.find_map documentation example, R…

Relates to #49098

Removes a mut that could induce newcomers to put a mut in their code that the compiler would comply about.

https://github.com/rust-lang/rust/pull/49098/files#r227422388
2018-10-28 21:23:34 +08:00
kennytm
a79b91231e
Rollup merge of #55252 - SimonSapin:maybeuninit-new, r=bluss
Add MaybeUninit::new

Sometimes it *is* initialized!
2018-10-28 16:38:48 +08:00
kennytm
409382e100
Rollup merge of #55244 - wesleywiser:issue-50411, r=nikomatsakis
Don't rerun MIR passes when inlining

Fixes #50411

r? @nikomatsakis

I updated your commit message with additional details. Let me know if any of that is incorrect. I also added the appropriate `compile-flags` directive to the test.

Thanks for you help on this!

cc @RalfJung related to your PR #55086
2018-10-28 16:38:47 +08:00
kennytm
883b8199ca
Rollup merge of #55191 - GuillaumeGomez:fix-sub-variant, r=QuietMisdreavus
Fix sub-variant doc display

Fixes #54758.

<img width="1440" alt="screen shot 2018-10-19 at 01 34 11" src="https://user-images.githubusercontent.com/3050060/47189939-43481d00-d33f-11e8-868f-cf479fc79e62.png">

r? @QuietMisdreavus
2018-10-28 16:38:46 +08:00
kennytm
b9763de9b5
Rollup merge of #55148 - SimonSapin:path-fromstr, r=oli-obk
Implement FromStr for PathBuf

Initially landed in https://github.com/rust-lang/rust/pull/48292 and reverted in https://github.com/rust-lang/rust/pull/50401. This time, use `std::string::ParseError` as suggested in https://github.com/rust-lang/rust/issues/44431#issuecomment-428112632
2018-10-28 16:38:45 +08:00
Christopher Durham
0757c0fa7f Add ManuallyDrop::take
https://internals.rust-lang.org/t/mini-rfc-manuallydrop-take/8679
2018-10-28 04:16:58 -04:00
bors
1982f1887a Auto merge of #55297 - petrochenkov:uni, r=Mark-Simulacrum
Partial implementation of uniform paths 2.0 to land before beta

Reimplementation of uniform paths using in-scope resolution rather than canaries is a minor breaking change due to stricter future-proofing, so it needs to be landed before beta or backported later.

I hope to implement at least something until beta so we have less to backport.
r? @Mark-Simulacrum
2018-10-28 03:07:37 +00:00
bors
18311a6c47 Auto merge of #54683 - zackmdavis:critique_of_pure_lints, r=petrochenkov
lint reasons (RFC 2883, part 1)

This implements the `reason =` functionality described in [the RFC](https://github.com/rust-lang/rfcs/blob/master/text/2383-lint-reasons.md) under a `lint_reasons` feature gate.

![lint_reasons_pt_1](https://user-images.githubusercontent.com/1076988/46252097-eed51000-c418-11e8-8212-939d3f02f95d.png)
2018-10-28 00:28:03 +00:00
Vadim Petrochenkov
c57f0a7201 resolve: Desugar empty import groups into synthetic dummy imports
so that they are correctly resolved on 2018 edition
2018-10-28 03:06:38 +03:00
Vadim Petrochenkov
1f257bd022 resolve: Make sure macros and imports are resolved in full parent scope
Slightly simplify `fn build_reduced_graph_for_use_tree`
2018-10-28 02:56:12 +03:00
Vadim Petrochenkov
acdbd0643c resolve: More precise spans for privacy errors 2018-10-28 02:56:12 +03:00
Vadim Petrochenkov
b45b4daba7 resolve: Absolute paths may be undetermined on 2018 edition
due to macro-expanded `extern crate` items adding names to extern prelude.
2018-10-28 02:56:11 +03:00
Vadim Petrochenkov
171df347ff resolve: Refactor away legacy_macro_imports/LegacyMacroImports 2018-10-28 02:56:11 +03:00
Vadim Petrochenkov
dd3738a2ba resolve: Record full parent scope data for imports 2018-10-28 02:56:11 +03:00
Zack M. Davis
f66ea66acd wherein the status of empty and reason-only lint attributes is clarified
We avoid an ICE by checking for an empty meta-item list before we
index into the meta-items, and leave commentary about where we'd like
to issue unused-attributes lints in the future. Note that empty lint
attributes are already accepted by the stable compiler; generalizing
this to weird reason-only lint attributes seems like the
conservative/consilient generalization.
2018-10-27 12:31:20 -07:00
Zack M. Davis
f90de1110d in which lint reasons are restricted to come last in the attribute
Vadim Petrochenkov suggested this in review ("an error? just to be
conservative"), and it turns out to be convenient from the
implementer's perspective: in the initial proposed implementation (or
`HEAD~2`, as some might prefer to call it), we were doing an entire
whole iteration over the meta items just to find the reason (before
iterating over them to set the actual lint levels). This way, we can
just peek at the end rather than adding that extra loop (or
restructuring the existing code). The RFC doesn't seem to take a
position on this, and there's some precedent for restricting things to
be at the end of a sequence (we only allow `..` at the end of a struct
pattern, even if it would be possible to let it appear anywhere in the
sequence).
2018-10-27 12:31:20 -07:00
Zack M. Davis
dc0609c247 feature-gate lint reasons
We take stability seriously, so we shy away from making even seemingly
"trivial" features insta-stable.
2018-10-27 12:31:20 -07:00
bors
cae6efc37d Auto merge of #54183 - qnighy:by-value-object-safety, r=oli-obk
Implement by-value object safety

This PR implements **by-value object safety**, which is part of unsized rvalues #48055. That means, with `#![feature(unsized_locals)]`, you can call a method `fn foo(self, ...)` on trait objects. One aim of this is to enable `Box<FnOnce>`  in the near future.

The difficulty here is this: when constructing a vtable for a trait `Foo`, we can't just put the function `<T as Foo>::foo` into the table. If `T` is no larger than `usize`, `self` is usually passed directly. However, as the caller of the vtable doesn't know the concrete `Self` type, we want a variant of `<T as Foo>::foo` where `self` is always passed by reference.

Therefore, when the compiler encounters such a method to be generated as a vtable entry, it produces a newly introduced instance called `InstanceDef::VtableShim(def_id)` (that wraps the original instance). the shim just derefs the receiver and calls the original method. We give different symbol names for the shims by appending `::{{vtable-shim}}` to the symbol path (and also adding vtable-shimness as an ingredient to the symbol hash).

r? @eddyb
2018-10-27 19:29:35 +00:00
Zack M. Davis
630c6a544f introducing lint reason annotations (RFC 2383)
This is just for the `reason =` name-value meta-item; the
`#[expect(lint)]` attribute also described in the RFC is a problem for
another day.

The place where we were directly calling `emit()` on a match block
(whose arms returned a mutable reference to a diagnostic-builder) was
admittedly cute, but no longer plausibly natural after adding the
if-let to the end of the `LintSource::Node` arm.

This regards #54503.
2018-10-27 12:28:48 -07:00
bors
b3b8760971 Auto merge of #55385 - davidtwco:issue-55288, r=oli-obk
NLL: cast causes failure to promote to static

Fixes #55288. See commit messages for more details.

r? @oli-obk
cc @nikomatsakis
cc @pnkfelix
cc @RalfJung
2018-10-27 16:50:41 +00:00
Guillaume Gomez
2fd378b82b Fix sub-variant doc display 2018-10-27 14:05:34 +02:00
Oliver Scherer
c04893afbb Fix an ICE in the min_const_fn analysis 2018-10-27 13:34:35 +02:00
David Wood
6208bd8e03
Refactor and add PlaceContext::AscribeUserTy.
This commit refactors `PlaceContext` to split it into four different
smaller enums based on if the context represents a mutating use,
non-mutating use, maybe-mutating use or a non-use (this is based on the
recommendation from @oli-obk on Zulip[1]).

This commit then introduces a `PlaceContext::AscribeUserTy` variant.
`StatementKind::AscribeUserTy` is now correctly mapped to
`PlaceContext::AscribeUserTy` instead of `PlaceContext::Validate`.
`PlaceContext::AscribeUserTy` can also now be correctly categorized as a
non-use which fixes an issue with constant promotion in statics after a
cast introduces a `AscribeUserTy` statement.

[1]: https://rust-lang.zulipchat.com/#narrow/stream/122657-wg-nll/subject/.2355288.20cast.20fails.20to.20promote.20to.20'static/near/136536949
2018-10-27 12:11:37 +02:00
David Wood
8a0d8c5ab5
Test for cast causing static promotion failure.
This commit adds a test that ensures that a cast in a static doesn't
stop const promotion within the static.
2018-10-27 12:11:02 +02:00
David Wood
9169f817b3
Add helpful logging statements.
This commit adds logging statements to `promote_consts` and
`qualify_consts` to make it easier to understand what it is doing.
2018-10-27 12:10:58 +02:00
bors
f32f1113c9 Auto merge of #55150 - pnkfelix:issues-47215-54797-fix-ice-from-moving-out-of-thread-local-under-ast-borrowck, r=nikomatsakis
Do not allow moving out of thread local under ast borrowck

AST borrowck failed to prevent moving out of a thread-local static.

This was broken. And it also (sometimes?) caused an ICE during drop elaboration.

Fix #47215
Fix #54797
2018-10-27 09:56:37 +00:00
Masaki Hara
2f7ea4a872 Add more tests on unsized locals autoderef and borrowck. 2018-10-27 17:17:24 +09:00
bors
42c11de47b Auto merge of #55053 - Emerentius:test_all_again, r=alexcrichton
Add option to run all tests, again

This is a repeat of https://github.com/rust-lang/rust/pull/53527, which had to be reverted to land https://github.com/rust-lang/rust/pull/54116. It will break clippy until `compiletest-rs` can be updated and I believe we're closing on a new release date, so this may need to be delayed again until after 1.30 is out (?)

Closes #50363 again
2018-10-27 07:12:11 +00:00
Hsiang-Cheng Yang
4cb611f3d1
Update string.rs
remove unused variable i in example String::with_capacity()
2018-10-27 14:33:07 +08:00
bors
10f42cbde0 Auto merge of #55274 - pnkfelix:issue-54570-proj-path-into-pats-with-type-take-2, r=nikomatsakis
Handle bindings in substructure of patterns with type ascriptions

This attempts to follow the outline described by @nikomatsakis [here](https://github.com/rust-lang/rust/issues/47184#issuecomment-420041056). Its a bit more complicated than expected for two reasons:

 1. In general it handles sets of type ascriptions, because such ascriptions can be nested within patterns
 2.  It has a separate types in the HAIR, `PatternTypeProjections` and `PatternTypeProjection`, which are analogues to the corresponding types in the MIR.

The main reason I added the new HAIR types was because I am worried that the current implementation is inefficent, and asymptotically so: It makes copies of vectors as it descends the patterns, even when those accumulated vectors are never used.

Longer term, I would like to used a linked tree structure for the `PatternTypeProjections` and `PatternTypeProjection`, and save the construction of standalone vectors for the MIR types. I didn't want to block landing this on that hypoethetical revision; but I figured I could at least make the future change easier by differentiating between the two types now.

Oh, one more thing: This doesn't attempt to handle `ref x` (in terms of ensuring that any necessary types are ascribed to `x` in that scenario as well). We should open an issue to investigate supporting that as well. But I didn't want to block this PR on that future work.

Fix #54570
2018-10-27 00:39:11 +00:00
Felix S. Klock II
639a3ffadc add user_ty.projs support to AscribeUserType. 2018-10-26 23:47:53 +02:00
Felix S. Klock II
82ab668a55 Further foundational stuff on ProjectionKind before I add it to AscribeUserType. 2018-10-26 23:47:53 +02:00
Felix S. Klock II
47e2d825e1 Add intern table for List<ProjectionElem<'tcx, (), ()>>.
Also added alias `ProjectionKind<'tcx>` for `ProjectionElem<'tcx, (), ()>`.
2018-10-26 23:47:53 +02:00
Felix S. Klock II
92cbe4772a Add test for normalization during field-lookup on patterns with ascribed types.
As a drive-by, also added test analogous to existing
static_to_a_to_static_through_tuple, but now apply to a struct instead
of a tuple.
2018-10-26 23:47:53 +02:00
Felix S. Klock II
f09a0eb9c1 regression test for ICE I encountered in my patch. 2018-10-26 23:47:53 +02:00
Felix S. Klock II
7e761967ad Update mir-opt tests to reflect change to AscribeUserType to carry a UserTypeProjection. 2018-10-26 23:47:53 +02:00
Felix S. Klock II
740e8a3f37 Add the actual chain of projections to UserTypeProjection.
Update the existing NLL `patterns.rs` test accordingly.

includes changes addressing review feedback:

 * Added example to docs for `UserTypeProjections` illustrating how we
   build up multiple projections when descending into a pattern with
   type ascriptions.

 * Adapted niko's suggested docs for `UserTypeProjection`.

 * Factored out `projection_ty` from more general `projection_ty_core`
   (as a drive-by, made its callback an `FnMut`, as I discovered later
   that I need that).

 * Add note to docs that `PlaceTy.field_ty(..)` does not normalize its result.

 * Normalize as we project out `field_ty`.
2018-10-26 23:47:52 +02:00
Felix S. Klock II
b569caf267 Checkpoint: Added abstraction over collection of projections into user type.
I did not think I would need this in the MIR, but in general local
decls are going to need to support this. (That, or we need to be able
define a least-upper-bound for a collection of types encountered via
the pattern compilation.)
2018-10-26 23:46:21 +02:00
bors
fa45602b71 Auto merge of #54929 - csmoe:cfg_lint, r=petrochenkov
Suggest to remove prefix `b` in cfg attribute lint string

Closes #54926
r? @estebank
2018-10-26 21:46:13 +00:00
Felix S. Klock II
28ce99df86 Added mir::UserTypeProjection, a stub for a structure that projects *into* a given UserTypeAnnotation.
(That is, it will pull out some component type held or referenced by
the type annotation.)

Note: this still needs to actually do projection itself. That comes in
a later commit
2018-10-26 23:44:52 +02:00
Felix S. Klock II
36d8432a6d Refactoring: added PatternTypeAnnotation wrapper around UserTypeAnnotation to ease future changes. 2018-10-26 23:42:39 +02:00
Felix S. Klock II
54681b096e restrict scope of methods that are only called within mod tree of parent. 2018-10-26 23:40:38 +02:00
Felix S. Klock II
26c406945b Remove PlaceContext from API of mir::Visitor::visit_projection_elem.
It is unused, and would not make sense to maintain in the commits later in this PR.
2018-10-26 23:40:38 +02:00
bors
3e6f30ec3e Auto merge of #55382 - kennytm:rollup, r=kennytm
Rollup of 21 pull requests

Successful merges:

 - #54816 (Don't try to promote already promoted out temporaries)
 - #54824 (Cleanup rustdoc tests with `@!has` and `@!matches`)
 - #54921 (Add line numbers option to rustdoc)
 - #55167 (Add a "cheap" mode for `compute_missing_ctors`.)
 - #55258 (Fix Rustdoc ICE when checking blanket impls)
 - #55264 (Compile the libstd we distribute with -Ccodegen-unit=1)
 - #55271 (Unimplement ExactSizeIterator for MIR traversing iterators)
 - #55292 (Macro diagnostics tweaks)
 - #55298 (Point at macro definition when no rules expect token)
 - #55301 (List allowed tokens after macro fragments)
 - #55302 (Extend the impl_stable_hash_for! macro for miri.)
 - #55325 (Fix link to macros chapter)
 - #55343 (rustbuild: fix remap-debuginfo when building a release)
 - #55346 (Shrink `Statement`.)
 - #55358 (Remove redundant clone (2))
 - #55370 (Update mailmap for estebank)
 - #55375 (Typo fixes in configure_cmake comments)
 - #55378 (rustbuild: use configured linker to build boostrap)
 - #55379 (validity: assert that unions are non-empty)
 - #55383 (Use `SmallVec` for the queue in `coerce_unsized`.)
 - #55391 (bootstrap: clean up a few clippy findings)
2018-10-26 17:26:56 +00:00
kennytm
eb29530224
Rollup merge of #55391 - matthiaskrgr:bootstrap_cleanup, r=oli-obk
bootstrap: clean up a few clippy findings

remove useless format!()s
remove redundant field names in a few struct initializations
pass slice instead of a vector to a function
use is_empty() instead of comparisons to .len()

No functional change intended.
2018-10-26 23:10:38 +08:00
kennytm
5a16579d08
Rollup merge of #55383 - nnethercote:coerce_unsized-SmallVec, r=davidtwco
Use `SmallVec` for the queue in `coerce_unsized`.

This reduces the number of allocations done for the `tuple-stress`
benchmark by 4%.
2018-10-26 23:10:06 +08:00
kennytm
5572f2df7f
Rollup merge of #55264 - michaelwoerister:single-cgu-std, r=simulacrum
Compile the libstd we distribute with -Ccodegen-unit=1

This PR
 - adds the `single-codegen-unit-std` option to `config.toml` which allows for setting the CGU count for `libstd` and `libtest` independently of the one for the rest of the compiler, and
 - sets the new option to `true` for all dist jobs in CI.

Fixes #54872.
2018-10-26 23:09:31 +08:00