Files
rust/tests/incremental/change_private_impl_method/struct_point.rs
T
Zalathar 72abf370bb Rename incremental cfail/cpass revisions to bfail/bpass
Long ago, UI tests were divided into "compile" and "run" tests. Later, the
compile tests were further subdivided into "check" and "build" tests, to speed
up tests that don't need a full build.

The same split was never applied to incremental test revisions, so the only way
to perform a check build in incremental tests is (confusingly) to use a `cfail`
revision and then specify `//@ check-fail` or `//@ check-pass`.

This PR makes room for dedicated check-fail and check-pass revisions by
renaming the existing `cfail` and `cpass` revisions to `bfail` and `bpass`,
since they currently perform a full build.
2026-04-18 18:13:17 +10:00

101 lines
2.5 KiB
Rust

// Test where we change the body of a private method in an impl.
// We then test what sort of functions must be rebuilt as a result.
//@ revisions: bfail1 bfail2
//@ compile-flags: -Z query-dep-graph
//@ build-pass
//@ ignore-backends: gcc
#![feature(rustc_attrs)]
#![allow(dead_code)]
#![crate_type = "rlib"]
#![rustc_partition_codegened(module="struct_point-point", cfg="bfail2")]
#![rustc_partition_reused(module="struct_point-fn_calls_methods_in_same_impl", cfg="bfail2")]
#![rustc_partition_reused(module="struct_point-fn_calls_methods_in_another_impl", cfg="bfail2")]
#![rustc_partition_reused(module="struct_point-fn_make_struct", cfg="bfail2")]
#![rustc_partition_reused(module="struct_point-fn_read_field", cfg="bfail2")]
#![rustc_partition_reused(module="struct_point-fn_write_field", cfg="bfail2")]
pub mod point {
pub struct Point {
pub x: f32,
pub y: f32,
}
impl Point {
pub fn distance_squared(&self) -> f32 {
#[cfg(bfail1)]
return self.x + self.y;
#[cfg(bfail2)]
return self.x * self.x + self.y * self.y;
}
pub fn distance_from_origin(&self) -> f32 {
self.distance_squared().sqrt()
}
}
impl Point {
pub fn translate(&mut self, x: f32, y: f32) {
self.x += x;
self.y += y;
}
}
}
/// A fn item that calls (public) methods on `Point` from the same impl which changed
pub mod fn_calls_methods_in_same_impl {
use point::Point;
#[rustc_clean(cfg="bfail2")]
pub fn check() {
let x = Point { x: 2.0, y: 2.0 };
x.distance_from_origin();
}
}
/// A fn item that calls (public) methods on `Point` from another impl
pub mod fn_calls_methods_in_another_impl {
use point::Point;
#[rustc_clean(cfg="bfail2")]
pub fn check() {
let mut x = Point { x: 2.0, y: 2.0 };
x.translate(3.0, 3.0);
}
}
/// A fn item that makes an instance of `Point` but does not invoke methods
pub mod fn_make_struct {
use point::Point;
#[rustc_clean(cfg="bfail2")]
pub fn make_origin() -> Point {
Point { x: 2.0, y: 2.0 }
}
}
/// A fn item that reads fields from `Point` but does not invoke methods
pub mod fn_read_field {
use point::Point;
#[rustc_clean(cfg="bfail2")]
pub fn get_x(p: Point) -> f32 {
p.x
}
}
/// A fn item that writes to a field of `Point` but does not invoke methods
pub mod fn_write_field {
use point::Point;
#[rustc_clean(cfg="bfail2")]
pub fn inc_x(p: &mut Point) {
p.x += 1.0;
}
}