Commit graph

11203 commits

Author SHA1 Message Date
Manish Goregaokar
f7d5687eba
Rollup merge of #73614 - lcnr:patch-4, r=Dylan-DPC
fix `intrinsics::needs_drop` docs
2020-06-23 13:10:15 -07:00
Manish Goregaokar
ae38698e7f
Rollup merge of #73398 - oli-obk:const_raw_ptr_cmp, r=varkor,RalfJung,nagisa
A way forward for pointer equality in const eval

r? @varkor on the first commit and @RalfJung on the second commit

cc #53020
2020-06-23 00:33:54 -07:00
Bastian Kauschke
932237b101
fix intrinsics::needs_drop docs 2020-06-22 14:42:26 +02:00
Ralf Jung
467415d50c deprecate wrapping_offset_from 2020-06-21 13:50:06 +02:00
bors
228a0ed7b0 Auto merge of #70946 - jumbatm:clashing-extern-decl, r=nagisa
Add a lint to catch clashing `extern` fn declarations.

Closes #69390.

Adds lint `clashing_extern_decl` to detect when, within a single crate, an extern function of the same name is declared with different types. Because two symbols of the same name cannot be resolved to two different functions at link time, and one function cannot possibly have two types, a clashing extern declaration is almost certainly a mistake.

This lint does not run between crates because a project may have dependencies which both rely on the same extern function, but declare it in a different (but valid) way. For example, they may both declare an opaque type for one or more of the arguments (which would end up distinct types), or use types that are valid conversions in the language the extern fn is defined in. In these cases, we can't say that the clashing declaration is incorrect.

r? @eddyb
2020-06-21 02:20:07 +00:00
Manish Goregaokar
9a82736e94
Rollup merge of #73411 - ehuss:bump-stage0, r=Mark-Simulacrum
Update bootstrap to rustc 1.45.0-beta.2 (1dc0f6d8e 2020-06-15)

Pulls in changes from #73326.

Closes #73286
2020-06-20 14:45:02 -07:00
Eric Huss
bfb0e8db88 Fix broken inner_deref doc tests. 2020-06-20 12:27:16 -07:00
Jon Gjengset
386114bfd3
Revise according to review 2020-06-20 10:55:39 -04:00
Jon Gjengset
ad7fd6265e
Doctests need feature 2020-06-20 10:53:39 -04:00
Jon Gjengset
3ff5879f8d
core/time: Add Duration methods for zero
This patch adds two methods to `Duration`. The first, `Duration::zero`,
provides a `const` constructor for getting an zero-length duration. This
is also what `Default` provides (this was clarified in the docs), though
`default` is not `const`.

The second, `Duration::is_zero`, returns true if a `Duration` spans no
time (i.e., because its components are all zero). Previously, the way to
do this was either to compare both `as_secs` and `subsec_nanos` to 0, to
compare against `Duration::new(0, 0)`, or to use the `u128` method
`as_nanos`, none of which were particularly elegant.
2020-06-20 10:53:39 -04:00
Oliver Scherer
98e97a46e2 Address review comments 2020-06-20 14:58:15 +02:00
Oliver Scherer
53686b91ca Satisfy tidy 2020-06-20 14:15:36 +02:00
jumbatm
6b74e3cbb9 Add ClashingExternDecl lint.
This lint checks that all declarations for extern fns of the same name
are declared with the same types.
2020-06-20 16:54:32 +10:00
Manish Goregaokar
5c9cd82454
Rollup merge of #71899 - cuviper:try_find_map, r=dtolnay
Refactor `try_find` a little

~~This works like `find_map`, but mapping to a `Try` type. It stops when `Ok` is `Some(value)`, with an additional short-circuit on `Try::Error`. This is similar to the unstable `try_find`, but has the advantage of being able to directly return the user's `R: Try` type directly, rather than converting to `Result`.~~
(removed -- `try_find_map` was declined in review)

This PR also refactors `try_find` a little to match style. The `E` type parameter was unnecessary, so it's now removed. The folding closure now has reduced parametricity on just `T = Self::Item`, rather
than the whole `Self` iterator type. There's otherwise no functional change in this.
2020-06-19 19:42:45 -07:00
Manish Goregaokar
203305d095
Rollup merge of #71420 - RalfJung:specialization-incomplete, r=matthewjasper
Specialization is unsound

As discussed in https://github.com/rust-lang/rust/issues/31844#issuecomment-617013949, it might be a good idea to warn users of specialization that the feature they are using is unsound.

I also expanded the "incomplete feature" warning to link the user to the tracking issue.
2020-06-19 19:42:43 -07:00
Josh Stone
db0d70e58f Refactor try_find a little
The `E` type parameter was unnecessary, so it's now removed. The folding
closure now has reduced parametricity on just `T = Self::Item`, rather
than the whole `Self` iterator type. There's otherwise no functional
change in this.
2020-06-19 13:54:29 -07:00
Manish Goregaokar
85e1c3baca
Rollup merge of #71568 - hbina:document_unsafety_slice_sort, r=joshtriplett
Document unsafety in slice/sort.rs

Let me know if these documentations are accurate c:

I don't think I am capable enough to document the safety of `partition_blocks`, however.

Related issue #66219
2020-06-19 09:14:56 -07:00
Oliver Scherer
84f1d73182 Tidy got confused on rustc_const_unstable issues 2020-06-19 18:13:42 +02:00
Oliver Scherer
e09b620339 Add fuzzy pointer comparison intrinsics 2020-06-19 18:13:41 +02:00
Ralf Jung
125c196bca
Rollup merge of #73054 - RalfJung:dont-panic, r=Mark-Simulacrum
memory access sanity checks: abort instead of panic

Suggested by @Mark-Simulacrum, this should help reduce the performance impact of these checks.
2020-06-19 14:29:24 +02:00
Ralf Jung
1dc6c3c4ad
Rollup merge of #73011 - richkadel:llvm-count-from-mir-pass, r=tmandry
first stage of implementing LLVM code coverage

This PR replaces #70680 (WIP toward LLVM Code Coverage for Rust) since I am re-implementing the Rust LLVM code coverage feature in a different part of the compiler (in MIR pass(es) vs AST).

This PR updates rustc with `-Zinstrument-coverage` option that injects the llvm intrinsic `instrprof.increment()` for code generation.

This initial version only injects counters at the top of each function, and does not yet implement the required coverage map.

Upcoming PRs will add the coverage map, and add more counters and/or counter expressions for each conditional code branch.

Rust compiler MCP https://github.com/rust-lang/compiler-team/issues/278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation

***[I put together some development notes here, under a separate branch.](cfa0b21d34/src/test/codegen/coverage-experiments/README-THIS-IS-TEMPORARY.md)***
2020-06-19 14:29:20 +02:00
Ralf Jung
78f3e9c344
Rollup merge of #73142 - ehuss:std-benches, r=dtolnay
Ensure std benchmarks get tested.

This ensures that the std benchmarks don't break in the future. Currently they aren't compiled or tested on CI, so they can easily bitrot.  Testing a benchmark runs it with one iteration. Adding these should only add a few seconds to CI.

Closes #54176
Closes #61913
2020-06-19 08:56:08 +02:00
Manish Goregaokar
f15b346f3a
Rollup merge of #73447 - lzutao:stabilize-result_as_deref, r=dtolnay
Improve document for `Result::as_deref(_mut)` methods

cc #50264
2020-06-18 15:21:03 -07:00
Manish Goregaokar
9f8f994ad9
Rollup merge of #73425 - poliorcetics:zeroed-functions-pointers, r=dtolnay
Mention functions pointers in the documentation

Fixes #51615.

This mentions function pointers in the documentation for `core::mem::zeroed`, adding them to the list of types that are **always** wrong when zeroed, with `&T` and `&mut T`.

@rustbot modify labels: T-doc, C-enhancement, T-libs
2020-06-18 15:20:59 -07:00
Manish Goregaokar
9ca811772c
Rollup merge of #73361 - estebank:non-primitive-cast, r=davidtwco
Tweak "non-primitive cast" error

- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-18 15:20:57 -07:00
Manish Goregaokar
9262fc2a68
Rollup merge of #72628 - MikailBag:array-default-tests, r=shepmaster
Add tests for 'impl Default for [T; N]'

Related: #71690.
This pull request adds two tests:
- Even it T::default() panics, no leaks occur.
- [T; 0] is Default even if T is not.

I believe at some moment `Default` impl for arrays will be rewritten to use const generics instead of macros, and these tests will help to prevent behavior changes.
2020-06-18 15:20:41 -07:00
Manish Goregaokar
49ab0cab61
Rollup merge of #72279 - RalfJung:raw-ref-macros, r=nikomatsakis
add raw_ref macros

In https://github.com/rust-lang/rust/issues/64490, various people were in favor of exposing `&raw` as a macro first before making the actual syntax stable. So this PR (unstably) introduces those macros.

I'll create the tracking issue if we're okay moving forward with this.
2020-06-18 15:20:39 -07:00
Eric Huss
5a9ff052b4 Disable core benches on wasm (benches not supported). 2020-06-18 14:48:53 -07:00
Eric Huss
abb5800dd5 Ensure std benchmarks get tested. 2020-06-18 09:11:15 -07:00
Lzu Tao
4e77214583 Improve document for Result::as_deref(_mut) 2020-06-18 02:09:53 +00:00
David Tolnay
2da9ca72bc
Remove duplicate sentence fragment from mem::zeroed doc 2020-06-17 17:17:07 -07:00
Rich Kadel
c3387293d4
Update src/libcore/intrinsics.rs
Co-authored-by: bjorn3 <bjorn3@users.noreply.github.com>
2020-06-17 10:29:00 -07:00
Poliorcetics
e75fa896ba
Don't imply function pointers are references
Co-authored-by: David Tolnay <dtolnay@gmail.com>
2020-06-17 03:30:41 +02:00
Alexis Bourget
15cd51af5e Mention functions pointers in the documentation 2020-06-16 23:39:03 +02:00
Hanif Bin Ariffin
5a9df8406f Added some more documentations to unsafety blocks in slice/sort.rs 2020-06-16 16:19:49 -04:00
Ralf Jung
f0a42332b8 memory access sanity checks: abort instead of panic 2020-06-16 16:01:30 -04:00
Dylan DPC
759547b210
Rollup merge of #73381 - ratijas:fix-typo-std-mem, r=jonas-schievink
Fix typo in docs of std::mem
2020-06-16 15:08:45 +02:00
Dylan DPC
94105c2da3
Rollup merge of #73373 - lzutao:bug-trackcaller, r=Amanieu
Use track caller for bug! macro
2020-06-16 15:08:42 +02:00
Ralf Jung
d1265e7679 libcore tests: use min_specialization 2020-06-16 13:07:15 +02:00
Ralf Jung
0265e4e61b add tracking issue 2020-06-16 09:25:29 +02:00
Rich Kadel
e4df7e7046 Update src/libcore/intrinsics.rs
Co-authored-by: bjorn3 <bjorn3@users.noreply.github.com>
2020-06-15 16:50:10 -07:00
Rich Kadel
d2cd59a031 Add case for count_code_region() extern lang_item
As suggested in PR feedback:

https://github.com/rust-lang/rust/pull/73011#discussion_r435728923

This allows count_code_region() to be handled like a normal intrinsic so
the InstanceDef::InjectedCode variant is no longer needed.
2020-06-15 16:50:10 -07:00
Rich Kadel
2c5c2a6bc2 removed experiments for cleaner github PR 2020-06-15 16:50:10 -07:00
Rich Kadel
088037a044 explained lang_item function body (count_code_region) 2020-06-15 16:50:10 -07:00
Rich Kadel
5068ae1ca0 [WIP] injects llvm intrinsic instrprof.increment for coverage reports
This initial version only injects counters at the top of each function.
Rust Coverage will require injecting additional counters at each
conditional code branch.
2020-06-15 16:50:10 -07:00
ivan tkachenko
71c54db3dc
Fix typo in docs of std::mem 2020-06-15 22:14:45 +03:00
Esteban Küber
e857696cf8 Tweak "non-primitive cast" error
- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-15 08:57:20 -07:00
Lzu Tao
64a6de25ea Join mutiple lines if it is more readable 2020-06-15 13:15:47 +00:00
bors
ff4a2533a0 Auto merge of #73369 - RalfJung:rollup-hl8g9zf, r=RalfJung
Rollup of 10 pull requests

Successful merges:

 - #72707 (Use min_specialization in the remaining rustc crates)
 - #72740 (On recursive ADT, provide indirection structured suggestion)
 - #72879 (Miri: avoid tracking current location three times)
 - #72938 (Stabilize Option::zip)
 - #73086 (Rename "cyclone" to "apple-a7" per changes in upstream LLVM)
 - #73104 (Example about explicit mutex dropping)
 - #73139 (Add methods to go from a nul-terminated Vec<u8> to a CString)
 - #73296 (Remove vestigial CI job msvc-aux.)
 - #73304 (Revert heterogeneous SocketAddr PartialEq impls)
 - #73331 (extend network support for HermitCore)

Failed merges:

r? @ghost
2020-06-15 11:39:23 +00:00
Ralf Jung
89eb74dcac
Rollup merge of #72938 - lzutao:stabilize_option_zip, r=dtolnay
Stabilize Option::zip

This PR stabilizes the following API:

```rust
impl<T> Option<T> {
    pub fn zip<U>(self, other: Option<U>) -> Option<(T, U)>;
}
```

This API has real world usage as seen in <https://grep.app/search?q=-%3E%20Option%3C%5C%28T%2C%5Cs%3FU%5C%29%3E&regexp=true&filter[lang][0]=Rust>.

The `zip_with` method is left unstably as this API is kinda niche
and it hasn't received much usage in Rust repositories on GitHub.

cc #70086
2020-06-15 12:01:03 +02:00