From ca8c8f6c199aa467bfed70c5f98d41a130a4df98 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 12 Jun 2023 08:12:22 +0000 Subject: [PATCH] [to #50246096] fix stack overflow when generate object construct --- src/pl/ob_pl_user_type.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pl/ob_pl_user_type.cpp b/src/pl/ob_pl_user_type.cpp index 6ab9f9dc4f..5976cb3c71 100644 --- a/src/pl/ob_pl_user_type.cpp +++ b/src/pl/ob_pl_user_type.cpp @@ -217,8 +217,10 @@ int ObUserDefinedType::generate_new(ObPLCodeGenerator &generator, ObLLVMType ptr_type; ObLLVMType ir_type; ObLLVMType ir_pointer_type; + ObLLVMValue stack; int64_t init_size = 0; // Step 1: 初始化内存 + OZ (generator.get_helper().stack_save(stack)); OZ (generator.get_helper().get_llvm_type(ObIntType, ptr_type)); OZ (generator.get_helper().create_alloca("alloc_composite_addr", ptr_type, extend_ptr)); OZ (args.push_back(generator.get_vars().at(generator.CTX_IDX))); @@ -248,6 +250,7 @@ int ObUserDefinedType::generate_new(ObPLCodeGenerator &generator, OZ (generator.get_helper().create_int_to_ptr(ObString("ptr_to_user_type"), value, ir_pointer_type, composite_value)); OZ (generate_construct(generator, ns, composite_value, s)); + OZ (generator.get_helper().stack_restore(stack)); return ret; }