Skip to content

Remove "static item recursion checking" in favor of relying on cycle checks in the query engine #47987

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 24, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/librustc/ty/maps/plumbing.rs
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
let span = self.sess.codemap().def_span(span);
let mut err =
struct_span_err!(self.sess, span, E0391,
"unsupported cyclic reference between types/traits detected");
"cyclic dependency detected");
err.span_label(span, "cyclic reference");

err.span_note(self.sess.codemap().def_span(stack[0].0),
6 changes: 1 addition & 5 deletions src/librustc_driver/driver.rs
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@ use rustc_typeck as typeck;
use rustc_privacy;
use rustc_plugin::registry::Registry;
use rustc_plugin as plugin;
use rustc_passes::{self, ast_validation, loops, consts, static_recursion, hir_stats};
use rustc_passes::{self, ast_validation, loops, consts, hir_stats};
use rustc_const_eval::{self, check_match};
use super::Compilation;

@@ -972,10 +972,6 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(trans: &TransCrate,
"loop checking",
|| loops::check_crate(sess, &hir_map));

time(time_passes,
"static item recursion checking",
|| static_recursion::check_crate(sess, &hir_map))?;

let mut local_providers = ty::maps::Providers::default();
default_provide(&mut local_providers);
trans.provide(&mut local_providers);
16 changes: 0 additions & 16 deletions src/librustc_passes/diagnostics.rs
Original file line number Diff line number Diff line change
@@ -128,22 +128,6 @@ impl !Enterprise for Foo { }
Please note that negative impls are only allowed for auto traits.
"##,

E0265: r##"
This error indicates that a static or constant references itself.
All statics and constants need to resolve to a value in an acyclic manner.

For example, neither of the following can be sensibly compiled:

```compile_fail,E0265
const X: u32 = X;
```

```compile_fail,E0265
const X: u32 = Y;
const Y: u32 = X;
```
"##,

E0267: r##"
This error indicates the use of a loop keyword (`break` or `continue`) inside a
closure but outside of any loop. Erroneous code example:
1 change: 0 additions & 1 deletion src/librustc_passes/lib.rs
Original file line number Diff line number Diff line change
@@ -42,7 +42,6 @@ pub mod consts;
pub mod hir_stats;
pub mod loops;
mod mir_stats;
pub mod static_recursion;

#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_passes, DIAGNOSTICS }
280 changes: 0 additions & 280 deletions src/librustc_passes/static_recursion.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
#![feature(specialization)]

trait Trait<T> { type Assoc; }
//~^ unsupported cyclic reference between types/traits detected [E0391]
//~^ cyclic dependency detected [E0391]

impl<T> Trait<T> for Vec<T> {
type Assoc = ();
2 changes: 1 addition & 1 deletion src/test/compile-fail/const-size_of-cycle.rs
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// error-pattern: unsupported cyclic reference between types/traits detected
// error-pattern: cyclic dependency detected

#![feature(const_fn)]

Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ trait Trait { type Item; }
struct A<T>
where T : Trait,
T : Add<T::Item>
//~^ ERROR unsupported cyclic reference between types/traits detected
//~^ ERROR cyclic dependency detected
//~| ERROR associated type `Item` not found for `T`
{
data: T
2 changes: 1 addition & 1 deletion src/test/compile-fail/cycle-trait-default-type-trait.rs
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
// again references the trait.

trait Foo<X = Box<Foo>> {
//~^ ERROR unsupported cyclic reference
//~^ ERROR cyclic dependency detected
}

fn main() { }
2 changes: 1 addition & 1 deletion src/test/compile-fail/cycle-trait-supertrait-direct.rs
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
// Test a supertrait cycle where a trait extends itself.

trait Chromosome: Chromosome {
//~^ ERROR unsupported cyclic reference
//~^ ERROR cyclic dependency detected
}

fn main() { }
2 changes: 1 addition & 1 deletion src/test/compile-fail/infinite-vec-type-recursion.rs
Original file line number Diff line number Diff line change
@@ -9,6 +9,6 @@
// except according to those terms.

type x = Vec<x>;
//~^ ERROR unsupported cyclic reference
//~^ ERROR cyclic dependency detected

fn main() { let b: x = Vec::new(); }
Loading