rust/tests/run-make/pgo-indirect-call-promotion/interesting.rs
Nicholas Nethercote 3079bd96b9 Run rustfmt on tests/run-make/.
With the exception of `tests/run-make/translation/test.rs`, which has a
syntax error.

The expected output in `rustdoc-error-lines/rmake.rs`'s required slight
tweaking.

The two `reproducible-build.rs` files need `// ignore-tidy-linelength`
because rustfmt produces lines longer than 100 chars, which tidy doesn't
like, yuk.
2024-05-31 21:30:08 +10:00

53 lines
967 B
Rust

#![crate_name = "interesting"]
#![crate_type = "rlib"]
extern crate opaque;
#[no_mangle]
pub fn function_called_always() {
opaque::opaque_f1();
}
#[no_mangle]
pub fn function_called_never() {
opaque::opaque_f2();
}
#[no_mangle]
pub fn call_a_bunch_of_functions(fns: &[fn()]) {
// Indirect call promotion transforms the below into something like
//
// for f in fns {
// if f == function_called_always {
// function_called_always()
// } else {
// f();
// }
// }
//
// where `function_called_always` actually gets inlined too.
for f in fns {
f();
}
}
pub trait Foo {
fn foo(&self);
}
impl Foo for u32 {
#[no_mangle]
fn foo(&self) {
opaque::opaque_f2();
}
}
#[no_mangle]
pub fn call_a_bunch_of_trait_methods(trait_objects: &[&dyn Foo]) {
// Same as above, just with vtables in between
for x in trait_objects {
x.foo();
}
}