#[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).
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
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!
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.
Variance,
WfCheck(D),
TypeckItemType(D),
- TypeckItemBody(D),
Dropck,
DropckImpl(D),
UnusedTraitCheck,
HirBody,
TransCrateItem,
TypeckItemType,
- TypeckItemBody,
AssociatedItems,
ItemSignature,
AssociatedItemDefIds,
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),
//! 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
// 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,
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| {
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
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();
// 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();
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');
}
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();
}
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');
}
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();
}
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);
// 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();
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();
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);
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 }
}
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
}
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;
}
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);
}
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)
}
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)
}
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()
}
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()
}
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 }
}
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
}
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;
}
use a::A;
use b::B;
-//? #[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
+//? #[rustc_clean(label="Tables", cfg="rpass2")]
pub fn main() {
A + B;
}
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();
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);
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 }
}
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
}
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;
}
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();
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);
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 }
}
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
}
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;
}
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();
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);
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 }
}
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
}
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;
}
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();
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);
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 }
}
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
}
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;
}
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();
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();
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 }
}
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
}
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;
}
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);
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();
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 }
}
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
}
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;
}
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
}
}
mod y {
use x;
- #[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
+ #[rustc_clean(label="Tables", cfg="rpass2")]
pub fn yyyy() {
x::xxxx();
}
mod z {
use y;
- #[rustc_clean(label="TypeckItemBody", cfg="rpass2")]
+ #[rustc_clean(label="Tables", cfg="rpass2")]
pub fn z() {
y::yyyy();
}
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';
}
}
#[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");
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();
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();
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' };
}
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`
//[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' };
}
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' };
}
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' };
}
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' };
}
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' };
}
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';
}