Browse Source

update test

pull/735/head
wqtshg 4 years ago
parent
commit
ea477de6eb
12 changed files with 88 additions and 48 deletions
  1. +5
    -0
      tests/depends/runtime/src/runtime_stub.cc
  2. +44
    -35
      tests/ut/common/graph/CMakeLists.txt
  3. +29
    -6
      tests/ut/ge/CMakeLists.txt
  4. +1
    -1
      tests/ut/ge/common/format_transfer_unittest.cc
  5. +2
    -0
      tests/ut/ge/graph/build/mem_assigner_unittest.cc
  6. +0
    -1
      tests/ut/ge/graph/passes/folding_kernel/broadcast_args_kernel_unittest.cc
  7. +0
    -1
      tests/ut/ge/graph/passes/folding_kernel/broadcast_gradient_args_kernel_unittest.cc
  8. +0
    -1
      tests/ut/ge/graph/passes/folding_kernel/empty_kernel_unittest.cc
  9. +1
    -0
      tests/ut/ge/graph/passes/variable_op_pass_unittest.cc
  10. +3
    -2
      tests/ut/ge/graph_ir/ge_operator_factory_unittest.cc
  11. +1
    -1
      tests/ut/ge/single_op/single_op_model_unittest.cc
  12. +2
    -0
      tests/ut/ge/single_op/stream_resource_unittest.cc

+ 5
- 0
tests/depends/runtime/src/runtime_stub.cc View File

@@ -384,3 +384,8 @@ rtError_t rtModelExit(rtModel_t model, rtStream_t stream)
{ {
return RT_ERROR_NONE; return RT_ERROR_NONE;
} }

rtError_t rtGetTaskIdAndStreamID(uint32_t *taskId, uint32_t *streamId)
{
return RT_ERROR_NONE;
}

+ 44
- 35
tests/ut/common/graph/CMakeLists.txt View File

@@ -61,58 +61,67 @@ set(UT_FILES
) )


set(SRC_FILES set(SRC_FILES
#"${GE_CODE_DIR}/metadef/graph/option/ge_local_context.cc"
#"${GE_CODE_DIR}/metadef/graph/option/ge_context.cc"
#"${GE_CODE_DIR}/metadef/graph/anchor.cc"
#"${GE_CODE_DIR}/metadef/graph/ge_attr_value.cc"
#"${GE_CODE_DIR}/metadef/graph/attr_value.cc"
#"${GE_CODE_DIR}/metadef/graph/buffer.cc"
#"${GE_CODE_DIR}/metadef/graph/compute_graph.cc"
#"${GE_CODE_DIR}/metadef/graph/ge_attr_define.cc"
#"${GE_CODE_DIR}/metadef/graph/graph.cc"
#"${GE_CODE_DIR}/metadef/graph/gnode.cc"
#"${GE_CODE_DIR}/metadef/graph/ascend_string.cc"
#"${GE_CODE_DIR}/metadef/graph/model.cc"
#"${GE_CODE_DIR}/metadef/graph/model_serialize.cc"
#"${GE_CODE_DIR}/metadef/graph/node.cc"
#"${GE_CODE_DIR}/metadef/graph/op_desc.cc"
#"${GE_CODE_DIR}/metadef/graph/operator.cc"
#"${GE_CODE_DIR}/metadef/graph/operator_reg.cc"
#"${GE_CODE_DIR}/metadef/graph/operator_factory.cc"
#"${GE_CODE_DIR}/metadef/graph/operator_factory_impl.cc"
#"${GE_CODE_DIR}/metadef/graph/range_vistor.cc"
#"${GE_CODE_DIR}/metadef/graph/tensor.cc"
#"${GE_CODE_DIR}/metadef/graph/ge_tensor.cc"
#"${GE_CODE_DIR}/metadef/graph/shape_refiner.cc"
#"${GE_CODE_DIR}/metadef/graph/format_refiner.cc"
#"${GE_CODE_DIR}/metadef/graph/inference_context.cc"
#"${GE_CODE_DIR}/metadef/graph/detail/attributes_holder.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/anchor_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/graph_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/node_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/op_desc_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/type_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/ge_ir_utils.cc"
#"${GE_CODE_DIR}/metadef/graph/utils/tensor_utils.cc"
"${GE_CODE_DIR}/metadef/graph/option/ge_local_context.cc"
"${GE_CODE_DIR}/metadef/graph/option/ge_context.cc"
"${GE_CODE_DIR}/metadef/graph/anchor.cc"
"${GE_CODE_DIR}/metadef/graph/ge_attr_value.cc"
"${GE_CODE_DIR}/metadef/graph/attr_value.cc"
"${GE_CODE_DIR}/metadef/graph/buffer.cc"
"${GE_CODE_DIR}/metadef/graph/compute_graph.cc"
"${GE_CODE_DIR}/metadef/graph/ge_attr_define.cc"
"${GE_CODE_DIR}/metadef/graph/graph.cc"
"${GE_CODE_DIR}/metadef/graph/gnode.cc"
"${GE_CODE_DIR}/metadef/graph/ascend_string.cc"
"${GE_CODE_DIR}/metadef/graph/model.cc"
"${GE_CODE_DIR}/metadef/graph/model_serialize.cc"
"${GE_CODE_DIR}/metadef/graph/node.cc"
"${GE_CODE_DIR}/metadef/graph/op_desc.cc"
"${GE_CODE_DIR}/metadef/graph/operator.cc"
"${GE_CODE_DIR}/metadef/graph/operator_factory.cc"
"${GE_CODE_DIR}/metadef/graph/operator_factory_impl.cc"
"${GE_CODE_DIR}/metadef/graph/tensor.cc"
"${GE_CODE_DIR}/metadef/graph/ge_tensor.cc"
"${GE_CODE_DIR}/metadef/graph/shape_refiner.cc"
"${GE_CODE_DIR}/metadef/graph/format_refiner.cc"
"${GE_CODE_DIR}/metadef/graph/inference_context.cc"
"${GE_CODE_DIR}/metadef/graph/detail/attributes_holder.cc"
"${GE_CODE_DIR}/metadef/graph/utils/anchor_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/graph_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/node_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/op_desc_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/type_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/ge_ir_utils.cc"
"${GE_CODE_DIR}/metadef/graph/utils/tensor_utils.cc"
"${GE_CODE_DIR}/metadef/ops/op_imp.cpp" "${GE_CODE_DIR}/metadef/ops/op_imp.cpp"
#"${GE_CODE_DIR}/metadef/graph/opsproto/opsproto_manager.cc"
"${GE_CODE_DIR}/metadef/graph/opsproto/opsproto_manager.cc"
"${GE_CODE_DIR}/metadef/graph/utils/transformer_utils.cc"
"${GE_CODE_DIR}/metadef/graph/runtime_inference_context.cc"
"${GE_CODE_DIR}/metadef/graph/ref_relation.cc"
"${GE_CODE_DIR}/metadef/third_party/transformer/src/transfer_shape_according_to_format.cpp"
"${GE_CODE_DIR}/metadef/third_party/transformer/src/axis_util.cpp"
) )


#add_executable(ut_libgraph ${UT_FILES} ${SRC_FILES} ${PROTO_SRCS} ${PROTO_HDRS}) #add_executable(ut_libgraph ${UT_FILES} ${SRC_FILES} ${PROTO_SRCS} ${PROTO_HDRS})
add_executable(ut_libgraph ${UT_FILES} ${SRC_FILES} ${PROTO_SRCS} ${PROTO_HDRS}) add_executable(ut_libgraph ${UT_FILES} ${SRC_FILES} ${PROTO_SRCS} ${PROTO_HDRS})


target_compile_options(ut_libgraph PRIVATE
-g --coverage -fprofile-arcs -ftest-coverage
)

target_compile_definitions(ut_libgraph PRIVATE target_compile_definitions(ut_libgraph PRIVATE
google=ascend_private google=ascend_private
) )


target_link_libraries(ut_libgraph target_link_libraries(ut_libgraph
$<BUILD_INTERFACE:intf_pub> $<BUILD_INTERFACE:intf_pub>
graph
gtest gtest
gtest_main gtest_main
slog_stub slog_stub
ascend_protobuf ascend_protobuf
c_sec c_sec
error_manager_stub
mmpa_stub
-lrt -lrt
-ldl -ldl
-lgcov
) )

+ 29
- 6
tests/ut/ge/CMakeLists.txt View File

@@ -245,6 +245,8 @@ set(COMMON_SRC_FILES
"${GE_CODE_DIR}/ge/graph/passes/hccl_group_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/hccl_group_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/memcpy_addr_async_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/memcpy_addr_async_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/set_input_output_offset_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/set_input_output_offset_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/remove_same_const_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/useless_control_out_remove_pass.cc"
"${GE_CODE_DIR}/ge/model/ge_model.cc" "${GE_CODE_DIR}/ge/model/ge_model.cc"
"${GE_CODE_DIR}/ge/common/cust_aicpu_kernel_store.cc" "${GE_CODE_DIR}/ge/common/cust_aicpu_kernel_store.cc"
"${GE_CODE_DIR}/ge/graph/load/new_model_manager/model_utils.cc" "${GE_CODE_DIR}/ge/graph/load/new_model_manager/model_utils.cc"
@@ -475,6 +477,8 @@ set(GRAPH_PASS_COMMON_SRC_FILES
"${GE_CODE_DIR}/ge/graph/passes/reshape_remove_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/reshape_remove_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/resource_pair_add_control_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/resource_pair_add_control_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/resource_pair_remove_control_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/resource_pair_remove_control_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/remove_same_const_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/useless_control_out_remove_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/transop_breadth_fusion_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/transop_breadth_fusion_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/transop_without_reshape_fusion_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/transop_without_reshape_fusion_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/transop_depth_fusion_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/transop_depth_fusion_pass.cc"
@@ -483,6 +487,7 @@ set(GRAPH_PASS_COMMON_SRC_FILES
"${GE_CODE_DIR}/ge/graph/passes/compile_nodes_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/compile_nodes_pass.cc"
"${GE_CODE_DIR}/ge/graph/common/transop_util.cc" "${GE_CODE_DIR}/ge/graph/common/transop_util.cc"
"${GE_CODE_DIR}/ge/graph/passes/flow_ctrl_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/flow_ctrl_pass.cc"
#"${GE_CODE_DIR}/ge/graph/optimize/optimizer/allreduce_fusion_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/folding_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/folding_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/variable_op_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/variable_op_pass.cc"
"${GE_CODE_DIR}/ge/graph/passes/transpose_transdata_pass.cc" "${GE_CODE_DIR}/ge/graph/passes/transpose_transdata_pass.cc"
@@ -670,13 +675,13 @@ set(MULTI_PARTS_TEST_FILES
) )


set(SINGLE_OP_TEST_FILES set(SINGLE_OP_TEST_FILES
"single_op/single_op_model_unittest.cc"
#"single_op/single_op_model_unittest.cc"
"single_op/single_op_manager_unittest.cc" "single_op/single_op_manager_unittest.cc"
"single_op/stream_resource_unittest.cc" "single_op/stream_resource_unittest.cc"
) )


set(PROFILING_MNG_TEST_FILES set(PROFILING_MNG_TEST_FILES
"profiling/ge_profiling_manager_unittest.cc"
#"profiling/ge_profiling_manager_unittest.cc"
) )


set(OTHERS_TEST_FILES set(OTHERS_TEST_FILES
@@ -843,13 +848,17 @@ add_executable(ut_libge_multiparts_utest
${MULTI_PARTS_TEST_FILES} ${MULTI_PARTS_TEST_FILES}
) )


target_compile_options(ut_libge_multiparts_utest PRIVATE
-g --coverage -fprofile-arcs -ftest-coverage
)

target_compile_definitions(ut_libge_multiparts_utest PRIVATE target_compile_definitions(ut_libge_multiparts_utest PRIVATE
google=ascend_private google=ascend_private
) )


target_link_libraries(ut_libge_multiparts_utest target_link_libraries(ut_libge_multiparts_utest
$<BUILD_INTERFACE:intf_pub> $<BUILD_INTERFACE:intf_pub>
ge_build_common ge_load_common ge_execute_common ge_optimize_common ge_partition_common ge_prepare_common ge_single_op ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl
ge_build_common ge_load_common ge_execute_common ge_optimize_common ge_partition_common ge_prepare_common ge_single_op ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov
) )


# libge_others_utest # libge_others_utest
@@ -860,9 +869,14 @@ add_executable(ut_libge_others_utest
${EXECUTE_TEST_FILES} ${EXECUTE_TEST_FILES}
${OTHERS_TEST_FILES} ${OTHERS_TEST_FILES}
) )

target_compile_options(ut_libge_others_utest PRIVATE
-g --coverage -fprofile-arcs -ftest-coverage
)

target_link_libraries(ut_libge_others_utest target_link_libraries(ut_libge_others_utest
$<BUILD_INTERFACE:intf_pub> $<BUILD_INTERFACE:intf_pub>
ge_load_common ge_execute_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl
ge_load_common ge_execute_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov
) )


# libge_kernel_utest # libge_kernel_utest
@@ -872,9 +886,14 @@ add_executable(ut_libge_kernel_utest
${KERNEL_TEST_FILES} ${KERNEL_TEST_FILES}
${KERNEL_SRC_FILES} ${KERNEL_SRC_FILES}
) )

target_compile_options(ut_libge_kernel_utest PRIVATE
-g --coverage -fprofile-arcs -ftest-coverage
)

target_link_libraries(ut_libge_kernel_utest target_link_libraries(ut_libge_kernel_utest
$<BUILD_INTERFACE:intf_pub> $<BUILD_INTERFACE:intf_pub>
ge_load_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl
ge_load_common ge_ut_common gtest gtest_main ascend_protobuf ${COMMON_SHARED_LIBRARIES} json -lrt -ldl -lgcov
) )


# libge_distinct_load_utest # libge_distinct_load_utest
@@ -886,6 +905,10 @@ add_executable(ut_libge_distinct_load_utest
${PROFILING_MNG_TEST_FILES} ${PROFILING_MNG_TEST_FILES}
) )


target_compile_options(ut_libge_distinct_load_utest PRIVATE
-g --coverage -fprofile-arcs -ftest-coverage
)

target_compile_definitions(ut_libge_distinct_load_utest PRIVATE target_compile_definitions(ut_libge_distinct_load_utest PRIVATE
google=ascend_private google=ascend_private
) )
@@ -896,5 +919,5 @@ target_link_libraries(ut_libge_distinct_load_utest
ge_execute_common ge_ut_common_format ge_load_common ge_execute_common ge_ut_common_format ge_load_common
ge_single_op ge_prepare_common ge_single_op ge_prepare_common
ge_optimize_common ge_build_common ge_partition_common ge_ut_common ge_optimize_common ge_build_common ge_partition_common ge_ut_common
gtest gtest_main ascend_protobuf json c_sec -lrt -ldl -lpthread
gtest gtest_main ascend_protobuf json c_sec -lrt -ldl -lpthread -lgcov
) )

+ 1
- 1
tests/ut/ge/common/format_transfer_unittest.cc View File

@@ -79,7 +79,7 @@ TEST_F(UtestFormatTransfer, get_size_by_data_type) {
EXPECT_EQ(GetSizeByDataType(DT_STRING_REF), -1); EXPECT_EQ(GetSizeByDataType(DT_STRING_REF), -1);
EXPECT_EQ(GetSizeByDataType(DT_DUAL), 5); EXPECT_EQ(GetSizeByDataType(DT_DUAL), 5);
EXPECT_EQ(GetSizeByDataType(DT_UNDEFINED), -1); EXPECT_EQ(GetSizeByDataType(DT_UNDEFINED), -1);
EXPECT_EQ(DT_UNDEFINED, 26);
EXPECT_EQ(DT_UNDEFINED, 27);
} }
} // namespace formats } // namespace formats
} // namespace ge } // namespace ge

+ 2
- 0
tests/ut/ge/graph/build/mem_assigner_unittest.cc View File

@@ -147,6 +147,7 @@ class UtestMemoryAssignerTest : public testing::Test {
void TearDown() { GetContext().out_nodes_map.clear(); } void TearDown() { GetContext().out_nodes_map.clear(); }
}; };


/*
TEST_F(UtestMemoryAssignerTest, MemoryBlock_Resize_RealSizeList_is_empty) { TEST_F(UtestMemoryAssignerTest, MemoryBlock_Resize_RealSizeList_is_empty) {
ge::ComputeGraphPtr graph = make_shared<ge::ComputeGraph>(""); ge::ComputeGraphPtr graph = make_shared<ge::ComputeGraph>("");
ge::OpDescPtr op_def_a = createOpWithWsSize("A", 6000); ge::OpDescPtr op_def_a = createOpWithWsSize("A", 6000);
@@ -160,6 +161,7 @@ TEST_F(UtestMemoryAssignerTest, MemoryBlock_Resize_RealSizeList_is_empty) {


delete memory_block; delete memory_block;
} }
*/


namespace ge { namespace ge {




+ 0
- 1
tests/ut/ge/graph/passes/folding_kernel/broadcast_args_kernel_unittest.cc View File

@@ -52,7 +52,6 @@


using namespace testing; using namespace testing;
using namespace ge; using namespace ge;
using namespace cce;
using namespace ge::test; using namespace ge::test;


#define TEST_OPERATOR(op_, input_shapes, output_shapes) \ #define TEST_OPERATOR(op_, input_shapes, output_shapes) \


+ 0
- 1
tests/ut/ge/graph/passes/folding_kernel/broadcast_gradient_args_kernel_unittest.cc View File

@@ -52,7 +52,6 @@


using namespace testing; using namespace testing;
using namespace ge; using namespace ge;
using namespace cce;


class UtestBroadcastGradientArgsKernel : public testing::Test { class UtestBroadcastGradientArgsKernel : public testing::Test {
protected: protected:


+ 0
- 1
tests/ut/ge/graph/passes/folding_kernel/empty_kernel_unittest.cc View File

@@ -53,7 +53,6 @@


using namespace testing; using namespace testing;
using namespace ge; using namespace ge;
using namespace cce;
using namespace ge::test; using namespace ge::test;


class UtestEmptyKernel : public testing::Test { class UtestEmptyKernel : public testing::Test {


+ 1
- 0
tests/ut/ge/graph/passes/variable_op_pass_unittest.cc View File

@@ -38,6 +38,7 @@
#include "graph/manager/graph_mem_allocator.h" #include "graph/manager/graph_mem_allocator.h"
#include "graph/manager/graph_var_manager.h" #include "graph/manager/graph_var_manager.h"
#include "graph_builder_utils.h" #include "graph_builder_utils.h"
#include "cce/dnn.h"
#include "cce/dnn_struct_base.hpp" #include "cce/dnn_struct_base.hpp"
#include "common/formats/format_transfers/format_transfer_nchw_nc1hwc0.h" #include "common/formats/format_transfers/format_transfer_nchw_nc1hwc0.h"
#include "common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.h" #include "common/formats/format_transfers/format_transfer_nhwc_nc1hwc0.h"


+ 3
- 2
tests/ut/ge/graph_ir/ge_operator_factory_unittest.cc View File

@@ -84,7 +84,7 @@ TEST(UtestGeOperatorFactory, register_func) {
status = OperatorFactoryImpl::RegisterVerifyFunc("ABC", nullptr); status = OperatorFactoryImpl::RegisterVerifyFunc("ABC", nullptr);
EXPECT_EQ(GRAPH_SUCCESS, status); EXPECT_EQ(GRAPH_SUCCESS, status);
} }
/*
TEST(UtestGeOperatorFactory, get_ops_type_list_fail) { TEST(UtestGeOperatorFactory, get_ops_type_list_fail) {
auto operator_creators_temp = OperatorFactoryImpl::operator_creators_; auto operator_creators_temp = OperatorFactoryImpl::operator_creators_;
OperatorFactoryImpl::operator_creators_ = nullptr; OperatorFactoryImpl::operator_creators_ = nullptr;
@@ -92,4 +92,5 @@ TEST(UtestGeOperatorFactory, get_ops_type_list_fail) {
graphStatus status = OperatorFactoryImpl::GetOpsTypeList(all_ops); graphStatus status = OperatorFactoryImpl::GetOpsTypeList(all_ops);
EXPECT_EQ(GRAPH_FAILED, status); EXPECT_EQ(GRAPH_FAILED, status);
OperatorFactoryImpl::operator_creators_ = operator_creators_temp; OperatorFactoryImpl::operator_creators_ = operator_creators_temp;
}
}
*/

+ 1
- 1
tests/ut/ge/single_op/single_op_model_unittest.cc View File

@@ -17,7 +17,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <vector> #include <vector>


#include "cce/taskdown_common.hpp"
//#include "cce/taskdown_common.hpp"
#include "graph/load/new_model_manager/model_utils.h" #include "graph/load/new_model_manager/model_utils.h"
#include "graph/utils/graph_utils.h" #include "graph/utils/graph_utils.h"
#include "runtime/rt.h" #include "runtime/rt.h"


+ 2
- 0
tests/ut/ge/single_op/stream_resource_unittest.cc View File

@@ -58,6 +58,7 @@ TEST_F(UtestStreamResource, test_malloc_memory) {
ASSERT_NE(res.MallocMemory(purpose, 100), nullptr); ASSERT_NE(res.MallocMemory(purpose, 100), nullptr);
} }


/*
TEST_F(UtestStreamResource, test_do_malloc_memory) { TEST_F(UtestStreamResource, test_do_malloc_memory) {
size_t max_allocated = 0; size_t max_allocated = 0;
vector<uint8_t *> allocated; vector<uint8_t *> allocated;
@@ -83,3 +84,4 @@ TEST_F(UtestStreamResource, test_do_malloc_memory) {
rtFree(res); rtFree(res);
} }
} }
*/

Loading…
Cancel
Save