https://github.com/slydiman updated https://github.com/llvm/llvm-project/pull/94903
>From 6e988bcbbd4310a09c6baa553b4cf55998e92034 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilyev <dvassil...@accesssoftek.com> Date: Sun, 9 Jun 2024 18:33:03 +0400 Subject: [PATCH] [lldb] Gracefully down TestCoroutineHandle test in case the 'coroutine' feature is missing Do not let the compiler gets failed in case the target platform does not support the 'coroutine' C++ features. Just compile without it and let lldb know about missed/unsupported feature. --- .../generic/coroutine_handle/Makefile | 8 ++++++ .../generic/coroutine_handle/main.cpp | 27 ++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/Makefile index 6914024392cfd..3e5da0ecae669 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/Makefile +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/Makefile @@ -1,4 +1,12 @@ CXX_SOURCES := main.cpp CFLAGS_EXTRAS := -std=c++20 +ifeq "1" "$(USE_LIBSTDCPP)" + CFLAGS_EXTRAS += -DUSE_LIBSTDCPP +endif + +ifeq "1" "$(USE_LIBCPP)" + CFLAGS_EXTRAS += -DUSE_LIBCPP +endif + include Makefile.rules diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/main.cpp index 8cb81c3bc9f4c..aaf76e0d8d99a 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/main.cpp +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/coroutine_handle/main.cpp @@ -1,13 +1,27 @@ +#if defined(USE_LIBSTDCPP) +#include <bits/c++config.h> +// glibc++ >= 11 and c++20 +#if defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >= 11 #include <coroutine> +#define HAS_CPP_COROUTINES 1 +#endif +#endif + +// libc++ always has 'coroutine' feature. +#if defined(USE_LIBCPP) +#include <coroutine> +#define HAS_CPP_COROUTINES 1 +#endif bool is_implementation_supported() { -#ifdef _GLIBCXX_RELEASE - return _GLIBCXX_RELEASE >= 11; -#else +#ifdef HAS_CPP_COROUTINES return true; +#else + return false; #endif } +#ifdef HAS_CPP_COROUTINES // `int_generator` is a stripped down, minimal coroutine generator // type. struct int_generator { @@ -39,8 +53,11 @@ int_generator my_generator_func() { co_yield 42; } // a place to reliably set a breakpoint on. void empty_function_so_we_can_set_a_breakpoint() {} +#endif // HAS_CPP_COROUTINES + int main() { bool is_supported = is_implementation_supported(); +#ifdef HAS_CPP_COROUTINES int_generator gen = my_generator_func(); std::coroutine_handle<> type_erased_hdl = gen.hdl; std::coroutine_handle<int> incorrectly_typed_hdl = @@ -48,4 +65,8 @@ int main() { gen.hdl.resume(); // Break at initial_suspend gen.hdl.resume(); // Break after co_yield empty_function_so_we_can_set_a_breakpoint(); // Break at final_suspend + return 0; +#else + return 0; // Break at initial_suspend +#endif // HAS_CPP_COROUTINES } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits