about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2018-10-28Rollup merge of #55199 - oli-obk:instance_printing, r=davidtwcokennytm-35/+34
Impl items have generics
2018-10-28Rollup merge of #55257 - mjbshaw:static, r=oli-obkkennytm-14/+61
Allow extern statics with an extern type Fixes #55239
2018-10-28Rollup merge of #55185 - davidtwco:issue-55130, r=nikomatsakiskennytm-29/+63
path suggestions in Rust 2018 should point out the change in semantics Fixes #55130. This commit extends existing path suggestions to link to documentation on the changed semantics of `use` in Rust 2018.
2018-10-28Rollup merge of #55421 - CAD97:patch-1, r=kennytmkennytm-0/+20
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-28Rollup merge of #55412 - oli-obk:min_const_fn_ice, r=estebankkennytm-2/+26
Fix an ICE in the min_const_fn analysis fixes https://github.com/rust-lang/rust/issues/55395 cc @Centril
2018-10-28Rollup merge of #55406 - rick68:patch-16, r=varkorkennytm-1/+1
Update string.rs remove unused variable i in example String::with_capacity()
2018-10-28Rollup merge of #55389 - meven:master, r=shepmasterkennytm-1/+1
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-28Rollup merge of #55252 - SimonSapin:maybeuninit-new, r=blusskennytm-0/+10
Add MaybeUninit::new Sometimes it *is* initialized!
2018-10-28Rollup merge of #55244 - wesleywiser:issue-50411, r=nikomatsakiskennytm-72/+120
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-28Rollup merge of #55191 - GuillaumeGomez:fix-sub-variant, r=QuietMisdreavuskennytm-17/+39
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-28Rollup merge of #55148 - SimonSapin:path-fromstr, r=oli-obkkennytm-0/+11
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-28Add ManuallyDrop::takeChristopher Durham-0/+20
https://internals.rust-lang.org/t/mini-rfc-manuallydrop-take/8679
2018-10-28Add note linking to Rust 2018 path semantics docs.David Wood-29/+63
This commit extends existing path suggestions to link to documentation on the changed semantics of `use` in Rust 2018.
2018-10-28Auto merge of #55297 - petrochenkov:uni, r=Mark-Simulacrumbors-544/+518
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-28Auto merge of #54683 - zackmdavis:critique_of_pure_lints, r=petrochenkovbors-20/+304
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-28resolve: Desugar empty import groups into synthetic dummy importsVadim Petrochenkov-98/+51
so that they are correctly resolved on 2018 edition
2018-10-28resolve: Make sure macros and imports are resolved in full parent scopeVadim Petrochenkov-86/+83
Slightly simplify `fn build_reduced_graph_for_use_tree`
2018-10-28resolve: More precise spans for privacy errorsVadim Petrochenkov-281/+276
2018-10-28resolve: Absolute paths may be undetermined on 2018 editionVadim Petrochenkov-0/+21
due to macro-expanded `extern crate` items adding names to extern prelude.
2018-10-28resolve: Refactor away `legacy_macro_imports`/`LegacyMacroImports`Vadim Petrochenkov-37/+39
2018-10-28resolve: Record full parent scope data for importsVadim Petrochenkov-46/+52
2018-10-27wherein the status of empty and reason-only lint attributes is clarifiedZack M. Davis-1/+25
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-27in which lint reasons are restricted to come last in the attributeZack M. Davis-36/+69
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-27feature-gate lint reasonsZack M. Davis-12/+48
We take stability seriously, so we shy away from making even seemingly "trivial" features insta-stable.
2018-10-27Auto merge of #54183 - qnighy:by-value-object-safety, r=oli-obkbors-171/+870
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-27introducing lint reason annotations (RFC 2383)Zack M. Davis-20/+211
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-27Auto merge of #55385 - davidtwco:issue-55288, r=oli-obkbors-194/+356
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-27Fix sub-variant doc displayGuillaume Gomez-17/+39
2018-10-27Fix an ICE in the min_const_fn analysisOliver Scherer-2/+26
2018-10-27Refactor and add `PlaceContext::AscribeUserTy`.David Wood-195/+308
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-27Test for cast causing static promotion failure.David Wood-0/+21
This commit adds a test that ensures that a cast in a static doesn't stop const promotion within the static.
2018-10-27Add helpful logging statements.David Wood-1/+29
This commit adds logging statements to `promote_consts` and `qualify_consts` to make it easier to understand what it is doing.
2018-10-27Auto merge of #55150 - ↵bors-14/+91
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-27Add more tests on unsized locals autoderef and borrowck.Masaki Hara-0/+368
2018-10-27Auto merge of #55053 - Emerentius:test_all_again, r=alexcrichtonbors-81/+119
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-27Update string.rsHsiang-Cheng Yang-1/+1
remove unused variable i in example String::with_capacity()
2018-10-27Auto merge of #55274 - ↵bors-127/+622
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-26add user_ty.projs support to `AscribeUserType`.Felix S. Klock II-10/+29
2018-10-26Further foundational stuff on `ProjectionKind` before I add it to ↵Felix S. Klock II-0/+30
`AscribeUserType`.
2018-10-26Add intern table for `List<ProjectionElem<'tcx, (), ()>>`.Felix S. Klock II-2/+28
Also added alias `ProjectionKind<'tcx>` for `ProjectionElem<'tcx, (), ()>`.
2018-10-26Add test for normalization during field-lookup on patterns with ascribed types.Felix S. Klock II-14/+50
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-26regression test for ICE I encountered in my patch.Felix S. Klock II-0/+31
2018-10-26Update mir-opt tests to reflect change to `AscribeUserType` to carry a ↵Felix S. Klock II-1/+1
`UserTypeProjection`.
2018-10-26Add the actual chain of projections to `UserTypeProjection`.Felix S. Klock II-64/+272
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-26Checkpoint: Added abstraction over collection of projections into user type.Felix S. Klock II-53/+148
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-26Auto merge of #54929 - csmoe:cfg_lint, r=petrochenkovbors-78/+221
Suggest to remove prefix `b` in cfg attribute lint string Closes #54926 r? @estebank
2018-10-26Added `mir::UserTypeProjection`, a stub for a structure that projects *into* ↵Felix S. Klock II-32/+70
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-26Refactoring: added `PatternTypeAnnotation` wrapper around ↵Felix S. Klock II-13/+28
`UserTypeAnnotation` to ease future changes.
2018-10-26restrict scope of methods that are only called within mod tree of parent.Felix S. Klock II-2/+2
2018-10-26Remove `PlaceContext` from API of `mir::Visitor::visit_projection_elem`.Felix S. Klock II-6/+3
It is unused, and would not make sense to maintain in the commits later in this PR.