From b8ca7bf18fb619d2dba36098ebd2a9320a8f0874 Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Wed, 23 Jul 2025 14:42:15 -0700 Subject: [PATCH] Include the virtual modifier when importing functions (#5841) --- toolchain/check/import_ref.cpp | 1 + .../check/testdata/class/virtual_modifiers.carbon | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index 1a59709de532..1d125ed018b9 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -1845,6 +1845,7 @@ static auto MakeFunctionDecl(ImportContext& context, {GetIncompleteLocalEntityBase(context, function_decl_id, import_function), {.call_params_id = SemIR::InstBlockId::None, .return_slot_pattern_id = SemIR::InstId::None, + .virtual_modifier = import_function.virtual_modifier, .virtual_index = import_function.virtual_index}}); function_decl.type_id = GetFunctionType( diff --git a/toolchain/check/testdata/class/virtual_modifiers.carbon b/toolchain/check/testdata/class/virtual_modifiers.carbon index 15ad0c6ad0eb..a0524cf6266d 100644 --- a/toolchain/check/testdata/class/virtual_modifiers.carbon +++ b/toolchain/check/testdata/class/virtual_modifiers.carbon @@ -699,7 +699,7 @@ var v: Base(T1) = {}; // CHECK:STDOUT: // CHECK:STDOUT: impl fn @Derived.H(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.H [from "modifiers.carbon"]; +// CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: @@ -821,7 +821,7 @@ var v: Base(T1) = {}; // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.H [from "modifiers.carbon"]; +// CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: --- init.carbon // CHECK:STDOUT: @@ -914,7 +914,7 @@ var v: Base(T1) = {}; // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.H [from "modifiers.carbon"]; +// CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: --- impl_abstract.carbon // CHECK:STDOUT: @@ -4897,7 +4897,7 @@ var v: Base(T1) = {}; // CHECK:STDOUT: constants.%Base.F.specific_fn.892 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.F(imports.%Main.import_ref.5ab3ec.2: type) [from "generic_lib.carbon"] { +// CHECK:STDOUT: generic virtual fn @Base.F(imports.%Main.import_ref.5ab3ec.2: type) [from "generic_lib.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Base [symbolic = %pattern_type (constants.%pattern_type.9f7)] @@ -4905,7 +4905,7 @@ var v: Base(T1) = {}; // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Base [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: -// CHECK:STDOUT: fn; +// CHECK:STDOUT: virtual fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() {