linrrzqqq opened a new pull request, #64390:
URL: https://github.com/apache/doris/pull/64390

   Related PR: https://github.com/apache/doris/pull/63191
   
   Problem Summary:
   
   Arrow 17 defaults to `C++17` when CMAKE_CXX_STANDARD is not specified, while 
Doris BE is built with `C++20`. This can make header-defined inline/template 
code from Arrow Flight and its dependencies be compiled under different C++ 
standard modes in the same final binary.
   
   In particular, Arrow Status-related inline paths may generate different 
implementations across C++17 and C++20, such as different initialization 
strategies for function-local static std::string objects:
   
   code:
   ```cpp
   const std::string& get_empty_string() {
       static const std::string s = "";
       return s;
   } 
   ```
   
   cpp17 lazy initialization:
   ```asm
   get_empty_string[abi:cxx11]():
           push    rbp
           mov     rbp, rsp
           sub     rsp, 64
           cmp     byte ptr [rip + guard variable for 
get_empty_string[abi:cxx11]()::s[abi:cxx11]], 0
           jne     .LBB0_4
           lea     rdi, [rip + guard variable for 
get_empty_string[abi:cxx11]()::s[abi:cxx11]]
           call    __cxa_guard_acquire@PLT
           cmp     eax, 0
           je      .LBB0_4
           lea     rdx, [rbp - 33]
           mov     qword ptr [rbp - 32], rdx
           mov     rax, qword ptr [rbp - 32]
           mov     qword ptr [rbp - 8], rax
           lea     rdi, [rip + get_empty_string[abi:cxx11]()::s[abi:cxx11]]
           lea     rsi, [rip + .L.str]
           call    std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char>>::basic_string<std::allocator<char>>(char const*, 
std::allocator<char> const&)
           jmp     .LBB0_3
   .LBB0_3:
           lea     rax, [rbp - 33]
           mov     qword ptr [rbp - 24], rax
           mov     rdi, qword ptr [rbp - 24]
           call    std::__new_allocator<char>::~__new_allocator() [base object 
destructor]
           lea     rdi, [rip + std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char>>::~basic_string() [base object 
destructor]]
           lea     rsi, [rip + get_empty_string[abi:cxx11]()::s[abi:cxx11]]
           lea     rdx, [rip + __dso_handle]
           call    __cxa_atexit@PLT
           lea     rdi, [rip + guard variable for 
get_empty_string[abi:cxx11]()::s[abi:cxx11]]
           call    __cxa_guard_release@PLT
   ```
   
   cpp20 constant initialization: 
   ```asm
   get_empty_string[abi:cxx11]():
           push    rbp
           mov     rbp, rsp
           lea     rax, [rip + get_empty_string[abi:cxx11]()::s[abi:cxx11]]
           pop     rbp
           ret
   
   get_empty_string[abi:cxx11]()::s[abi:cxx11]:
           .quad   get_empty_string[abi:cxx11]()::s[abi:cxx11]+16
           .quad   0
           .zero   16
   ```
   
   Mixing those definitions through `weak/COMDAT` symbols is not a supported 
build model and can surface as runtime crashes in Flight error/status handling 
paths.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to