Commit graph

10975 commits

Author SHA1 Message Date
bors
3ddf48053e Auto merge of #71896 - spastorino:existential-assoc-types-variance, r=nikomatsakis
Relate existential associated types with variance Invariant

Fixes #71550 #72315

r? @nikomatsakis

The test case reported in that issue now errors with the following message ...

```
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter 'a in function call due to conflicting requirements
  --> /tmp/test.rs:25:5
   |
25 |     bad(&Bar(PhantomData), x)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: first, the lifetime cannot outlive the lifetime `'a` as defined on the function body at 24:11...
  --> /tmp/test.rs:24:11
   |
24 | fn extend<'a, T>(x: &'a T) -> &'static T {
   |           ^^
note: ...so that reference does not outlive borrowed content
  --> /tmp/test.rs:25:28
   |
25 |     bad(&Bar(PhantomData), x)
   |                            ^
   = note: but, the lifetime must be valid for the static lifetime...
note: ...so that the types are compatible
  --> /tmp/test.rs:25:9
   |
25 |     bad(&Bar(PhantomData), x)
   |         ^^^^^^^^^^^^^^^^^
   = note: expected  `&'static T`
              found  `&T`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0495`.
```

I could also add that test case if we want to have a weaponized one too.
2020-06-11 04:58:48 +00:00
Amanieu d'Antras
ddacc67190 Add a suggestion to use unused asm arguments in comments 2020-06-11 05:34:43 +01:00
Tyler Mandry
d794313c41 Allow inference regions when relating consts
Fixes #73050
2020-06-10 18:09:34 -07:00
Esteban Küber
03552ec3fa fix rebase 2020-06-10 14:54:27 -07:00
Aaron Hill
28946b3486
Track span of function in method calls, and use this in #[track_caller]
Fixes #69977

When we parse a chain of method calls like `foo.a().b().c()`, each
`MethodCallExpr` gets assigned a span that starts at the beginning of
the call chain (`foo`). While this is useful for diagnostics, it means
that `Location::caller` will return the same location for every call
in a call chain.

This PR makes us separately record the span of the function name and
arguments for a method call (e.g. `b()` in `foo.a().b().c()`). This
`Span` is passed through HIR lowering and MIR building to
`TerminatorKind::Call`, where it is used in preference to
`Terminator.source_info.span` when determining `Location::caller`.

This new span is also useful for diagnostics where we want to emphasize
a particular method call - for an example, see
https://github.com/rust-lang/rust/pull/72389#discussion_r436035990
2020-06-10 17:30:11 -04:00
Amanieu d'Antras
2af53e9a15 Add -O compile flag to test 2020-06-10 22:11:17 +01:00
Esteban Küber
7cde07e5cc review comments: only suggest one substitution 2020-06-10 14:09:51 -07:00
Esteban Küber
c29b3fa148 On recursive ADT, provide indirection structured suggestion 2020-06-10 14:09:51 -07:00
Guillaume Gomez
7bd87cfac2 Add tests for E0762 2020-06-10 11:55:50 +02:00
Dylan DPC
e04e3c89cc
Rollup merge of #73157 - Aaron1011:where-oh-where-has-my-little-span-gone, r=ecstatic-morse
Don't lose empty `where` clause when pretty-printing

Previously, we would parse `struct Foo where;` and `struct Foo;`
identically, leading to an 'empty' `where` clause being omitted during
pretty printing. This will cause us to lose spans when proc-macros
involved, since we will have a collected `where` token that does not
appear in the pretty-printed item.

We now explicitly track the presence of a `where` token during parsing,
so that we can distinguish between `struct Foo where;` and `struct Foo;`
during pretty-printing
2020-06-10 11:03:49 +02:00
Dylan DPC
0a77c8c295
Rollup merge of #73070 - ayazhafiz:i/72819, r=nikomatsakis
Add regression test for const generic ICE in #72819

Closes #72819
2020-06-10 11:03:47 +02:00
Dylan DPC
e1cd8c41a5
Rollup merge of #73023 - ayushmishra2005:remove_noisy_suggestion, r=davidtwco
Remove noisy suggestion of hash_map

Remove noisy suggestion of hash_map #72642

fixes #72642
2020-06-10 11:03:45 +02:00
Dylan DPC
024f025934
Rollup merge of #73005 - Aaron1011:fix/error-overflow, r=estebank
Don't create impl candidates when obligation contains errors

Fixes #72839

In PR #72621, trait selection was modified to no longer bail out early
when an error type was encountered. This allowed us treat `ty::Error` as
`Sized`, causing us to avoid emitting a spurious "not sized" error after
a type error had already occured.

However, this means that we may now try to match an impl candidate
against the error type. Since the error type will unify with almost
anything, this can cause us to infinitely recurse (eventually triggering
an overflow) when trying to verify certain `where` clauses.

This commit causes us to skip generating any impl candidates when an
error type is involved.
2020-06-10 11:03:43 +02:00
Dylan DPC
8addb2e684
Rollup merge of #72897 - lcnr:structurally-match-normalize, r=pnkfelix
normalize adt fields during structural match checking

fixes #72896

currently only fixes the issue itself and compiles stage 1 libs.
I believe we have to use something else to normalize the adt fields here,
as I expect some partially resolved adts to cause problems 🤔

stage 1 libs and the test itself pass, not sure about the rest...
Will spend some more time looking into it tomorrow.

r? @pnkfelix cc @eddyb
2020-06-10 11:03:42 +02:00
Dylan DPC
fda594e6ae
Rollup merge of #72890 - davidtwco:issue-66202-normalize-and-transparent-improper-ctypes, r=varkor
improper ctypes: normalize return types and transparent structs

Fixes #66202.

See each commit individually (except the first which adds a test) for more detailed explanations on the changes made.

In summary, this PR ensures that return types are normalized before being checked for FFI-safety, and that transparent newtype wrappers are FFI-safe if the type being wrapped is FFI-safe (often true previously, but not if, after substitution, all types in a transparent newtype were zero sized).
2020-06-10 11:03:40 +02:00
Dylan DPC
78d08a2269
Rollup merge of #72789 - petrochenkov:impcand, r=davidtwco
resolve: Do not suggest imports from the same module in which we are resolving

Based on the idea from https://github.com/rust-lang/rust/pull/72623.
2020-06-10 11:03:38 +02:00
Lzu Tao
fff822fead Migrate to numeric associated consts 2020-06-10 01:35:47 +00:00
Dylan DPC
95479d4905
Rollup merge of #73122 - doctorn:issue-73116, r=varkor
Resolve E0584 conflict

Adds a new error code (`E0761`) to indicate ambiguity in module file names and an accompanying expanded description to resolve a conflict over `E0584`.

Resolves #73116
2020-06-10 01:06:27 +02:00
Vadim Petrochenkov
d60df536d5 Add tests for modifying lint levels for lints reported at expansion time 2020-06-09 22:36:33 +03:00
Santiago Pastorino
c99164e7a1
Relate existential associated types with variance Invariant 2020-06-09 13:21:27 -03:00
Amanieu d'Antras
5541f689e9 Handle assembler warnings properly 2020-06-09 15:01:02 +01:00
David Wood
d4d3d7de68
lint: transitive FFI-safety for transparent types
This commit ensures that if a `repr(transparent)` newtype's only
non-zero-sized field is FFI-safe then the newtype is also FFI-safe.

Previously, ZSTs were ignored for the purposes of linting FFI-safety
in transparent structs - thus, only the single non-ZST would be checked
for FFI-safety. However, if the non-zero-sized field is a generic
parameter, and is substituted for a ZST, then the type would be
considered FFI-unsafe (as when every field is thought to be zero-sized,
the type is considered to be "composed only of `PhantomData`" which is
FFI-unsafe).

In this commit, for transparent structs, the non-zero-sized field is
identified (before any substitutions are applied, necessarily) and then
that field's type (now with substitutions) is checked for FFI-safety
(where previously it would have been skipped for being zero-sized in
this case).

To handle the case where the non-zero-sized field is a generic
parameter, which is substituted for `()` (a ZST), and is being used
as a return type - the `FfiUnsafe` result (previously `FfiPhantom`) is
caught and silenced.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-09 14:37:08 +01:00
David Wood
3e7aabb1b3
lint: check for unit ret type after normalization
This commit moves the check that skips unit return types to after
where the return type has been normalized - therefore ensuring that
FFI-safety lints are not emitted for types which normalize to unit.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-09 14:37:05 +01:00
David Wood
a8640cdf47
improper_ctypes: add test for #66202
This commit adds a test of the improper ctypes lint, checking that
return type are normalized bethat return types are normalized before
being checked for FFI-safety, and that transparent newtype wrappers
are FFI-safe if the type being wrapped is FFI-safe.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-09 09:03:15 +01:00
Dylan McKay
e369cf6b27 [AVR] Re-bless the UI tests
Patch generated with `./x.py test --stage 1 src/test/ui/feature-gates --bless`.
2020-06-09 17:35:50 +12:00
Dylan McKay
13edc57bfa [AVR] Add required references for AVR to the parser test suites 2020-06-09 17:35:48 +12:00
Jake Goulding
690bb8af51 [AVR] Add AVR platform support 2020-06-09 17:34:07 +12:00
bors
ccac43b86b Auto merge of #73153 - ecstatic-morse:revert-71956, r=tmandry
Revert #71956

...since it caused unsoundness in #73137. Also adds a reduced version of #73137 to the test suite. The addition of the `MaybeInitializedLocals` dataflow analysis has not been reverted, but it is no longer used.

Presumably there is a more targeted fix, but I'm worried that other bugs may be lurking. I'm not yet sure what the root cause of #73137 is.

This will need to get backported to beta.

r? @tmandry
2020-06-09 03:41:43 +00:00
Ayush Kumar Mishra
b05555290c Remove noisy suggestion of hash_map #72642
Fixed failing test-cases

Remove noisy suggestion of hash_map #72642

Fixed failing test-cases
2020-06-09 08:49:05 +05:30
Aaron Hill
88262984eb
Show SyntaxContext in formatted Span debug output
This is only really useful in debug messages, so I've switched to
calling `span_to_string` in any place that causes a `Span` to end up in
user-visible output.
2020-06-08 21:47:33 -04:00
Aaron Hill
0fcea2e423
Don't lose empty where clause when pretty-printing
Previously, we would parse `struct Foo where;` and `struct Foo;`
identically, leading to an 'empty' `where` clause being omitted during
pretty printing. This will cause us to lose spans when proc-macros
involved, since we will have a collected `where` token that does not
appear in the pretty-printed item.

We now explicitly track the presence of a `where` token during parsing,
so that we can distinguish between `struct Foo where;` and `struct Foo;`
during pretty-printing
2020-06-08 21:09:54 -04:00
Ayaz Hafiz
2981395d0c
fixup! Add regression test for const generic ICE in #72819 2020-06-08 18:04:41 -07:00
Ayaz Hafiz
f82382af28
fixup! Add regression test for const generic ICE in #72819 2020-06-08 17:46:28 -07:00
Dylan MacKenzie
b6121a5419 Add regression test for #73137
Co-authored-by: Aaron1011 <aa1ronham@gmail.com>
2020-06-08 16:51:26 -07:00
Dylan MacKenzie
c3b0b7b68f Revert #71956 2020-06-08 14:58:37 -07:00
Dylan DPC
82fd390d67
Rollup merge of #72912 - GuillaumeGomez:add-e0755, r=estebank
Add new E0758 error code
2020-06-08 22:15:10 +02:00
Nathan Corbyn
a1eeaddf3f Resolve E0584 conflict 2020-06-08 12:00:12 +01:00
Ralf Jung
244465dbb8
Rollup merge of #73001 - ilya-bobyr:master, r=dtolnay
Free `default()` forwarding to `Default::default()`

It feels a bit redundant to have to say `Default::default()` every time I need a new value of a type that has a `Default` instance.
Especially so, compared to Haskell, where the same functionality is called `def`.
Providing a free `default()` function that forwards to `Default::default()` seems to improve the situation.
The trait is still there, so if someone wants to be explicit and to say `Default::default()` - it still works, but if imported as `std::default::default;`, then the free function reduces typing and visual noise.
2020-06-08 09:55:31 +02:00
Ralf Jung
e135087868
Rollup merge of #72799 - Aaron1011:feature/span-debug, r=petrochenkov
Add `-Z span-debug` to allow for easier debugging of proc macros

Currently, the `Debug` impl for `proc_macro::Span` just prints out
the byte range. This can make debugging proc macros (either as a crate
author or as a compiler developer) very frustrating, since neither the
actual filename nor the `SyntaxContext` is displayed.

This commit adds a perma-unstable flag `-Z span-debug`. When enabled,
the `Debug` impl for `proc_macro::Span` simply forwards directly to
`rustc_span::Span`. Once #72618 is merged, this will start displaying
actual line numbers.

While `Debug` impls are not subject to Rust's normal stability
guarnatees, we probably shouldn't expose any additional information on
stable until `#![feature(proc_macro_span)]` is stabilized. Otherwise,
we would be providing a 'backdoor' way to access information that's
supposed be behind unstable APIs.
2020-06-08 09:55:26 +02:00
Ralf Jung
8484b9935c
Rollup merge of #72026 - botika:master, r=estebank
Update annotate-snippets-rs to 0.8.0

#59346
I made major changes to this library. In the previous version we worked with owned while in the current one with borrowed.

I have adapted it without changing the behavior.
I have modified the coverage since the previous one did not return correctly the index of the character in the line.
2020-06-08 09:55:18 +02:00
bors
7355816093 Auto merge of #73046 - marmeladema:save-analysis-fix-path, r=Xanewok
save_analysis: fix some ICEs

Fixes #73020
Fixes #73022
Fixes #73041
2020-06-08 03:54:52 +00:00
Guillaume Gomez
fbf7d27791 Add tests for E0758 2020-06-07 14:57:57 +02:00
Ilya Bobyr
8f4dfa8839 Free default() forwarding to Default::default()
When creating default values a trait method needs to be called with an
explicit trait name.  `Default::default()` seems redundant.  A free
function on the other hand, when imported directly, seems to be a better
API, as it is just `default()`.  When implementing the trait, a method
is still required.
2020-06-07 01:27:06 -07:00
Jake Goulding
ae3586c9b7 Order the Rust and C ABIs first to reduce test churn 2020-06-06 22:36:21 -04:00
marmeladema
a7c18e021f save_analysis: fix panic in write_sub_paths_truncated 2020-06-06 23:40:24 +01:00
Amanieu d'Antras
74befd955b Fix #[thread_local] statics as asm! sym operands 2020-06-06 21:04:51 +01:00
Ayaz Hafiz
ab7355a886
fixup! Add regression test for const generic ICE in #72819 2020-06-06 12:00:23 -07:00
Ayaz Hafiz
568cc22c3d
Add regression test for const generic ICE in #72819
Closes #72819
2020-06-06 11:44:28 -07:00
Amanieu d'Antras
e9b67d281a Fix link error with #[thread_local] introduced by #71192 2020-06-06 18:26:15 +01:00
marmeladema
84e4777ae2 save_analysis: fix ice in get_expr_data 2020-06-06 00:39:18 +01:00