Commit Graph

112 Commits

Author SHA1 Message Date
Niko Matsakis af86fb1959 distinguish object-lifetime-default elision from other elision
Object-lifetime-default elision is distinct from other forms of
elision; it always refers to some enclosing lifetime *present in the
surrounding type* (e.g., `&dyn Bar` expands to `&'a (dyn Bar + 'a)`.
If there is no enclosing lifetime, then it expands to `'static`.

Therefore, in an `impl Trait<Item = dyn Bar>` setting, we don't expand
to create a lifetime parameter for the `dyn Bar + 'X` bound.  It will
just be resolved to `'static`.

Annoyingly, the responsibility for this resolution is spread across
multiple bits of code right now (`middle::resolve_lifetimes`,
`lowering`). The lowering code knows that the default is for an object
lifetime, but it doesn't know what the correct result would be.
Probably this should be fixed, but what we do now is a surgical fix:
we have it generate a different result for elided lifetimes in a
object context, and then we can ignore those results when figuring out
the lifetimes that are captured in the opaque type.
2019-08-19 13:50:42 -04:00
Matthew Jasper da22793a35 Create fewer basic blocks in match MIR lowering 2019-06-13 21:05:21 +01:00
memoryruins eb4580a570 Update ui test suite to use dyn 2019-05-29 00:57:31 -04:00
Matthew Jasper ff71b80a85 Change compare mode to use -Zborrowck=mir 2019-05-12 18:46:43 +01:00
Christopher Vittal cfdd6ba77e Update tests 2019-05-03 03:11:37 -04:00
Mazdak Farrokhzad a4ef188ab6
Rollup merge of #60160 - xldenis:fix-overlapping-zero-width-annotation, r=estebank
Fix #58270, fix off-by-one error in error diagnostics.

This fixes #58270 by checking if two diagnostics overlap completely when we're calculating the line offset for each message.
2019-04-25 03:05:24 +02:00
Xavier Denis 4a073dda93 Fix #58270, fix off-by-one error in error diagnostics. 2019-04-22 18:14:45 -05:00
varkor 7f0f0e31ec Remove double trailing newlines 2019-04-22 16:57:01 +01:00
Matthew Jasper 8eef102270 update tests for migrate mode by default 2019-04-22 08:40:08 +01:00
Andy Russell b6f148c8bd
hide `--explain` hint if error has no extended info 2019-04-18 13:29:28 -04:00
Vadim Petrochenkov c1cfacfb13 Update NLL tests 2019-03-11 23:18:35 +03:00
Vadim Petrochenkov fa72a81bea Update tests 2019-03-11 23:10:26 +03:00
Mark Rousskov 2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Oliver Scherer 61efc3b71b Update tests 2018-12-04 10:06:05 +01:00
Felix S. Klock II bf544fa920 remove `#[rustc_error]` from ui/ tests that remain compile-fail tests. 2018-11-07 13:09:52 +01:00
Oliver S̶c̶h̶n̶e̶i̶d̶e̶r Scherer dd91c8fc5a [review comments] modify test and clean up code
Co-Authored-By: estebank <esteban@kuber.com.ar>
2018-10-22 14:56:03 -07:00
Esteban Küber d0bd69a2d5 review comments 2018-10-22 14:56:02 -07:00
Esteban Küber e1e52eb5a0 Suggest appropriate syntax on missing lifetime specifier in return type
Suggest using `'static` when a lifetime is missing in the return type
with a structured suggestion instead of a note.
2018-10-22 14:54:29 -07:00
David Wood 539404b77d
Update output for borrowck=migrate compare mode.
This commit updates the test output for the updated NLL compare mode
that uses `-Z borrowck=migrate` rather than `-Z borrowck=mir`. The
previous commit changes `compiletest` and this commit only updates
`.nll.stderr` files.
2018-10-17 00:57:32 +02:00
Shotaro Yamada ac6b3f88c7 Deduplicate tests
* `ui/lifetimes/lifetime-errors/ex3-both-anon-regions-both-are-structs-4`
and `ex3-both-anon-regions-both-are-structs-3`
* `ui/lint/lint-group-style` and `lint-group-nonstandard-style`
2018-10-15 09:29:17 +09:00
Mikhail Modin 2af199d58e Update E0714 to E0716 in tests output 2018-09-25 16:24:20 +01:00
Mikhail Modin 5fc0b743d7 add "temporary value dropped while borrowed" error
Issue #54131
2018-09-25 15:23:56 +01:00
Matthew Jasper bd0895d7d0 Update ui tests 2018-09-19 20:50:09 +01:00
bors 32dc5a0783 Auto merge of #54157 - euclio:structured-suggestion, r=estebank
use structured suggestion for "missing mut" label

Fixes #54133 for both NLL and non-NLL.

r? @estebank

I'm not super happy with the existing wording here, since it's now a suggestion. I wonder if the message would work better as something like "help: make binding mutable: `mut foo`"?

Also, are the `HELP` and `SUGGESTION` comments necessary?
2018-09-16 09:47:05 +00:00
bors 052d24e6c8 Auto merge of #54088 - matthewjasper:use-reason-in-dlle-errors, r=pnkfelix
[NLL] Suggest let binding

Closes #49821

Also adds an alternative to `explain_why_borrow_contains_point` that allows changing error messages based on the reason that will be given. This will also be useful for #51026, #51169 and maybe further changes to does not live long enough messages.
2018-09-14 15:45:02 +00:00
Andy Russell d871b8ad4a
use structured suggestion for "missing mut" label
Fixes #54133.
2018-09-12 17:16:18 -04:00
toidiu 731f4efae5 stabalize infer outlives requirements (RFC 2093).
Co-authored-by: nikomatsakis
2018-09-11 11:40:04 -04:00
Matthew Jasper 54f7311587 Suggest a let binding to extend temporary lifetimes with NLL 2018-09-09 19:43:46 +01:00
Basile Desloges b01550a718 Update tests 2018-09-01 12:58:18 +02:00
Niko Matsakis f77ad5c6e5 remove `let x = baz` which was obscuring the real error 2018-08-27 17:48:52 -04:00
Matthias Krüger 71120ef1e5 Fix typos found by codespell. 2018-08-19 17:41:28 +02:00
Matthew Jasper 371c23fe34 Update tests 2018-08-14 20:35:47 +01:00
David Wood 3fc7ab2373
Merged migrated compile-fail tests and ui tests. Fixes #46841. 2018-08-14 11:12:09 +02:00
Federico Poli 8ec9d7242c Match errors using the callsite of macro expansions 2018-07-23 14:31:06 +02:00
Felix S. Klock II d8bd5336c9 rust-lang/rust#51025: improve test robustness so that they work under NLL too. 2018-05-25 13:00:51 +02:00
Felix S. Klock II 746d63a203 Checkpoint the current status of NLL on `ui` tests via compare-mode=nll. 2018-04-11 00:38:35 +02:00
Felix S. Klock II 1c8d2bdda1 Workaround rust-lang/rust#49855 by forcing rustc_error in any mode, including NLL.
NOTE: I was careful to make each change in a manner that preserves the
existing diagnostic output (usually by ensuring that no lines were
added or removed). This means that the resulting source files are not
as nice to read as they were at the start. But we will have to review
these cases by hand anyway as follow-up work, so cleanup could
reasonably happen then (or not at all).
2018-04-11 00:20:05 +02:00
Guillaume Gomez 2e104a77cf update tests 2018-03-14 00:53:24 +01:00
Vadim Petrochenkov fa2d9fc4b9 Update UI tests 2018-02-26 20:24:02 +03:00
Guillaume Gomez 5747fd6611 Update ui tests 2018-02-25 12:15:05 +01:00
bors bdae618418 Auto merge of #46722 - arielb1:single-self, r=eddyb
fix broken assertion in type_param

Nested generics (aka method generics) in trait methods don't have an
*additional* Self parameter in their own type parameter list (they have
a Self parameter in the parent generics), so don't try to check we're
correctly adjusting for it.

Fixes #46568.

r? @eddyb
2017-12-16 09:12:04 +00:00
Esteban Küber 02079e44dd Point at var in short lived borrows 2017-12-14 22:45:45 -08:00
Ariel Ben-Yehuda 2679944653 fix broken assertion in type_param
Nested generics (aka method generics) in trait methods don't have an
*additional* Self parameter in their own type parameter list (they have
a Self parameter in the parent generics), so don't try to check we're
correctly adjusting for it.

Fixes #46568.
2017-12-13 23:06:54 -06:00
Alex Burka 5da957cbc6 mention nightly in -Z external-macro-backtrace note 2017-11-26 18:28:38 +00:00
Oliver Schneider 8937d6a6cf
Merge cfail and ui tests into ui tests 2017-11-24 11:32:35 +01:00
Alex Burka b34a7ffb25 address review comments 2017-11-20 18:03:20 +00:00
Alex Burka 7a5a1f9857 use -Z flag instead of env var 2017-11-19 22:30:14 +00:00
Alex Burka bec62c2f12 update UI tests 2017-11-19 22:22:22 +00:00
Ariel Ben-Yehuda 706e52e2cc fix handling of `Self` 2017-10-02 10:43:36 +02:00
Ariel Ben-Yehuda 622a78cd54 handle nested generics in Generics::type_param/region_param
Fixes #44952.
2017-10-01 17:15:15 +02:00
Esteban Küber ddee9fbc99 Point at parameter type on E0301
On "the parameter type `T` may not live long enough" error, point to the
parameter type suggesting lifetime bindings:

```
error[E0310]: the parameter type `T` may not live long enough
  --> $DIR/lifetime-doesnt-live-long-enough.rs:28:5
   |
27 | struct Foo<T> {
   |            - help: consider adding an explicit lifetime bound `T: 'static`...
28 |     foo: &'static T
   |     ^^^^^^^^^^^^^^^
   |
note: ...so that the reference type `&'static T` does not outlive the data it points at
  --> $DIR/lifetime-doesnt-live-long-enough.rs:28:5
   |
28 |     foo: &'static T
   |     ^^^^^^^^^^^^^^^
```
2017-09-24 11:50:09 -07:00
Eduard-Mihai Burtescu 014333fbd4 Stabilize rvalue promotion to 'static. 2017-08-16 20:30:56 +03:00
Ariel Ben-Yehuda 77f4022303 Revert "Change error count messages"
This reverts commit 5558c64f33.
2017-07-02 13:49:30 +03:00
Guillaume Gomez 998b19740c Add new error codes and update tests 2017-05-27 19:58:52 +02:00
Michael Kohl 5558c64f33 Change error count messages
See #33525 for details.
2017-05-24 16:14:38 +07:00
Brian Anderson a2735c0249 rustc: Remove all "consider using an explicit lifetime parameter" suggestions
These give so many incorrect suggestions that having them is
detrimental to the user experience. The compiler should not be
suggesting changes to the code that are wrong - it is infuriating: not
only is the compiler telling you that _you don't understand_ borrowing,
_the compiler itself_ appears to not understand borrowing. It does not
inspire confidence.
2017-01-26 22:11:29 +00:00
Esteban Küber b7982bbbe0 review comments 2016-11-23 23:44:17 -08:00
Esteban Küber eb53ca3aad Show multiline spans in full if short enough
When dealing with multiline spans that span few lines, show the complete
span instead of restricting to the first character of the first line.

For example, instead of:

```
% ./rustc foo.rs
error[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied
  --> foo.rs:13:9
   |
13 |    foo(1 + bar(x,
   |        ^ trait `{integer}: std::ops::Add<()>` not satisfied
   |
```

show

```
% ./rustc foo.rs
error[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied
  --> foo.rs:13:9
   |
13 |      foo(1 + bar(x,
   |  ________^ starting here...
14 | |            y),
   | |_____________^ ...ending here: trait `{integer}: std::ops::Add<()>` not satisfied
   |
```
2016-11-22 13:42:36 -08:00
bors acce384c22 Auto merge of #37554 - mikhail-m1:dnlle, r=jonathandturner
Improve "Doesn't live long enough" error

case with temporary variable

issue #36279 part of #35233

r? @jonathandturner
2016-11-12 05:20:56 -08:00
Esteban Küber 87b6d38654 Don't hint to add lifetime on trait impl
Don't provide hint to add lifetime on impl items that implement a trait.

```rust
use std::str::FromStr;

pub struct Foo<'a> {
    field: &'a str,
}

impl<'a> FromStr for Foo<'a> {
    type Err = ();
    fn from_str(path: &str) -> Result<Self, ()> {
        Ok(Foo { field: path })
    }
}
```

would give the following hint:

```nocode
help: consider using an explicit lifetime parameter as shown: fn from_str(path: &'a str) -> Result<Self, ()>
  --> <anon>:9:5
   |
9  |     fn from_str(path: &str) -> Result<Self, ()> {
   |     ^
```

which is never correct, since then there will be a lifetime mismatch
between the impl and the trait.

Remove this hint for impl items that implement a trait.
2016-11-10 16:22:03 -08:00
Mikhail Modin cfdf7633f0 Improve "Doesn't live long enough" error
case with temporary variable
2016-11-09 00:28:50 +03:00
Jonathan Turner 439afcd974 Update error message for lifetime of borrowed values 2016-08-31 17:48:26 -07:00