Commit Graph

85572 Commits

Author SHA1 Message Date
Ralf Jung 96ba4af258 Remove validation test cases; add retagging test case 2018-10-29 09:05:23 +01:00
Ralf Jung aafcf2c942 Emit Retag statements, kill Validate statements
Also "rename" -Zmir-emit-validate to -Zmir-emit-retag, which is just a boolean (yes or no).
2018-10-29 09:05:18 +01:00
memoryruins fc2aa3fe0e Add UI test for #49296 2018-10-29 00:09:32 -04:00
bors 4e88b7363b Auto merge of #55270 - RalfJung:stacked-borrows-ng, r=oli-obk
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-29 03:28:31 +00:00
Esteban Küber 3e22e0c3bc Use token description in "expected/found" parse messages 2018-10-28 16:05:50 -07:00
Levente Kurusa 32ee20f455
inline-asm: emit as many E0669 errors as we can
Signed-off-by: Levente Kurusa <lkurusa@acm.org>
2018-10-28 23:57:45 +01:00
bors bcb05a0ab2 Auto merge of #55043 - oliver-giersch:unchecked_thread_spawning, r=alexcrichton
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-28 21:34:12 +00:00
bors 96064eb61d Auto merge of #54487 - RalfJung:ctfe-backtrace, r=oli-obk
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-28 18:49:46 +00:00
Jorge Aparicio f67b4e07d8 msp430: fix compilation of liballoc 2018-10-28 19:08:13 +01:00
Jorge Aparicio 8255671ac8 msp430: remove the whole Atomic* API
PR #51953 enabled the Atomic*.{load,store} API on MSP430. Unfortunately, the
LLVM backend doesn't currently support those atomic operations, so this commit
removes the API and leaves instructions on how and when to enable it in the
future.
2018-10-28 19:03:45 +01:00
Corey Farwell ea026b865a Fix invalid path in generate-deriving-span-tests.py.
This script broke after #53196 after the tests were moved.
2018-10-28 12:12:00 -04:00
bors d492c6792c Auto merge of #55433 - kennytm:rollup, r=kennytm
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-28 16:00:00 +00:00
kennytm db4e77ce91
Rollup merge of #55199 - oli-obk:instance_printing, r=davidtwco
Impl items have generics
2018-10-28 21:38:53 +08:00
kennytm abf7243066
Rollup merge of #55257 - mjbshaw:static, r=oli-obk
Allow extern statics with an extern type

Fixes #55239
2018-10-28 21:38:12 +08:00
kennytm aaa20c61d6
Rollup merge of #55185 - davidtwco:issue-55130, r=nikomatsakis
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-28 21:37:26 +08:00
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
bors 4f5cfa611d Auto merge of #55192 - cramertj:nested-mod, r=petrochenkov
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-28 13:13:55 +00:00
Konrad Borowski b7c2b471cf
Remove unreachable code in hasClass function in Rustdoc 2018-10-28 12:12:29 +01:00
Konrad Borowski 613f9f2013
Remove unused sys import from generate-deriving-span-tests 2018-10-28 12:06:28 +01:00
Konrad Borowski 695ddbfbd5
Avoid directly catching BaseException in bootstrap configure script
It includes stuff like pressing CTRL+C, which likely isn't intended.
2018-10-28 12:03:29 +01:00
Ralf Jung 95b19bbb6f don't be too perf-greedy 2018-10-28 11:49:02 +01:00
Ralf Jung b2612cbaf7 don't tag new memory inside memory.rs; add machine hook to tag new memory 2018-10-28 11:49:02 +01:00
Ralf Jung 5903fdb281 always print backtrace when CTFE_BACKTRACE is set
No point in making the user also enable RUST_LOG
2018-10-28 11:33:33 +01:00
Ralf Jung aaa505af02 remove some unused CTFE error variants 2018-10-28 11:33:33 +01:00
Ralf Jung 02a42382f6 rename env var to control ctfe backtraces, and make it usually show the 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-28 11:33:27 +01:00
Ralf Jung ff3b29fc54 make memory private; that's what we have `memory_mut` for 2018-10-28 11:21:41 +01:00
Ralf Jung f5e8830278 validity in non-const mode relies on ref_to_mplace checking bounds; (de)reference hooks work on places 2018-10-28 11:21:41 +01:00
Ralf Jung 048900c5b6 make (de)reference hooks more consistent 2018-10-28 11:21:41 +01: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
David Wood 0d06b8c8e5
Add note linking to Rust 2018 path semantics docs.
This commit extends existing path suggestions to link to documentation
on the changed semantics of `use` in Rust 2018.
2018-10-28 09:16:10 +01:00
Zack M. Davis faea5bbc65 single-use-lifetime lint: don't false-positive on the anonymous lifetime 2018-10-28 00:14:41 -07:00
Zack M. Davis fd28753e83 structured suggestions for single-use lifetime lint on fns and methods
It would be nice to demonstrate the shining correctness here with more
run-rustfix tests than this, but unfortunately, that doesn't work with
multipart suggestions yet (#53934).

While we're here, reword the zero-use lifetime suggestion to "elide
the unused lifetime" instead of "remove it". (It's classier.)
2018-10-28 00:14:41 -07: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
Nick Fitzgerald dc77d49775 Make a bunch of trivial methods of NonNull be `#[inline]` 2018-10-28 00:59:04 +02:00
Zack M. Davis b7546150b2 back out bogus `Ok`-wrapping suggestion on `?` arm type mismatch
This suggestion was introduced in #51938 / 6cc78bf8d7 (while
introducing different language for type errors coming from `?` rather
than a `match`), but it has a lot of false-positives (as repeatedly
reported in Issues #52537, #52598, #54578, #55336), and incorrect
suggestions carry more badness than marginal good suggestions do
goodness. Just get rid of it (unless and until someone figures out how
to do it correctly).

Resolves #52537, resolves #54578.
2018-10-27 14:55:07 -07: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