[to #50246096] fix stack overflow when generate object construct
This commit is contained in:
@ -217,8 +217,10 @@ int ObUserDefinedType::generate_new(ObPLCodeGenerator &generator,
|
|||||||
ObLLVMType ptr_type;
|
ObLLVMType ptr_type;
|
||||||
ObLLVMType ir_type;
|
ObLLVMType ir_type;
|
||||||
ObLLVMType ir_pointer_type;
|
ObLLVMType ir_pointer_type;
|
||||||
|
ObLLVMValue stack;
|
||||||
int64_t init_size = 0;
|
int64_t init_size = 0;
|
||||||
// Step 1: 初始化内存
|
// Step 1: 初始化内存
|
||||||
|
OZ (generator.get_helper().stack_save(stack));
|
||||||
OZ (generator.get_helper().get_llvm_type(ObIntType, ptr_type));
|
OZ (generator.get_helper().get_llvm_type(ObIntType, ptr_type));
|
||||||
OZ (generator.get_helper().create_alloca("alloc_composite_addr", ptr_type, extend_ptr));
|
OZ (generator.get_helper().create_alloca("alloc_composite_addr", ptr_type, extend_ptr));
|
||||||
OZ (args.push_back(generator.get_vars().at(generator.CTX_IDX)));
|
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,
|
OZ (generator.get_helper().create_int_to_ptr(ObString("ptr_to_user_type"), value, ir_pointer_type,
|
||||||
composite_value));
|
composite_value));
|
||||||
OZ (generate_construct(generator, ns, composite_value, s));
|
OZ (generate_construct(generator, ns, composite_value, s));
|
||||||
|
OZ (generator.get_helper().stack_restore(stack));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user