From 733f875989a6fba05f4c366ea7b2ba4054994a7e Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 13 Apr 2022 07:27:23 -0700 Subject: [PATCH] Replace infinite recursion call (intentionally invoking undefined behavior to indicate unreachability) with explicit unreachability marker. PiperOrigin-RevId: 441474979 Change-Id: I1fcbb437026631212fec954c663482bb7e1cf819 --- googlemock/include/gmock/internal/gmock-internal-utils.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/googlemock/include/gmock/internal/gmock-internal-utils.h b/googlemock/include/gmock/internal/gmock-internal-utils.h index 22fff5cb..b1343fdc 100644 --- a/googlemock/include/gmock/internal/gmock-internal-utils.h +++ b/googlemock/include/gmock/internal/gmock-internal-utils.h @@ -305,10 +305,13 @@ GTEST_API_ WithoutMatchers GetWithoutMatchers(); template inline T Invalid() { Assert(false, "", -1, "Internal error: attempt to return invalid value"); - // This statement is unreachable, and would never terminate even if it - // could be reached. It is provided only to placate compiler warnings - // about missing return statements. +#if defined(__GNUC__) || defined(__clang__) + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(0); +#else return Invalid(); +#endif } #ifdef _MSC_VER