about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2018-10-29Emit Retag statements, kill Validate statementsRalf Jung-543/+233
Also "rename" -Zmir-emit-validate to -Zmir-emit-retag, which is just a boolean (yes or no).
2018-10-29Auto merge of #55270 - RalfJung:stacked-borrows-ng, r=oli-obkbors-130/+174
miri engine: Stacked Borrows NG For more refined tracking in miri, we do return untagged pointers from the memory abstraction after allocations and let the caller decide how to tag these. Also refactor the `tag_(de)reference` hooks so they can be more easily called in the ref-to-place and place-to-ref methods, and reorder things in validation: validation calls ref-to-place which (when running in miri) triggers some checks, so we want to run it rather late and catch other problems first. We also do not need to redundantly check the ref to be allocated any more, the checks miri does anyway imply thath. r? @oli-obk
2018-10-28Auto merge of #55043 - oliver-giersch:unchecked_thread_spawning, r=alexcrichtonbors-13/+78
Unchecked thread spawning # Summary Add an unsafe interface for spawning lifetime-unrestricted threads for library authors to build less-contrived, less-hacky safe abstractions on. # Motivation So a few years back scoped threads were entirely removed from the Rust stdlib, the reason being that it was possible to leak the scoped thread's join guards without resorting to unsafe code, which meant the concept was not completely safe, either. Only a maximally-restrictive safe API for thread spawning was kept in the stdlib, that requires `'static` lifetime bounds on both the thread closure and its return type. A number of 3rd party libraries sprung up to offer their implementations for safe scoped threads implementations. These work by essentially hiding the join guards from the user, thus forcing them to join at the end of an (internal) function scope. However, since these libraries have to use the maximally restrictive thread spawning API, they have to resort to some very contrived manipulations and subversions of Rust's type system to basically achieve what this commit does with some minimal restructuring of the current code and exposing a new unsafe function signature for spawning threads without lifetime restrictions. Obviously this is unsafe, but its main use would be to allow library authors to write safe abstractions with and around it. To further illustrate my point, here's a quick summary of the hoops that, for instance `crossbeam`, has to jump through to spawn a lifetime unrestricted thread, all of which would not be necessary if an unsafe API existed as part of the stdlib: 1. Allocate an `Arc<Option<T>>` on the heap where the result with type `T: 'a` will go (in practice requires `Mutex` or `UnsafeCell` as well). 2. Wrap the desired thread closure with lifetime bound `'a` into another closure (also `..: 'a`) that returns `()`, executes the inner closure and writes its result into the pre-allocated `Option<T>`. 3. Box the wrapping closure, cast it to a trait object (`FnBox`) and (unsafely) transmute its lifetime bound from `'a` to `'static`. So while this new `spawn_unchecked` function is certainly not very relevant for general use, since scoped threads are so common I think it makes sense to expose an interface for libraries implementing these to build on. The changes implemented are also very minimal: The current `spawn` function (which internally contains unsafe code) is moved into an unsafe `spawn_unchecked` function, which the safe function then wraps around. # Issues - ~~so far, no documentation for the new function (yet)~~ - the name of the function might be controversial, as `*_unchecked` more commonly indicates that some sort of runtime check is omitted (`unrestricted` may be more fitting) - if accepted, it might make sense to add a freestanding `thread::spawn_unchecked` function similar to the current `thread::spawn` for convenience.
2018-10-28Auto merge of #54487 - RalfJung:ctfe-backtrace, r=oli-obkbors-152/+88
Delayed CTFE backtraces This renames the env var that controls CTFE backtraces from `MIRI_BACKTRACE` to `RUST_CTFE_BACKTRACE` so that we can use `MIRI_BACKTRACE` in the miri tool to only show backtraces of the main miri execution. It also makes `RUST_CTFE_BACKTRACE` only show backtraces that actually get rendered as errors, instead of showing them eagerly when the `Err` happens. The current behavior is near useless in miri because it shows about one gazillion backtraces for errors that we later catch and do not care about. However, @oli-obk likes the current behavior for rustc CTFE work so it is still available via `RUST_CTFE_BACKTRACE=immediate`. NOTE: This is based on top of https://github.com/rust-lang/rust/pull/53821. Only [the last three commits](https://github.com/oli-obk/rust/compare/sanity_query...RalfJung:ctfe-backtrace) are new. Fixes https://github.com/rust-lang/rust/issues/53355
2018-10-28Auto merge of #55433 - kennytm:rollup, r=kennytmbors-171/+386
Rollup of 11 pull requests Successful merges: - #55148 (Implement FromStr for PathBuf) - #55185 (path suggestions in Rust 2018 should point out the change in semantics) - #55191 (Fix sub-variant doc display) - #55199 (Impl items have generics) - #55244 (Don't rerun MIR passes when inlining) - #55252 (Add MaybeUninit::new) - #55257 (Allow extern statics with an extern type) - #55389 (Remove unnecessary mut in iterator.find_map documentation example, R…) - #55406 (Update string.rs) - #55412 (Fix an ICE in the min_const_fn analysis) - #55421 (Add ManuallyDrop::take)
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-28Auto merge of #55192 - cramertj:nested-mod, r=petrochenkovbors-0/+22
Fix ordering of nested modules in non-mod.rs mods Flatten relative offset into directory path before adding inline (mod x { ... }) module names to the current directory path. Fix #55094
2018-10-28don't be too perf-greedyRalf Jung-1/+1
2018-10-28don't tag new memory inside memory.rs; add machine hook to tag new memoryRalf Jung-24/+44
2018-10-28always print backtrace when CTFE_BACKTRACE is setRalf Jung-2/+2
No point in making the user also enable RUST_LOG
2018-10-28remove some unused CTFE error variantsRalf Jung-96/+1
2018-10-28rename env var to control ctfe backtraces, and make it usually show the ↵Ralf Jung-56/+87
backtrace delayed The env var is now RUST_CTFE_BACKTRACE. Similar to RUST_BACKTRACE, it usually only prints a backtrace when the error actually surfaces, not when it happens. This makes a difference when we catch errors. As per @oli-obk's request, one can set RUST_CTFE_BACKTRACE=immediate to get the backtrace shown immediately.
2018-10-28make memory private; that's what we have `memory_mut` forRalf Jung-1/+1
2018-10-28validity in non-const mode relies on ref_to_mplace checking bounds; ↵Ralf Jung-121/+119
(de)reference hooks work on places
2018-10-28make (de)reference hooks more consistentRalf Jung-19/+45
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()