[Lldb-commits] [lldb] [lldb] Gracefully down TestCoroutineHandle test in case the 'coroutine' feature is missing (PR #94903)
Dmitry Vasilyev via lldb-commits
lldb-commits at lists.llvm.org
Sun Jun 9 07:50:04 PDT 2024
https://github.com/slydiman created https://github.com/llvm/llvm-project/pull/94903
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.
>From b0a1c4152ebbca95f5560562c9f5605b505d353c Mon Sep 17 00:00:00 2001
From: Dmitry Vasilyev <dvassiliev at 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 | 24 ++++++++++++++++---
2 files changed, 29 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..ab1bea7597cfe 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,5 @@ 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
+#endif // HAS_CPP_COROUTINES
}
More information about the lldb-commits
mailing list