提交 1c0c2af3 编写于 作者: N Niko Matsakis

merge TypeckItemBody and Tables depnodes

上级 01195df2
......@@ -326,15 +326,15 @@ The idea is that you can annotate a test like:
#[rustc_if_this_changed]
fn foo() { }
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
fn bar() { foo(); }
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
fn baz() { }
```
This will check whether there is a path in the dependency graph from
`Hir(foo)` to `TypeckItemBody(bar)`. An error is reported for each
`Hir(foo)` to `Tables(bar)`. An error is reported for each
`#[rustc_then_this_would_need]` annotation that indicates whether a
path exists. `//~ ERROR` annotations can then be used to test if a
path is found (as demonstrated above).
......@@ -371,27 +371,27 @@ A node is considered to match a filter if all of those strings appear in its
label. So, for example:
```
RUST_DEP_GRAPH_FILTER='-> TypeckItemBody'
RUST_DEP_GRAPH_FILTER='-> Tables'
```
would select the predecessors of all `TypeckItemBody` nodes. Usually though you
want the `TypeckItemBody` node for some particular fn, so you might write:
would select the predecessors of all `Tables` nodes. Usually though you
want the `Tables` node for some particular fn, so you might write:
```
RUST_DEP_GRAPH_FILTER='-> TypeckItemBody & bar'
RUST_DEP_GRAPH_FILTER='-> Tables & bar'
```
This will select only the `TypeckItemBody` nodes for fns with `bar` in their name.
This will select only the `Tables` nodes for fns with `bar` in their name.
Perhaps you are finding that when you change `foo` you need to re-type-check `bar`,
but you don't think you should have to. In that case, you might do:
```
RUST_DEP_GRAPH_FILTER='Hir&foo -> TypeckItemBody & bar'
RUST_DEP_GRAPH_FILTER='Hir&foo -> Tables & bar'
```
This will dump out all the nodes that lead from `Hir(foo)` to
`TypeckItemBody(bar)`, from which you can (hopefully) see the source
`Tables(bar)`, from which you can (hopefully) see the source
of the erroneous edge.
#### Tracking down incorrect edges
......@@ -417,8 +417,8 @@ dep-graph as described in the previous section and open `dep-graph.txt`
to see something like:
Hir(foo) -> Collect(bar)
Collect(bar) -> TypeckItemBody(bar)
Collect(bar) -> Tables(bar)
That first edge looks suspicious to you. So you set
`RUST_FORBID_DEP_GRAPH_EDGE` to `Hir&foo -> Collect&bar`, re-run, and
then observe the backtrace. Voila, bug fixed!
......@@ -440,4 +440,6 @@ To achieve this, the HIR map will detect if the def-id originates in
an inlined node and add a dependency to a suitable `MetaData` node
instead. If you are reading a HIR node and are not sure if it may be
inlined or not, you can use `tcx.map.read(node_id)` and it will detect
whether the node is inlined or not and do the right thing.
whether the node is inlined or not and do the right thing. You can
also use `tcx.map.is_inlined_def_id()` and
`tcx.map.is_inlined_node_id()` to test.
......@@ -78,7 +78,6 @@ pub enum DepNode<D: Clone + Debug> {
Variance,
WfCheck(D),
TypeckItemType(D),
TypeckItemBody(D),
Dropck,
DropckImpl(D),
UnusedTraitCheck,
......@@ -158,7 +157,6 @@ pub fn from_label_string(label: &str, data: D) -> Result<DepNode<D>, ()> {
HirBody,
TransCrateItem,
TypeckItemType,
TypeckItemBody,
AssociatedItems,
ItemSignature,
AssociatedItemDefIds,
......@@ -216,7 +214,6 @@ pub fn map_def<E, OP>(&self, mut op: OP) -> Option<DepNode<E>>
CoherenceOrphanCheck(ref d) => op(d).map(CoherenceOrphanCheck),
WfCheck(ref d) => op(d).map(WfCheck),
TypeckItemType(ref d) => op(d).map(TypeckItemType),
TypeckItemBody(ref d) => op(d).map(TypeckItemBody),
DropckImpl(ref d) => op(d).map(DropckImpl),
CheckConst(ref d) => op(d).map(CheckConst),
IntrinsicCheck(ref d) => op(d).map(IntrinsicCheck),
......
......@@ -14,11 +14,11 @@
//! we will check that a suitable node for that item either appears
//! or does not appear in the dep-graph, as appropriate:
//!
//! - `#[rustc_dirty(label="TypeckItemBody", cfg="rev2")]` if we are
//! - `#[rustc_dirty(label="Tables", cfg="rev2")]` if we are
//! in `#[cfg(rev2)]`, then there MUST NOT be a node
//! `DepNode::TypeckItemBody(X)` where `X` is the def-id of the
//! `DepNode::Tables(X)` where `X` is the def-id of the
//! current node.
//! - `#[rustc_clean(label="TypeckItemBody", cfg="rev2")]` same as above,
//! - `#[rustc_clean(label="Tables", cfg="rev2")]` same as above,
//! except that the node MUST exist.
//!
//! Errors are reported if we are in the suitable configuration but
......
......@@ -56,7 +56,7 @@ pub fn new(query: &'q DepGraphQuery<DefId>, hcx: &mut HashContext) -> Self {
// if -Z query-dep-graph is passed, save more extended data
// to enable better unit testing
DepNode::TypeckItemBody(_) |
DepNode::Tables(_) |
DepNode::TransCrateItem(_) => tcx.sess.opts.debugging_opts.query_dep_graph,
_ => false,
......
......@@ -628,14 +628,14 @@ pub fn check_item_types(ccx: &CrateCtxt) -> CompileResult {
pub fn check_item_bodies(ccx: &CrateCtxt) -> CompileResult {
ccx.tcx.sess.track_errors(|| {
let mut visit = CheckItemBodiesVisitor { ccx: ccx };
ccx.tcx.visit_all_item_likes_in_krate(DepNode::TypeckItemBody, &mut visit);
ccx.tcx.visit_all_item_likes_in_krate(DepNode::Tables, &mut visit);
// Process deferred obligations, now that all functions
// bodies have been fully inferred.
for (&item_id, obligations) in ccx.deferred_obligations.borrow().iter() {
// Use the same DepNode as for the body of the original function/item.
let def_id = ccx.tcx.map.local_def_id(item_id);
let _task = ccx.tcx.dep_graph.in_task(DepNode::TypeckItemBody(def_id));
let _task = ccx.tcx.dep_graph.in_task(DepNode::Tables(def_id));
let param_env = ParameterEnvironment::for_item(ccx.tcx, item_id);
ccx.tcx.infer_ctxt(param_env, Reveal::NotSpecializable).enter(|infcx| {
......
......@@ -35,7 +35,7 @@ mod x {
mod y {
use Foo;
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn use_char_assoc() {
// Careful here: in the representation, <char as Foo>::T gets
......
......@@ -27,7 +27,7 @@ mod y {
use x;
// These dependencies SHOULD exist:
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn y() {
x::x();
......@@ -39,7 +39,7 @@ mod z {
// These are expected to yield errors, because changes to `x`
// affect the BODY of `y`, but not its signature.
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR no path
pub fn z() {
y::y();
......
......@@ -39,7 +39,7 @@ impl Bar for char { }
mod y {
use {Foo, Bar};
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
pub fn with_char() {
char::method('a');
}
......@@ -48,7 +48,7 @@ pub fn with_char() {
mod z {
use y;
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
pub fn z() {
y::with_char();
}
......
......@@ -38,7 +38,7 @@ impl Bar for char { }
mod y {
use {Foo, Bar};
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
pub fn call_bar() {
char::bar('a');
}
......@@ -47,7 +47,7 @@ pub fn call_bar() {
mod z {
use y;
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
pub fn z() {
y::call_bar();
}
......
......@@ -34,25 +34,25 @@ impl Foo for u32 { }
mod y {
use Foo;
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn with_char() {
char::method('a');
}
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn take_foo_with_char() {
take_foo::<char>('a');
}
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn with_u32() {
u32::method(22);
}
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(Tables)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR OK
pub fn take_foo_with_u32() {
take_foo::<u32>(22);
......@@ -66,7 +66,7 @@ mod z {
// These are expected to yield errors, because changes to `x`
// affect the BODY of `y`, but not its signature.
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(Tables)] //~ ERROR no path
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR no path
pub fn z() {
y::with_char();
......
......@@ -32,7 +32,7 @@
mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
......@@ -43,7 +43,7 @@ pub fn check() {
mod fn_calls_free_fn {
use point::{self, Point};
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
point::distance_squared(&x);
......@@ -54,7 +54,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -64,7 +64,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -74,7 +74,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -16,12 +16,12 @@
extern crate a;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn call_function0() {
a::function0(77);
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn call_function1() {
a::function1(77);
}
......
......@@ -79,7 +79,7 @@ pub fn x(&self) -> f32 {
mod fn_with_type_in_sig {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn boop(p: Option<&Point>) -> f32 {
p.map(|p| p.total()).unwrap_or(0.0)
}
......@@ -95,7 +95,7 @@ pub fn boop(p: Option<&Point>) -> f32 {
mod call_fn_with_type_in_sig {
use fn_with_type_in_sig;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn bip() -> f32 {
fn_with_type_in_sig::boop(None)
}
......@@ -111,7 +111,7 @@ pub fn bip() -> f32 {
mod fn_with_type_in_body {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn boop() -> f32 {
Point::origin().total()
}
......@@ -124,7 +124,7 @@ pub fn boop() -> f32 {
mod call_fn_with_type_in_body {
use fn_with_type_in_body;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn bip() -> f32 {
fn_with_type_in_body::boop()
}
......@@ -134,7 +134,7 @@ pub fn bip() -> f32 {
mod fn_make_struct {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn make_origin(p: Point) -> Point {
Point { ..p }
}
......@@ -144,7 +144,7 @@ pub fn make_origin(p: Point) -> Point {
mod fn_read_field {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -154,7 +154,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -28,7 +28,7 @@
use a::A;
use b::B;
//? #[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
//? #[rustc_clean(label="Tables", cfg="rpass2")]
pub fn main() {
A + B;
}
......@@ -59,7 +59,7 @@ pub fn translate(&mut self, x: f32, y: f32) {
mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
......@@ -70,7 +70,7 @@ pub fn check() {
mod fn_calls_methods_in_another_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let mut x = Point { x: 2.0, y: 2.0 };
x.translate(3.0, 3.0);
......@@ -81,7 +81,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -91,7 +91,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -101,7 +101,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -31,7 +31,7 @@
mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
......@@ -42,7 +42,7 @@ pub fn check() {
mod fn_calls_methods_in_another_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let mut x = Point { x: 2.0, y: 2.0 };
x.translate(3.0, 3.0);
......@@ -53,7 +53,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -63,7 +63,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -73,7 +73,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -59,7 +59,7 @@ pub fn translate(&mut self, x: f32, y: f32) {
mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
......@@ -70,7 +70,7 @@ pub fn check() {
mod fn_calls_methods_in_another_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let mut x = Point { x: 2.0, y: 2.0 };
x.translate(3.0, 3.0);
......@@ -81,7 +81,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -91,7 +91,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -101,7 +101,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -32,7 +32,7 @@
mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
......@@ -43,7 +43,7 @@ pub fn check() {
mod fn_calls_methods_in_another_impl {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn dirty() {
let mut x = Point { x: 2.0, y: 2.0 };
x.translate(3.0, 3.0);
......@@ -54,7 +54,7 @@ pub fn dirty() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -64,7 +64,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -74,7 +74,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -50,7 +50,7 @@ pub fn x(&self) -> f32 {
mod fn_calls_changed_method {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let p = Point { x: 2.0, y: 2.0 };
p.distance_from_origin();
......@@ -61,7 +61,7 @@ pub fn check() {
mod fn_calls_another_method {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let p = Point { x: 2.0, y: 2.0 };
p.x();
......@@ -72,7 +72,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -82,7 +82,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -92,7 +92,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -61,7 +61,7 @@ pub fn x(&self) -> f32 {
mod fn_calls_changed_method {
use point::Point;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn check() {
let p = Point { x: 2.0, y: 2.0 };
p.distance_from_point(None);
......@@ -72,7 +72,7 @@ pub fn check() {
mod fn_calls_another_method {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn check() {
let p = Point { x: 2.0, y: 2.0 };
p.x();
......@@ -83,7 +83,7 @@ pub fn check() {
mod fn_make_struct {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
......@@ -93,7 +93,7 @@ pub fn make_origin() -> Point {
mod fn_read_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
......@@ -103,7 +103,7 @@ pub fn get_x(p: Point) -> f32 {
mod fn_write_field {
use point::Point;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
......
......@@ -35,20 +35,20 @@ pub fn x() -> u32 {
mod y {
use x;
#[rustc_clean(label="TypeckItemBody", cfg="cfail2")]
#[rustc_clean(label="Tables", cfg="cfail2")]
#[rustc_clean(label="TransCrateItem", cfg="cfail2")]
pub fn y() {
//[cfail2]~^ ERROR `TypeckItemBody("y::y")` not found in dep graph, but should be clean
//[cfail2]~^ ERROR `Tables("y::y")` not found in dep graph, but should be clean
//[cfail2]~| ERROR `TransCrateItem("y::y")` not found in dep graph, but should be clean
x::x();
}
}
mod z {
#[rustc_dirty(label="TypeckItemBody", cfg="cfail2")]
#[rustc_dirty(label="Tables", cfg="cfail2")]
#[rustc_dirty(label="TransCrateItem", cfg="cfail2")]
pub fn z() {
//[cfail2]~^ ERROR `TypeckItemBody("z::z")` found in dep graph, but should be dirty
//[cfail2]~^ ERROR `Tables("z::z")` found in dep graph, but should be dirty
//[cfail2]~| ERROR `TransCrateItem("z::z")` found in dep graph, but should be dirty
}
}
......@@ -31,7 +31,7 @@ pub fn xxxx() -> i32 {
mod y {
use x;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn yyyy() {
x::xxxx();
}
......@@ -40,7 +40,7 @@ pub fn yyyy() {
mod z {
use y;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn z() {
y::yyyy();
}
......
......@@ -22,15 +22,15 @@
extern crate a;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="TypeckItemBody", cfg="rpass3")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass3")]
pub fn use_X() -> u32 {
let x: a::X = 22;
x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="TypeckItemBody", cfg="rpass3")]
#[rustc_clean(label="Tables", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass3")]
pub fn use_Y() {
let x: a::Y = 'c';
}
......
......@@ -27,7 +27,7 @@ pub fn x() {
}
#[cfg(rpass2)]
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
#[rustc_dirty(label="TransCrateItem", cfg="rpass2")]
pub fn x() {
println!("{}", "2");
......@@ -37,7 +37,7 @@ pub fn x() {
mod y {
use x;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
#[rustc_clean(label="TransCrateItem", cfg="rpass2")]
pub fn y() {
x::x();
......@@ -47,7 +47,7 @@ pub fn y() {
mod z {
use y;
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
#[rustc_clean(label="TransCrateItem", cfg="rpass2")]
pub fn z() {
y::y();
......
......@@ -31,17 +31,17 @@ pub struct Y {
pub y: char
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_X(x: X) -> u32 {
x.x as u32
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_EmbedX(embed: EmbedX) -> u32 {
embed.x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -34,7 +34,7 @@ pub struct Y {
pub y: char
}
#[rustc_dirty(label="TypeckItemBody", cfg="cfail2")]
#[rustc_dirty(label="Tables", cfg="cfail2")]
pub fn use_X() -> u32 {
let x: X = X { x: 22 };
//[cfail2]~^ ERROR struct `X` has no field named `x`
......@@ -42,13 +42,13 @@ pub fn use_X() -> u32 {
//[cfail2]~^ ERROR no field `x` on type `X`
}
#[rustc_dirty(label="TypeckItemBody", cfg="cfail2")]
#[rustc_dirty(label="Tables", cfg="cfail2")]
pub fn use_EmbedX(embed: EmbedX) -> u32 {
embed.x.x as u32
//[cfail2]~^ ERROR no field `x` on type `X`
}
#[rustc_clean(label="TypeckItemBody", cfg="cfail2")]
#[rustc_clean(label="Tables", cfg="cfail2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -34,19 +34,19 @@ pub struct Y {
pub y: char
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_X() -> u32 {
let x: X = X { x: 22 };
x.x as u32
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_EmbedX(x: EmbedX) -> u32 {
let x: X = X { x: 22 };
x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -18,18 +18,18 @@
use a::*;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_X() -> u32 {
let x: X = X { x: 22 };
x.x as u32
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_EmbedX(embed: EmbedX) -> u32 {
embed.x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -34,19 +34,19 @@ pub struct Y {
pub y: char
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_X() -> u32 {
let x: X = X { x: 22 };
x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_EmbedX(x: EmbedX) -> u32 {
let x: X = X { x: 22 };
x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -35,17 +35,17 @@ pub struct Y {
pub y: char
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_X(x: X) -> u32 {
x.x as u32
}
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
pub fn use_EmbedX(embed: EmbedX) -> u32 {
embed.x.x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass2")]
pub fn use_Y() {
let x: Y = Y { y: 'c' };
}
......
......@@ -16,15 +16,15 @@
extern crate a;
#[rustc_dirty(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="TypeckItemBody", cfg="rpass3")]
#[rustc_dirty(label="Tables", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass3")]
pub fn use_X() -> u32 {
let x: a::X = 22;
x as u32
}
#[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
#[rustc_clean(label="TypeckItemBody", cfg="rpass3")]
#[rustc_clean(label="Tables", cfg="rpass2")]
#[rustc_clean(label="Tables", cfg="rpass3")]
pub fn use_Y() {
let x: a::Y = 'c';
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册