From 8089fce101f4ac2ed68c8df080c61102b0210429 Mon Sep 17 00:00:00 2001 From: DianQK Date: Wed, 26 Feb 2025 19:54:34 +0800 Subject: Don't infer attributes of virtual calls based on the function body --- tests/codegen/virtual-call-attrs-issue-137646.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 tests/codegen/virtual-call-attrs-issue-137646.rs (limited to 'tests/codegen') diff --git a/tests/codegen/virtual-call-attrs-issue-137646.rs b/tests/codegen/virtual-call-attrs-issue-137646.rs new file mode 100644 index 00000000000..72a25b75856 --- /dev/null +++ b/tests/codegen/virtual-call-attrs-issue-137646.rs @@ -0,0 +1,18 @@ +//! Regression test for https://github.com/rust-lang/rust/issues/137646. +//! Since we don't know the exact implementation of the virtual call, +//! it might write to parameters, we can't infer the readonly attribute. +//@ compile-flags: -C opt-level=3 -C no-prepopulate-passes + +#![crate_type = "lib"] + +pub trait Trait { + fn m(&self, _: (i32, i32, i32)) {} +} + +#[no_mangle] +pub fn foo(trait_: &dyn Trait) { + // CHECK-LABEL: @foo( + // CHECK: call void + // CHECK-NOT: readonly + trait_.m((1, 1, 1)); +} -- cgit 1.4.1-3-g733a5