From efbb6e002a8f4e11b6b084665cad79fa157b43f1 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 28 Jul 2023 14:08:16 +0300 Subject: [PATCH 1/7] `_ReportUnobservedException`: avoid extra handling Towards #3888 --- stl/src/ppltasks.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 147427ef05..c8f43ac582 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -37,14 +37,15 @@ namespace Concurrency { namespace details { [[noreturn]] _CRTIMP2 void __cdecl _ReportUnobservedException() { -#if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) +#if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) && _STL_WIN32_WINNT < _WIN32_WINNT_WIN8 if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) #endif { __fastfail(FAST_FAIL_INVALID_ARG); + _STL_UNREACHABLE; // TRANSITION, DevCom-10425806 - codegen should have assumed no return from __fastfail } - std::terminate(); + std::abort(); } namespace platform { From 6622ec63a1f3f617d325d04e3c3a985fb82b92a1 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 28 Jul 2023 15:06:43 +0300 Subject: [PATCH 2/7] Restructure to avoid unreachable code --- stl/src/ppltasks.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index c8f43ac582..0110ac0ecf 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -39,13 +39,14 @@ namespace Concurrency { #if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) && _STL_WIN32_WINNT < _WIN32_WINNT_WIN8 if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) -#endif { __fastfail(FAST_FAIL_INVALID_ARG); - _STL_UNREACHABLE; // TRANSITION, DevCom-10425806 - codegen should have assumed no return from __fastfail } std::abort(); +#else // ^^^ __fastfail conditionally avaialble / fastfail always avaialble vvv + __fastfail(FAST_FAIL_INVALID_ARG); +#endif /// ^^^ fastfail always avaialble ^^^ } namespace platform { From a59c4b694918af423f62edddfa198f5eea75d492 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 28 Jul 2023 17:22:03 +0300 Subject: [PATCH 3/7] format --- stl/src/ppltasks.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 0110ac0ecf..cc980768c8 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -38,8 +38,7 @@ namespace Concurrency { [[noreturn]] _CRTIMP2 void __cdecl _ReportUnobservedException() { #if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) && _STL_WIN32_WINNT < _WIN32_WINNT_WIN8 - if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) - { + if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) { __fastfail(FAST_FAIL_INVALID_ARG); } From 987f3abf59cc1d1b5a2a696be3ca5b7e6f35af3a Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 28 Jul 2023 21:02:13 +0300 Subject: [PATCH 4/7] typo available --- stl/src/ppltasks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index cc980768c8..37faa83f00 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -43,9 +43,9 @@ namespace Concurrency { } std::abort(); -#else // ^^^ __fastfail conditionally avaialble / fastfail always avaialble vvv +#else // ^^^ __fastfail conditionally available / fastfail always available vvv __fastfail(FAST_FAIL_INVALID_ARG); -#endif /// ^^^ fastfail always avaialble ^^^ +#endif /// ^^^ fastfail always available ^^^ } namespace platform { From 13d96dbb08f539853bcbde0e233221fac412ff95 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Fri, 28 Jul 2023 11:53:09 -0700 Subject: [PATCH 5/7] Casey's review comments --- stl/src/ppltasks.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 37faa83f00..78b5140046 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -36,16 +36,15 @@ namespace Concurrency { namespace details { [[noreturn]] _CRTIMP2 void __cdecl _ReportUnobservedException() { - #if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) && _STL_WIN32_WINNT < _WIN32_WINNT_WIN8 if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) { __fastfail(FAST_FAIL_INVALID_ARG); } std::abort(); -#else // ^^^ __fastfail conditionally available / fastfail always available vvv +#else // ^^^ __fastfail conditionally available / __fastfail always available vvv __fastfail(FAST_FAIL_INVALID_ARG); -#endif /// ^^^ fastfail always available ^^^ +#endif // ^^^ __fastfail always available ^^^ } namespace platform { From 5f5ca9e4b38b5c9e1637c8aa2dde032346e6b36c Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 28 Jul 2023 12:22:40 -0700 Subject: [PATCH 6/7] Remove extra spaces in comments. --- stl/src/ppltasks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 78b5140046..29d7bb95b0 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -42,9 +42,9 @@ namespace Concurrency { } std::abort(); -#else // ^^^ __fastfail conditionally available / __fastfail always available vvv +#else // ^^^ __fastfail conditionally available / __fastfail always available vvv __fastfail(FAST_FAIL_INVALID_ARG); -#endif // ^^^ __fastfail always available ^^^ +#endif // ^^^ __fastfail always available ^^^ } namespace platform { From b3fd0b096b34b621500ac309fa697bb36637cc87 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 28 Jul 2023 12:27:47 -0700 Subject: [PATCH 7/7] Invert, always invert. --- stl/src/ppltasks.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 29d7bb95b0..e5253e8622 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -37,14 +37,12 @@ namespace Concurrency { namespace details { [[noreturn]] _CRTIMP2 void __cdecl _ReportUnobservedException() { #if (defined(_M_IX86) || defined(_M_X64)) && !defined(_CRT_APP) && _STL_WIN32_WINNT < _WIN32_WINNT_WIN8 - if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) { - __fastfail(FAST_FAIL_INVALID_ARG); + if (!IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) { + std::abort(); } +#endif // ^^^ __fastfail conditionally available ^^^ - std::abort(); -#else // ^^^ __fastfail conditionally available / __fastfail always available vvv __fastfail(FAST_FAIL_INVALID_ARG); -#endif // ^^^ __fastfail always available ^^^ } namespace platform {