From 3d03d6f4dfee80414993b6b7a4712de62c29be04 Mon Sep 17 00:00:00 2001 From: LINxiansheng Date: Thu, 5 Dec 2024 03:15:16 +0000 Subject: [PATCH] upgrade llvm from 11 to 17 --- build.sh | 9 +++- cmake/Env.cmake | 21 +++++++- cmake/Utils.cmake | 1 + deps/easy/CMakeLists.txt | 3 ++ deps/init/dep_create.sh | 19 +++++-- deps/init/oceanbase.al8.aarch64.deps | 3 +- deps/init/oceanbase.al8.x86_64.deps | 3 +- deps/init/oceanbase.el7.aarch64.deps | 5 +- deps/init/oceanbase.el7.x86_64.deps | 5 +- deps/init/oceanbase.el8.aarch64.deps | 5 +- deps/init/oceanbase.el8.x86_64.deps | 5 +- deps/init/oceanbase.el9.aarch64.deps | 5 +- deps/init/oceanbase.el9.x86_64.deps | 5 +- deps/oblib/src/CMakeLists.txt | 20 ++++++-- .../meta_programming/ob_meta_serialization.h | 7 --- deps/oblib/src/lib/CMakeLists.txt | 4 +- .../oblib/src/lib/alloc/ob_malloc_allocator.h | 2 +- deps/oblib/src/lib/compress/CMakeLists.txt | 7 +++ .../src/lib/compress/zlib_lite/CMakeLists.txt | 6 ++- deps/oblib/src/lib/restore/CMakeLists.txt | 1 + src/logservice/palf/log_define.h | 2 +- src/logservice/palf/log_io_task_cb_utils.h | 2 +- src/logservice/palf/log_req.h | 4 +- src/logservice/palf/log_shared_task.h | 2 +- src/logservice/palf/log_sliding_window.h | 6 +-- src/objit/CMakeLists.txt | 5 +- src/objit/include/objit/ob_llvm_helper.h | 6 +++ src/objit/src/CMakeLists.txt | 4 +- src/objit/src/core/ob_orc_jit.cpp | 19 ++++++- src/objit/src/core/ob_orc_jit.h | 35 +++++++++++-- src/objit/src/expr/ob_llvm_type.cpp | 13 ++++- src/objit/src/expr/ob_llvm_type.h | 1 + src/objit/src/ob_llvm_di_helper.cpp | 30 ++++++----- src/objit/src/ob_llvm_helper.cpp | 50 +++++++++++++++++++ src/observer/omt/ob_tenant_mtl_helper.h | 2 +- src/pl/ob_pl_code_generator.cpp | 12 +++++ src/pl/ob_pl_exception_handling.cpp | 2 +- src/pl/ob_pl_exception_handling.h | 4 ++ src/rootserver/ob_ddl_service.cpp | 2 +- src/share/datum/ob_datum_cmp_func_def.h | 2 +- src/sql/CMakeLists.txt | 3 ++ 41 files changed, 276 insertions(+), 66 deletions(-) diff --git a/build.sh b/build.sh index a91876cf9..652aba84d 100755 --- a/build.sh +++ b/build.sh @@ -19,6 +19,8 @@ LLD_OPTION=ON ASAN_OPTION=ON STATIC_LINK_LGPL_DEPS_OPTION=ON ENABLE_BOLT_OPTION=OFF +CPP_STANDARD_OPTION=11 +CPP_STANDARD_20_OPTION=OFF echo "$0 ${ALL_ARGS[@]}" @@ -63,6 +65,10 @@ function parse_args elif [[ "$i" == "--make" ]] then NEED_MAKE=make + elif [[ "$i" == "-DCPP_STANDARD_20=ON" ]] + then + CPP_STANDARD_OPTION=20 + CPP_STANDARD_20_OPTION=ON elif [[ $NEED_MAKE == false ]] then BUILD_ARGS+=("$i") @@ -105,6 +111,7 @@ function prepare_build_dir # dep_create function do_init { + export CPP_STANDARD=${CPP_STANDARD_OPTION} time1_ms=$(echo $[$(date +%s%N)/1000000]) (cd $TOPDIR/deps/init && bash dep_create.sh) if [ $? -ne 0 ]; then @@ -130,7 +137,7 @@ function do_build TYPE=$1; shift prepare_build_dir $TYPE || return - ${CMAKE_COMMAND} ${TOPDIR} "$@" + ${CMAKE_COMMAND} ${TOPDIR} "$@" -DCPP_STANDARD_20=$CPP_STANDARD_20_OPTION if [ $? -ne 0 ]; then echo_err "Failed to generate Makefile" exit 1 diff --git a/cmake/Env.cmake b/cmake/Env.cmake index 9a1f5a52b..253f9c93a 100644 --- a/cmake/Env.cmake +++ b/cmake/Env.cmake @@ -95,6 +95,17 @@ if((ENABLE_BOLT OR (NOT DEFINED ENABLE_BOLT AND ENABLE_BOLT_AUTO)) AND NOT OB_BU endif() endif() +ob_define(CPP_STANDARD_20 OFF) +if(CPP_STANDARD_20) + message(STATUS "Using C++20 standard") + set(CMAKE_CXX_FLAGS "-std=gnu++20") + ob_define(CPP_STANDARD_20 ON) + add_definitions(-DCPP_STANDARD_20) +else() + message(STATUS "Using C++11 standard") + set(CMAKE_CXX_FLAGS "-std=gnu++11") +endif() + if(OB_DISABLE_PIE) message(STATUS "build without pie") set(PIE_OPT "") @@ -229,6 +240,14 @@ if (OB_USE_CLANG) NO_DEFAULT_PATH) endif() + if(CPP_STANDARD_20) + execute_process(COMMAND ${OB_CC} --version OUTPUT_VARIABLE CLANG_VERSION_STRING) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CLANG_VERSION ${CLANG_VERSION_STRING}) + if(CLANG_VERSION VERSION_LESS "17.0.0") + message(FATAL_ERROR "Clang version must be at least 17.0.0 if CPP_STANDARD_20 is ON, Please run the cmake process with '-DCPP_STANDARD_20=ON --init'") + endif() + endif() + if (OB_CXX) message(STATUS "Using OB_CXX compiler: ${OB_CXX}") else() @@ -253,7 +272,7 @@ if (OB_USE_CLANG) set(REORDER_LINK_OPT "-Wl,--no-rosegment,--build-id=sha1 ${HOTFUNC_OPT}") set(OB_LD_BIN "${DEVTOOLS_DIR}/bin/ld.lld") endif() - set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT}") set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT}") diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index 481e5ccc4..9863da9b2 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -130,6 +130,7 @@ endfunction() function(ob_lib_add_target target) message(STATUS "ob_lib_add_target ${target}") ob_add_object_target(${target}) + target_compile_options(${target} INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0) target_link_libraries(${target} PUBLIC oblib_base) list(APPEND oblib_object_libraries ${target}) set(oblib_object_libraries "${oblib_object_libraries}" CACHE INTERNAL "observer library list") diff --git a/deps/easy/CMakeLists.txt b/deps/easy/CMakeLists.txt index 92a1c6ef9..eb64d7306 100644 --- a/deps/easy/CMakeLists.txt +++ b/deps/easy/CMakeLists.txt @@ -38,6 +38,9 @@ endif() if (OB_USE_CLANG) set(EASY_CC_WNO -fno-strict-aliasing -Wno-unused-variable -Wno-unused-function -fmax-type-align=8 -Wno-tautological-constant-out-of-range-compare -fno-omit-frame-pointer) + if(CPP_STANDARD_20) + set(EASY_CC_WNO ${EASY_CC_WNO} -Wno-unused-but-set-variable) + endif() else() set(EASY_CC_WNO -fno-strict-aliasing -Wno-unused-variable -Wno-implicit-function-declaration -Wno-unused-but-set-variable -Wno-unused-function -fno-omit-frame-pointer) diff --git a/deps/init/dep_create.sh b/deps/init/dep_create.sh index 3b69b1743..c3948823a 100644 --- a/deps/init/dep_create.sh +++ b/deps/init/dep_create.sh @@ -178,14 +178,15 @@ WORKSACPE_DEPS_DIR="$(cd $(dirname $0); cd ..; pwd)" WORKSPACE_DEPS_3RD=${WORKSACPE_DEPS_DIR}/3rd WORKSAPCE_DEPS_3RD_DONE=${WORKSPACE_DEPS_3RD}/DONE WORKSAPCE_DEPS_3RD_MD5=${WORKSPACE_DEPS_3RD}/${MD5} +WORKSAPCE_DEPS_3RD_CPP_STANDARD=${WORKSPACE_DEPS_3RD}/CPP_${CPP_STANDARD} # 开始判断本地目录依赖目录是否存在 if [ -f ${WORKSAPCE_DEPS_3RD_MD5} ]; then - if [ -f ${WORKSAPCE_DEPS_3RD_DONE} ]; then - echo_log "${DEP_FILE} has been initialized due to ${WORKSAPCE_DEPS_3RD_MD5} and ${WORKSAPCE_DEPS_3RD_DONE} exists" + if [ -f "${WORKSAPCE_DEPS_3RD_DONE}" ] && [ -f "${WORKSAPCE_DEPS_3RD_CPP_STANDARD}" ]; then + echo_log "${DEP_FILE} has been initialized due to ${WORKSAPCE_DEPS_3RD_MD5}, ${WORKSAPCE_DEPS_3RD_DONE} and ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} exists" exit 0 else - echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_DONE} not exists" + echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_DONE} or ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} not exists" fi else echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_MD5} not exists" @@ -294,6 +295,15 @@ do temp=$(echo "$line" | grep -Eo "target=(\S*)") [[ "$temp" != "" ]] && target_name=${temp#*=} + if [[ "$pkg" == *"obdevtools-llvm"* ]]; then + if [[ "$line" =~ cpp_standard=([0-9]+) ]]; then + cpp_standard="${BASH_REMATCH[1]}" + if [ "$cpp_standard" -ne "$CPP_STANDARD" ]; then + continue + fi + fi + fi + if [[ -f "${TARGET_DIR_3RD}/pkg/${pkg}" ]]; then echo_log "find package <${pkg}> in cache" else @@ -332,6 +342,7 @@ done if [ ${NEED_SHARE_CACHE} == "OFF" ]; then touch ${WORKSAPCE_DEPS_3RD_MD5} touch ${WORKSAPCE_DEPS_3RD_DONE} + touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} exit $? fi @@ -388,6 +399,7 @@ if [ ${LINK_TARGET_DIRECT} == "ON" ]; then fi touch ${WORKSAPCE_DEPS_3RD_MD5} touch ${WORKSAPCE_DEPS_3RD_DONE} + touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} exit $? fi @@ -415,3 +427,4 @@ echo_log "link deps ${WORKSPACE_DEPS_3RD} -> ${CACHE_DEPS_DIR_3RD}" # 标记md5和done文件 touch ${WORKSAPCE_DEPS_3RD_MD5} touch ${WORKSAPCE_DEPS_3RD_DONE} +touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} diff --git a/deps/init/oceanbase.al8.aarch64.deps b/deps/init/oceanbase.al8.aarch64.deps index 7a07f9476..400ac6be4 100644 --- a/deps/init/oceanbase.al8.aarch64.deps +++ b/deps/init/oceanbase.al8.aarch64.deps @@ -44,7 +44,8 @@ obdevtools-ccache-3.7.12-52024092621.al8.aarch64.rpm obdevtools-cmake-3.22.1-122024092710.al8.aarch64.rpm obdevtools-flex-2.5.35-42024092621.al8.aarch64.rpm obdevtools-gcc9-9.3.0-152024092711.al8.aarch64.rpm -obdevtools-llvm-11.0.1-662024092811.al8.aarch64.rpm +obdevtools-llvm-11.0.1-662024092811.al8.aarch64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.al8.aarch64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-122024093010.al8.aarch64.rpm diff --git a/deps/init/oceanbase.al8.x86_64.deps b/deps/init/oceanbase.al8.x86_64.deps index 9c0c7e6db..72cb1c9e6 100644 --- a/deps/init/oceanbase.al8.x86_64.deps +++ b/deps/init/oceanbase.al8.x86_64.deps @@ -47,7 +47,8 @@ obdevtools-ccache-3.7.12-52024092621.al8.x86_64.rpm obdevtools-cmake-3.22.1-122024092710.al8.x86_64.rpm obdevtools-flex-2.5.35-42024092621.al8.x86_64.rpm obdevtools-gcc9-9.3.0-152024092711.al8.x86_64.rpm -obdevtools-llvm-11.0.1-662024092811.al8.x86_64.rpm +obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-122024093010.al8.x86_64.rpm diff --git a/deps/init/oceanbase.el7.aarch64.deps b/deps/init/oceanbase.el7.aarch64.deps index 231ea25ec..f87557bed 100644 --- a/deps/init/oceanbase.el7.aarch64.deps +++ b/deps/init/oceanbase.el7.aarch64.deps @@ -41,10 +41,11 @@ devdeps-fast-float-6.1.3-42024112122.el7.aarch64.rpm obdevtools-binutils-2.30-12022100413.el7.aarch64.rpm obdevtools-bison-2.4.1-12022100413.el7.aarch64.rpm obdevtools-ccache-3.7.12-12022100417.el7.aarch64.rpm -obdevtools-cmake-3.22.1-22022100417.el7.aarch64.rpm +obdevtools-cmake-3.30.3-52024111819.el7.aarch64.rpm obdevtools-flex-2.5.35-12022100417.el7.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el7.aarch64.rpm -obdevtools-llvm-11.0.1-312022092921.el7.aarch64.rpm +obdevtools-llvm-11.0.1-312022092921.el7.aarch64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el7.aarch64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el7.aarch64.rpm diff --git a/deps/init/oceanbase.el7.x86_64.deps b/deps/init/oceanbase.el7.x86_64.deps index 5bea4ed6b..671bd382c 100644 --- a/deps/init/oceanbase.el7.x86_64.deps +++ b/deps/init/oceanbase.el7.x86_64.deps @@ -45,10 +45,11 @@ devdeps-fast-float-6.1.3-42024112122.el7.x86_64.rpm obdevtools-binutils-2.30-12022100413.el7.x86_64.rpm obdevtools-bison-2.4.1-12022100413.el7.x86_64.rpm obdevtools-ccache-3.7.12-12022100417.el7.x86_64.rpm -obdevtools-cmake-3.22.1-22022100417.el7.x86_64.rpm +obdevtools-cmake-3.30.3-52024111819.el7.x86_64.rpm obdevtools-flex-2.5.35-12022100417.el7.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el7.x86_64.rpm -obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm +obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el7.x86_64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el7.x86_64.rpm diff --git a/deps/init/oceanbase.el8.aarch64.deps b/deps/init/oceanbase.el8.aarch64.deps index 3dfc2a7e0..83477d2af 100644 --- a/deps/init/oceanbase.el8.aarch64.deps +++ b/deps/init/oceanbase.el8.aarch64.deps @@ -41,10 +41,11 @@ devdeps-fast-float-6.1.3-42024112122.el8.aarch64.rpm obdevtools-binutils-2.30-12022100413.el8.aarch64.rpm obdevtools-bison-2.4.1-12022100413.el8.aarch64.rpm obdevtools-ccache-3.7.12-12022100417.el8.aarch64.rpm -obdevtools-cmake-3.22.1-22022100417.el8.aarch64.rpm +obdevtools-cmake-3.30.3-52024111819.el8.aarch64.rpm obdevtools-flex-2.5.35-12022100417.el8.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm -obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm +obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el8.aarch64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el8.aarch64.rpm diff --git a/deps/init/oceanbase.el8.x86_64.deps b/deps/init/oceanbase.el8.x86_64.deps index 1359803c5..8e145d4a4 100644 --- a/deps/init/oceanbase.el8.x86_64.deps +++ b/deps/init/oceanbase.el8.x86_64.deps @@ -44,10 +44,11 @@ devdeps-fast-float-6.1.3-42024112122.el8.x86_64.rpm obdevtools-binutils-2.30-12022100413.el8.x86_64.rpm obdevtools-bison-2.4.1-12022100413.el8.x86_64.rpm obdevtools-ccache-3.7.12-12022100417.el8.x86_64.rpm -obdevtools-cmake-3.22.1-22022100417.el8.x86_64.rpm +obdevtools-cmake-3.30.3-52024111819.el8.x86_64.rpm obdevtools-flex-2.5.35-12022100417.el8.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm -obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm +obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el8.x86_64.rpm diff --git a/deps/init/oceanbase.el9.aarch64.deps b/deps/init/oceanbase.el9.aarch64.deps index baea59bc5..216aa472e 100644 --- a/deps/init/oceanbase.el9.aarch64.deps +++ b/deps/init/oceanbase.el9.aarch64.deps @@ -47,10 +47,11 @@ devdeps-apr-1.6.5-232023090616.el9.aarch64.rpm target=el9 obdevtools-binutils-2.30-12022100413.el8.aarch64.rpm obdevtools-bison-2.4.1-12022100413.el8.aarch64.rpm obdevtools-ccache-3.7.12-12022100417.el8.aarch64.rpm -obdevtools-cmake-3.22.1-22022100417.el8.aarch64.rpm +obdevtools-cmake-3.30.3-52024111819.el8.aarch64.rpm obdevtools-flex-2.5.35-12022100417.el8.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm -obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm +obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el8.aarch64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el8.aarch64.rpm diff --git a/deps/init/oceanbase.el9.x86_64.deps b/deps/init/oceanbase.el9.x86_64.deps index 4d062be2f..58919d5a9 100644 --- a/deps/init/oceanbase.el9.x86_64.deps +++ b/deps/init/oceanbase.el9.x86_64.deps @@ -50,10 +50,11 @@ devdeps-apr-1.6.5-232023090616.el9.x86_64.rpm target=el9 obdevtools-binutils-2.30-12022100413.el8.x86_64.rpm obdevtools-bison-2.4.1-12022100413.el8.x86_64.rpm obdevtools-ccache-3.7.12-12022100417.el8.x86_64.rpm -obdevtools-cmake-3.22.1-22022100417.el8.x86_64.rpm +obdevtools-cmake-3.30.3-52024111819.el8.x86_64.rpm obdevtools-flex-2.5.35-12022100417.el8.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm -obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm +obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11 +obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20 [tools-deps] devdeps-oblogmsg-1.1-52024052811.el8.x86_64.rpm diff --git a/deps/oblib/src/CMakeLists.txt b/deps/oblib/src/CMakeLists.txt index eec2cf81e..6cffd8a86 100644 --- a/deps/oblib/src/CMakeLists.txt +++ b/deps/oblib/src/CMakeLists.txt @@ -110,9 +110,7 @@ endif() if (OB_USE_CLANG) # The following clang warnings should be fixed later: -Wno-unused-variable -Wno-invalid-offsetof - target_compile_options(oblib_base_base_base - INTERFACE - -fno-strict-aliasing -fno-omit-frame-pointer ${MARCH_CFLAGS} ${MTUNE_CFLAGS} + set(OBLIB_COMPILE_DEFINITIONS -fno-strict-aliasing -fno-omit-frame-pointer ${MARCH_CFLAGS} ${MTUNE_CFLAGS} -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_NO_EXCEPTION -DTSI_STATIC_SUM -DOCI_LINK_RUNTIME -Wall -Wextra -Wformat -Werror @@ -126,6 +124,18 @@ if (OB_USE_CLANG) -Wno-self-assign -Wno-inconsistent-missing-override -Wno-mismatched-tags -Wno-unused-variable -Wno-invalid-offsetof -Wno-unevaluated-expression -Wno-constant-logical-operand> $<$:-Wno-unused-parameter>) + if (CPP_STANDARD_20) + set(OBLIB_COMPILE_DEFINITIONS ${OBLIB_COMPILE_DEFINITIONS} + -Wno-unused-but-set-variable -Wno-null-pointer-subtraction -Wno-compound-token-split-by-macro + -Wno-packed-non-pod -Wno-format -Wno-shorten-64-to-32 -Wno-unused-but-set-parameter -Wno-single-bit-bitfield-constant-conversion + -Wno-enum-constexpr-conversion -Wno-covered-switch-default + -Wno-bitwise-instead-of-logical -Wno-suggest-override -Wno-non-virtual-dtor -Wno-cast-qual + -Wno-unused-value -Wno-macro-redefined -Wno-reinterpret-base-class -Wno-register + -Wno-implicit-fallthrough -Wno-deprecated-non-prototype + -Wno-ambiguous-reversed-operator -Wno-invalid-partial-specialization + -Wno-string-concatenation) + endif() + target_compile_options(oblib_base_base_base INTERFACE ${OBLIB_COMPILE_DEFINITIONS}) if (ENABLE_SANITY) target_compile_options(oblib_base_base INTERFACE @@ -272,7 +282,9 @@ endif() target_link_libraries(oblib_base_base INTERFACE oblib_base_base_base) add_library(oblib_base INTERFACE) -target_compile_options(oblib_base INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0) +if(NOT CPP_STANDARD_20) + target_compile_options(oblib_base INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0) +endif() target_link_libraries(oblib_base INTERFACE oblib_base_base) function(oblib_add_library target) diff --git a/deps/oblib/src/common/meta_programming/ob_meta_serialization.h b/deps/oblib/src/common/meta_programming/ob_meta_serialization.h index b8ee0f2e1..a8c3fb1e9 100644 --- a/deps/oblib/src/common/meta_programming/ob_meta_serialization.h +++ b/deps/oblib/src/common/meta_programming/ob_meta_serialization.h @@ -27,13 +27,6 @@ namespace meta template class MetaSerializer { - template ::type = true> - void requires() { - static_assert(!(!OB_TRAIT_SERIALIZEABLE(T2) && !OB_TRAIT_DEEP_SERIALIZEABLE(T2)), - "your type is not serializable"); - } public: MetaSerializer(ObIAllocator &alloc, const T &data) : alloc_(alloc), diff --git a/deps/oblib/src/lib/CMakeLists.txt b/deps/oblib/src/lib/CMakeLists.txt index e26bbfe21..4f6f3e57e 100644 --- a/deps/oblib/src/lib/CMakeLists.txt +++ b/deps/oblib/src/lib/CMakeLists.txt @@ -436,6 +436,9 @@ if(OB_BUILD_CLOSE_MODULES) ) endif() +if(CPP_STANDARD_20) + target_compile_options(oblib_lib PUBLIC -D_GLIBCXX_USE_CXX11_ABI=0) +endif() target_link_libraries(oblib_lib PUBLIC ob_malloc compress restore ${DEP_DIR}/lib/libxml2.a @@ -482,7 +485,6 @@ endif() endif() - # ATTENTION: add this cpp file as library only if compiled target doesn't need diagnose. like unittest or cdc. add_library(mock_di stat/mock_diagnostic_info.cpp) target_include_directories(mock_di PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/deps/oblib/src) diff --git a/deps/oblib/src/lib/alloc/ob_malloc_allocator.h b/deps/oblib/src/lib/alloc/ob_malloc_allocator.h index 14806b5ec..44f76ede9 100644 --- a/deps/oblib/src/lib/alloc/ob_malloc_allocator.h +++ b/deps/oblib/src/lib/alloc/ob_malloc_allocator.h @@ -162,7 +162,7 @@ public: #endif public: bool force_explict_500_malloc_ = false; - bool pl_leaked_times_ = 0; + int pl_leaked_times_ = 0; bool force_malloc_for_absent_tenant_ = false; private: DISALLOW_COPY_AND_ASSIGN(ObMallocAllocator); diff --git a/deps/oblib/src/lib/compress/CMakeLists.txt b/deps/oblib/src/lib/compress/CMakeLists.txt index be892f3ab..960908439 100644 --- a/deps/oblib/src/lib/compress/CMakeLists.txt +++ b/deps/oblib/src/lib/compress/CMakeLists.txt @@ -23,6 +23,13 @@ oblib_add_library(compress zlib_lite/ob_zlib_lite_compressor.cpp zlib_lite/ob_zlib_lite_compressor.h) +if (CPP_STANDARD_20) + target_compile_options(compress + PRIVATE + -Wno-deprecated-non-prototype + ) +endif() + add_subdirectory(zstd) add_subdirectory(zstd_1_3_8) add_subdirectory(lz4) diff --git a/deps/oblib/src/lib/compress/zlib_lite/CMakeLists.txt b/deps/oblib/src/lib/compress/zlib_lite/CMakeLists.txt index 18ac2631d..7c9d488de 100644 --- a/deps/oblib/src/lib/compress/zlib_lite/CMakeLists.txt +++ b/deps/oblib/src/lib/compress/zlib_lite/CMakeLists.txt @@ -22,7 +22,11 @@ add_library(zlib_lite_objs OBJECT add_library(zlib_lite_qpl codec_deflate_qpl.cpp) -target_compile_options(zlib_lite_objs PRIVATE -fvisibility=hidden) +set(ZLIB_LITE_COMPILE_DEFINITIONS -fvisibility=hidden) +if (CPP_STANDARD_20) + set(ZLIB_LITE_COMPILE_DEFINITIONS ${ZLIB_LITE_COMPILE_DEFINITIONS} -Wno-deprecated-non-prototype) +endif() +target_compile_options(zlib_lite_objs PRIVATE ${ZLIB_LITE_COMPILE_DEFINITIONS}) if(${ARCHITECTURE} STREQUAL "x86_64") target_include_directories(zlib_lite_objs PUBLIC "${DEP_DIR}/include/") diff --git a/deps/oblib/src/lib/restore/CMakeLists.txt b/deps/oblib/src/lib/restore/CMakeLists.txt index 524290b19..0e144fda6 100644 --- a/deps/oblib/src/lib/restore/CMakeLists.txt +++ b/deps/oblib/src/lib/restore/CMakeLists.txt @@ -1,3 +1,4 @@ +add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) oblib_add_library(restore OBJECT ob_i_storage.h ob_i_storage.cpp diff --git a/src/logservice/palf/log_define.h b/src/logservice/palf/log_define.h index a7a42540a..7b17dff0a 100644 --- a/src/logservice/palf/log_define.h +++ b/src/logservice/palf/log_define.h @@ -418,7 +418,7 @@ enum PurgeThrottlingType inline const char *purge_throttling_type_2_str(const PurgeThrottlingType type) { -#define EXTRACT_PURGE_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_PURGE_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_PURGE_TYPE(INVALID_PURGE_TYPE); diff --git a/src/logservice/palf/log_io_task_cb_utils.h b/src/logservice/palf/log_io_task_cb_utils.h index 238321656..34232a72f 100644 --- a/src/logservice/palf/log_io_task_cb_utils.h +++ b/src/logservice/palf/log_io_task_cb_utils.h @@ -90,7 +90,7 @@ enum MetaType { inline const char *meta_type_2_str(const MetaType type) { -#define EXTRACT_META_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_META_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_META_TYPE(PREPARE_META); diff --git a/src/logservice/palf/log_req.h b/src/logservice/palf/log_req.h index af4d29c2b..7ba64ac51 100644 --- a/src/logservice/palf/log_req.h +++ b/src/logservice/palf/log_req.h @@ -37,7 +37,7 @@ enum PushLogType inline const char *push_log_type_2_str(const PushLogType type) { -#define EXTRACT_PUSH_LOG_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_PUSH_LOG_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_PUSH_LOG_TYPE(PUSH_LOG); @@ -133,7 +133,7 @@ enum FetchLogType inline const char *fetch_type_2_str(const FetchLogType type) { -#define EXTRACT_FETCH_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_FETCH_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_FETCH_TYPE(FETCH_LOG_FOLLOWER); diff --git a/src/logservice/palf/log_shared_task.h b/src/logservice/palf/log_shared_task.h index eb411a64f..1ef9a735a 100644 --- a/src/logservice/palf/log_shared_task.h +++ b/src/logservice/palf/log_shared_task.h @@ -30,7 +30,7 @@ enum class LogSharedTaskType inline const char *shared_type_2_str(const LogSharedTaskType type) { -#define EXTRACT_SHARED_TYPE(type_var) ({ case(LogSharedTaskType::type_var): return #type_var; }) +#define EXTRACT_SHARED_TYPE(type_var) case(LogSharedTaskType::type_var): return #type_var switch(type) { EXTRACT_SHARED_TYPE(LogHandleSubmitType); diff --git a/src/logservice/palf/log_sliding_window.h b/src/logservice/palf/log_sliding_window.h index e3783b24f..3014839e2 100755 --- a/src/logservice/palf/log_sliding_window.h +++ b/src/logservice/palf/log_sliding_window.h @@ -69,7 +69,7 @@ enum FetchTriggerType inline const char *fetch_trigger_type_2_str(const FetchTriggerType type) { -#define EXTRACT_TRIGGER_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_TRIGGER_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_TRIGGER_TYPE(LOG_LOOP_TH); @@ -97,7 +97,7 @@ enum TruncateType inline const char *truncate_type_2_str(const TruncateType type) { -#define EXTRACT_TRUNCATE_TYPE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_TRUNCATE_TYPE(type_var) case(type_var): return #type_var switch(type) { EXTRACT_TRUNCATE_TYPE(INVALID_TRUNCATE_TYPE); @@ -118,7 +118,7 @@ enum FreezeMode inline const char *freeze_mode_2_str(const FreezeMode mode) { -#define EXTRACT_FREEZE_MODE(type_var) ({ case(type_var): return #type_var; }) +#define EXTRACT_FREEZE_MODE(type_var) case(type_var): return #type_var switch(mode) { EXTRACT_FREEZE_MODE(PERIOD_FREEZE_MODE); diff --git a/src/objit/CMakeLists.txt b/src/objit/CMakeLists.txt index da695e6c2..711c184e5 100644 --- a/src/objit/CMakeLists.txt +++ b/src/objit/CMakeLists.txt @@ -20,7 +20,10 @@ message(STATUS "This is SOURCE dir " ${PROJECT_SOURCE_DIR}) include_directories(${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) -add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -g -O2 -frtti) +if(NOT CPP_STANDARD_20) + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) +endif() +add_definitions(-g -O2 -frtti) # Find the libraries that correspond to the LLVM components # that we wish to use diff --git a/src/objit/include/objit/ob_llvm_helper.h b/src/objit/include/objit/ob_llvm_helper.h index 9165b99a2..9b62bf7ec 100644 --- a/src/objit/include/objit/ob_llvm_helper.h +++ b/src/objit/include/objit/ob_llvm_helper.h @@ -450,6 +450,12 @@ public: int get_int_value(const ObLLVMType &value, int64_t i, ObLLVMValue &i_value); int get_insert_block(ObLLVMBasicBlock &block); +#ifdef CPP_STANDARD_20 + static int64 get_integer_type_id(); + static int64 get_pointer_type_id(); + static int64 get_struct_type_id(); +#endif + public: core::JitContext *get_jc() { return jc_; } diff --git a/src/objit/src/CMakeLists.txt b/src/objit/src/CMakeLists.txt index 9adc1cde5..0356dadf4 100644 --- a/src/objit/src/CMakeLists.txt +++ b/src/objit/src/CMakeLists.txt @@ -7,7 +7,9 @@ target_include_directories(objit_base INTERFACE # GLOB all source files according to its suffix. file(GLOB_RECURSE objit_SRC "*.h" "*.cpp" "${CMAKE_CURRENT_SROUCE_DIR}/../include/*.h") -add_definitions(-std=gnu++14) +if(NOT CPP_STANDARD_20) + add_definitions(-std=gnu++14) +endif() add_library(objit_objects OBJECT ${objit_SRC}) target_link_libraries(objit_objects PRIVATE oblib_base_base ob_share objit_base) diff --git a/src/objit/src/core/ob_orc_jit.cpp b/src/objit/src/core/ob_orc_jit.cpp index 78416eb1a..4ac18d03f 100644 --- a/src/objit/src/core/ob_orc_jit.cpp +++ b/src/objit/src/core/ob_orc_jit.cpp @@ -31,7 +31,6 @@ #include "llvm/ExecutionEngine/RuntimeDyld.h" #include "llvm/ExecutionEngine/Orc/CompileUtils.h" #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" -#include "llvm/ExecutionEngine/Orc/LambdaResolver.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/Mangler.h" #include "llvm/IR/Verifier.h" @@ -43,6 +42,12 @@ #include "llvm/Object/ELFObjectFile.h" #include "llvm/ExecutionEngine/SectionMemoryManager.h" +#ifdef CPP_STANDARD_20 +#include "llvm/ExecutionEngine/JITSymbol.h" +#else +#include "llvm/ExecutionEngine/Orc/LambdaResolver.h" +#endif + using namespace llvm; using namespace llvm::orc; using namespace llvm::object; @@ -152,7 +157,11 @@ int ObOrcJit::lookup(const std::string &name, ObJITSymbol &symbol) "name", name.c_str(), "msg", msg.c_str()); } else { +#ifdef CPP_STANDARD_20 + symbol = JITEvaluatedSymbol(value->getValue(), JITSymbolFlags::Exported); +#else symbol = *value; +#endif } } @@ -188,7 +197,11 @@ int ObOrcJit::get_function_address(const std::string &name, uint64_t &addr) } void ObNotifyLoaded::notifyObjectLoaded( +#ifdef CPP_STANDARD_20 + ObJitEventListener::ObjectKey Key, +#else ObVModuleKey Key, +#endif const object::ObjectFile &Obj, const RuntimeDyld::LoadedObjectInfo &Info) { @@ -249,7 +262,11 @@ int ObOrcJit::set_optimize_level(ObPLOptLevel level) if (OB_SUCC(ret) && level == ObPLOptLevel::O0) { auto &tm_builder = ObEngineBuilder.getJITTargetMachineBuilder(); +#ifdef CPP_STANDARD_20 + if (!tm_builder.has_value()) { +#else if (!tm_builder.hasValue()) { +#endif ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected NULL JITTargetMachineBuilder", K(ret), K(lbt())); } else { diff --git a/src/objit/src/core/ob_orc_jit.h b/src/objit/src/core/ob_orc_jit.h index d5a5f50f9..eac65ad99 100644 --- a/src/objit/src/core/ob_orc_jit.h +++ b/src/objit/src/core/ob_orc_jit.h @@ -24,6 +24,10 @@ #include "llvm/ExecutionEngine/Orc/ExecutionUtils.h" #include "llvm/ExecutionEngine/JITEventListener.h" #include "llvm/IR/Mangler.h" +#ifdef CPP_STANDARD_20 +#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h" +#include "llvm/ExecutionEngine/Orc/Shared/ExecutorSymbolDef.h" +#endif #include @@ -70,16 +74,21 @@ static inline int ob_jit_make_unique(std::unique_ptr &ptr, Args&&... args) { namespace core { using namespace llvm; +using namespace llvm::orc; typedef ::llvm::LLVMContext ObLLVMContext; typedef ::llvm::orc::ExecutionSession ObExecutionSession; -typedef ::llvm::orc::SymbolResolver ObSymbolResolver; typedef ::llvm::TargetMachine ObTargetMachine; typedef ::llvm::DataLayout ObDataLayout; -typedef ::llvm::orc::VModuleKey ObVModuleKey; typedef ::llvm::JITSymbol ObJITSymbol; -typedef ::llvm::orc::JITDylib::DefinitionGenerator ObJitDefinitionGenerator; typedef ::llvm::JITEventListener ObJitEventListener; +#ifdef CPP_STANDARD_20 +typedef ::llvm::orc::DefinitionGenerator ObJitDefinitionGenerator; +#else +typedef ::llvm::orc::SymbolResolver ObSymbolResolver; +typedef ::llvm::orc::VModuleKey ObVModuleKey; +typedef ::llvm::orc::JITDylib::DefinitionGenerator ObJitDefinitionGenerator; +#endif class ObNotifyLoaded: public ObJitEventListener { @@ -89,9 +98,16 @@ public: : Allocator(Allocator), DebugBuf(DebugBuf), DebugLen(DebugLen), SoObject(SoObject) {} virtual ~ObNotifyLoaded() {} +#ifdef CPP_STANDARD_20 + void notifyObjectLoaded(ObJitEventListener::ObjectKey Key, + const object::ObjectFile &Obj, + const RuntimeDyld::LoadedObjectInfo &Info) override; +#else void notifyObjectLoaded(ObVModuleKey Key, - const object::ObjectFile &Obj, - const RuntimeDyld::LoadedObjectInfo &Info) override; + const object::ObjectFile &Obj, + const RuntimeDyld::LoadedObjectInfo &Info) override; +#endif + private: common::ObIAllocator &Allocator; char* &DebugBuf; @@ -101,7 +117,12 @@ private: class ObJitGlobalSymbolGenerator: public ObJitDefinitionGenerator { public: +#ifdef CPP_STANDARD_20 + Error tryToGenerate(orc::LookupState &LS, + orc::LookupKind K, +#else Error tryToGenerate(orc::LookupKind K, +#endif orc::JITDylib &JD, orc::JITDylibLookupFlags JDLookupFlags, const orc::SymbolLookupSet &LookupSet) override @@ -111,7 +132,11 @@ public: if (res != symbol_table.end()) { Error err = JD.define(orc::absoluteSymbols( +#ifdef CPP_STANDARD_20 + {{sym.first, ExecutorSymbolDef(ExecutorAddr(res->second), {})}})); +#else {{sym.first, JITEvaluatedSymbol(res->second, {})}})); +#endif if (err) { StringRef name = *sym.first; diff --git a/src/objit/src/expr/ob_llvm_type.cpp b/src/objit/src/expr/ob_llvm_type.cpp index 7891ee78b..a45e29693 100644 --- a/src/objit/src/expr/ob_llvm_type.cpp +++ b/src/objit/src/expr/ob_llvm_type.cpp @@ -86,8 +86,13 @@ int ObIRObj::set_obj(core::JitContext &jc, const ObIRValuePtr obj, ObObjType typ case ObVarcharType: { ObIRValuePtr len_indices[] = {get_const(jc.get_context(), 32, 0), get_const(jc.get_context(), 32, OBJ_IDX_VAL_LEN)}; +#ifdef CPP_STANDARD_20 + ObIRValuePtr str_len_p = jc.get_builder().CreateGEP(ObIRType::getInt64Ty(jc.get_context()), obj, makeArrayRef(len_indices)); + val_len_ = jc.get_builder().CreateLoad(ObIRType::getInt64Ty(jc.get_context()),str_len_p); +#else ObIRValuePtr str_len_p = jc.get_builder().CreateGEP(obj, makeArrayRef(len_indices)); val_len_ = jc.get_builder().CreateLoad(str_len_p); +#endif //ptr } break; default: { @@ -118,11 +123,17 @@ ObIRValuePtr ObIRObj::get_ir_value_element(core::JitContext &jc, ObIRValuePtr ret = NULL; ObIRValuePtr indices[] = {get_const(jc.get_context(), 32, 0), get_const(jc.get_context(), 32, idx)}; +#ifdef CPP_STANDARD_20 + ObIRValuePtr value_p = jc.get_builder().CreateGEP(ObIRType::getInt64Ty(jc.get_context()), obj, + makeArrayRef(indices), + "obj_elem_p"); + ret = jc.get_builder().CreateLoad(ObIRType::getInt64Ty(jc.get_context()), value_p, "value_elem"); +#else ObIRValuePtr value_p = jc.get_builder().CreateGEP(obj, makeArrayRef(indices), "obj_elem_p"); ret = jc.get_builder().CreateLoad(value_p, "value_elem"); - +#endif return ret; } diff --git a/src/objit/src/expr/ob_llvm_type.h b/src/objit/src/expr/ob_llvm_type.h index 1b2b74c69..c5a04703c 100644 --- a/src/objit/src/expr/ob_llvm_type.h +++ b/src/objit/src/expr/ob_llvm_type.h @@ -57,6 +57,7 @@ typedef ::llvm::DIExpression ObDIExpression; typedef ::llvm::DebugLoc ObDebugLoc; typedef ::llvm::DIType ObDIType; typedef ::llvm::DISubroutineType ObDISubroutineType; +typedef ::llvm::DILocation ObDILocation; /*static ObIRType *get_ir_type(ObLLVMContext &ctx,*/ //const ::oceanbase::common::ObObjType &type) diff --git a/src/objit/src/ob_llvm_di_helper.cpp b/src/objit/src/ob_llvm_di_helper.cpp index 578f7ed56..534b7af7f 100644 --- a/src/objit/src/ob_llvm_di_helper.cpp +++ b/src/objit/src/ob_llvm_di_helper.cpp @@ -10,9 +10,9 @@ * See the Mulan PubL v2 for more details. */ -#define USING_LOG_PREFIX PL - -//#include "objit/ob_llvm_helper.h" +#define USING_LOG_PREFIX PL + +//#include "objit/ob_llvm_helper.h" #include "core/jit_context.h" #include "core/jit_di_context.h" #include "lib/oblog/ob_log_module.h" @@ -185,15 +185,21 @@ int ObLLVMDIHelper::insert_declare(ObLLVMValue &storage, ObLLVMDILocalVariable & || OB_ISNULL(variable.get_v()) || OB_ISNULL(block.get_v())) { ret = OB_NOT_INIT; LOG_WARN("jc or sp or storage or variable or block is NULL", K(ret)); - } else if (OB_ISNULL(expr = jc_->dbuilder_.createExpression())) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to create expression", K(ret)); - } else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(), - expr, ObDebugLoc::get(line, 0, sp), - block.get_v()))) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to insert declare", K(ret)); - } + } else if (OB_ISNULL(expr = jc_->dbuilder_.createExpression())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to create expression", K(ret)); +#ifdef CPP_STANDARD_20 + } else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(), + expr, ObDILocation::get(sp->getContext(), line, 0, sp), + block.get_v()))) { +#else + } else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(), + expr, ObDebugLoc::get(line, 0, sp), + block.get_v()))) { +#endif + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to insert declare", K(ret)); + } return ret; } diff --git a/src/objit/src/ob_llvm_helper.cpp b/src/objit/src/ob_llvm_helper.cpp index b52cbaa0a..916869faa 100644 --- a/src/objit/src/ob_llvm_helper.cpp +++ b/src/objit/src/ob_llvm_helper.cpp @@ -1018,7 +1018,11 @@ int ObLLVMHelper::create_load(const ObString &name, ObLLVMValue &ptr, ObLLVMValu ret = OB_INVALID_ARGUMENT; LOG_WARN("value is NULL", K(name), K(ptr), K(ret)); } else { +#ifdef CPP_STANDARD_20 + llvm::Value *value = jc_->get_builder().CreateLoad(ObIRType::getInt64Ty(jc_->get_context()), ptr.get_v(), make_string_ref(name)); +#else llvm::Value *value = jc_->get_builder().CreateLoad(ptr.get_v(), make_string_ref(name)); +#endif if (OB_ISNULL(value)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("failed to create load", K(ret)); @@ -1055,6 +1059,18 @@ int ObLLVMHelper::create_istore(int64_t i, ObLLVMValue &dest) } else if (OB_ISNULL(dest.get_v())) { ret = OB_INVALID_ARGUMENT; LOG_WARN("value is NULL", K(i), K(dest), K(ret)); +#ifdef CPP_STANDARD_20 + } else if (llvm::Type::PointerTyID != dest.get_type_id() + || 0 == dest.get_type().get_num_child() + || 1 != dest.get_type().get_num_child() + || llvm::Type::IntegerTyID != dest.get_type().get_child(0).get_id()) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("dest type is not integer pointer ", + K(i), + K(dest.get_type_id()), + K(dest.get_type().get_num_child()), + K(ret)); +#else } else if (llvm::Type::PointerTyID != dest.get_type_id() || 1 != dest.get_type().get_num_child() || llvm::Type::IntegerTyID != dest.get_type().get_child(0).get_id()) { @@ -1065,6 +1081,7 @@ int ObLLVMHelper::create_istore(int64_t i, ObLLVMValue &dest) K(dest.get_type().get_num_child()), K(dest.get_type().get_child(0).get_id()), K(ret)); +#endif } else { ObLLVMValue value; if (OB_FAIL(get_int_value(dest.get_type().get_child(0), i, value))) { @@ -1402,7 +1419,11 @@ int ObLLVMHelper::create_gep(const ObString &name, ObLLVMValue &value, ObIArray< } else { /*do nothing*/ } } if (OB_SUCC(ret)) { +#ifdef CPP_STANDARD_20 + llvm::Value *elem = jc_->get_builder().CreateGEP(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), make_array_ref(array), make_string_ref(name)); +#else llvm::Value *elem = jc_->get_builder().CreateGEP(value.get_v(), make_array_ref(array), make_string_ref(name)); +#endif if (OB_ISNULL(elem)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("failed to create gep", K(ret)); @@ -1445,7 +1466,11 @@ int ObLLVMHelper::create_gep(const ObString &name, ObLLVMValue &value, ObLLVMVal } else if (OB_FAIL(array.push_back(idx.get_v()))) { LOG_WARN("push_back error", K(ret)); } else { +#ifdef CPP_STANDARD_20 + llvm::Value *elem = jc_->get_builder().CreateGEP(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), make_array_ref(array), make_string_ref(name)); +#else llvm::Value *elem = jc_->get_builder().CreateGEP(value.get_v(), make_array_ref(array), make_string_ref(name)); +#endif if (OB_ISNULL(elem)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("failed to create gep", K(ret)); @@ -1467,7 +1492,11 @@ int ObLLVMHelper::create_const_gep1_64(const ObString &name, ObLLVMValue &value, ret = OB_INVALID_ARGUMENT; LOG_WARN("value is NULL", K(name), K(value), K(idx), K(ret)); } else { +#ifdef CPP_STANDARD_20 + llvm::Value *elem = jc_->get_builder().CreateConstGEP1_64(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), idx, make_string_ref(name)); +#else llvm::Value *elem = jc_->get_builder().CreateConstGEP1_64(value.get_v(), idx, make_string_ref(name)); +#endif if (OB_ISNULL(elem)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("failed to create const gep164", K(ret)); @@ -1680,7 +1709,11 @@ int ObLLVMHelper::set_debug_location(uint32_t line, uint32_t col, ObLLVMDIScope ret = OB_ERR_UNEXPECTED; LOG_WARN("scope is NULL", K(ret)); } else { +#ifdef CPP_STANDARD_20 + jc_->get_builder().SetCurrentDebugLocation(ObDILocation::get(scope->get_v()->getContext(), line, col, scope->get_v())); +#else jc_->get_builder().SetCurrentDebugLocation(ObDebugLoc::get(line, col, scope->get_v())); +#endif } return ret; } @@ -2277,5 +2310,22 @@ const ObString& ObLLVMHelper::get_compiled_object() return jit_->get_compiled_object(); } +#ifdef CPP_STANDARD_20 +int64 ObLLVMHelper::get_integer_type_id() +{ + return ::llvm::Type::IntegerTyID; +} + +int64 ObLLVMHelper::get_pointer_type_id() +{ + return ::llvm::Type::PointerTyID; +} + +int64 ObLLVMHelper::get_struct_type_id() +{ + return ::llvm::Type::StructTyID; +} +#endif + } // namespace jit } // namespace oceanbase diff --git a/src/observer/omt/ob_tenant_mtl_helper.h b/src/observer/omt/ob_tenant_mtl_helper.h index bb1f83e62..de8ed2874 100644 --- a/src/observer/omt/ob_tenant_mtl_helper.h +++ b/src/observer/omt/ob_tenant_mtl_helper.h @@ -32,7 +32,7 @@ typename std::enable_if::value, int>::type mtl_new_default(T } template -typename std::enable_if::value, int>::type mtl_new_default(T) +typename std::enable_if::value, int>::type mtl_new_default(T &m) { return oceanbase::common::OB_SUCCESS; } diff --git a/src/pl/ob_pl_code_generator.cpp b/src/pl/ob_pl_code_generator.cpp index 1e6d3d4e7..fabfc76df 100644 --- a/src/pl/ob_pl_code_generator.cpp +++ b/src/pl/ob_pl_code_generator.cpp @@ -6175,7 +6175,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value) OZ (args.push_back(str)); OZ (args.push_back(len)); OZ (args.push_back(value)); +#ifdef CPP_STANDARD_20 + if (helper_.get_integer_type_id() == value.get_type_id()) { +#else if (12 == value.get_type_id()) { //12 is IntegerTyID +#endif switch (value.get_type().get_width()) { case 8: { OZ (helper_.create_call(ObString("debug"), get_eh_service().eh_debug_int8_, args)); @@ -6195,7 +6199,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value) } break; } +#ifdef CPP_STANDARD_20 + } else if (helper_.get_pointer_type_id() == value.get_type_id() && helper_.get_integer_type_id() == value.get_type().get_child(0).get_id()) { +#else } else if (14 == value.get_type_id() && 12 == value.get_type().get_child(0).get_id()) { //14 is PointerTyID +#endif switch (value.get_type().get_child(0).get_width()) { case 8: { OZ (helper_.create_call(ObString("debug"), get_eh_service().eh_debug_int8ptr_, args)); @@ -6215,7 +6223,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value) } break; } +#ifdef CPP_STANDARD_20 + } else if (helper_.get_pointer_type_id() == value.get_type_id() && helper_.get_struct_type_id() == value.get_type().get_child(0).get_id()) { +#else } else if (14 == value.get_type_id() && 15 == value.get_type().get_child(0).get_id()) { //14 is PointerTyID, 15 is StructTyID +#endif ObLLVMType obj_type; ObLLVMType objparam_type; OZ (adt_service_.get_obj(obj_type)); diff --git a/src/pl/ob_pl_exception_handling.cpp b/src/pl/ob_pl_exception_handling.cpp index ea2065473..931aa9973 100644 --- a/src/pl/ob_pl_exception_handling.cpp +++ b/src/pl/ob_pl_exception_handling.cpp @@ -613,7 +613,7 @@ _Unwind_Reason_Code ObPLEH::eh_personality(int version, _Unwind_Action actions, ObUnwindException *exceptionObject, struct _Unwind_Context *context) { - const uint8_t *lsda = static_cast(_Unwind_GetLanguageSpecificData(context)); + const uint8_t *lsda = reinterpret_cast(_Unwind_GetLanguageSpecificData(context)); LOG_DEBUG(">>>>>>>>>>0", K(version), K(actions), K(exceptionClass), K(lsda)); return handleLsda(version, lsda, actions, exceptionClass, exceptionObject, context); } diff --git a/src/pl/ob_pl_exception_handling.h b/src/pl/ob_pl_exception_handling.h index 1bd4aed25..9f6971b6e 100644 --- a/src/pl/ob_pl_exception_handling.h +++ b/src/pl/ob_pl_exception_handling.h @@ -15,7 +15,11 @@ #include "ob_pl_stmt.h" +#ifdef CPP_STANDARD_20 +#include "lib/clang/17/include/unwind.h" +#else #include "lib/clang/11.0.1/include/unwind.h" +#endif namespace oceanbase { diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index b98221941..634daf2af 100755 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -18993,7 +18993,7 @@ int ObDDLService::truncate_table_in_trans(const obrpc::ObTruncateTableArg &arg, } bool is_truncate_table = false; - bool recycle_cnt = 0; + int recycle_cnt = 0; for (int64_t i = 0; i < table_schemas.count() && OB_SUCC(ret); i++) { if (0 == i) { is_truncate_table = true; //record create table with opertion type TRUNCATE_TABLE_CREATE diff --git a/src/share/datum/ob_datum_cmp_func_def.h b/src/share/datum/ob_datum_cmp_func_def.h index 17954f8d9..4ed11bed6 100644 --- a/src/share/datum/ob_datum_cmp_func_def.h +++ b/src/share/datum/ob_datum_cmp_func_def.h @@ -135,7 +135,7 @@ struct ObDatumTCCmp : public ObDefined<> template struct ObFixedDoubleCmp: public ObDefined<> { - constexpr static double LOG_10[] = + constexpr static double LOG_10[32] = { 1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009, 1e010, 1e011, 1e012, 1e013, 1e014, 1e015, diff --git a/src/sql/CMakeLists.txt b/src/sql/CMakeLists.txt index eb691523c..48967212e 100644 --- a/src/sql/CMakeLists.txt +++ b/src/sql/CMakeLists.txt @@ -1490,6 +1490,9 @@ ob_set_subtarget(ob_sql udr udr/ob_udr_utils.cpp ) +if(CPP_STANDARD_20) + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) +endif() ob_add_new_object_target(ob_sql ob_sql) ob_set_subtarget(ob_sql_simd common