Export of internal Abseil changes.

--
de82143f509d8fd6e70efc9eaed35582054a7443 by Abseil Team <absl-team@google.com>:

Mark optional::reset() with the ABSL_ATTRIBUTE_REINITIALIZES attribute.

This prevents false positives in the clang-tidy check bugprone-use-after-move; it allows reset() to be called on a moved-from optional without any warnings, and the optional will thereafter be regarded as initialized again.

PiperOrigin-RevId: 210502364

--
e645e68c44df957271e109aca6d68af530e27d04 by Derek Mauro <dmauro@google.com>:

Mark //absl/synchronization:thread_pool as only visible to internal
Abseil targets since it is internal-only.

PiperOrigin-RevId: 210406260

--
09b53240efba9bf73190eaea91fe33b9eafc3529 by Abseil Team <absl-team@google.com>:

Add support for the [[clang::reinitializes]] attribute.

This will be used to prevent false positives in the clang-tidy check
bugprone-use-after-move.

PiperOrigin-RevId: 210377317
GitOrigin-RevId: de82143f509d8fd6e70efc9eaed35582054a7443
Change-Id: Ibac1ee694f7b5b9f5aff8670559e49505ff8ee11
This commit is contained in:
Abseil Team 2018-08-28 01:05:21 -07:00 committed by jueminyang
parent 28080f5f05
commit d6df769173
3 changed files with 19 additions and 1 deletions

View file

@ -494,6 +494,20 @@
#define ABSL_XRAY_LOG_ARGS(N)
#endif
// ABSL_ATTRIBUTE_REINITIALIZES
//
// Indicates that a member function reinitializes the entire object to a known
// state, independent of the previous state of the object.
//
// The clang-tidy check bugprone-use-after-move allows member functions marked
// with this attribute to be called on objects that have been moved from;
// without the attribute, this would result in a use-after-move warning.
#if ABSL_HAVE_CPP_ATTRIBUTE(clang::reinitializes)
#define ABSL_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]]
#else
#define ABSL_ATTRIBUTE_REINITIALIZES
#endif
// -----------------------------------------------------------------------------
// Variable Attributes
// -----------------------------------------------------------------------------

View file

@ -138,6 +138,9 @@ cc_library(
name = "thread_pool",
testonly = 1,
hdrs = ["internal/thread_pool.h"],
visibility = [
"//absl:__subpackages__",
],
deps = [
":synchronization",
"//absl/base:core_headers",

View file

@ -59,6 +59,7 @@ using std::nullopt;
#include <type_traits>
#include <utility>
#include "absl/base/attributes.h"
#include "absl/memory/memory.h"
#include "absl/meta/type_traits.h"
#include "absl/types/bad_optional_access.h"
@ -700,7 +701,7 @@ class optional : private optional_internal::optional_data<T>,
// optional::reset()
//
// Destroys the inner `T` value of an `absl::optional` if one is present.
void reset() noexcept { this->destruct(); }
ABSL_ATTRIBUTE_REINITIALIZES void reset() noexcept { this->destruct(); }
// optional::emplace()
//