danvratil / qcoro

C++ Coroutines for Qt
https://qcoro.dvratil.cz
MIT License
326 stars 53 forks source link

Clang 14.x ornery about std::experimental::coroutine_traits #204

Closed malachib closed 8 months ago

malachib commented 8 months ago

Environment:

While compiling for Android, we get:

support for std::experimental::coroutine_traits will be removed in LLVM 15; use std::coroutine_traits instead

Which promotes from a warning to an error. Workaround is to specify in CMakeLists.txt

if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    add_compile_options(-Wno-error=deprecated-experimental-coroutine)
endif()

Which gets us going, but presumably Clang 15+ that will fail. However, I see PRs in this repo which are using Clang 17. So who knows. All I know is my Android compile failed without the workaround

danvratil commented 8 months ago

std::experimental isn't used if the standard library defines __cpp_lib_coroutine, thus I suspect something is fishy with clang/libc++ in Android NDK...I downloaded the Android NDK 25 (I downloaded 25.2.9519653, which is slightly newer than yours, but that shouldn't matter), and searching the NDK I can only find the <experimental/coroutine> header:

❯ cd android-ndk-r25c
❯ find . -name "coroutine"
./toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/experimental/coroutine
./sources/cxx-stl/llvm-libc++/include/experimental/coroutine

The reason why is most likely because the Android NDK ships clang 14, but the libc++ standard library is older:

❯ cat toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__libcpp_version
11000

libc++ 11 indeed does not have the <coroutines> include header, only <experimental/coroutines>, so QCoro falls back to including that, which triggers the warning from clang.

I'll add the compile option to QCoro when building on Android....

danvratil commented 8 months ago

Btw I also checked NDK 26, which ships libc++ 17 which does have full coroutine support, so QCoro should work there out of the box without any changes.

malachib commented 8 months ago

Your attention to detail is remarkable. Thank you!