Commit graph

122721 commits

Author SHA1 Message Date
Wesley Wiser
24bfdc98e9 Fix debuginfo so that it points to the correct local 2020-07-02 21:11:14 -04:00
Wesley Wiser
9248d90d20 [mir-opt] Prevent mis-optimization when SimplifyArmIdentity runs
If temporaries are used beyond just the temporary chain, then we can't
optimize out the reads and writes.
2020-07-02 21:02:57 -04:00
Wesley Wiser
e3f599c15c Add test for simplify-try misoptimization 2020-07-02 20:54:13 -04:00
bors
9491f18c5d 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
2020-07-01 21:01:36 +00:00
bors
f781babf87 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
2020-07-01 14:45:56 +00:00
Manish Goregaokar
c9b3e86977
Rollup merge of #73847 - pierwill:pierwill-cursor-doc, r=matthewjasper
Edit cursor.prev() method docs in lexer

Fix missing punctuation
2020-07-01 07:43:02 -07:00
Manish Goregaokar
affd950ed2
Rollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett
Fix comma in debug_assert! docs
2020-07-01 07:43:00 -07:00
Manish Goregaokar
db900d4ef3
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.
2020-07-01 07:42:58 -07:00
Manish Goregaokar
f213957c2e
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`.
2020-07-01 07:42:56 -07:00
Manish Goregaokar
178b0c2e99
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
2020-07-01 07:42:54 -07:00
Manish Goregaokar
ec41d01d4f
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
2020-07-01 07:42:52 -07:00
Manish Goregaokar
d6bee55855
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
2020-07-01 07:42:50 -07:00
Manish Goregaokar
3951a98ec5
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.
2020-07-01 07:42:48 -07:00
Manish Goregaokar
8ac17d14aa
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
2020-07-01 07:42:46 -07:00
Manish Goregaokar
9c6548614b
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 🤔 feel free to reassign
2020-07-01 07:42:44 -07:00
Manish Goregaokar
6556f26991
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:🆕:<i32>()) as *mut i32;
    *ptr = 5;
    let x = Box::from_raw(ptr);
}
```
and tried to generalize it by writing,
```
    let layout = Layout:🆕:<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.
2020-07-01 07:42:42 -07:00
Manish Goregaokar
0eb9799695
Rollup merge of #73649 - Anirban166:patch-1, r=steveklabnik
Fix sentence structure

Fixed grammar and sentence structure on appropriate instances.
2020-07-01 07:42:40 -07:00
Manish Goregaokar
39209ac14e
Rollup merge of #73548 - tshepang:fix-rustdoc-warnings, r=ecstatic-morse
remove rustdoc warnings
2020-07-01 07:42:38 -07:00
Manish Goregaokar
b7d13c0604
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.
2020-07-01 07:42:36 -07:00
Manish Goregaokar
ae79c30d74
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
2020-07-01 07:42:33 -07:00
Manish Goregaokar
33f8ce287a
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, 3024c1434a, 4f3ab4986e, 79f876495b), 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.
2020-07-01 07:42:32 -07:00
Manish Goregaokar
128fa2b981
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
2020-07-01 07:42:27 -07:00
Mark Rousskov
562e0151d1 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.
2020-07-01 10:07:52 -04:00
bors
1505c12395 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
2020-07-01 10:17:39 +00:00
Adam Perry
f07d10db7c 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)]`.
2020-06-30 22:22:32 -07:00
bors
d462551a86 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.
2020-07-01 01:04:31 +00:00
Aaron Hill
37a48fa838
Add force-host to test aux file used by proc-macro 2020-06-30 16:10:56 -04:00
Nathan West
3ab7ae39ec
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.
2020-06-30 11:44:14 -07:00
bors
16957bd4d3 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.
2020-06-30 15:41:50 +00:00
bors
e070765f6e 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
2020-06-30 11:35:40 +00:00
Ralf Jung
2d9ed15c07 update Miri 2020-06-30 11:00:51 +02:00
Tshepang Lekhonkhobe
f3645ca6ca remove rustdoc warnings 2020-06-30 10:58:23 +02:00
Bastian Kauschke
69e49908f9 update equal_up_to_regions 2020-06-30 09:20:08 +02:00
Bastian Kauschke
f632bd1a50 remove unused TypeError::ProjectionBoundsLength 2020-06-30 09:13:56 +02:00
Bastian Kauschke
71b45b97d3 change skip_binder to use T by value 2020-06-30 09:13:56 +02:00
Bastian Kauschke
1d7ba5fcb4 stop taking references in Relate 2020-06-30 09:13:56 +02:00
bors
665190b346 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.
2020-06-30 06:12:21 +00:00
Aaron Hill
a7c408d6ac
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
2020-06-29 22:04:10 -04:00
Aaron Hill
334373324d
Serialize all foreign SourceFiles 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.
2020-06-29 21:45:42 -04:00
bors
a1528c432e 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.
2020-06-29 21:42:43 +00:00
Pietro Albini
c8f2dd0d3b
Revert "ci: allow gating gha on everything but macOS"
This reverts commit 8bc3122311.
2020-06-29 17:20:01 +02:00
Alex Crichton
3dfbf0bc73 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.
2020-06-29 06:53:56 -07:00
bors
0ca7f74dbd Auto merge of #73391 - pickfire:liballoc-panic-doc, r=Mark-Simulacrum
Add liballoc doc panic detail according to RawVec
2020-06-29 12:00:31 +00:00
bors
c86039b333 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
2020-06-29 00:43:19 +00:00
bors
c977b8775d 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 🐳 #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
2020-06-28 20:47:52 +00:00
pierwill
40c74a7eb7 Edit cursor.prev() method docs in lexer
Fix missing punctuation
2020-06-28 13:24:17 -07:00
Alexis Bourget
4224313e2b Fix small nits 2020-06-28 20:48:53 +02:00
Alexis Bourget
dfd454bd38 Apply suggestions, reformulating some paragraphs and improving some examples 2020-06-28 20:20:32 +02:00
Dylan MacKenzie
8509b6951a Use LocalDefId in HIR const-checker 2020-06-28 10:13:04 -07:00
Dylan MacKenzie
1b28f94fbb Remove ignore-tidy-filelength 2020-06-28 10:08:12 -07:00