https://github.com/fmayer created https://github.com/llvm/llvm-project/pull/182602
None >From c39855e8f417c87c2508ba0d3b84ee345536a104 Mon Sep 17 00:00:00 2001 From: Florian Mayer <[email protected]> Date: Fri, 20 Feb 2026 14:18:32 -0800 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.7 --- .../Analysis/FlowSensitive/MockHeaders.cpp | 102 +++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp index 8ea2015da08df..55abb57091bdf 100644 --- a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp +++ b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp @@ -219,6 +219,8 @@ inline constexpr bool is_convertible_v = is_convertible<From, To>::value; template <class...> using void_t = void; +template <class...> +using __void_t = void; template <class, class T, class... Args> struct is_constructible_ : false_type {}; @@ -2000,6 +2002,103 @@ char *Check_LTImpl(const T1 &v1, const T2 &v2, const char *names); #endif // ABSL_LOG_H )cc"; +static constexpr char StdCoroutineHeader[] = R"cc( +#ifndef COROUTINE_H +#define COROUTINE_H + +#include "std_type_traits.h" + +namespace std { + +template <class _Tp, class = void> +struct __coroutine_traits_sfinae {}; + +template <class _Tp> +struct __coroutine_traits_sfinae< _Tp, __void_t<typename _Tp::promise_type> > { + using promise_type = typename _Tp::promise_type; +}; + +template <class _Ret, class... _Args> +struct coroutine_traits : public __coroutine_traits_sfinae<_Ret> {}; + +template <class _Promise = void> +struct coroutine_handle; + +template <> +struct coroutine_handle<void> { +public: + constexpr coroutine_handle() noexcept; + constexpr coroutine_handle(nullptr_t) noexcept; + coroutine_handle& operator=(nullptr_t) noexcept; + constexpr void* address() const noexcept; + + static constexpr coroutine_handle from_address(void* __addr) noexcept; + + // [coroutine.handle.observers], observers + constexpr explicit operator bool() const noexcept; + + bool done() const; + + // [coroutine.handle.resumption], resumption + void operator()() const; + + void resume() const; + + void destroy() const; +}; + +template <class _Promise> +struct coroutine_handle { +public: + // [coroutine.handle.con], construct/reset + constexpr coroutine_handle() noexcept; + + constexpr coroutine_handle(nullptr_t) noexcept; + + static coroutine_handle from_promise(_Promise& __promise); + coroutine_handle& operator=(nullptr_t) noexcept; + + // [coroutine.handle.export.import], export/import + constexpr void* address() const noexcept; + + static constexpr coroutine_handle from_address(void* __addr) noexcept; + + // [coroutine.handle.conv], conversion + constexpr operator coroutine_handle<>() const noexcept; + + // [coroutine.handle.observers], observers + constexpr explicit operator bool() const noexcept; + + bool done() const; + + // [coroutine.handle.resumption], resumption + void operator()() const; + + void resume() const; + + void destroy() const; + + // [coroutine.handle.promise], promise access + _Promise& promise() const; +}; + +struct suspend_never { + constexpr bool await_ready() const noexcept { return true; } + constexpr void await_suspend(coroutine_handle<>) const noexcept {} + constexpr void await_resume() const noexcept {} +}; + +struct suspend_always { + constexpr bool await_ready() const noexcept { return false; } + constexpr void await_suspend(coroutine_handle<>) const noexcept {} + constexpr void await_resume() const noexcept {} +}; + +} // namespace std + +#endif // COROUTINE_H +)cc"; + constexpr const char TestingDefsHeader[] = R"cc( #pragma clang system_header @@ -2333,6 +2432,7 @@ std::vector<std::pair<std::string, std::string>> getMockHeaders() { Headers.emplace_back("std_type_traits.h", StdTypeTraitsHeader); Headers.emplace_back("std_utility.h", StdUtilityHeader); Headers.emplace_back("std_optional.h", StdOptionalHeader); + Headers.emplace_back("std_coroutine.h", StdCoroutineHeader); Headers.emplace_back("absl_type_traits.h", AbslTypeTraitsHeader); Headers.emplace_back("absl_optional.h", AbslOptionalHeader); Headers.emplace_back("base_optional.h", BaseOptionalHeader); @@ -2348,4 +2448,4 @@ std::vector<std::pair<std::string, std::string>> getMockHeaders() { } // namespace test } // namespace dataflow -} // namespace clang \ No newline at end of file +} // namespace clang _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
