diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 05d98fdfab..5eba199e26 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -393,7 +393,7 @@ namespace fmt raw_throw_exception(src_loc, reinterpret_cast(fmt), type_info_v, fmt_args_t{fmt_unveil::get(args)...}); } -#ifndef _MSC_VER +#if !defined(_MSC_VER) || defined(__clang__) [[noreturn]] ~throw_exception(); #endif }; diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 6dc2dc8cf6..da5b25ce96 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -374,13 +374,23 @@ private: static const u64 process_affinity_mask; }; +#if defined(__has_cpp_attribute) +#if __has_cpp_attribute(no_unique_address) +#define NO_UNIQUE_ADDRESS [[no_unique_address]] +#else +#define NO_UNIQUE_ADDRESS +#endif +#else +#define NO_UNIQUE_ADDRESS +#endif + // Used internally template class thread_future_t : public thread_future, result_storage, Args...> { - [[no_unique_address]] decltype(std::make_tuple(std::forward(std::declval())...)) m_args; + NO_UNIQUE_ADDRESS decltype(std::make_tuple(std::forward(std::declval())...)) m_args; - [[no_unique_address]] Ctx m_func; + NO_UNIQUE_ADDRESS Ctx m_func; using future = thread_future_t; diff --git a/rpcs3/Emu/NP/np_handler.cpp b/rpcs3/Emu/NP/np_handler.cpp index 0b779f955a..b64fad1767 100644 --- a/rpcs3/Emu/NP/np_handler.cpp +++ b/rpcs3/Emu/NP/np_handler.cpp @@ -23,8 +23,8 @@ #include #else #ifdef __clang__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" #endif #include #include @@ -34,7 +34,7 @@ #include #include #ifdef __clang__ -#pragma GCC diagnostic pop +#pragma clang diagnostic pop #endif #endif diff --git a/rpcs3/Emu/NP/rpcn_client.cpp b/rpcs3/Emu/NP/rpcn_client.cpp index 8fa33a306a..5074ea81a4 100644 --- a/rpcs3/Emu/NP/rpcn_client.cpp +++ b/rpcs3/Emu/NP/rpcn_client.cpp @@ -23,8 +23,8 @@ #include #else #ifdef __clang__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" #endif #include #include @@ -37,7 +37,7 @@ #include #include #ifdef __clang__ -#pragma GCC diagnostic pop +#pragma clang diagnostic pop #endif #endif diff --git a/rpcs3/Emu/NP/rpcn_client.h b/rpcs3/Emu/NP/rpcn_client.h index 28200d7a2f..11acb291a5 100644 --- a/rpcs3/Emu/NP/rpcn_client.h +++ b/rpcs3/Emu/NP/rpcn_client.h @@ -12,14 +12,14 @@ #include #else #ifdef __clang__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" #endif #include #include #include #ifdef __clang__ -#pragma GCC diagnostic pop +#pragma clang diagnostic pop #endif #endif @@ -29,13 +29,13 @@ #include #ifdef __clang__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" -#pragma GCC diagnostic ignored "-Wextern-c-compat" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wextern-c-compat" #endif #include #ifdef __clang__ -#pragma GCC diagnostic pop +#pragma clang diagnostic pop #endif #include "rpcn_types.h" diff --git a/rpcs3/Emu/RSX/VK/VKMemAlloc.cpp b/rpcs3/Emu/RSX/VK/VKMemAlloc.cpp index f2c8d4e7fb..6f55268ffb 100644 --- a/rpcs3/Emu/RSX/VK/VKMemAlloc.cpp +++ b/rpcs3/Emu/RSX/VK/VKMemAlloc.cpp @@ -36,7 +36,7 @@ private: #define VMA_RW_MUTEX VmaRWMutex #define VMA_MUTEX VmaRWMutex -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) #pragma warning(push, 0) #else #pragma GCC diagnostic push diff --git a/rpcs3/rpcs3qt/rpcn_settings_dialog.cpp b/rpcs3/rpcs3qt/rpcn_settings_dialog.cpp index 6da91185f7..7cc819521a 100644 --- a/rpcs3/rpcs3qt/rpcn_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/rpcn_settings_dialog.cpp @@ -16,8 +16,17 @@ #include "Emu/NP/rpcn_config.h" #include "Emu/NP/ip_address.h" +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wextern-c-compat" +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif #include #include +#ifdef __clang__ +#pragma clang diagnostic pop +#endif LOG_CHANNEL(rpcn_settings_log, "rpcn settings dlg"); diff --git a/rpcs3/util/shared_ptr.hpp b/rpcs3/util/shared_ptr.hpp index 093d90ef7e..d66e6d6aa2 100644 --- a/rpcs3/util/shared_ptr.hpp +++ b/rpcs3/util/shared_ptr.hpp @@ -207,7 +207,10 @@ namespace stx } }; -#ifndef _MSC_VER +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winvalid-offsetof" +#elif !defined(_MSC_VER) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winvalid-offsetof" #endif @@ -316,7 +319,9 @@ namespace stx return make_single>(std::forward(value)); } -#ifndef _MSC_VER +#ifdef __clang__ +#pragma clang diagnostic pop +#elif !defined(_MSC_VER) #pragma GCC diagnostic pop #endif