]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoRollup merge of #73841 - tmiasko:print-region-graph, r=Mark-Simulacrum
Manish Goregaokar [Thu, 2 Jul 2020 03:35:54 +0000 (20:35 -0700)]
Rollup merge of #73841 - tmiasko:print-region-graph, r=Mark-Simulacrum

Remove defunct `-Z print-region-graph`

4 years agoRollup merge of #73839 - crlf0710:snapshot_the_reality, r=Manishearth
Manish Goregaokar [Thu, 2 Jul 2020 03:35:52 +0000 (20:35 -0700)]
Rollup merge of #73839 - crlf0710:snapshot_the_reality, r=Manishearth

Split and expand nonstandard-style lints unicode unit test.

RFC 2457 requested that the `nonstandard_style` series of linted be adjusted to cover the non_ascii_identifier case. However when i read the code of those implementations, it seems they're already supporting non_ascii_identifiers. But the exact rules is a little different than what's proposed in RFC 2457.

So I splitted and expanded the existing test case to try to exercise every branch in the code. I think it'll also be easier to examine the cases in these unit tests to see whether it's ok to just leave them as is, or some adjustments are needed.

r? @Manishearth

4 years agoRollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasper
Manish Goregaokar [Thu, 2 Jul 2020 03:35:50 +0000 (20:35 -0700)]
Rollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasper

Recover extra trailing angle brackets in struct definition

This commit applies the existing 'extra angle bracket recovery' logic
when parsing fields in struct definitions. This allows us to continue
parsing the struct's fields, avoiding spurious 'missing field' errors in
code that tries to use the struct.

4 years agoRollup merge of #73569 - Aaron1011:fix/macro-rules-group, r=petrochenkov
Manish Goregaokar [Thu, 2 Jul 2020 03:35:48 +0000 (20:35 -0700)]
Rollup merge of #73569 - Aaron1011:fix/macro-rules-group, r=petrochenkov

Handle `macro_rules!` tokens consistently across crates

When we serialize a `macro_rules!` macro, we used a 'lowered' `TokenStream` for its body, which has all `Nonterminal`s expanded in-place via `nt_to_tokenstream`. This matters when an 'outer' `macro_rules!` macro expands to an 'inner' `macro_rules!` macro - the inner macro may use tokens captured from the 'outer' macro in its definition.

This means that invoking a foreign `macro_rules!` macro may use a different body `TokenStream` than when the same `macro_rules!` macro is invoked in the same crate. This difference is observable by proc-macros invoked by a `macro_rules!` macro - a `None`-delimited group will be seen in the same-crate case (inserted when convering `Nonterminal`s to the `proc_macro` crate's structs), but no `None`-delimited group in the cross-crate case.

To fix this inconsistency, we now insert `None`-delimited groups when 'lowering' a `Nonterminal` `macro_rules!` body, just as we do in `proc_macro_server`. Additionally, we no longer print extra spaces for `None`-delimited groups - as far as pretty-printing is concerned, they don't exist (only their contents do). This ensures that `Display` output of a `TokenStream` does not depend on which crate a `macro_rules!` macro was invoked from.

This PR is necessary in order to patch the `solana-genesis-programs` for the upcoming hygiene serialization breakage (https://github.com/rust-lang/rust/pull/72121#issuecomment-646924847). The `solana-genesis-programs` crate will need to use a proc macro to re-span certain tokens in a nested `macro_rules!`, which requires us to consistently use a `None`-delimited group.

See `src/test/ui/proc-macro/nested-macro-rules.rs` for an example of the kind of nested `macro_rules!` affected by this crate.

4 years agoRollup merge of #73449 - ehuss:duplicate-lang-item, r=matthewjasper
Manish Goregaokar [Thu, 2 Jul 2020 03:35:46 +0000 (20:35 -0700)]
Rollup merge of #73449 - ehuss:duplicate-lang-item, r=matthewjasper

Provide more information on duplicate lang item error.

This gives some notes on the location of the files where the lang items were loaded from. Some duplicate lang item errors can be a little confusing, and this might help in diagnosing what has happened.

Here's an example when hitting a bug with Cargo's build-std:

```
error: duplicate lang item in crate `core` (which `rustc_std_workspace_core` depends on): `try`.
  |
  = note: the lang item is first defined in crate `core` (which `z10` depends on)
  = note: first definition in `core` loaded from /Users/eric/Proj/rust/cargo/scratch/z10/target/target/debug/deps/libcore-a764da499c7385f4.rmeta
  = note: second definition in `core` loaded from /Users/eric/Proj/rust/cargo/scratch/z10/target/target/debug/deps/libcore-5b082675aea34986.rmeta
```

4 years agoRollup merge of #73345 - petrochenkov:nointerp, r=Aaron1011
Manish Goregaokar [Thu, 2 Jul 2020 03:35:44 +0000 (20:35 -0700)]
Rollup merge of #73345 - petrochenkov:nointerp, r=Aaron1011

expand: Stop using nonterminals for passing tokens to attribute and derive macros

Make one more step towards fully token-based expansion and fix issues described in https://github.com/rust-lang/rust/issues/72545#issuecomment-640276791.

Now `struct S;` is passed to `foo!(struct S;)` and `#[foo] struct S;` in the same way - as a token stream `struct S ;`, rather than a single non-terminal token `NtItem` which is then broken into parts later.

The cost is making pretty-printing of token streams less pretty.
Some of the pretty-printing regressions will be recovered by keeping jointness with each token, which we will need to do anyway.

Unfortunately, this is not exactly the same thing as https://github.com/rust-lang/rust/pull/73102.
One more observable effect is how `$crate` is printed in the attribute input.
Inside `NtItem` was printed as `crate` or `that_crate`, now as a part of a token stream it's printed as `$crate` (there are good reasons for these differences, see https://github.com/rust-lang/rust/pull/62393 and related PRs).
This may break old proc macros (custom derives) written before the main portion of the proc macro API (macros 1.2) was stabilized, those macros did `input.to_string()` and reparsed the result, now that result can contain `$crate` which cannot be reparsed.

So, I think we should do this regardless, but we need to run crater first.
r? @Aaron1011

4 years agoRollup merge of #73306 - calebzulawski:target-feature-11-fn-trait-soundness, r=nikoma...
Manish Goregaokar [Thu, 2 Jul 2020 03:35:43 +0000 (20:35 -0700)]
Rollup merge of #73306 - calebzulawski:target-feature-11-fn-trait-soundness, r=nikomatsakis

Don't implement Fn* traits for #[target_feature] functions

Closes #72012.

4 years agoRollup merge of #72569 - ChrisDenton:remove-innosetup, r=nikomatsakis
Manish Goregaokar [Thu, 2 Jul 2020 03:35:41 +0000 (20:35 -0700)]
Rollup merge of #72569 - ChrisDenton:remove-innosetup, r=nikomatsakis

Remove legacy InnoSetup GUI installer

On Windows the InnoSetup `.exe` installer was superseded by the MSI installer long ago. It's no longer needed.

The `.exe` installer hasn't been linked from the [other installation methods](https://forge.rust-lang.org/infra/other-installation-methods.html#standalone) page in many years. As far as I can tell the intent was always to remove this installer once the MSI proved itself. Though admittedly both installers feel very "legacy" at this point.

Removing this would mean we only maintain one Windows GUI installer and would speed up the distribution phase.

As a result of removing InnoSetup, this closes #24397

4 years agoAuto merge of #72053 - Mark-Simulacrum:32bitcheck, r=pietroalbini
bors [Wed, 1 Jul 2020 21:01:36 +0000 (21:01 +0000)]
Auto merge of #72053 - Mark-Simulacrum:32bitcheck, r=pietroalbini

Test UI tests for pass=check

I'm going to just compare the builder times since I wasn't able to get this working nicely locally (hit some obscure linker error).

Fixes part of #69823

4 years agoAdd an issue number for the pretty_printing_compatibility_hack FIXME
Vadim Petrochenkov [Wed, 1 Jul 2020 17:23:06 +0000 (20:23 +0300)]
Add an issue number for the pretty_printing_compatibility_hack FIXME

4 years agoHandle `None`-delimited groups when parsing `macro_rules!` macro
Aaron Hill [Mon, 29 Jun 2020 13:55:28 +0000 (09:55 -0400)]
Handle `None`-delimited groups when parsing `macro_rules!` macro

When a `macro_rules!` macro expands to another `macro_rules!` macro, we
may see `None`-delimited groups in odd places when another crate
deserializes the 'inner' macro. This commit 'unwraps' an outer
`None`-delimited group to avoid breaking existing code.

See https://github.com/rust-lang/rust/pull/73569#issuecomment-650860457
for more details.

The proper fix is to handle `None`-delimited groups systematically
throughout the parser, but that will require significant work. In the
meantime, this hack lets us fix important hygiene bugs in macros

4 years agoDon't print additional spaces when pretty-printing NoDelim groups
Aaron Hill [Sun, 21 Jun 2020 20:56:10 +0000 (16:56 -0400)]
Don't print additional spaces when pretty-printing NoDelim groups

4 years agoInsert NoDelim groups around nonterminals when lowering macro_rules
Aaron Hill [Sun, 21 Jun 2020 00:59:04 +0000 (20:59 -0400)]
Insert NoDelim groups around nonterminals when lowering macro_rules

4 years agoAuto merge of #73924 - Manishearth:rollup-8r51ld9, r=Manishearth
bors [Wed, 1 Jul 2020 14:45:56 +0000 (14:45 +0000)]
Auto merge of #73924 - Manishearth:rollup-8r51ld9, r=Manishearth

Rollup of 17 pull requests

Successful merges:

 - #72071 (Added detailed error code explanation for issue E0687 in Rust compiler.)
 - #72369 (Bring net/parser.rs up to modern up to date with modern rust patterns)
 - #72445 (Stabilize `#[track_caller]`.)
 - #73466 (impl From<char> for String)
 - #73548 (remove rustdoc warnings)
 - #73649 (Fix sentence structure)
 - #73678 (Update Box::from_raw example to generalize better)
 - #73705 (stop taking references in Relate)
 - #73716 (Document the static keyword)
 - #73752 (Remap Windows ERROR_INVALID_PARAMETER to ErrorKind::InvalidInput from Other)
 - #73776 (Move terminator to new module)
 - #73778 (Make `likely` and `unlikely` const, gated by feature `const_unlikely`)
 - #73805 (Document the type keyword)
 - #73806 (Use an 'approximate' universal upper bound when reporting region errors)
 - #73828 (Fix wording for anonymous parameter name help)
 - #73846 (Fix comma in debug_assert! docs)
 - #73847 (Edit cursor.prev() method docs in lexer)

Failed merges:

r? @ghost

4 years agoRollup merge of #73847 - pierwill:pierwill-cursor-doc, r=matthewjasper
Manish Goregaokar [Wed, 1 Jul 2020 14:43:02 +0000 (07:43 -0700)]
Rollup merge of #73847 - pierwill:pierwill-cursor-doc, r=matthewjasper

Edit cursor.prev() method docs in lexer

Fix missing punctuation

4 years agoRollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett
Manish Goregaokar [Wed, 1 Jul 2020 14:43:00 +0000 (07:43 -0700)]
Rollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett

Fix comma in debug_assert! docs

4 years agoRollup merge of #73828 - nop:fix/parameter-name-help, r=estebank
Manish Goregaokar [Wed, 1 Jul 2020 14:42:58 +0000 (07:42 -0700)]
Rollup merge of #73828 - nop:fix/parameter-name-help, r=estebank

Fix wording for anonymous parameter name help

```
 --> exercises/functions/functions2.rs:8:15
  |
8 | fn call_me(num) {
  |               ^ expected one of `:`, `@`, or `|`
  |
  = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: if this is a `self` type, give it a parameter name
  |
8 | fn call_me(self: num) {
  |            ^^^^^^^^^
help: if this was a parameter name, give it a type
  |
8 | fn call_me(num: TypeName) {
  |            ^^^^^^^^^^^^^
help: if this is a type, explicitly ignore the parameter name
  |
8 | fn call_me(_: num) {
  |
```
This commit changes "if this was a parameter name" to "if this is a parameter name" to match the wording of similar errors.

4 years agoRollup merge of #73806 - Aaron1011:feature/approx-universal-upper, r=estebank
Manish Goregaokar [Wed, 1 Jul 2020 14:42:56 +0000 (07:42 -0700)]
Rollup merge of #73806 - Aaron1011:feature/approx-universal-upper, r=estebank

Use an 'approximate' universal upper bound when reporting region errors

Fixes #67765

When reporting errors during MIR region inference, we sometimes use
`universal_upper_bound` to obtain a named universal region that we
can display to the user. However, this is not always possible - in a
case like `fn foo<'a, 'b>() { .. }`, the only upper bound for a region
containing `'a` and `'b` is `'static`. When displaying diagnostics, it's
usually better to display *some* named region (even if there are
multiple involved) rather than fall back to a generic error involving
`'static`.

This commit adds a new `approx_universal_upper_bound` method, which
uses the lowest-numbered universal region if the only alternative is to
return `'static`.

4 years agoRollup merge of #73805 - poliorcetics:type-keyword, r=kennytm
Manish Goregaokar [Wed, 1 Jul 2020 14:42:54 +0000 (07:42 -0700)]
Rollup merge of #73805 - poliorcetics:type-keyword, r=kennytm

Document the type keyword

Partial fix of #34601.

Two small examples, one clarifying that `type` only defines an alias, not a completely new type, the other explaining the use in traits.

@rustbot modify labels: T-doc,C-enhancement

4 years agoRollup merge of #73778 - nbdd0121:const_likely, r=oli-obk
Manish Goregaokar [Wed, 1 Jul 2020 14:42:52 +0000 (07:42 -0700)]
Rollup merge of #73778 - nbdd0121:const_likely, r=oli-obk

Make `likely` and `unlikely` const, gated by feature `const_unlikely`

This PR also contains a fix to allow `#[allow_internal_unstable]` to work properly with `#[rustc_const_unstable]`.

cc @RalfJung @nagisa

r? @oli-obk

4 years agoRollup merge of #73776 - aszenz:refactor_mir_module, r=wesleywiser
Manish Goregaokar [Wed, 1 Jul 2020 14:42:50 +0000 (07:42 -0700)]
Rollup merge of #73776 - aszenz:refactor_mir_module, r=wesleywiser

Move terminator to new module

Moves terminator types from `librustc_middle/mir/mod.rs` into submodule
Fixes #73723

4 years agoRollup merge of #73752 - TyPR124:invalid-parameter-error, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:48 +0000 (07:42 -0700)]
Rollup merge of #73752 - TyPR124:invalid-parameter-error, r=LukasKalbertodt

Remap Windows ERROR_INVALID_PARAMETER to ErrorKind::InvalidInput from Other

I don't know if this is acceptable or how likely it is to break existing code, but it seem to me ERROR_INVALID_PARAMETER "The parameter is incorrect" should map to ErrorKind::InvalidInput "A parameter was incorrect". Previously this value fell through to ErrorKind::Other.

I can't speak for anyone but myself, but I instinctively thought it would be InvalidInput.

4 years agoRollup merge of #73716 - poliorcetics:static-keyword, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:46 +0000 (07:42 -0700)]
Rollup merge of #73716 - poliorcetics:static-keyword, r=LukasKalbertodt

Document the static keyword

Partial fix of #34601.

This documents the `static` keyword. It's basically a simplified version of the reference with more examples.

@rustbot modify labels: T-doc,C-enhancement

4 years agoRollup merge of #73705 - lcnr:skip_binder, r=nikomatsakis
Manish Goregaokar [Wed, 1 Jul 2020 14:42:44 +0000 (07:42 -0700)]
Rollup merge of #73705 - lcnr:skip_binder, r=nikomatsakis

stop taking references in Relate

Adds a `Copy` bound to `Relate` and changes the type signatures to `T` from `&T`. While the `Copy` bound is not strictly necessary (i.e. the `Clone` bound of `TypeRelation` would be good enough), we don't need non `Copy` types and it simplifies the implementation.

Removes the afaict unused impls for `Vec<ty::PolyExistentialProjection<'tcx>>`, `Rc<T>` and `Box<T>`. If they end up being relevant again the bound of `Relate` can be reduced to `T: Clone`.

This also changes signature of `Binder::skip_binder` to `fn skip_binder(self) -> T`.

`TypeError::ProjectionBoundsLength` was never used and is also removed in this PR.

r? @nikomatsakis maybe :thinking: feel free to reassign

4 years agoRollup merge of #73678 - Keno:patch-1, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:42 +0000 (07:42 -0700)]
Rollup merge of #73678 - Keno:patch-1, r=LukasKalbertodt

Update Box::from_raw example to generalize better

I know very little about rust, so I saw the example here
```
use std::alloc::{alloc, Layout};

unsafe {
    let ptr = alloc(Layout::new::<i32>()) as *mut i32;
    *ptr = 5;
    let x = Box::from_raw(ptr);
}
```
and tried to generalize it by writing,
```
    let layout = Layout::new::<T>();
    let new_obj = unsafe {
        let ptr = alloc(layout) as *mut T;
        *ptr = obj;
        Box::from_raw(ptr)
    };
```
for some more complicated `T`, which ended up crashing with SIGSEGV,
because it tried to `drop_in_place` the previous object in `ptr` which is
of course garbage. I think that changing this example to use `.write` instead
would be a good idea to suggest the correct generalization. It is also more
consistent with other documentation items in this file, which use `.write`.
I also added a comment to explain it, but I'm not too attached to that,
and can see it being too verbose in this place.

4 years agoRollup merge of #73649 - Anirban166:patch-1, r=steveklabnik
Manish Goregaokar [Wed, 1 Jul 2020 14:42:40 +0000 (07:42 -0700)]
Rollup merge of #73649 - Anirban166:patch-1, r=steveklabnik

Fix sentence structure

Fixed grammar and sentence structure on appropriate instances.

4 years agoRollup merge of #73548 - tshepang:fix-rustdoc-warnings, r=ecstatic-morse
Manish Goregaokar [Wed, 1 Jul 2020 14:42:38 +0000 (07:42 -0700)]
Rollup merge of #73548 - tshepang:fix-rustdoc-warnings, r=ecstatic-morse

remove rustdoc warnings

4 years agoRollup merge of #73466 - matthiaskrgr:char_into_string, r=dtolnay
Manish Goregaokar [Wed, 1 Jul 2020 14:42:36 +0000 (07:42 -0700)]
Rollup merge of #73466 - matthiaskrgr:char_into_string, r=dtolnay

impl From<char> for String

This allows us to write

````rust
fn char_to_string() -> String {
    'a'.into()
}
````

which was not possible before.

4 years agoRollup merge of #72445 - anp:stabilize-track-caller, r=oli-obk
Manish Goregaokar [Wed, 1 Jul 2020 14:42:33 +0000 (07:42 -0700)]
Rollup merge of #72445 - anp:stabilize-track-caller, r=oli-obk

Stabilize `#[track_caller]`.

# Stabilization Report

RFC: [2091]
Tracking issue: https://github.com/rust-lang/rust/issues/47809

## Summary

From the [rustc-dev-guide chapter][dev-guide]:

> Take this example program:

```rust
fn main() {
    let foo: Option<()> = None;
    foo.unwrap(); // this should produce a useful panic message!
}
```

> Prior to Rust 1.42, panics like this `unwrap()` printed a location in libcore:

```
$ rustc +1.41.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```

> As of 1.42, we get a much more helpful message:

```
$ rustc +1.42.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

> These error messages are achieved through a combination of changes to `panic!` internals to make use of `core::panic::Location::caller` and a number of `#[track_caller]` annotations in the standard library which propagate caller information.

The attribute adds an implicit caller location argument to the ABI of annotated functions, but does not affect the type or MIR of the function. We implement the feature entirely in codegen and in the const evaluator.

## Bottom Line

This PR stabilizes the use of `#[track_caller]` everywhere, including traits and extern blocks. It also stabilizes `core::panic::Location::caller`, although the use of that function in a const context remains gated by `#![feature(const_caller_location)]`.

The implementation for the feature already changed the output of panic messages for a number of std functions, as described in the [1.42 release announcement]. The attribute's use in `Index` and `IndexMut` traits is visible to users since 1.44.

## Tests

All of the tests for this feature live under [src/test/ui/rfc-2091-track-caller][tests] in the repo.

Noteworthy cases:

* [use of attr in std]
  * validates user-facing benefit of the feature
* [trait attribute inheritance]
  * covers subtle behavior designed during implementation and not RFC'd
* [const/codegen equivalence]
  * this was the result of a suspected edge case and investigation
* [diverging function support]
  * covers an unresolved question from the RFC
* [fn pointers and shims]
  * covers important potential sources of unsoundness

## Documentation

The rustc-dev-guide now has a chapter on [Implicit Caller Location][dev-guide].

I have an [open PR to the reference][attr-reference-pr] documenting the attribute.

The intrinsic's [wrapper] includes some examples as well.

## Implementation History

* 2019-10-02: [`#[track_caller]` feature gate (RFC 2091 1/N) #65037](https://github.com/rust-lang/rust/pull/65037)
  * Picked up the patch that @ayosec had started on the feature gate.
* 2019-10-13: [Add `Instance::resolve_for_fn_ptr` (RFC 2091 #2/N) #65182](https://github.com/rust-lang/rust/pull/65182)
* 2019-10-20: ~~[WIP Add MIR argument for #[track_caller] (RFC 2091 3/N) #65258](https://github.com/rust-lang/rust/pull/65258)~~
  * Abandoned approach to send location as a MIR argument.
* 2019-10-28: [`std::panic::Location` is a lang_item, add `core::intrinsics::caller_location` (RFC 2091 3/N) #65664](https://github.com/rust-lang/rust/pull/65664)
* 2019-12-07: [Implement #[track_caller] attribute. (RFC 2091 4/N) #65881](https://github.com/rust-lang/rust/pull/65881)
* 2020-01-04: [libstd uses `core::panic::Location` where possible. #67137](https://github.com/rust-lang/rust/pull/67137)
* 2020-01-08: [`Option::{expect,unwrap}` and `Result::{expect, expect_err, unwrap, unwrap_err}` have `#[track_caller]` #67887](https://github.com/rust-lang/rust/pull/67887)
* 2020-01-20: [Fix #[track_caller] and function pointers #68302](https://github.com/rust-lang/rust/pull/68302) (fixed #68178)
* 2020-03-23: [#[track_caller] in traits #69251](https://github.com/rust-lang/rust/pull/69251)
* 2020-03-24: [#[track_caller] on core::ops::{Index, IndexMut}. #70234](https://github.com/rust-lang/rust/pull/70234)
* 2020-04-08 [Support `#[track_caller]` on functions in `extern "Rust" { ... }` #70916](https://github.com/rust-lang/rust/pull/70916)

## Unresolveds

### From the RFC

> Currently the RFC simply prohibit applying #[track_caller] to trait methods as a future-proofing
> measure.

**Resolved.** See the dev-guide documentation and the tests section above.

> Diverging functions should be supported.

**Resolved.** See the tests section above.

> The closure foo::{{closure}} should inherit most attributes applied to the function foo, ...

**Resolved.** This unknown was related to specifics of the implementation which were made irrelevant by the final implementation.

### Binary Size

I [instrumented track_caller to use custom sections][measure-size] in a local build and discovered relatively minor binary size usage for the feature overall. I'm leaving the issue open to discuss whether we want to upstream custom section support.

There's an [open issue to discuss mitigation strategies][mitigate-size]. Some decisions remain about the "right" strategies to reduce size without overly constraining the compiler implementation. I'd be excited to see someone carry that work forward but my opinion is that we shouldn't block stabilization on implementing compiler flags for redaction.

### Specialization

There's an [open issue][specialization] on the semantics of the attribute in specialization chains. I'm inclined to move forward with stabilization without an exact resolution here given that specialization is itself unstable, but I also think it should be an easy question to resolve.

### Location only points to the start of a call span

https://github.com/rust-lang/rust/issues/69977 was resolved by https://github.com/rust-lang/rust/pull/73182, and the next step should probably be to [extend `Location` with a notion of the end of a call](https://github.com/rust-lang/rust/issues/73554).

### Regression of std's panic messages

#70963 should be resolved by serializing span hygeine to crate metadata: https://github.com/rust-lang/rust/issues/68686.

[2091]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md
[dev-guide]: https://rustc-dev-guide.rust-lang.org/codegen/implicit-caller-location.html
[specialization]: https://github.com/rust-lang/rust/issues/70293
[measure-size]: https://github.com/rust-lang/rust/issues/70579
[mitigate-size]: https://github.com/rust-lang/rust/issues/70580
[attr-reference-pr]: https://github.com/rust-lang/reference/pull/742
[wrapper]: https://doc.rust-lang.org/nightly/core/panic/struct.Location.html#method.caller
[tests]: https://github.com/rust-lang/rust/tree/master/src/test/ui/rfc-2091-track-caller
[const/codegen equivalence]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
[diverging function support]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/diverging-caller-location.rs
[use of attr in std]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/std-panic-locations.rs
[fn pointers and shims]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
[trait attribute inheritance]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-trait-impls.rs
[1.42 release announcement]: https://blog.rust-lang.org/2020/03/12/Rust-1.42.html#useful-line-numbers-in-option-and-result-panic-messages

4 years agoRollup merge of #72369 - Lucretiel:socketaddr-parse, r=dtolnay
Manish Goregaokar [Wed, 1 Jul 2020 14:42:32 +0000 (07:42 -0700)]
Rollup merge of #72369 - Lucretiel:socketaddr-parse, r=dtolnay

Bring net/parser.rs up to modern up to date with modern rust patterns

The current implementation of IP address parsing is very unidiomatic; it's full of `if` / `return` / `is_some` / `is_none` instead of `?`, `loop` with manual index tracking; etc. Went through and did and cleanup to try to bring it in line with modern sensibilities.

The obvious concern with making changes like this is "make sure you understand why it's written that way before changing it". Looking through the commit history for this file, there are several much smaller commits that make similar changes (For instance, https://github.com/rust-lang/rust/commit/3024c1434a667425d30e4b0785857381323712aa, https://github.com/rust-lang/rust/commit/4f3ab4986ec96d9c93f34dc53d0a4a1279288451, https://github.com/rust-lang/rust/commit/79f876495b2853d1b78ba953ceb3114b8019100f), and there don't seem to be any commits in the history that indicate that this lack of idiomaticity is related to specific performance needs (ie, there aren't any commits that replace a `for` loop with a `loop` and a manual index count). In fact, the basic shape of the file is essentially unchanged from its initial commit back in 2015.

Made the following changes throughout the IP address parser:
- Replaced all uses of `is_some()` / `is_none()` with `?`.
- "Upgraded" loops wherever possible; ie, replace `while` with `for`, etc.
    - Removed all cases of manual index tracking / incrementing.
- Renamed several single-character variables with more expressive names.
- Replaced several manual control flow segments with equivalent adapters (such as `Option::filter`).
- Removed `read_seq_3`; replaced with simple sequences of `?`.
- Parser now reslices its state when consuming, rather than carrying a separate state and index variable.
- `read_digit` now uses `char::to_digit`.
- Added comments throughout, especially in the complex IPv6 parsing logic.
- Added comprehensive local unit tests for the parser to validate these changes.

4 years agoRollup merge of #72071 - PankajChaudhary5:ErrorCode-E0687, r=davidtwco
Manish Goregaokar [Wed, 1 Jul 2020 14:42:27 +0000 (07:42 -0700)]
Rollup merge of #72071 - PankajChaudhary5:ErrorCode-E0687, r=davidtwco

Added detailed error code explanation for issue E0687 in Rust compiler.

Added proper error explanation for issue E0687 in the Rust compiler.
Error Code E0687

Sub Part of Issue #61137

r? @GuillaumeGomez

4 years agoVerify UI tests work in pass=check mode
Mark Rousskov [Sat, 9 May 2020 17:26:18 +0000 (13:26 -0400)]
Verify UI tests work in pass=check mode

We do not test cross-compilation here as the PR builder lacks a sufficiently
recent LLVM to cross-compile to 32-bit linux. Once we bump the minimum LLVM
version to LLVM 9, this can use normal 32-bit linux.

4 years agoRemove `token::FlattenGroup`
Vadim Petrochenkov [Wed, 1 Jul 2020 10:16:49 +0000 (13:16 +0300)]
Remove `token::FlattenGroup`

4 years agoAuto merge of #73863 - pietroalbini:revert-8bc3122311d, r=Mark-Simulacrum
bors [Wed, 1 Jul 2020 10:17:39 +0000 (10:17 +0000)]
Auto merge of #73863 - pietroalbini:revert-8bc3122311d, r=Mark-Simulacrum

Revert "ci: allow gating gha on everything but macOS"

The macOS issue on GHA's side seems to be fixed, so this is not needed anymore.

r? @Mark-Simulacrum

4 years agoexpand: Stop using nonterminals for passing tokens to attribute and derive macros
Vadim Petrochenkov [Sun, 14 Jun 2020 11:30:42 +0000 (14:30 +0300)]
expand: Stop using nonterminals for passing tokens to attribute and derive macros

4 years agoStabilize `#[track_caller]`.
Adam Perry [Thu, 21 May 2020 23:43:39 +0000 (16:43 -0700)]
Stabilize `#[track_caller]`.

Does not yet make its constness stable, though. Use of
`Location::caller` in const contexts is still gated by
`#![feature(const_caller_location)]`.

4 years agoAuto merge of #73706 - Aaron1011:fix/proc-macro-foreign-span, r=petrochenkov
bors [Wed, 1 Jul 2020 01:04:31 +0000 (01:04 +0000)]
Auto merge of #73706 - Aaron1011:fix/proc-macro-foreign-span, r=petrochenkov

Serialize all foreign `SourceFile`s into proc-macro crate metadata

Normally, we encode a `Span` that references a foreign `SourceFile` by
encoding information about the foreign crate. When we decode this
`Span`, we lookup the foreign crate in order to decode the `SourceFile`.

However, this approach does not work for proc-macro crates. When we load
a proc-macro crate, we do not deserialzie any of its dependencies (since
a proc-macro crate can only export proc-macros). This means that we
cannot serialize a reference to an upstream crate, since the associated
metadata will not be available when we try to deserialize it.

This commit modifies foreign span handling so that we treat all foreign
`SourceFile`s as local `SourceFile`s when serializing a proc-macro.
All `SourceFile`s will be stored into the metadata of a proc-macro
crate, allowing us to cotinue to deserialize a proc-macro crate without
needing to load any of its dependencies.

Since the number of foreign `SourceFile`s that we load during a
compilation session may be very large, we only serialize a `SourceFile`
if we have also serialized a `Span` which requires it.

4 years agoMake #[target_feature] Fn trait error message less confusing
Caleb Zulawski [Tue, 30 Jun 2020 22:42:55 +0000 (18:42 -0400)]
Make #[target_feature] Fn trait error message less confusing

4 years agoAdd force-host to test aux file used by proc-macro
Aaron Hill [Tue, 30 Jun 2020 18:41:37 +0000 (14:41 -0400)]
Add force-host to test aux file used by proc-macro

4 years agoBring net/parser.rs up to modern up to date with modern rust patterns
Nathan West [Wed, 20 May 2020 03:26:49 +0000 (23:26 -0400)]
Bring net/parser.rs up to modern up to date with modern rust patterns

Made the following changes throughout the IP address parser:
- Replaced all uses of `is_some()` / `is_none()` with `?`.
- "Upgraded" loops wherever possible; ie, replace `while` with `for`, etc.
    - Removed all cases of manual index tracking / incrementing.
- Renamed several single-character variables with more expressive names.
- Replaced several manual control flow segments with equivalent adapters (such as `Option::filter`).
- Removed `read_seq_3`; replaced with simple sequences of `?`.
- Parser now reslices its state when consuming, rather than carrying a separate state and index variable.
- `read_digit` now uses `char::to_digit`.
- Removed unnecessary casts back and forth between u8 and u32
- Added comments throughout, especially in the complex IPv6 parsing logic.
- Added comprehensive local unit tests for the parser to validate these changes.

4 years agoSwitch crate_extern_paths to a query, and tweak wording.
Eric Huss [Sat, 27 Jun 2020 21:54:19 +0000 (14:54 -0700)]
Switch crate_extern_paths to a query, and tweak wording.

4 years agoAuto merge of #73456 - tmiasko:musl-libdir, r=Mark-Simulacrum
bors [Tue, 30 Jun 2020 15:41:50 +0000 (15:41 +0000)]
Auto merge of #73456 - tmiasko:musl-libdir, r=Mark-Simulacrum

bootstrap: Configurable musl libdir

Make it possible to customize the location of musl libdir using
musl-libdir in config.toml, e.g., to use lib64 instead of lib.

4 years agoProvide more information on duplicate lang item error.
Eric Huss [Wed, 17 Jun 2020 18:05:30 +0000 (11:05 -0700)]
Provide more information on duplicate lang item error.

4 years agoAuto merge of #73888 - RalfJung:miri, r=RalfJung
bors [Tue, 30 Jun 2020 11:35:40 +0000 (11:35 +0000)]
Auto merge of #73888 - RalfJung:miri, r=RalfJung

update Miri

Fixes https://github.com/rust-lang/rust/issues/73773
Cc @rust-lang/miri r? @ghost

4 years agoupdate Miri
Ralf Jung [Tue, 30 Jun 2020 09:00:51 +0000 (11:00 +0200)]
update Miri

4 years agoremove rustdoc warnings
Tshepang Lekhonkhobe [Tue, 30 Jun 2020 08:56:10 +0000 (10:56 +0200)]
remove rustdoc warnings

4 years agoupdate `equal_up_to_regions`
Bastian Kauschke [Tue, 30 Jun 2020 07:20:08 +0000 (09:20 +0200)]
update `equal_up_to_regions`

4 years agoremove unused `TypeError::ProjectionBoundsLength`
Bastian Kauschke [Wed, 24 Jun 2020 21:48:41 +0000 (23:48 +0200)]
remove unused `TypeError::ProjectionBoundsLength`

4 years agochange `skip_binder` to use T by value
Bastian Kauschke [Wed, 24 Jun 2020 21:40:33 +0000 (23:40 +0200)]
change `skip_binder` to use T by value

4 years agostop taking references in Relate
Bastian Kauschke [Wed, 24 Jun 2020 21:14:18 +0000 (23:14 +0200)]
stop taking references in Relate

4 years agoAuto merge of #73658 - dylanmckay:avr-update-llvm-submodule-with-picks, r=cuviper
bors [Tue, 30 Jun 2020 06:12:21 +0000 (06:12 +0000)]
Auto merge of #73658 - dylanmckay:avr-update-llvm-submodule-with-picks, r=cuviper

[AVR] Update the rust-lang/llvm-project submodule to include AVR fixes recently merged

This PR updates rustc's LLVM submodule to include new AVR-specific
fixes recently merged on the Rust LLVM 'rustc/10.0-2020-05-05' branch.

All of these cherry-picked commits exist in upstream LLVM and were
cherry-picked into Rust's LLVM fork in commit 6c040dd86ed.

Relates to https://github.com/rust-lang/llvm-project/pull/66

```
  |- 6c040dd86ed Merge pull request #66 from dylanmckay/avr-pick-upstream-llvm-fixes
    |- 12dfdd3aed7 [AVR] Rewrite the function calling convention.
    |- 118ac53f12b [AVR] Don't adjust for instruction size
    |- bc27c282e13 [AVR] Fix miscompilation of zext + add
    |- cfbe205a7e8 [AVR] Remove faulty stack pushing behavior
    |- 143e1469e96 [AVR] Fix stack size in functions with a frame pointer
    |- 6b2445d841e [LLVM][AVR] Support for R_AVR_6 fixup
    |- 93ee4da19cf [AVR]  Fix I/O instructions on XMEGA
    |- 962c2415ffb [AVR] Do not place functions in .progmem.data
    |- 65b8b170aef [AVR] Do not use divmod calls for bigger integers
    |- 93a3b595d1c [AVR] Generalize the previous interrupt bugfix to signal
    |- handlers too
    |- cc4286349b4 [AVR] Respect the 'interrupt' function attribute
    |- 954d0a92205 [AVR] Fix reads of uninitialized variables from constructor of AVRSubtarget
    |- 1c0ddae73c9 [AVR] Fix read of uninitialized variable AVRSubtarget:::ELFArch
    |- 0ed0823fe60 [AVR] Fix incorrect register state for LDRdPtr
    |- 96075fc433d [AVR] Don't adjust addresses by 2 for absolute values
    |- 6dfc55ba53b [AVR] Use correct register class for mul instructions
```

These changes include both correctness fixes and LLVM assertion error
fixes. Once all of these commits have been cherry-picked, all of the
LLVM plumbing for rust-lang/master to compile the AVR blink program will
be in place. Once this commit is merged, only PR rust-lang/rust#73270 will
be blocking successful compilation and emission of the AVR LED blink program.

4 years agoNormalize symbol ids to 0 in test stdout
Aaron Hill [Tue, 30 Jun 2020 02:02:57 +0000 (22:02 -0400)]
Normalize symbol ids to 0 in test stdout

The number of symbols we allocate (even early on) seems to be platform
dependent. We only care about hygiene for the purposes of this test,
so just set all of the symbol ids to zero

4 years agoSerialize all foreign `SourceFile`s into proc-macro crate metadata
Aaron Hill [Wed, 24 Jun 2020 17:16:36 +0000 (13:16 -0400)]
Serialize all foreign `SourceFile`s into proc-macro crate metadata

Normally, we encode a `Span` that references a foreign `SourceFile` by
encoding information about the foreign crate. When we decode this
`Span`, we lookup the foreign crate in order to decode the `SourceFile`.

However, this approach does not work for proc-macro crates. When we load
a proc-macro crate, we do not deserialzie any of its dependencies (since
a proc-macro crate can only export proc-macros). This means that we
cannot serialize a reference to an upstream crate, since the associated
metadata will not be available when we try to deserialize it.

This commit modifies foreign span handling so that we treat all foreign
`SourceFile`s as local `SourceFile`s when serializing a proc-macro.
All `SourceFile`s will be stored into the metadata of a proc-macro
crate, allowing us to cotinue to deserialize a proc-macro crate without
needing to load any of its dependencies.

Since the number of foreign `SourceFile`s that we load during a
compilation session may be very large, we only serialize a `SourceFile`
if we have also serialized a `Span` which requires it.

4 years agoAuto merge of #73374 - alexcrichton:compiler-bulitins-debug-assertions, r=Mark-Simulacrum
bors [Mon, 29 Jun 2020 21:42:43 +0000 (21:42 +0000)]
Auto merge of #73374 - alexcrichton:compiler-bulitins-debug-assertions, r=Mark-Simulacrum

rustbuild: Move compiler-builtins build logic to manifest

This commit moves the compiler-builtins-specific build logic from
`src/bootstrap/bin/rustc.rs` into the workspace `Cargo.toml`'s
`[profile]` configuration. Now that rust-lang/cargo#7253 is fixed we can
ensure that Cargo knows about debug assertions settings, and it can also
be configured to specifically disable debug assertions unconditionally
for compiler-builtins. This should improve rebuild logic when
debug-assertions settings change and also improve build-std integration
where Cargo externally now has an avenue to learn how to build
compiler-builtins as well.

4 years agoRevert "ci: allow gating gha on everything but macOS"
Pietro Albini [Mon, 29 Jun 2020 15:20:01 +0000 (17:20 +0200)]
Revert "ci: allow gating gha on everything but macOS"

This reverts commit 8bc3122311dd70eabb0020e67e850b2b7904d972.

4 years agorustbuild: Move compiler-builtins build logic to manifest
Alex Crichton [Mon, 15 Jun 2020 14:54:20 +0000 (07:54 -0700)]
rustbuild: Move compiler-builtins build logic to manifest

This commit moves the compiler-builtins-specific build logic from
`src/bootstrap/bin/rustc.rs` into the workspace `Cargo.toml`'s
`[profile]` configuration. Now that rust-lang/cargo#7253 is fixed we can
ensure that Cargo knows about debug assertions settings, and it can also
be configured to specifically disable debug assertions unconditionally
for compiler-builtins. This should improve rebuild logic when
debug-assertions settings change and also improve build-std integration
where Cargo externally now has an avenue to learn how to build
compiler-builtins as well.

4 years agoAuto merge of #73391 - pickfire:liballoc-panic-doc, r=Mark-Simulacrum
bors [Mon, 29 Jun 2020 12:00:31 +0000 (12:00 +0000)]
Auto merge of #73391 - pickfire:liballoc-panic-doc, r=Mark-Simulacrum

Add liballoc doc panic detail according to RawVec

4 years agoAuto merge of #73032 - yoshuawuyts:stabilize-leading_trailing_ones, r=Amanieu
bors [Mon, 29 Jun 2020 00:43:19 +0000 (00:43 +0000)]
Auto merge of #73032 - yoshuawuyts:stabilize-leading_trailing_ones, r=Amanieu

stabilize leading_trailing_ones

This PR stabilizes the `leading_trailing_ones` feature. It's been available on nightly since the start of the year, and hasn't had any issues since. It seems unlikely we'll want to change this, so following up on @djc's suggestion in https://github.com/rust-lang/rust/issues/57969#issuecomment-638405264 I'd like to put forward this PR to stabilize the feature and make it part of `1.46.0`. Thanks!

cc/ @djc @rust-lang/libs

4 years agoAuto merge of #72437 - ecstatic-morse:stabilize-const-if-match, r=oli-obk
bors [Sun, 28 Jun 2020 20:47:52 +0000 (20:47 +0000)]
Auto merge of #72437 - ecstatic-morse:stabilize-const-if-match, r=oli-obk

Stabilize `#![feature(const_if_match)]`

Quoting from the [stabilization report](https://github.com/rust-lang/rust/issues/49146#issuecomment-616301045):

> `if` and `match` expressions as well as the short-circuiting logic operators `&&` and `||` will become legal in all [const contexts](https://doc.rust-lang.org/reference/const_eval.html#const-context). A const context is any of the following:
>
> - The initializer of a `const`, `static`, `static mut` or enum discriminant.
> - The body of a `const fn`.
> - The value of a const generic (nightly only).
> - The length of an array type (`[u8; 3]`) or an array repeat expression (`[0u8; 3]`).
>
> Furthermore, the short-circuiting logic operators will no longer be lowered to their bitwise equivalents (`&` and `|` respectively) in `const` and `static` initializers (see #57175). As a result, `let` bindings can be used alongside short-circuiting logic in those initializers.

Resolves #49146.

Ideally, we would resolve :whale: #66753 before this lands on stable, so it might be worth pushing this back a release. Also, this means we should get the process started for #52000, otherwise people will have no recourse except recursion for iterative `const fn`.

r? @oli-obk

4 years agoEdit cursor.prev() method docs in lexer
pierwill [Sun, 28 Jun 2020 19:32:58 +0000 (12:32 -0700)]
Edit cursor.prev() method docs in lexer

Fix missing punctuation

4 years agoFix small nits
Alexis Bourget [Sun, 28 Jun 2020 18:48:53 +0000 (20:48 +0200)]
Fix small nits

4 years agoApply suggestions, reformulating some paragraphs and improving some examples
Alexis Bourget [Sun, 28 Jun 2020 18:20:32 +0000 (20:20 +0200)]
Apply suggestions, reformulating some paragraphs and improving some examples

4 years agoUse `LocalDefId` in HIR const-checker
Dylan MacKenzie [Sun, 28 Jun 2020 17:13:04 +0000 (10:13 -0700)]
Use `LocalDefId` in HIR const-checker

4 years agoRemove `ignore-tidy-filelength`
Dylan MacKenzie [Fri, 26 Jun 2020 20:11:24 +0000 (13:11 -0700)]
Remove `ignore-tidy-filelength`

4 years agoUpdate tests
Dylan MacKenzie [Fri, 26 Jun 2020 00:43:48 +0000 (17:43 -0700)]
Update tests

4 years agoStop checking for `while` and `loop` in a const context
Dylan MacKenzie [Fri, 26 Jun 2020 00:41:32 +0000 (17:41 -0700)]
Stop checking for `while` and `loop` in a const context

4 years agoRemove uses of `const_loop` in `rustc`
Dylan MacKenzie [Fri, 26 Jun 2020 00:40:56 +0000 (17:40 -0700)]
Remove uses of `const_loop` in `rustc`

4 years agoMark `const_loop` feature gate as accepted
Dylan MacKenzie [Fri, 26 Jun 2020 00:40:06 +0000 (17:40 -0700)]
Mark `const_loop` feature gate as accepted

4 years agoRequire `allow_internal_unstable` in HIR const-checker
Dylan MacKenzie [Thu, 21 May 2020 21:23:50 +0000 (14:23 -0700)]
Require `allow_internal_unstable` in HIR const-checker

4 years agoRemove `const_if_match` from unstable book
Dylan MacKenzie [Thu, 21 May 2020 20:35:43 +0000 (13:35 -0700)]
Remove `const_if_match` from unstable book

4 years agoUpdate tests
Dylan MacKenzie [Thu, 21 May 2020 19:49:38 +0000 (12:49 -0700)]
Update tests

4 years agoHIR const-checking
Dylan MacKenzie [Thu, 21 May 2020 19:47:09 +0000 (12:47 -0700)]
HIR const-checking

4 years agoMIR const-checking
Dylan MacKenzie [Thu, 21 May 2020 19:46:49 +0000 (12:46 -0700)]
MIR const-checking

4 years agoRemove `const_if_match` feature gate from libraries
Dylan MacKenzie [Thu, 21 May 2020 19:18:32 +0000 (12:18 -0700)]
Remove `const_if_match` feature gate from libraries

4 years agoRemove `control_flow_destroyed` and properly lower `&&` and `||`
Dylan MacKenzie [Thu, 21 May 2020 19:12:46 +0000 (12:12 -0700)]
Remove `control_flow_destroyed` and properly lower `&&` and `||`

4 years agoMark feature gate as accepted
Dylan MacKenzie [Thu, 21 May 2020 18:44:45 +0000 (11:44 -0700)]
Mark feature gate as accepted

4 years agoAuto merge of #73838 - Manishearth:rollup-jj57e84, r=Manishearth
bors [Sun, 28 Jun 2020 16:44:29 +0000 (16:44 +0000)]
Auto merge of #73838 - Manishearth:rollup-jj57e84, r=Manishearth

Rollup of 9 pull requests

Successful merges:

 - #73577 (Add partition_point)
 - #73757 (Const prop: erase all block-only locals at the end of every block)
 - #73774 (Make liveness more precise for assignments to fields)
 - #73795 (Add some `const_compare_raw_pointers`-related regression tests)
 - #73800 (Forward Hash::write_iN to Hash::write_uN)
 - #73813 (Rename two `Resolver` traits)
 - #73817 (Rename clashing_extern_decl to clashing_extern_declarations.)
 - #73826 (Fix docstring typo)
 - #73833 (Remove GlobalCtxt::enter_local)

Failed merges:

r? @ghost

4 years agoRollup merge of #73833 - bjorn3:remove_gcx_enter_local, r=matthewjasper
Manish Goregaokar [Sun, 28 Jun 2020 15:30:36 +0000 (08:30 -0700)]
Rollup merge of #73833 - bjorn3:remove_gcx_enter_local, r=matthewjasper

Remove GlobalCtxt::enter_local

4 years agoRollup merge of #73826 - cjrh:cjrh-patch-1, r=jonas-schievink
Manish Goregaokar [Sun, 28 Jun 2020 15:30:34 +0000 (08:30 -0700)]
Rollup merge of #73826 - cjrh:cjrh-patch-1, r=jonas-schievink

Fix docstring typo

4 years agoRollup merge of #73817 - jumbatm:rename-to-clashing-extern-declarations, r=petrochenkov
Manish Goregaokar [Sun, 28 Jun 2020 15:30:33 +0000 (08:30 -0700)]
Rollup merge of #73817 - jumbatm:rename-to-clashing-extern-declarations, r=petrochenkov

Rename clashing_extern_decl to clashing_extern_declarations.

Rename clashing_extern_decl to clashing_extern_declarations to bring in-line with lint naming conventions.

Fixes #73802.

r? @petrochenkov

4 years agoRollup merge of #73813 - petrochenkov:restrait, r=davidtwco
Manish Goregaokar [Sun, 28 Jun 2020 15:30:31 +0000 (08:30 -0700)]
Rollup merge of #73813 - petrochenkov:restrait, r=davidtwco

Rename two `Resolver` traits

`trait Resolver` -> `trait ResolverExpand` for the resolver interface available from expansion.
`trait Resolver` -> `trait ResolverAstLowering` for the resolver interface available from AST lowering.

Addresses https://github.com/rust-lang/rust/pull/73587#discussion_r443242556

4 years agoRollup merge of #73800 - nikic:hash_i, r=kennytm
Manish Goregaokar [Sun, 28 Jun 2020 15:30:29 +0000 (08:30 -0700)]
Rollup merge of #73800 - nikic:hash_i, r=kennytm

Forward Hash::write_iN to Hash::write_uN

The `Hasher::write_iN()` methods should forward to `Hasher::write_uN()`, because some Hasher implementations implement only the `write_uN()` variants, with the expectation that `write_iN()` will use the same implementation. Most notably, this is the case for the [FxHasher](https://github.com/rust-lang/rustc-hash/blob/5e09ea0a1c7ab7e4f9e27771f5a0e5a36c58d1bb/src/lib.rs#L111) used by rustc itself.

This used to be the case previously, but was broken in #59982. As the PR description makes no mention of this particular change, I assume it was unintentional.

In a local test, this mitigates the regression from #73526 on at least one test-case (cc @cuviper), because we're no longer at the mercy of `FxHasher::write()` getting inlined to get reasonable performance.

4 years agoRollup merge of #73795 - JohnTitor:tests-for-const-fn-ptrs, r=oli-obk
Manish Goregaokar [Sun, 28 Jun 2020 15:30:27 +0000 (08:30 -0700)]
Rollup merge of #73795 - JohnTitor:tests-for-const-fn-ptrs, r=oli-obk

Add some `const_compare_raw_pointers`-related regression tests

Closes #71381
Closes #71382
Closes #71611
Closes #72352

r? @oli-obk, the author of #73398

4 years agoRollup merge of #73774 - ecstatic-morse:liveness-of-projections, r=oli-obk
Manish Goregaokar [Sun, 28 Jun 2020 15:30:25 +0000 (08:30 -0700)]
Rollup merge of #73774 - ecstatic-morse:liveness-of-projections, r=oli-obk

Make liveness more precise for assignments to fields

Previously, we were too conservative and `x.field = 4` was treated as a "use" of `x`. Now it neither kills `x` (since other fields of `x` may still be live) nor marks it as live.

cc @jonas-schievink, who ran into this problem.

4 years agoRollup merge of #73757 - oli-obk:const_prop_hardening, r=wesleywiser
Manish Goregaokar [Sun, 28 Jun 2020 15:30:24 +0000 (08:30 -0700)]
Rollup merge of #73757 - oli-obk:const_prop_hardening, r=wesleywiser

Const prop: erase all block-only locals at the end of every block

I messed up this erasure in https://github.com/rust-lang/rust/pull/73656#discussion_r446040140. I think it is too fragile to have the previous scheme. Let's benchmark the new scheme and see what happens.

r? @wesleywiser

cc @felix91gr

4 years agoRollup merge of #73577 - VillSnow:master, r=Amanieu
Manish Goregaokar [Sun, 28 Jun 2020 15:30:22 +0000 (08:30 -0700)]
Rollup merge of #73577 - VillSnow:master, r=Amanieu

Add partition_point

Add partition_point in C++.
Although existing binary_search in rust does not suitable when the slice has multiple hits,
this function returns exact point of partition.
The definition of this function is very clear and able to accept general matter, therefore you can easily get index which you want like lower/upper_bound.

https://github.com/rust-lang/rfcs/issues/2184

4 years agoSplit and expand nonstandard-style lints unicode unit test.
Charles Lew [Sun, 28 Jun 2020 15:28:43 +0000 (23:28 +0800)]
Split and expand nonstandard-style lints unicode unit test.

4 years agoApply suggestions from code review
Alexis Bourget [Sun, 28 Jun 2020 15:20:27 +0000 (17:20 +0200)]
Apply suggestions from code review

4 years agoUpdate src/libcore/slice/mod.rs
VillSnow [Sun, 28 Jun 2020 12:31:05 +0000 (21:31 +0900)]
Update src/libcore/slice/mod.rs

Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
4 years agoErase all block-only locals at the end of every block, even if they have not been...
Oliver Scherer [Fri, 26 Jun 2020 09:02:43 +0000 (11:02 +0200)]
Erase all block-only locals at the end of every block, even if they have not been touched.

4 years agoRemove GlobalCtxt::enter_local
bjorn3 [Sun, 28 Jun 2020 09:43:10 +0000 (11:43 +0200)]
Remove GlobalCtxt::enter_local

4 years agoUpdate tracking issue number
VillSnow [Sun, 28 Jun 2020 08:39:03 +0000 (17:39 +0900)]
Update tracking issue number

4 years agoAuto merge of #73830 - Manishearth:rollup-8k68ysm, r=Manishearth
bors [Sun, 28 Jun 2020 08:26:22 +0000 (08:26 +0000)]
Auto merge of #73830 - Manishearth:rollup-8k68ysm, r=Manishearth

Rollup of 10 pull requests

Successful merges:

 - #72796 (MIR sanity check: validate types on assignment)
 - #73243 (Add documentation to point to `File::open` or `OpenOptions::open` instead of `is_file` to check read/write possibility)
 - #73525 (Prepare for LLVM 11)
 - #73672 (Adds a clearer message for when the async keyword is missing from a f…)
 - #73708 (Explain move errors that occur due to method calls involving `self` (take two))
 - #73758 (improper_ctypes: fix remaining `Reveal:All`)
 - #73763 (errors: use `-Z terminal-width` in JSON emitter)
 - #73796 (replace more `DefId`s with `LocalDefId`)
 - #73797 (fix typo in self-profile.md)
 - #73809 (Add links to fs::DirEntry::metadata)

Failed merges:

r? @ghost

4 years agoUpdate doc comment
VillSnow [Sun, 28 Jun 2020 07:45:56 +0000 (16:45 +0900)]
Update doc comment

4 years agoMerge branch 'master' of https://github.com/VillSnow/rust
VillSnow [Sun, 28 Jun 2020 07:27:41 +0000 (16:27 +0900)]
Merge branch 'master' of https://github.com/VillSnow/rust

4 years agoUpdate src/libcore/slice/mod.rs
VillSnow [Sun, 28 Jun 2020 07:26:47 +0000 (16:26 +0900)]
Update src/libcore/slice/mod.rs

Co-authored-by: Lukas Kalbertodt <lukas.kalbertodt@gmail.com>
4 years agoAdd comment on use of unsafe
VillSnow [Sun, 28 Jun 2020 07:25:33 +0000 (16:25 +0900)]
Add comment on use of unsafe

4 years agoFix comma in debug_assert! docs
pierwill [Sun, 28 Jun 2020 07:06:48 +0000 (00:06 -0700)]
Fix comma in debug_assert! docs

4 years agoRollup merge of #73809 - robyoung:docs/add-links-to-DirEntry-metadata, r=hanna-kruppe
Manish Goregaokar [Sun, 28 Jun 2020 05:30:06 +0000 (22:30 -0700)]
Rollup merge of #73809 - robyoung:docs/add-links-to-DirEntry-metadata, r=hanna-kruppe

Add links to fs::DirEntry::metadata

`fs::DirEntry::metadata` doesn't traverse symlinks. It is not immediately clear what to do if you do want to traverse symlinks. This change adds links to the two other `metadata` functions that will follow symlinks.

4 years agoRollup merge of #73797 - atetubou:patch-1, r=jonas-schievink
Manish Goregaokar [Sun, 28 Jun 2020 05:30:05 +0000 (22:30 -0700)]
Rollup merge of #73797 - atetubou:patch-1, r=jonas-schievink

fix typo in self-profile.md