diff options
Diffstat (limited to 'absl/base')
-rw-r--r-- | absl/base/optimization.h | 24 | ||||
-rw-r--r-- | absl/base/optimization_test.cc | 19 |
2 files changed, 0 insertions, 43 deletions
diff --git a/absl/base/optimization.h b/absl/base/optimization.h index 57999a18..db5cc097 100644 --- a/absl/base/optimization.h +++ b/absl/base/optimization.h @@ -249,28 +249,4 @@ #define ABSL_INTERNAL_UNIQUE_SMALL_NAME() #endif -// ABSL_IS_TRIVIALLY_RELOCATABLE(type) -// Detects whether a type is "trivially relocatable" -- meaning it can be -// relocated without invoking the constructor/destructor, using a form of move -// elision. -// -// Example: -// -// if constexpr (ABSL_IS_TRIVIALLY_RELOCATABLE(T)) { -// memcpy(new_location, old_location, sizeof(T)); -// } else { -// new(new_location) T(std::move(*old_location)); -// old_location->~T(); -// } -// -// Upstream documentation: -// -// https://clang.llvm.org/docs/LanguageExtensions.html#:~:text=__is_trivially_relocatable -// -#if ABSL_HAVE_BUILTIN(__is_trivially_relocatable) -#define ABSL_IS_TRIVIALLY_RELOCATABLE(type) __is_trivially_relocatable(type) -#else -#define ABSL_IS_TRIVIALLY_RELOCATABLE(type) false -#endif - #endif // ABSL_BASE_OPTIMIZATION_H_ diff --git a/absl/base/optimization_test.cc b/absl/base/optimization_test.cc index 5f7a8f4c..e83369f3 100644 --- a/absl/base/optimization_test.cc +++ b/absl/base/optimization_test.cc @@ -15,7 +15,6 @@ #include "absl/base/optimization.h" #include "gtest/gtest.h" -#include "absl/base/attributes.h" #include "absl/types/optional.h" namespace { @@ -127,22 +126,4 @@ TEST(PredictTest, ExplicitBoolConversion) { if (ABSL_PREDICT_FALSE(is_false)) ADD_FAILURE(); } -TEST(TrivallyRelocatable, Sanity) { -#if !defined(ABSL_HAVE_ATTRIBUTE_TRIVIAL_ABI) || \ - !ABSL_HAVE_BUILTIN(__is_trivially_relocatable) - GTEST_SKIP() << "No trivial ABI support."; -#endif - - struct Trivial {}; - struct NonTrivial { - NonTrivial(const NonTrivial&) {} - }; - struct ABSL_ATTRIBUTE_TRIVIAL_ABI TrivialAbi { - TrivialAbi(const TrivialAbi&) {} - }; - EXPECT_TRUE(ABSL_IS_TRIVIALLY_RELOCATABLE(Trivial)); - EXPECT_FALSE(ABSL_IS_TRIVIALLY_RELOCATABLE(NonTrivial)); - EXPECT_TRUE(ABSL_IS_TRIVIALLY_RELOCATABLE(TrivialAbi)); -} - } // namespace |