diff --git a/src/backend/codegen/tests/codegen_framework_unittest.cc b/src/backend/codegen/tests/codegen_framework_unittest.cc index b772fefc7210f6a8bf26e6fbca590bc42c276f96..06949314c19503ce589bae30e4fa71da43dd7414 100644 --- a/src/backend/codegen/tests/codegen_framework_unittest.cc +++ b/src/backend/codegen/tests/codegen_framework_unittest.cc @@ -242,16 +242,17 @@ class DatumToCppCastGenerator : public: explicit DatumToCppCastGenerator( gpcodegen::CodegenManager* manager, - DatumCastTemplateFn regular_func_ptr, - DatumCastTemplateFn* ptr_to_regular_func_ptr): - BaseCodegen(manager, + DatumCastTemplateFn regular_func_ptr) + : BaseCodegen(manager, kDatumToCppCastFuncNamePrefix, regular_func_ptr, - ptr_to_regular_func_ptr) { + &swappable_function_holder) { } virtual ~DatumToCppCastGenerator() = default; + DatumCastTemplateFn swappable_function_holder; + protected: bool GenerateCodeInternal(gpcodegen::GpCodegenUtils* codegen_utils) final { llvm::Function* cast_func @@ -279,16 +280,17 @@ class CppToDatumCastGenerator : public: explicit CppToDatumCastGenerator( gpcodegen::CodegenManager* manager, - DatumCastTemplateFn regular_func_ptr, - DatumCastTemplateFn* ptr_to_regular_func_ptr): - BaseCodegen(manager, + DatumCastTemplateFn regular_func_ptr) + : BaseCodegen(manager, kCppToDatumCastFuncNamePrefix, regular_func_ptr, - ptr_to_regular_func_ptr) { + &swappable_function_holder) { } virtual ~CppToDatumCastGenerator() = default; + DatumCastTemplateFn swappable_function_holder; + protected: bool GenerateCodeInternal(gpcodegen::GpCodegenUtils* codegen_utils) final { llvm::Function* cast_func @@ -354,16 +356,18 @@ class CodegenManagerTest : public ::testing::Test { void CheckDatumCast(DatumCastFn CppToDatumReg, DatumCastFn DatumToCppReg, const std::vector& values) { - DatumCastFn CppToDatumCgFn = CppToDatumReg; CppToDatumCastGenerator* cpp_datum_gen = new CppToDatumCastGenerator( - manager_.get(), CppToDatumReg, &CppToDatumCgFn); + manager_.get(), CppToDatumReg); + DatumCastFn& CppToDatumCgFn = + cpp_datum_gen->swappable_function_holder; - DatumCastFn DatumToCppCgFn = DatumToCppReg; DatumToCppCastGenerator* datum_cpp_gen = new DatumToCppCastGenerator( - manager_.get(), DatumToCppReg, &DatumToCppCgFn); + manager_.get(), DatumToCppReg); + DatumCastFn& DatumToCppCgFn = + datum_cpp_gen->swappable_function_holder; ASSERT_TRUE(manager_->EnrollCodeGenerator( CodegenFuncLifespan_Parameter_Invariant, cpp_datum_gen));