Commit Graph

108816 Commits

Author SHA1 Message Date
Yuki Okushi
5d39517680
Rollup merge of #69618 - hniksic:mem-forget-doc-fix, r=RalfJung
Clarify the relationship between `forget()` and `ManuallyDrop`.

As discussed on reddit, this commit addresses two issues with the
documentation of `mem::forget()`:

* The documentation of `mem::forget()` can confuse the reader because of the
  discrepancy between usage examples that show correct usage and the
  accompanying text which speaks of the possibility of double-free.  The
  text that says "if the panic occurs before `mem::forget` was called"
  refers to a variant of the second example that was never shown, modified
  to use `mem::forget` instead of `ManuallyDrop`.  Ideally the documentation
  should show both variants, so it's clear what it's talking about.

  Also, the double free could be fixed just by placing `mem::forget(v)`
  before the construction of `s`.  Since the lifetimes of `s` and `v`
  wouldn't overlap, there would be no point where panic could cause a double
  free.  This could be mentioned, and contrasted against the more robust fix
  of using `ManuallyDrop`.

* This sentence seems unjustified: "For some types, operations such as
  passing ownership (to a funcion like `mem::forget`) requires them to
  actually be fully owned right now [...]".  Unlike C++, Rust has no move
  constructors, its moves are (possibly elided) bitwise copies.  Even if you
  pass an invalid object to `mem::forget`, no harm should come to pass
  because `mem::forget` consumes the object and exists solely to prevent
  drop, so there no one left to observe the invalid state state.
2020-03-20 17:02:01 +09:00
Eduard-Mihai Burtescu
6f6fe38b19 parse/lexer: support StringReader::retokenize called on external files. 2020-03-20 08:00:06 +02:00
Mark Mansi
2d75a339ca Refactorings to begin getting rid of rustc_codegen_utils 2020-03-19 23:14:46 -05:00
Bastian Kauschke
17c94c6746
fix FIXME comment
Co-Authored-By: varkor <github@varkor.com>
2020-03-20 00:28:49 +01:00
Tomasz Miąsko
fd0e15bbcd Make std::sync::Arc compatible with ThreadSanitizer
The memory fences used previously in Arc implementation are not properly
understood by ThreadSanitizer as synchronization primitives. This had
unfortunate effect where running any non-trivial program compiled with
`-Z sanitizer=thread` would result in numerous false positives.

Replace acquire fences with acquire loads when using ThreadSanitizer to
address the issue.
2020-03-20 00:18:44 +01:00
CDirkx
6570e275b9 Removed unused Hasher import. 2020-03-19 21:58:11 +01:00
Matthew Jasper
0f0f254a9c Use erased regions in MIR 2020-03-19 19:59:13 +00:00
CDirkx
bd6deaa08d Derive PartialEq, Eq and Hash for RangeInclusive
The manual implementation of PartialEq, Eq and Hash for RangeInclusive was functionally equivalent to a derived implementation.

This change removes the manual implementation and adds the respective derives.
A side effect of this change is that the derives also add implementations for StructuralPartialEq and StructuralEq, which enables RangeInclusive to be used in const generics.
2020-03-19 20:45:47 +01:00
Bastian Kauschke
6cb584608c sort generic param order in generics_of 2020-03-19 20:20:09 +01:00
Waffle
121bffce81 make "other" in docs of Option::{zip,zip_with} monofont 2020-03-19 22:19:37 +03:00
Josh Stone
3a2a4429a2 Avoid llvm-config in more situations, like bootstrap test runs 2020-03-19 10:28:47 -07:00
Eduard-Mihai Burtescu
be9679de5c rustc/query: tweak comments on hir_owner{,_nodes}. 2020-03-19 19:05:41 +02:00
Alex Crichton
d1a4a57777 Update the bundled wasi-libc with libstd
Brings in WebAssembly/wasi-libc#184 which can help standalone programs
with environment variables!
2020-03-19 09:58:31 -07:00
bors
f4c675c476 Auto merge of #69402 - GuillaumeGomez:extend-search, r=kinnison
Extend search

I realized that when looking for "struct:String" in the rustdoc search for example, the "in arguments" and "returned" tabs were always empty. After some investigation, I realized it was because we only provided the name, and not the type, making it impossible to pass the "type filtering" check.

To resolve this, I added the type alongside the name. Note for the future: we could improve this by instead only registering the path id and use the path dictionary directly. The only problem with that solution (which I already tested) is that it becomes complicated for types in other crates. It'd force us to handle both case with an id and a case with `(name, type)`. I found the current PR big enough to not want to provide it directly. However, I think this is definitely worth it to make it work this way in the future.

About the two tests I added: they don't have much interest except checking that we actually have something returned in the search in the cases of a type filtering with and without literal search.

I also had to update a bit the test script to add the new locally global (haha) variable I created (`NO_TYPE_FILTER`). I added this variable to make the code easier to read than just "-1".

r? @kinnison

cc @ollie27
2020-03-19 16:07:59 +00:00
flip1995
2b3168ce5f
Update Clippy 2020-03-19 16:46:51 +01:00
Mazdak Farrokhzad
89ef59af78
triagebot.toml: accept typo due to pnkfelix 2020-03-19 15:38:31 +01:00
Amanieu d'Antras
203bb2b572 Update stdarch submodule 2020-03-19 14:38:09 +00:00
John Kåre Alsaker
027c8d998e Use assert_ignored when encoding metadata 2020-03-19 15:22:55 +01:00
John Kåre Alsaker
801e4420b6 Add some comments 2020-03-19 15:22:55 +01:00
John Kåre Alsaker
a2bca90077 Make metadata prefetching more accurate 2020-03-19 15:22:55 +01:00
John Kåre Alsaker
3d59c0ee38 Make the timer more verbose 2020-03-19 15:12:31 +01:00
John Kåre Alsaker
03af82bb0c Prefetch exported symbols 2020-03-19 15:12:31 +01:00
John Kåre Alsaker
1a34cbc2e2 Encode exported symbols last 2020-03-19 15:12:31 +01:00
John Kåre Alsaker
6cd0dcade7 Prefetch queries used by the metadata encoder 2020-03-19 15:12:31 +01:00
John Kåre Alsaker
d641ad044e Update test 2020-03-19 14:59:14 +01:00
John Kåre Alsaker
82920f36c4 Don't unwind when hitting the macro expansion recursion limit 2020-03-19 14:59:14 +01:00
Hrvoje Nikšić
2bebe8d871 Don't hard-code the vector length in the examples.
Co-Authored-By: lzutao <taolzu@gmail.com>
2020-03-19 14:50:33 +01:00
Hrvoje Nikšić
755434121c Minor re-wordings and typo fixes.
Co-Authored-By: Ralf Jung <post@ralfj.de>
2020-03-19 14:50:33 +01:00
Hrvoje Niksic
2a08b0e300 Restore (and reword) the warning against passing invalid values to mem::forget.
As pointed out by Ralf Jung, dangling references and boxes are
undefined behavior as per
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
and the Miri checker.
2020-03-19 14:49:21 +01:00
Hrvoje Niksic
8e0398c060 Clarify the relationship between forget() and ManuallyDrop.
As discussed on reddit, this commit addresses two issues with the
documentation of `mem::forget()`:

* The documentation of `mem::forget()` can confuse the reader because of the
  discrepancy between usage examples that show correct usage and the
  accompanying text which speaks of the possibility of double-free.  The
  text that says "if the panic occurs before `mem::forget` was called"
  refers to a variant of the second example that was never shown, modified
  to use `mem::forget` instead of `ManuallyDrop`.  Ideally the documentation
  should show both variants, so it's clear what it's talking about.

  Also, the double free could be fixed just by placing `mem::forget(v)`
  before the construction of `s`.  Since the lifetimes of `s` and `v`
  wouldn't overlap, there would be no point where panic could cause a double
  free.  This could be mentioned, and contrasted against the more robust fix
  of using `ManuallyDrop`.

* This sentence seems unjustified: "For some types, operations such as
  passing ownership (to a funcion like `mem::forget`) requires them to
  actually be fully owned right now [...]".  Unlike C++, Rust has no move
  constructors, its moves are (possibly elided) bitwise copies.  Even if you
  pass an invalid object to `mem::forget`, no harm should come to pass
  because `mem::forget` consumes the object and exists solely to prevent
  drop, so there no one left to observe the invalid state state.
2020-03-19 14:48:48 +01:00
Guillaume Gomez
6f16118f28 Clean up e0438 explanation 2020-03-19 14:11:27 +01:00
Guillaume Gomez
be06f678e1 Clean up E0437 explanation 2020-03-19 14:08:22 +01:00
bors
2602289632 Auto merge of #70137 - RalfJung:miri, r=RalfJung
update miri

Fixes https://github.com/rust-lang/rust/issues/70055
r? @ghost
Cc @oli-obk @Amanieu
2020-03-19 12:59:10 +00:00
Eduard-Mihai Burtescu
e8f1dfae64 hir: replace "items" terminology with "nodes" where appropriate. 2020-03-19 14:36:04 +02:00
Eduard-Mihai Burtescu
f8178c7a23 rustc: use LocalDefId instead of DefId in TypeckTables. 2020-03-19 14:25:50 +02:00
lzutao
2c38ecf72d
doc: Add quote to .init_array 2020-03-19 17:35:28 +07:00
Ralf Jung
4a2d54d07d add delay_span_bug to TransmuteSizeDiff, just to be sure 2020-03-19 10:40:48 +01:00
bors
3c6f982cc9 Auto merge of #66131 - eddyb:local-def-id, r=petrochenkov
rustc: use LocalDefId instead of DefIndex where possible.

That is, wherever `DefIndex` always referred to a "def" in the local crate, I replaced it with `LocalDefId`.
While `LocalDefId` already existed, it wasn't used a lot, but I hope I'm on the right track.

Unresolved questions:
* [x] ~~should `LocalDefId` implement `rustc_index::Idx`?~~
  * ~~this would get rid of a couple more `DefIndex` uses~~
* [x] ~~should `LocalDefId` be encoded/decoded as just a `DefIndex`?~~
  * ~~right now it's a bit messy, `LocalDefId` encodes/decodes like `DefId`~~
* [x] ~~should `DefId::assert_local` be named something else, like `expect_local`?~~

A future PR should change `tcx.hir().local_def_id(...)` to return `LocalDefId` instead of `DefId`, as changing it in this PR would be too noisy.

r? @michaelwoerister cc @nikomatsakis @petrochenkov @Zoxc
2020-03-19 09:18:49 +00:00
Eduard-Mihai Burtescu
16e25f0ea3 rustc: use LocalDefId instead of DefIndex in hir::map::definitions. 2020-03-19 11:16:08 +02:00
Eduard-Mihai Burtescu
2b0a21ead1 rustc: use LocalDefId instead of DefIndex in ich. 2020-03-19 11:16:08 +02:00
Eduard-Mihai Burtescu
f3ec069886 rustc: use LocalDefId instead of DefIndex in HirId. 2020-03-19 11:16:08 +02:00
Eduard-Mihai Burtescu
6130b9959c rustc: use LocalDefId instead of DefIndex in hir::lowering. 2020-03-19 11:15:35 +02:00
Eduard-Mihai Burtescu
42b2adfab0 rustc: introduce DefId::as_local(self) -> Option<LocalDefId> and use it. 2020-03-19 11:15:35 +02:00
Eduard-Mihai Burtescu
0c692797d7 rustc: rename DefId::to_local to expect_local and use it instead of LocalDefId::from_def_id. 2020-03-19 11:15:35 +02:00
Eduard-Mihai Burtescu
55ed19fe1b rustc: make LocalDefId's index field public like DefId's is. 2020-03-19 11:15:35 +02:00
Eduard-Mihai Burtescu
e1762fdad1 rustc_typeck: remove dead impl for DefIndex. 2020-03-19 11:15:35 +02:00
Eduard-Mihai Burtescu
e11dd47503 rustc: use LocalDefId instead of DefIndex for query keys. 2020-03-19 11:15:35 +02:00
Ralf Jung
898ff8d723 update miri 2020-03-19 09:08:13 +01:00
Ralf Jung
a39875b4dd do not 'return' in 'throw_' macros 2020-03-19 09:07:43 +01:00
Stefan Lankes
410cd7a3e0 remove unused imports
patch is required to avoid compiler errors by building src/libpanic_unwind/hermit.rs
2020-03-19 07:53:32 +01:00