diff --git a/stl/src/primitives.hpp b/stl/src/primitives.hpp index fa82288c1cf..a944a5928f5 100644 --- a/stl/src/primitives.hpp +++ b/stl/src/primitives.hpp @@ -2,27 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #pragma once -#pragma warning(push) -#pragma warning(disable : 4201) // nonstandard extension used: nameless struct/union -#pragma warning(disable : 4324) // structure was padded due to alignment specifier -#include #include // for __max #include #include -#include - #include "awint.hpp" -#ifdef _STL_CONCRT_SUPPORT -#pragma warning(push) -#pragma warning(disable : 6297 6385 6386 6504 28204) -#include -#include -#pragma warning(pop) -#endif - enum class __stl_sync_api_modes_enum { normal, win7, vista, concrt }; extern __stl_sync_api_modes_enum __stl_sync_api_impl_mode; @@ -195,78 +181,6 @@ namespace Concurrency { CONDITION_VARIABLE m_condition_variable; }; -#ifdef _STL_CONCRT_SUPPORT - class stl_critical_section_concrt final : public stl_critical_section_interface { - public: - stl_critical_section_concrt() = default; - ~stl_critical_section_concrt() = delete; - stl_critical_section_concrt(const stl_critical_section_concrt&) = delete; - stl_critical_section_concrt& operator=(const stl_critical_section_concrt&) = delete; - - virtual void lock() override { - m_critical_section.lock(); - } - - virtual bool try_lock() override { - return m_critical_section.try_lock(); - } - - virtual bool try_lock_for(unsigned int duration) override { - return m_critical_section.try_lock_for(duration); - } - - virtual void unlock() override { - m_critical_section.unlock(); - } - - virtual void destroy() override { - // the destructor of stl_critical_section_concrt will never be invoked - m_critical_section.~critical_section(); - } - - critical_section& native_handle() { - return m_critical_section; - } - - private: - critical_section m_critical_section; - }; - - class stl_condition_variable_concrt final : public stl_condition_variable_interface { - public: - stl_condition_variable_concrt() = default; - ~stl_condition_variable_concrt() = delete; - stl_condition_variable_concrt(const stl_condition_variable_concrt&) = delete; - stl_condition_variable_concrt& operator=(const stl_condition_variable_concrt&) = delete; - - virtual void wait(stl_critical_section_interface* lock) override { - m_condition_variable.wait(static_cast(lock)->native_handle()); - } - - virtual bool wait_for(stl_critical_section_interface* lock, unsigned int timeout) override { - return m_condition_variable.wait_for( - static_cast(lock)->native_handle(), timeout); - } - - virtual void notify_one() override { - m_condition_variable.notify_one(); - } - - virtual void notify_all() override { - m_condition_variable.notify_all(); - } - - virtual void destroy() override { - // the destructor of stl_condition_variable_concrt will never be invoked - m_condition_variable.~_Condition_variable(); - } - - private: - _Condition_variable m_condition_variable; - }; - -#endif // _STL_CONCRT_SUPPORT - inline bool are_win7_sync_apis_available() { #if _STL_WIN32_WINNT >= _WIN32_WINNT_WIN7 return true; @@ -327,32 +241,29 @@ namespace Concurrency { const size_t stl_condition_variable_max_alignment = alignof(stl_condition_variable_win7); #elif defined _STL_CONCRT_SUPPORT -// TRANSITION: stl_critical_section_concrt and stl_condition_variable_concrt are now unused, -// except to determine these size/alignment values. After verifying that these static_asserts succeed, -// we can substitute these values below, and remove the class definitions. #ifdef _WIN64 - static_assert(sizeof(stl_critical_section_concrt) == 64); - static_assert(sizeof(stl_condition_variable_concrt) == 72); - static_assert(alignof(stl_critical_section_concrt) == 8); - static_assert(alignof(stl_condition_variable_concrt) == 8); + const size_t sizeof_stl_critical_section_concrt = 64; + const size_t sizeof_stl_condition_variable_concrt = 72; + const size_t alignof_stl_critical_section_concrt = 8; + const size_t alignof_stl_condition_variable_concrt = 8; #else // ^^^ 64-bit / 32-bit vvv - static_assert(sizeof(stl_critical_section_concrt) == 36); - static_assert(sizeof(stl_condition_variable_concrt) == 40); - static_assert(alignof(stl_critical_section_concrt) == 4); - static_assert(alignof(stl_condition_variable_concrt) == 4); + const size_t sizeof_stl_critical_section_concrt = 36; + const size_t sizeof_stl_condition_variable_concrt = 40; + const size_t alignof_stl_critical_section_concrt = 4; + const size_t alignof_stl_condition_variable_concrt = 4; #endif // ^^^ 32-bit ^^^ const size_t stl_critical_section_max_size = - __max(__max(sizeof(stl_critical_section_concrt), sizeof(stl_critical_section_vista)), + __max(__max(sizeof_stl_critical_section_concrt, sizeof(stl_critical_section_vista)), sizeof(stl_critical_section_win7)); const size_t stl_condition_variable_max_size = - __max(__max(sizeof(stl_condition_variable_concrt), sizeof(stl_condition_variable_vista)), + __max(__max(sizeof_stl_condition_variable_concrt, sizeof(stl_condition_variable_vista)), sizeof(stl_condition_variable_win7)); const size_t stl_critical_section_max_alignment = - __max(__max(alignof(stl_critical_section_concrt), alignof(stl_critical_section_vista)), + __max(__max(alignof_stl_critical_section_concrt, alignof(stl_critical_section_vista)), alignof(stl_critical_section_win7)); const size_t stl_condition_variable_max_alignment = - __max(__max(alignof(stl_condition_variable_concrt), alignof(stl_condition_variable_vista)), + __max(__max(alignof_stl_condition_variable_concrt, alignof(stl_condition_variable_vista)), alignof(stl_condition_variable_win7)); #else const size_t stl_critical_section_max_size = @@ -366,5 +277,3 @@ namespace Concurrency { #endif } // namespace details } // namespace Concurrency - -#pragma warning(pop)