Commit graph

30568 commits

Author SHA1 Message Date
Josh White
d705ad28a0 Merge branch 'master' of https://github.com/jwhite927/rust into E0637 2020-02-08 16:30:40 -05:00
bors
a19edd6b16 Auto merge of #68802 - eddyb:debuginfo-there-can-only-be-one-arg, r=nagisa
rustc_codegen_ssa: don't treat inlined variables as debuginfo arguments.

Fixes #67586 by limiting `ArgumentVariable` special-casing to `VarDebugInfo` entries that are in `OUTERMOST_SOURCE_SCOPE`, i.e. the function's own argument scope.
That excludes `VarDebugInfo` from inlined callees, which can also point to the caller's argument locals.

This is a snippet from the optimized MIR (including inlining) of the testcase:
```rust
fn  foo(_1: usize) -> usize {
    debug bar => _1;                     // in scope 0 at ./example.rs:2:12: 2:15
    let mut _0: usize;                   // return place in scope 0 at ./example.rs:2:27: 2:32
    scope 1 {
        debug x => _1;                   // in scope 1 at /rustc/9ed29b6ff6aa2e048b09c27af8f62ee3040bdb37/src/libcore/convert/mod.rs:106:26: 106:27
    }
```
`scope 1` is from inlining the `identity` call, and `debug x => _1;` comes from the body of `core::convert::identity`, so they are now ignored for the purposes of determining the `ArgumentVariable` debuginfo associated to `_1`.
2020-02-08 21:28:05 +00:00
bors
07a34df18b Auto merge of #68452 - msizanoen1:riscv-abi, r=nagisa,eddyb
Implement proper C ABI lowering for RISC-V

This is necessary for full RISC-V psABI compliance when passing argument across C FFI boundary.

cc @lenary
2020-02-08 18:10:48 +00:00
bors
85ffd44d3d Auto merge of #68443 - eddyb:abi-compat-enum, r=nagisa
rustc_target: treat enum variants like union members, in call ABIs.

Fixes #68190, by handling non-C-like `enum`s as-if they were an `union` of `struct`s, in call ABIs.
Tests were provided by @sw17ch, from theirs and @bitwalker's original examples.

cc @nagisa @rkruppe
2020-02-08 13:02:21 +00:00
Eduard-Mihai Burtescu
d20e4aa8e3 test: use all: $(call NATIVE_STATICLIB,test) to build a C lib. 2020-02-08 13:40:50 +02:00
Josh White
69075f065c Merge branch 'master' of https://github.com/jwhite927/rust into E0637 2020-02-07 23:56:44 -05:00
Eduard-Mihai Burtescu
d69b3b16e5 test: address comments and pacify the merciless tidy. 2020-02-08 06:52:09 +02:00
Eduard-Mihai Burtescu
8f81593d6c rustc_target: switch homogeneous_aggregate to returning Result. 2020-02-08 06:50:59 +02:00
John VanEnk
1d28952631 Add non-C-like enumeration tests on Rust->C calls to the abi-sysv64-arg-passing test. 2020-02-08 06:50:59 +02:00
John VanEnk
3b23b9864c Two test cases where Rust calls C using enums by value
One calls into C functions passing non-c-like enumerations by
value. The other calls into C expecting non-C-like enumerations as
returns.

These test cases are based on the tests provided by @bitwalker on
issue #68190. The original tests were provided at:
2688d5c672
2020-02-08 06:50:59 +02:00
John VanEnk
26bb0f15e7 Add similar examples that work to each test. 2020-02-08 06:17:03 +02:00
John VanEnk
f1b52b34f2 Add a test that demonstrates an incorrect return value when calling into rust with non-c-like-enums. 2020-02-08 06:17:03 +02:00
John VanEnk
cd5ad993d0 Add a test that demonstrates a segfault when calling into rust with non-c-like-enum. 2020-02-08 06:17:02 +02:00
bors
6cad7542da Auto merge of #68358 - matthewjasper:spec-fix, r=nikomatsakis
Remove some unsound specializations

This removes the unsound and exploitable specializations in the standard library

* The `PartialEq` and `Hash` implementations for  `RangeInclusive` are changed to avoid specialization.
* The `PartialOrd` specialization for slices now specializes on a limited set of concrete types.
* Added some tests for the soundness problems.
2020-02-08 03:46:56 +00:00
bors
8498c5f5b0 Auto merge of #65232 - nikomatsakis:lazy-norm-anon-const-push-2, r=matthewjasper
replace the leak check with universes, take 2

This PR is an attempt to revive the "universe-based region check", which is an important step towards lazy normalization. Unlike before, we also modify the definition of `'empty` so that it is indexed by a universe. This sidesteps some of the surprising effects we saw before -- at the core, we no longer think that `exists<'a> { forall<'b> { 'b: 'a } }` is solveable. The new region lattice looks like this:

```
static ----------+-----...------+       (greatest)
|                |              |
early-bound and  |              |
free regions     |              |
|                |              |
scope regions    |              |
|                |              |
empty(root)   placeholder(U1)   |
|            /                  |
|           /         placeholder(Un)
empty(U1) --         /
|                   /
...                /
|                 /
empty(Un) --------                      (smallest)
```
This PR has three effects:

* It changes a fair number of error messages, I think for the better.
* It fixes a number of bugs. The old algorithm was too conservative and caused us to reject legal subtypings.
* It also causes two regressions (things that used to compile, but now do not).
    * `coherence-subtyping.rs` gets an additional error. This is expected.
    * `issue-57639.rs` regresses as before, for the reasons covered in #57639.

Both of the regressions stem from the same underlying property: without the leak check, the instantaneous "subtype" check is not able to tell whether higher-ranked subtyping will succeed or not. In both cases, we might be able to fix the problem by doing a 'leak-check like change' at some later point (e.g., as part of coherence).

This is a draft PR because:

* I didn't finish ripping out the leak-check completely.
* We might want to consider a crater run before landing this.
* We might want some kind of design meeting to cover the overall strategy.
* I just remembered I never finished 100% integrating this into the canonicalization code.
* I should also review what happens in NLL region checking -- it probably still has a notion of bottom (empty set).

r? @matthewjasper
2020-02-07 23:08:52 +00:00
Mikhail Babenko
953f6ecb6a fix lifetime shadowing check in GATs 2020-02-08 01:12:41 +03:00
Josh White
8b77f8688e performed --bless of 15 ui tests affected 2020-02-07 12:44:31 -05:00
Dylan DPC
f734e47516
Rollup merge of #68909 - tmandry:panic-abort-nocapture, r=alexcrichton
Respect --nocapture in panic=abort test mode

r? @alexcrichton
2020-02-07 17:00:21 +01:00
Dylan DPC
90f6267dea
Rollup merge of #68889 - Zoxc:hir-krate, r=eddyb
Move the `hir().krate()` method to a query and remove the `Krate` dep node

r? @eddyb cc @michaelwoerister
2020-02-07 17:00:19 +01:00
Dylan DPC
2f1eaeea77
Rollup merge of #68164 - tmiasko:no-sanitize, r=nikomatsakis
Selectively disable sanitizer instrumentation

Add `no_sanitize` attribute that allows to opt out from sanitizer
instrumentation in an annotated function.
2020-02-07 17:00:16 +01:00
Mikhail Babenko
ab6ea2bba7 add regression test 2020-02-07 18:18:07 +03:00
bjorn3
5827d78f18 Fix test 2020-02-07 14:00:08 +01:00
Tyler Mandry
861b328f7d Respect --nocapture in panic=abort test mode 2020-02-06 14:43:53 -08:00
Dylan DPC
2d8f6389d0
Rollup merge of #68524 - jonas-schievink:generator-resume-arguments, r=Zoxc
Generator Resume Arguments

cc https://github.com/rust-lang/rust/issues/43122 and https://github.com/rust-lang/rust/issues/56974

Blockers:
* [x] Fix miscompilation when resume argument is live across a yield point (https://github.com/rust-lang/rust/pull/68524#issuecomment-578459069)
* [x] Fix 10% compile time regression in `await-call-tree` benchmarks (https://github.com/rust-lang/rust/pull/68524#issuecomment-578487162)
  * [x] Fix remaining 1-3% regression (https://github.com/rust-lang/rust/pull/68524#issuecomment-579566255) - resolved (https://github.com/rust-lang/rust/pull/68524#issuecomment-581144901)
* [x] Make dropck rules account for resume arguments (https://github.com/rust-lang/rust/pull/68524#issuecomment-578541137)

Follow-up work:
* Change async/await desugaring to make use of this feature
* Rewrite [`box_region.rs`](3d8778d767/src/librustc_data_structures/box_region.rs) to use resume arguments (this shows up in profiles too)
2020-02-06 22:38:33 +01:00
Niko Matsakis
4b3c66d2c3 make lint warn by default 2020-02-06 16:29:32 -05:00
Mark Rousskov
178de46116 Add primitive module to libcore/std
This re-exports the primitive types from libcore at `core::primitive` to allow
macro authors to have a reliable location to use them from.
2020-02-06 16:29:01 -05:00
Niko Matsakis
363fabaf1f lint impls that will become incoherent when leak-check is removed 2020-02-06 15:58:01 -05:00
Niko Matsakis
03b2fff40e don't mention specific region numbers in the ~ERROR message 2020-02-06 15:51:02 -05:00
Eduard-Mihai Burtescu
96af578cd9 tests: add a revision to macro_backtrace without -Zmacro-backtrace. 2020-02-06 21:46:42 +02:00
Eduard-Mihai Burtescu
4c7eb59e81 rustc_macros: don't limit the -Zmacro-backtrace suggestion to extern macros. 2020-02-06 21:46:38 +02:00
Eduard-Mihai Burtescu
ab080973cb rustc_errors: hide "in this macro invocation" when redundant, more explicitly. 2020-02-06 21:32:07 +02:00
Eduard-Mihai Burtescu
f6fc80206e rustc: rename -Zexternal-macro-backtrace to -Zmacro-backtrace. 2020-02-06 21:32:07 +02:00
Dylan DPC
1ad674afcf
Rollup merge of #68880 - JohnTitor:issue-non-zero, r=Dylan-DPC
Forbid using `0` as issue number

Fixes #67496

r? @Centril
2020-02-06 15:37:51 +01:00
Dylan DPC
ec24833325
Rollup merge of #68845 - dwrensha:fix-68783, r=estebank
stop using BytePos for computing spans in librustc_parse/parser/mod.rs

Computing spans using logic such as `self.token.span.lo() + BytePos(1)` can cause internal compiler errors like #68730 when non-ascii characters are given as input.

#68735 partially addressed this problem, but only for one case. Moreover, its usage of `next_point()` does not actually align with what `bump_with()` expects. For example, given the token `>>=`, we should pass the span consisting of the final two characters `>=`, but `next_point()` advances the span beyond the end of the `=`.

This pull request instead computes the start of the new span by doing `start_point(self.token.span).hi()`. This matches `self.token.span.lo() + BytePos(1)` in the common case where the characters are ascii, and it gracefully handles multibyte characters.

Fixes #68783.
2020-02-06 15:37:47 +01:00
Dylan DPC
16e4e8f2de
Rollup merge of #68844 - euclio:debug-impl-def-path, r=petrochenkov
use def_path_str for missing_debug_impls message

The lint message will now use the full, correct path to the `Debug`
trait, even in `no_std`.
2020-02-06 15:37:46 +01:00
Dylan DPC
226a8e2932
Rollup merge of #68842 - Centril:issue-68785, r=estebank
or_patterns: add regression test for #68785

Fixes https://github.com/rust-lang/rust/issues/68785.

(Fixed by https://github.com/rust-lang/rust/pull/67668.)

cc https://github.com/rust-lang/rust/issues/54883
r? @estebank
2020-02-06 15:37:44 +01:00
Dylan DPC
424304a14f
Rollup merge of #68788 - Centril:unified-fn-bodies, r=petrochenkov
Towards unified `fn` grammar

Part of https://github.com/rust-lang/rust/pull/68728.

- Syntactically, `fn` items in `extern { ... }` blocks can now have bodies (`fn foo() { ... }` as opposed to `fn foo();`). As above, we use semantic restrictions instead.

- Syntactically, `fn` items in free contexts (directly in a file or a module) can now be without bodies (`fn foo();` as opposed to `fn foo() { ... }`. As above, we use semantic restrictions instead, including for non-ident parameter patterns.

- We move towards unifying the `fn` front matter; this is fully realized in https://github.com/rust-lang/rust/pull/68728.

r? @petrochenkov
2020-02-06 15:37:41 +01:00
Dylan DPC
bf13861e6c
Rollup merge of #68751 - Tyg13:unused_parens_const_static, r=Centril
Implement `unused_parens` for `const` and `static` items

Fixes #67942
2020-02-06 15:37:39 +01:00
Jonas Schievink
9d7b214ac6 Ignore panic-drops-resume.rs on wasm/emscripten
It does not have unwinding support
2020-02-06 15:00:36 +01:00
John Kåre Alsaker
20ce2f6038 Move the krate method to Hir and remove the Krate dep node 2020-02-06 13:23:32 +01:00
Yuki Okushi
bf269335d0 Forbid using 0 as issue number 2020-02-06 16:19:39 +09:00
bors
333c32a5a4 Auto merge of #68583 - estebank:hrlt, r=oli-obk
Account for HR lifetimes when suggesting introduction of named lifetime

```
error[E0106]: missing lifetime specifier
 --> src/test/ui/suggestions/fn-missing-lifetime-in-item.rs:2:32
  |
2 | struct S2<F: Fn(&i32, &i32) -> &i32>(F);
  |                 ----  ----     ^ expected named lifetime parameter
  |
  = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from argument 1 or argument 2
  = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
help: consider making the bound lifetime-generic with a new `'a` lifetime
  |
2 | struct S2<F: for<'a> Fn(&'a i32, &'a i32) -> &'a i32>(F);
  |              ^^^^^^^    ^^^^^^^  ^^^^^^^     ^^^
help: consider introducing a named lifetime parameter
  |
2 | struct S2<'a, F: Fn(&'a i32, &'a i32) -> &'a i32>(F);=
  |           ^^^       ^^^^^^^  ^^^^^^^     ^^^
```

Follow up to #68267. Addresses the diagnostics part of #49287.
2020-02-06 05:19:52 +00:00
Tyler Lanphear
d8cf95010f unused-parens: implement for const/static items 2020-02-05 21:01:23 -05:00
Tomasz Miąsko
b846b42c8d Selectively disable sanitizer instrumentation
Add `no_sanitize` attribute that allows to opt out from sanitizer
instrumentation in an annotated function.
2020-02-05 23:30:38 +01:00
Esteban Küber
609a37407f Fix test 2020-02-05 10:59:14 -08:00
Esteban Küber
96bbb0d67e Account for impl Trait
Address #49287
2020-02-05 10:32:01 -08:00
Esteban Küber
30d927874a review comments: wording 2020-02-05 10:32:01 -08:00
Esteban Küber
92505df338 Account for fn() types in lifetime suggestions 2020-02-05 10:32:01 -08:00
Esteban Küber
ba3b44c508 Account for '_ in suggestions 2020-02-05 10:32:01 -08:00
Esteban Küber
2100b31535 review comments 2020-02-05 10:32:01 -08:00