diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/codegen/virtual-function-elimination.rs | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/codegen/virtual-function-elimination.rs')
-rw-r--r-- | src/test/codegen/virtual-function-elimination.rs | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/src/test/codegen/virtual-function-elimination.rs b/src/test/codegen/virtual-function-elimination.rs deleted file mode 100644 index 4cf7e12fe..000000000 --- a/src/test/codegen/virtual-function-elimination.rs +++ /dev/null @@ -1,100 +0,0 @@ -// compile-flags: -Zvirtual-function-elimination -Clto -O -Csymbol-mangling-version=v0 -// ignore-32bit - -// CHECK: @vtable.0 = {{.*}}, !type ![[TYPE0:[0-9]+]], !vcall_visibility ![[VCALL_VIS0:[0-9]+]] -// CHECK: @vtable.1 = {{.*}}, !type ![[TYPE1:[0-9]+]], !vcall_visibility ![[VCALL_VIS0:[0-9]+]] -// CHECK: @vtable.2 = {{.*}}, !type ![[TYPE2:[0-9]+]], !vcall_visibility ![[VCALL_VIS2:[0-9]+]] - -#![crate_type = "lib"] -#![allow(incomplete_features)] -#![feature(unsized_locals)] - -use std::rc::Rc; - -trait T { - // CHECK-LABEL: ; <virtual_function_elimination::S as virtual_function_elimination::T>::used - fn used(&self) -> i32 { - 1 - } - // CHECK-LABEL: ; <virtual_function_elimination::S as virtual_function_elimination::T>::used_through_sub_trait - fn used_through_sub_trait(&self) -> i32 { - 3 - } - // CHECK-LABEL: ; <virtual_function_elimination::S as virtual_function_elimination::T>::by_rc - fn by_rc(self: Rc<Self>) -> i32 { - self.used() + self.used() - } - // CHECK-LABEL-NOT: {{.*}}::unused - fn unused(&self) -> i32 { - 2 - } - // CHECK-LABEL-NOT: {{.*}}::by_rc_unused - fn by_rc_unused(self: Rc<Self>) -> i32 { - self.by_rc() - } -} - -trait U: T { - // CHECK-LABEL: ; <virtual_function_elimination::S as virtual_function_elimination::U>::subtrait_used - fn subtrait_used(&self) -> i32 { - 4 - } - // CHECK-LABEL-NOT: {{.*}}::subtrait_unused - fn subtrait_unused(&self) -> i32 { - 5 - } -} - -pub trait V { - // CHECK-LABEL: ; <virtual_function_elimination::S as virtual_function_elimination::V>::public_function - fn public_function(&self) -> i32; -} - -#[derive(Copy, Clone)] -struct S; - -impl T for S {} - -impl U for S {} - -impl V for S { - fn public_function(&self) -> i32 { - 6 - } -} - -fn taking_t(t: &dyn T) -> i32 { - // CHECK: @llvm.type.checked.load({{.*}}, i32 24, metadata !"[[MANGLED_TYPE0:[0-9a-zA-Z_]+]]") - t.used() -} - -fn taking_rc_t(t: Rc<dyn T>) -> i32 { - // CHECK: @llvm.type.checked.load({{.*}}, i32 40, metadata !"[[MANGLED_TYPE0:[0-9a-zA-Z_]+]]") - t.by_rc() -} - -fn taking_u(u: &dyn U) -> i32 { - // CHECK: @llvm.type.checked.load({{.*}}, i32 64, metadata !"[[MANGLED_TYPE1:[0-9a-zA-Z_]+]]") - // CHECK: @llvm.type.checked.load({{.*}}, i32 24, metadata !"[[MANGLED_TYPE1:[0-9a-zA-Z_]+]]") - // CHECK: @llvm.type.checked.load({{.*}}, i32 32, metadata !"[[MANGLED_TYPE1:[0-9a-zA-Z_]+]]") - u.subtrait_used() + u.used() + u.used_through_sub_trait() -} - -pub fn taking_v(v: &dyn V) -> i32 { - // CHECK: @llvm.type.checked.load({{.*}}, i32 24, metadata !"NtCsfRpWlKdQPZn_28virtual_function_elimination1V") - v.public_function() -} - -pub fn main() { - let s = S; - taking_t(&s); - taking_rc_t(Rc::new(s)); - taking_u(&s); - taking_v(&s); -} - -// CHECK: ![[TYPE0]] = !{i64 0, !"[[MANGLED_TYPE0]]"} -// CHECK: ![[VCALL_VIS0]] = !{i64 2} -// CHECK: ![[TYPE1]] = !{i64 0, !"[[MANGLED_TYPE1]]"} -// CHECK: ![[TYPE2]] = !{i64 0, !"NtCsfRpWlKdQPZn_28virtual_function_elimination1V"} -// CHECK: ![[VCALL_VIS2]] = !{i64 1} |