This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new f17f1bbe283 [fix](build) Fix compilation errors with implicit 
conversions and unnecessary virtual keywords (#61836)
f17f1bbe283 is described below

commit f17f1bbe2833bb7833d6a9aa4e0103e3ac33358c
Author: zclllyybb <[email protected]>
AuthorDate: Sat Mar 28 23:09:29 2026 +0800

    [fix](build) Fix compilation errors with implicit conversions and 
unnecessary virtual keywords (#61836)
    
    - Restrict `-fsanitize-ignorelist` flag to Clang only in ASAN build
    flags, as GCC does not support this option
    - Add explicit `static_cast<uint16_t>` for bitwise NOT operations to fix
    implicit conversion warnings in memcmp_small.h, ip_address_cidr.h, and
    find_symbols.h
    - Add explicit cast in ipv6_to_binary.h mask generation and simplify
    template usage
    - Remove unnecessary `virtual` keywords
---
 be/CMakeLists.txt                            |  5 ++++-
 be/src/core/memcmp_small.h                   | 12 ++++++------
 be/src/core/value/ip_address_cidr.h          |  2 +-
 be/src/exec/common/ipv6_to_binary.h          | 25 +++++++++++--------------
 be/src/exprs/function/url/find_symbols.h     |  2 +-
 be/src/storage/task/engine_batch_load_task.h |  6 +++---
 be/src/storage/task/engine_clone_task.h      |  4 ++--
 7 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 0f85fcd7ba4..715b8764051 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -428,7 +428,10 @@ endif()
 #   -DNDEBUG: Turn off dchecks/asserts/debug only code.
 set(CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 message(STATUS "UBSAN_IGNORELIST is ${UBSAN_IGNORELIST}")
-set(CXX_FLAGS_ASAN "-O0 -fsanitize=address -fsanitize=undefined 
-fno-sanitize=float-cast-overflow -fsanitize-ignorelist=${UBSAN_IGNORELIST} 
-DUNDEFINED_BEHAVIOR_SANITIZER -DADDRESS_SANITIZER")
+set(CXX_FLAGS_ASAN "-O0 -fsanitize=address -fsanitize=undefined 
-fno-sanitize=float-cast-overflow -DUNDEFINED_BEHAVIOR_SANITIZER 
-DADDRESS_SANITIZER")
+if (COMPILER_CLANG)
+    set(CXX_FLAGS_ASAN "${CXX_FLAGS_ASAN} 
-fsanitize-ignorelist=${UBSAN_IGNORELIST}")
+endif()
 set(CXX_FLAGS_LSAN "-O0 -fsanitize=leak -DLEAK_SANITIZER")
 ## Use for BE-UT
 set(CXX_FLAGS_ASAN_UT "-O0 -fsanitize=address -DADDRESS_SANITIZER")
diff --git a/be/src/core/memcmp_small.h b/be/src/core/memcmp_small.h
index 5f8eca28588..913977eb00f 100644
--- a/be/src/core/memcmp_small.h
+++ b/be/src/core/memcmp_small.h
@@ -58,7 +58,7 @@ inline int memcmp_small_allow_overflow15(const uint8_t* a, 
size_t a_size, const
         uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
                                _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(b + offset)))));
-        mask = ~mask;
+        mask = static_cast<uint16_t>(~mask);
 
         if (mask) {
             offset += __builtin_ctz(mask);
@@ -80,7 +80,7 @@ inline int memcmp_small_allow_overflow15(const uint8_t* a, 
const uint8_t* b, siz
         uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
                                _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(b + offset)))));
-        mask = ~mask;
+        mask = static_cast<uint16_t>(~mask);
 
         if (mask) {
             offset += __builtin_ctz(mask);
@@ -104,7 +104,7 @@ inline bool memequal_small_allow_overflow15(const uint8_t* 
a, size_t a_size, con
         uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
                                _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(b + offset)))));
-        mask = ~mask;
+        mask = static_cast<uint16_t>(~mask);
 
         if (mask) {
             offset += __builtin_ctz(mask);
@@ -122,7 +122,7 @@ inline int memcmp_small_multiple_of16(const uint8_t* a, 
const uint8_t* b, size_t
         uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
                                _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(b + offset)))));
-        mask = ~mask;
+        mask = static_cast<uint16_t>(~mask);
 
         if (mask) {
             offset += __builtin_ctz(mask);
@@ -139,7 +139,7 @@ inline int memcmp16(const uint8_t* a, const uint8_t* b) {
     uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
             _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a)),
                            _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(b)))));
-    mask = ~mask;
+    mask = static_cast<uint16_t>(~mask);
 
     if (mask) {
         auto offset = __builtin_ctz(mask);
@@ -165,7 +165,7 @@ inline bool memory_is_zero_small_allow_overflow15(const 
void* data, size_t size)
         uint16_t mask = static_cast<uint16_t>(_mm_movemask_epi8(
                 _mm_cmpeq_epi8(zero16, _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(
                                                reinterpret_cast<const 
char*>(data) + offset)))));
-        mask = ~mask;
+        mask = static_cast<uint16_t>(~mask);
 
         if (mask) {
             offset += __builtin_ctz(mask);
diff --git a/be/src/core/value/ip_address_cidr.h 
b/be/src/core/value/ip_address_cidr.h
index cae23db68e0..b096ed55985 100644
--- a/be/src/core/value/ip_address_cidr.h
+++ b/be/src/core/value/ip_address_cidr.h
@@ -116,7 +116,7 @@ inline bool match_ipv6_subnet(const uint8_t* addr, const 
uint8_t* cidr_addr, uin
     uint16_t mask = (uint16_t)_mm_movemask_epi8(
             _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(addr)),
                            _mm_loadu_si128(reinterpret_cast<const 
__m128i*>(cidr_addr))));
-    mask = ~mask;
+    mask = static_cast<uint16_t>(~mask);
 
     if (mask) {
         const auto offset = std::countl_zero(mask);
diff --git a/be/src/exec/common/ipv6_to_binary.h 
b/be/src/exec/common/ipv6_to_binary.h
index 6b0033fa412..2c5f8f1fa42 100644
--- a/be/src/exec/common/ipv6_to_binary.h
+++ b/be/src/exec/common/ipv6_to_binary.h
@@ -20,6 +20,8 @@
 
 #pragma once
 
+#include <algorithm>
+
 #include "exec/common/format_ip.h"
 
 namespace doris {
@@ -29,18 +31,15 @@ namespace doris {
 constexpr size_t IPV6_MASKS_COUNT = 256;
 using RawMaskArrayV6 = std::array<uint8_t, IPV6_BINARY_LENGTH>;
 
-template <typename RawMaskArrayT>
-static constexpr RawMaskArrayT generate_bit_mask(size_t prefix) {
-    RawMaskArrayT arr {0};
-    if (prefix >= arr.size() * 8) {
-        prefix = arr.size() * 8;
-    }
+static constexpr RawMaskArrayV6 generate_bit_mask(size_t prefix) {
+    RawMaskArrayV6 arr {0};
+    prefix = std::min(prefix, arr.size() * 8);
     int8_t i = IPV6_BINARY_LENGTH - 1;
     for (; prefix >= 8; --i, prefix -= 8) {
         arr[i] = 0xff;
     }
     if (prefix > 0) {
-        arr[i--] = ~(0xff >> prefix);
+        arr[i--] = static_cast<uint8_t>(~(0xff >> prefix));
     }
     while (i >= 0) {
         arr[i--] = 0x00;
@@ -48,11 +47,10 @@ static constexpr RawMaskArrayT generate_bit_mask(size_t 
prefix) {
     return arr;
 }
 
-template <typename RawMaskArrayT, size_t masksCount>
-static constexpr std::array<RawMaskArrayT, masksCount> generate_bit_masks() {
-    std::array<RawMaskArrayT, masksCount> arr {};
-    for (size_t i = 0; i < masksCount; ++i) {
-        arr[i] = generate_bit_mask<RawMaskArrayT>(i);
+static constexpr std::array<RawMaskArrayV6, IPV6_MASKS_COUNT> 
generate_bit_masks() {
+    std::array<RawMaskArrayV6, IPV6_MASKS_COUNT> arr {};
+    for (size_t i = 0; i < IPV6_MASKS_COUNT; ++i) {
+        arr[i] = generate_bit_mask(i);
     }
     return arr;
 }
@@ -62,8 +60,7 @@ static constexpr std::array<RawMaskArrayT, masksCount> 
generate_bit_masks() {
 /// The reference is valid during all program execution time.
 /// Values of prefix_len greater than 128 interpreted as 128 exactly.
 inline const std::array<uint8_t, 16>& get_cidr_mask_ipv6(uint8_t prefix_len) {
-    static constexpr auto IPV6_RAW_MASK_ARRAY =
-            generate_bit_masks<RawMaskArrayV6, IPV6_MASKS_COUNT>();
+    static constexpr auto IPV6_RAW_MASK_ARRAY = generate_bit_masks();
     return IPV6_RAW_MASK_ARRAY[prefix_len];
 }
 
diff --git a/be/src/exprs/function/url/find_symbols.h 
b/be/src/exprs/function/url/find_symbols.h
index 4eafea893f8..639dd82e369 100644
--- a/be/src/exprs/function/url/find_symbols.h
+++ b/be/src/exprs/function/url/find_symbols.h
@@ -151,7 +151,7 @@ constexpr uint16_t maybe_negate(uint16_t x) {
     if constexpr (positive)
         return x;
     else
-        return ~x;
+        return static_cast<uint16_t>(~x);
 }
 
 enum class ReturnMode : uint8_t {
diff --git a/be/src/storage/task/engine_batch_load_task.h 
b/be/src/storage/task/engine_batch_load_task.h
index 39459f79499..e9898dfa2e4 100644
--- a/be/src/storage/task/engine_batch_load_task.h
+++ b/be/src/storage/task/engine_batch_load_task.h
@@ -39,13 +39,13 @@ public:
     Status execute() override;
 
 private:
-    virtual Status _init();
+    Status _init();
 
     // The process of push data to olap engine
     //
     // Output parameters:
     // * tablet_infos: The info of pushed tablet after push data
-    virtual Status _process();
+    Status _process();
 
     // Delete data of specified tablet according to delete conditions,
     // once delete_data command submit success, deleted data is not visible,
@@ -55,7 +55,7 @@ private:
     // @param [out] tablet_info_vec return tablet last status, which
     //              include version info, row count, data size, etc
     // @return OK if submit delete_data success
-    virtual Status _delete_data(const TPushReq& request, 
std::vector<TTabletInfo>* tablet_info_vec);
+    Status _delete_data(const TPushReq& request, std::vector<TTabletInfo>* 
tablet_info_vec);
 
     Status _get_tmp_file_dir(const std::string& root_path, std::string* 
local_path);
     Status _push(const TPushReq& request, std::vector<TTabletInfo>* 
tablet_info_vec);
diff --git a/be/src/storage/task/engine_clone_task.h 
b/be/src/storage/task/engine_clone_task.h
index a35cb4b0e23..c26350e9ae6 100644
--- a/be/src/storage/task/engine_clone_task.h
+++ b/be/src/storage/task/engine_clone_task.h
@@ -63,8 +63,8 @@ public:
 private:
     Status _do_clone();
 
-    virtual Status _finish_clone(Tablet* tablet, const std::string& clone_dir, 
int64_t version,
-                                 bool is_incremental_clone);
+    Status _finish_clone(Tablet* tablet, const std::string& clone_dir, int64_t 
version,
+                         bool is_incremental_clone);
 
     Status _finish_incremental_clone(Tablet* tablet, const 
TabletMetaSharedPtr& cloned_tablet_meta,
                                      int64_t version);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to