0

Replace ABSL_ATTRIBUTE_* with base/ macros.

Approved on
https://groups.google.com/a/chromium.org/g/cxx/c/lVQOJTng1RU.

Bug: none
Change-Id: Ibe0f8f16bce55b3ede4c1e1d2720e83e8dd4faf0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5852373
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Auto-Submit: Peter Kasting <pkasting@chromium.org>
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Owners-Override: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1356840}
This commit is contained in:
Peter Kasting
2024-09-18 00:56:11 +00:00
committed by Chromium LUCI CQ
parent 5edbc5ad41
commit 4b18d0c047
108 changed files with 356 additions and 262 deletions
DEPS
ash
assistant
constants
base
chrome
browser
password_manager
safe_browsing
test
chromeos
ash
components
attestation
audio
cryptohome
dbus
login
auth
integrity
session
network
tpm
services
recording
components
onc
dbus
components
content
device/gamepad
docs/speed/binary_size
extensions/renderer
gin
gpu/command_buffer/service
ipc
mojo
net/base
ppapi/shared_impl
remoting/host/win
styleguide/c++
third_party
ui

1
DEPS

@ -4707,6 +4707,7 @@ include_rules = [
# //styleguide/c++/c++-features.md. # //styleguide/c++/c++-features.md.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/no_destructor.h', '-third_party/abseil-cpp/absl/base/no_destructor.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',

@ -32,6 +32,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -13,6 +13,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -17,7 +17,6 @@
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "build/robolectric_buildflags.h" #include "build/robolectric_buildflags.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/jni_zero/jni_zero.h" #include "third_party/jni_zero/jni_zero.h"
#if BUILDFLAG(IS_ROBOLECTRIC) #if BUILDFLAG(IS_ROBOLECTRIC)

@ -155,8 +155,7 @@ inline char* CheckOpValueStr(const T& v) {
// use with CheckOpValueStr() which allocates these strings using strdup(). // use with CheckOpValueStr() which allocates these strings using strdup().
// Returns allocated string (with strdup) for passing into // Returns allocated string (with strdup) for passing into
// ::logging::CheckError::(D)CheckOp methods. // ::logging::CheckError::(D)CheckOp methods.
// TODO(pbos): Annotate this ABSL_ATTRIBUTE_RETURNS_NONNULL after solving // TODO(pbos): Annotate this RETURNS_NONNULL after solving compile failure.
// compile failure.
BASE_EXPORT char* CreateCheckOpLogMessageString(const char* expr_str, BASE_EXPORT char* CreateCheckOpLogMessageString(const char* expr_str,
char* v1_str, char* v1_str,
char* v2_str); char* v2_str);

@ -725,6 +725,155 @@ inline constexpr bool AnalyzerAssumeTrue(bool arg) {
#define LIFETIME_BOUND #define LIFETIME_BOUND
#endif #endif
// Annotates a function or variable to indicate that it should have weak
// linkage. Useful for library code that wants code linking against it to be
// able to override its functionality; inside a single target, this is better
// accomplished via virtual methods and other more standard mechanisms.
//
// Any weak definition of a symbol will be overridden at link time by a non-weak
// definition. Marking a `const` or `constexpr` variable weak makes it no longer
// be considered a compile-time constant, since its value may be different after
// linking.
//
// Multiple weak definitions of a symbol may exist, in which case the linker is
// free to select any when there are no non-weak definitions. Like with symbols
// marked `inline`, this can lead to subtle, difficult-to-diagnose bugs if not
// all definitions are identical.
//
// A weak declaration that has no definitions at link time will be linked as if
// the corresponding address is null. Therefore library code can use weak
// declarations and conditionals to allow consumers to provide optional
// customizations.
//
// See also:
// https://clang.llvm.org/docs/AttributeReference.html#weak
//
// Usage:
// ```
// // The following definition defaults `x` to 10, but allows other object
// // files to override its value. Thus, despite `constexpr`, `x` is not
// // considered a compile-time constant (and cannot be used in a `constexpr`
// // context).
// extern const int x;
// WEAK_SYMBOL constexpr int x = 10;
//
// // The following declaration allows linking to occur whether a definition
// // of `Func()` is provided or not; if none is present, `&Func` will
// // evaluate to `nullptr` at runtime.
// WEAK_SYMBOL void Func();
//
// // The following definition provides a default implementation of `Func2()`,
// // but allows other object files to override.
// WEAK_SYMBOL void Func2() { ... }
// ```
#if __has_cpp_attribute(gnu::weak)
#define WEAK_SYMBOL [[gnu::weak]]
#else
#define WEAK_SYMBOL
#endif
// Annotates a function indicating that the compiler should not convert calls
// within it to tail calls.
//
// For a callee-side version of this, see `NOT_TAIL_CALLED`.
//
// See also:
// https://clang.llvm.org/docs/AttributeReference.html#disable-tail-calls
// Usage:
// ```
// DISABLE_TAIL_CALLS void Func() {
// // Function calls in this body will not be tail calls.
// }
// ```
#if __has_cpp_attribute(clang::disable_tail_calls)
#define DISABLE_TAIL_CALLS [[clang::disable_tail_calls]]
#else
#define DISABLE_TAIL_CALLS
#endif
// Annotates a type or member indicating the minimum possible alignment (one bit
// for bitfields, one byte otherwise) should be used. This can be used to
// eliminate padding inside objects, at the cost of potentially pessimizing
// code, or even generating invalid code (depending on platform restrictions) if
// underaligned objects have their addresses taken and passed elsewhere.
//
// This is similar to the more-broadly-supported `#pragma pack(1)`.
//
// See also:
// https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-packed-variable-attribute
//
// Usage:
// ```
// struct PACKED_OBJ S1 {
// int8_t a; // Alignment 1, offset 0, size 1
// int32_t b; // Alignment 1, offset 1 (0 bytes padding), size 4
// }; // Overall alignment 1, 0 bytes trailing padding, overall size 5
//
// struct S2 {
// int8_t a; // Alignment 1, offset 0, size 1
// int32_t b; // Alignment 4, offset 4 (3 bytes padding), size 4
// int8_t c; // Alignment 1, offset 8 (0 bytes padding), size 1
// PACKED_OBJ int32_t d; // Alignment 1, offset 9 (0 bytes padding), size 4
// }; // Overall alignment 4, 3 bytes trailing padding, overall size 16
// ```
#if __has_cpp_attribute(gnu::packed)
#define PACKED_OBJ [[gnu::packed]]
#else
#define PACKED_OBJ
#endif
// Annotates a function indicating that the returned pointer will never be null.
// This may allow the compiler to assume null checks on the caller side are
// unnecessary.
//
// In practice, this is usually better-handled by returning a value or
// reference, which enforce such guarantees at the type level.
//
// See also:
// https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-returns_005fnonnull-function-attribute
// https://clang.llvm.org/docs/AttributeReference.html#nullability-attributes
//
// Usage:
// ```
// // The following function will never return `nullptr`.
// RETURNS_NONNULL int* Func();
// ```
#if __has_cpp_attribute(gnu::returns_nonnull)
#define RETURNS_NONNULL [[gnu::returns_nonnull]]
#else
#define RETURNS_NONNULL
#endif
// Annotates a function indicating it is const, meaning that it has no
// observable side effects and its return value depends only on its arguments.
// Const functions may not read external memory other than unchanging objects
// (e.g. non-volatile constants), and the compiler is free to replace calls to
// them with the return values of earlier calls with the same arguments no
// matter what other state might have changed in the meantime.
//
// This is a much stronger restriction than `const`-qualified functions, and is
// rarely appropriate outside small local helpers, which are frequently
// inlineable anyway and would not really benefit.
//
// WARNING: Misusing this attribute can lead to silent miscompilation, UB, and
// difficult-to-diagnose bugs. For this and the above reason, usage should be
// very rare.
//
// See also:
// https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute
//
// Usage:
// ```
// // The compiler may replace calls to this function with values returned
// // from earlier calls, assuming the args match.
// CONST_FUNCTION int Func(int);
// ```
#if __has_cpp_attribute(gnu::const)
#define CONST_FUNCTION [[gnu::const]]
#else
#define CONST_FUNCTION
#endif
// Annotates a function indicating it is pure, meaning that it has no observable // Annotates a function indicating it is pure, meaning that it has no observable
// side effects. Unlike functions annotated `CONST_FUNCTION`, pure functions may // side effects. Unlike functions annotated `CONST_FUNCTION`, pure functions may
// still read external memory, and thus their return values may change between // still read external memory, and thus their return values may change between

@ -13,7 +13,6 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/containers/span.h" #include "base/containers/span.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -117,23 +116,17 @@ class TRIVIAL_ABI GSL_OWNER HeapArray {
// Prefer span-based methods below over data() where possible. The data() // Prefer span-based methods below over data() where possible. The data()
// method exists primarily to allow implicit constructions of spans. // method exists primarily to allow implicit constructions of spans.
// Returns nullptr for a zero-sized (or moved-from) array. // Returns nullptr for a zero-sized (or moved-from) array.
T* data() ABSL_ATTRIBUTE_LIFETIME_BOUND { return data_.get(); } T* data() LIFETIME_BOUND { return data_.get(); }
const T* data() const ABSL_ATTRIBUTE_LIFETIME_BOUND { return data_.get(); } const T* data() const LIFETIME_BOUND { return data_.get(); }
iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return as_span().begin(); } iterator begin() LIFETIME_BOUND { return as_span().begin(); }
const_iterator begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND { const_iterator begin() const LIFETIME_BOUND { return as_span().begin(); }
return as_span().begin();
}
iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return as_span().end(); } iterator end() LIFETIME_BOUND { return as_span().end(); }
const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND { const_iterator end() const LIFETIME_BOUND { return as_span().end(); }
return as_span().end();
}
T& operator[](size_t idx) ABSL_ATTRIBUTE_LIFETIME_BOUND { T& operator[](size_t idx) LIFETIME_BOUND { return as_span()[idx]; }
return as_span()[idx]; const T& operator[](size_t idx) const LIFETIME_BOUND {
}
const T& operator[](size_t idx) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
return as_span()[idx]; return as_span()[idx];
} }
@ -141,12 +134,12 @@ class TRIVIAL_ABI GSL_OWNER HeapArray {
// constructible from HeapArray<T>, so an explicit call to .as_span() is // constructible from HeapArray<T>, so an explicit call to .as_span() is
// most useful, say, when the compiler can't deduce a template // most useful, say, when the compiler can't deduce a template
// argument type. // argument type.
base::span<T> as_span() ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<T> as_span() LIFETIME_BOUND {
// SAFETY: `size_` is the number of elements in the `data_` allocation` at // SAFETY: `size_` is the number of elements in the `data_` allocation` at
// all times. // all times.
return UNSAFE_BUFFERS(base::span<T>(data_.get(), size_)); return UNSAFE_BUFFERS(base::span<T>(data_.get(), size_));
} }
base::span<const T> as_span() const ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<const T> as_span() const LIFETIME_BOUND {
// SAFETY: `size_` is the number of elements in the `data_` allocation` at // SAFETY: `size_` is the number of elements in the `data_` allocation` at
// all times. // all times.
return UNSAFE_BUFFERS(base::span<const T>(data_.get(), size_)); return UNSAFE_BUFFERS(base::span<const T>(data_.get(), size_));
@ -169,31 +162,31 @@ class TRIVIAL_ABI GSL_OWNER HeapArray {
// If `count` is unspecified, all remaining elements are included. A CHECK() // If `count` is unspecified, all remaining elements are included. A CHECK()
// occurs if any of the parameters results in an out-of-range position in // occurs if any of the parameters results in an out-of-range position in
// the HeapArray. // the HeapArray.
base::span<T> subspan(size_t offset, size_t count = base::dynamic_extent) base::span<T> subspan(size_t offset,
ABSL_ATTRIBUTE_LIFETIME_BOUND { size_t count = base::dynamic_extent) LIFETIME_BOUND {
return as_span().subspan(offset, count); return as_span().subspan(offset, count);
} }
base::span<const T> subspan(size_t offset, base::span<const T> subspan(size_t offset,
size_t count = base::dynamic_extent) const size_t count = base::dynamic_extent) const
ABSL_ATTRIBUTE_LIFETIME_BOUND { LIFETIME_BOUND {
return as_span().subspan(offset, count); return as_span().subspan(offset, count);
} }
// Returns a span over the first `count` elements of the HeapArray. A CHECK() // Returns a span over the first `count` elements of the HeapArray. A CHECK()
// occurs if the `count` is larger than size of the HeapArray. // occurs if the `count` is larger than size of the HeapArray.
base::span<T> first(size_t count) ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<T> first(size_t count) LIFETIME_BOUND {
return as_span().first(count); return as_span().first(count);
} }
base::span<const T> first(size_t count) const ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<const T> first(size_t count) const LIFETIME_BOUND {
return as_span().first(count); return as_span().first(count);
} }
// Returns a span over the last `count` elements of the HeapArray. A CHECK() // Returns a span over the last `count` elements of the HeapArray. A CHECK()
// occurs if the `count` is larger than size of the HeapArray. // occurs if the `count` is larger than size of the HeapArray.
base::span<T> last(size_t count) ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<T> last(size_t count) LIFETIME_BOUND {
return as_span().last(count); return as_span().last(count);
} }
base::span<const T> last(size_t count) const ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<const T> last(size_t count) const LIFETIME_BOUND {
return as_span().last(count); return as_span().last(count);
} }

@ -27,7 +27,6 @@
#include "base/containers/dynamic_extent.h" #include "base/containers/dynamic_extent.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "base/types/to_address.h" #include "base/types/to_address.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -1521,8 +1520,7 @@ constexpr auto make_span(Container&& container) noexcept {
// non-std helper that is inspired by the `std::slice::from_ref()` function from // non-std helper that is inspired by the `std::slice::from_ref()` function from
// Rust. // Rust.
template <typename T> template <typename T>
constexpr span<T, 1u> span_from_ref( constexpr span<T, 1u> span_from_ref(T& single_object LIFETIME_BOUND) noexcept {
T& single_object ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept {
// SAFETY: Given a valid reference to `single_object` the span of size 1 will // SAFETY: Given a valid reference to `single_object` the span of size 1 will
// be a valid span that points to the `single_object`. // be a valid span that points to the `single_object`.
return UNSAFE_BUFFERS(span<T, 1u>(std::addressof(single_object), 1u)); return UNSAFE_BUFFERS(span<T, 1u>(std::addressof(single_object), 1u));
@ -1536,12 +1534,12 @@ constexpr span<T, 1u> span_from_ref(
// references are turned into a `span<T, sizeof(T)>`. // references are turned into a `span<T, sizeof(T)>`.
template <typename T> template <typename T>
constexpr span<const uint8_t, sizeof(T)> byte_span_from_ref( constexpr span<const uint8_t, sizeof(T)> byte_span_from_ref(
const T& single_object ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept { const T& single_object LIFETIME_BOUND) noexcept {
return as_bytes(span_from_ref(single_object)); return as_bytes(span_from_ref(single_object));
} }
template <typename T> template <typename T>
constexpr span<uint8_t, sizeof(T)> byte_span_from_ref( constexpr span<uint8_t, sizeof(T)> byte_span_from_ref(
T& single_object ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept { T& single_object LIFETIME_BOUND) noexcept {
return as_writable_bytes(span_from_ref(single_object)); return as_writable_bytes(span_from_ref(single_object));
} }
@ -1559,7 +1557,7 @@ constexpr span<uint8_t, sizeof(T)> byte_span_from_ref(
// always preserved. // always preserved.
template <class CharT, size_t N> template <class CharT, size_t N>
constexpr span<const CharT, N - 1> span_from_cstring( constexpr span<const CharT, N - 1> span_from_cstring(
const CharT (&lit ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) const CharT (&lit LIFETIME_BOUND)[N])
ENABLE_IF_ATTR(lit[N - 1u] == CharT{0}, ENABLE_IF_ATTR(lit[N - 1u] == CharT{0},
"requires string literal as input") { "requires string literal as input") {
return span(lit).template first<N - 1>(); return span(lit).template first<N - 1>();
@ -1582,7 +1580,7 @@ constexpr span<const CharT, N - 1> span_from_cstring(
// always preserved. // always preserved.
template <class CharT, size_t N> template <class CharT, size_t N>
constexpr span<const CharT, N> span_with_nul_from_cstring( constexpr span<const CharT, N> span_with_nul_from_cstring(
const CharT (&lit ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) const CharT (&lit LIFETIME_BOUND)[N])
ENABLE_IF_ATTR(lit[N - 1u] == CharT{0}, ENABLE_IF_ATTR(lit[N - 1u] == CharT{0},
"requires string literal as input") { "requires string literal as input") {
return span(lit); return span(lit);
@ -1602,7 +1600,7 @@ constexpr span<const CharT, N> span_with_nul_from_cstring(
// always preserved. // always preserved.
template <size_t N> template <size_t N>
constexpr span<const uint8_t, N - 1> byte_span_from_cstring( constexpr span<const uint8_t, N - 1> byte_span_from_cstring(
const char (&lit ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) const char (&lit LIFETIME_BOUND)[N])
ENABLE_IF_ATTR(lit[N - 1u] == '\0', "requires string literal as input") { ENABLE_IF_ATTR(lit[N - 1u] == '\0', "requires string literal as input") {
return as_bytes(span(lit).template first<N - 1>()); return as_bytes(span(lit).template first<N - 1>());
} }
@ -1624,7 +1622,7 @@ constexpr span<const uint8_t, N - 1> byte_span_from_cstring(
// always preserved. // always preserved.
template <size_t N> template <size_t N>
constexpr span<const uint8_t, N> byte_span_with_nul_from_cstring( constexpr span<const uint8_t, N> byte_span_with_nul_from_cstring(
const char (&lit ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) const char (&lit LIFETIME_BOUND)[N])
ENABLE_IF_ATTR(lit[N - 1u] == '\0', "requires string literal as input") { ENABLE_IF_ATTR(lit[N - 1u] == '\0', "requires string literal as input") {
return as_bytes(span(lit)); return as_bytes(span(lit));
} }
@ -1642,7 +1640,7 @@ constexpr auto as_byte_span(const Spannable& arg) {
template <int&... ExplicitArgumentBarrier, typename T, size_t N> template <int&... ExplicitArgumentBarrier, typename T, size_t N>
constexpr span<const uint8_t, N * sizeof(T)> as_byte_span( constexpr span<const uint8_t, N * sizeof(T)> as_byte_span(
const T (&arr ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) { const T (&arr LIFETIME_BOUND)[N]) {
return as_bytes(make_span(arr)); return as_bytes(make_span(arr));
} }
@ -1664,13 +1662,13 @@ constexpr auto as_writable_byte_span(Spannable&& arg) {
// the span type signature span<uint8_t, N>. // the span type signature span<uint8_t, N>.
template <int&... ExplicitArgumentBarrier, typename T, size_t N> template <int&... ExplicitArgumentBarrier, typename T, size_t N>
constexpr span<uint8_t, N * sizeof(T)> as_writable_byte_span( constexpr span<uint8_t, N * sizeof(T)> as_writable_byte_span(
T (&arr ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) { T (&arr LIFETIME_BOUND)[N]) {
return as_writable_bytes(make_span(arr)); return as_writable_bytes(make_span(arr));
} }
template <int&... ExplicitArgumentBarrier, typename T, size_t N> template <int&... ExplicitArgumentBarrier, typename T, size_t N>
constexpr span<uint8_t, N * sizeof(T)> as_writable_byte_span( constexpr span<uint8_t, N * sizeof(T)> as_writable_byte_span(
T (&&arr ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) { T (&&arr LIFETIME_BOUND)[N]) {
return as_writable_bytes(make_span(arr)); return as_writable_bytes(make_span(arr));
} }

@ -208,13 +208,13 @@ void FromRefNoSuchFunctionForIntLiteral() {
} }
void FromRefLifetimeBoundErrorForIntLiteral() { void FromRefLifetimeBoundErrorForIntLiteral() {
// Testing that `ABSL_ATTRIBUTE_LIFETIME_BOUND` works as intended. // Testing that `LIFETIME_BOUND` works as intended.
[[maybe_unused]] auto wont_work = [[maybe_unused]] auto wont_work =
span_from_ref<const int>(123); // expected-error@*:* {{temporary whose address is used as value of local variable 'wont_work' will be destroyed at the end of the full-expression}} span_from_ref<const int>(123); // expected-error@*:* {{temporary whose address is used as value of local variable 'wont_work' will be destroyed at the end of the full-expression}}
} }
void FromRefLifetimeBoundErrorForTemporaryStringObject() { void FromRefLifetimeBoundErrorForTemporaryStringObject() {
// Testing that `ABSL_ATTRIBUTE_LIFETIME_BOUND` works as intended. // Testing that `LIFETIME_BOUND` works as intended.
[[maybe_unused]] auto wont_work = [[maybe_unused]] auto wont_work =
span_from_ref<const std::string>("temporary string"); // expected-error@*:* {{temporary whose address is used as value of local variable 'wont_work' will be destroyed at the end of the full-expression}} span_from_ref<const std::string>("temporary string"); // expected-error@*:* {{temporary whose address is used as value of local variable 'wont_work' will be destroyed at the end of the full-expression}}
} }

@ -17,14 +17,13 @@
#include "base/task/single_thread_task_runner.h" #include "base/task/single_thread_task_runner.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace { namespace {
// Per-thread FileDescriptorWatcher registration. // Per-thread FileDescriptorWatcher registration.
ABSL_CONST_INIT thread_local FileDescriptorWatcher* fd_watcher = nullptr; constinit thread_local FileDescriptorWatcher* fd_watcher = nullptr;
} // namespace } // namespace

@ -10,9 +10,9 @@
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#include "base/compiler_specific.h"
#include "base/functional/bind_internal.h" #include "base/functional/bind_internal.h"
#include "base/types/is_instantiation.h" #include "base/types/is_instantiation.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/abseil-cpp/absl/functional/function_ref.h" #include "third_party/abseil-cpp/absl/functional/function_ref.h"
namespace base { namespace base {
@ -71,7 +71,7 @@ class FunctionRef<R(Args...)> {
std::same_as<internal::ExtractArgs<RunType>, internal::TypeList<Args...>>; std::same_as<internal::ExtractArgs<RunType>, internal::TypeList<Args...>>;
public: public:
// `ABSL_ATTRIBUTE_LIFETIME_BOUND` is important; since `FunctionRef` retains // `LIFETIME_BOUND` is important; since `FunctionRef` retains
// only a reference to `functor`, `functor` must outlive `this`. // only a reference to `functor`, `functor` must outlive `this`.
template <typename Functor> template <typename Functor>
requires kCompatibleFunctor<Functor> && requires kCompatibleFunctor<Functor> &&
@ -98,7 +98,7 @@ class FunctionRef<R(Args...)> {
(!internal::is_instantiation_v<absl::FunctionRef, (!internal::is_instantiation_v<absl::FunctionRef,
std::decay_t<Functor>>) std::decay_t<Functor>>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
FunctionRef(const Functor& functor ABSL_ATTRIBUTE_LIFETIME_BOUND) FunctionRef(const Functor& functor LIFETIME_BOUND)
: wrapped_func_ref_(functor) {} : wrapped_func_ref_(functor) {}
// Constructs a reference to the given function pointer. This constructor // Constructs a reference to the given function pointer. This constructor

@ -12,7 +12,6 @@
#include <sanitizer/asan_interface.h> #include <sanitizer/asan_interface.h>
#include "base/memory/raw_ptr_asan_service.h" #include "base/memory/raw_ptr_asan_service.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -20,7 +19,7 @@ namespace {
// We use thread-local storage instead of sequence-local storage for consistency // We use thread-local storage instead of sequence-local storage for consistency
// with PendingReport in RawPtrAsanService. // with PendingReport in RawPtrAsanService.
ABSL_CONST_INIT thread_local RawPtrAsanBoundArgTracker::ProtectedArgsVector* constinit thread_local RawPtrAsanBoundArgTracker::ProtectedArgsVector*
protected_args = nullptr; protected_args = nullptr;
} // namespace } // namespace

@ -27,7 +27,6 @@
#include "base/process/process.h" #include "base/process/process.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/task/thread_pool/thread_group.h" #include "base/task/thread_pool/thread_group.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -48,7 +47,7 @@ constexpr uint8_t kAsanUserPoisonedMemoryMagic = 0xf7;
// doesn't prevent sharing of PendingReport contents between unrelated tasks, so // doesn't prevent sharing of PendingReport contents between unrelated tasks, so
// we keep this at a lower-level and avoid introducing additional assumptions // we keep this at a lower-level and avoid introducing additional assumptions
// about Chrome's sequence model. // about Chrome's sequence model.
ABSL_CONST_INIT thread_local RawPtrAsanService::PendingReport pending_report; constinit thread_local RawPtrAsanService::PendingReport pending_report;
} // namespace } // namespace

@ -4,13 +4,12 @@
#include "base/observer_list_threadsafe.h" #include "base/observer_list_threadsafe.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
ABSL_CONST_INIT thread_local const ObserverListThreadSafeBase:: constinit thread_local const ObserverListThreadSafeBase::NotificationDataBase*
NotificationDataBase* current_notification = nullptr; current_notification = nullptr;
// static // static
const ObserverListThreadSafeBase::NotificationDataBase*& const ObserverListThreadSafeBase::NotificationDataBase*&

@ -25,7 +25,6 @@
#include "base/task/sequenced_task_runner.h" #include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h" #include "base/task/single_thread_task_runner.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// //

@ -13,14 +13,13 @@
#include "base/task/single_thread_task_runner.h" #include "base/task/single_thread_task_runner.h"
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace { namespace {
ABSL_CONST_INIT thread_local RunLoop::Delegate* delegate = nullptr; constinit thread_local RunLoop::Delegate* delegate = nullptr;
ABSL_CONST_INIT thread_local const RunLoop::RunLoopTimeout* run_loop_timeout = constinit thread_local const RunLoop::RunLoopTimeout* run_loop_timeout =
nullptr; nullptr;
// Runs |closure| immediately if this is called on |task_runner|, otherwise // Runs |closure| immediately if this is called on |task_runner|, otherwise

@ -17,7 +17,6 @@
#include "base/rand_util.h" #include "base/rand_util.h"
#include "base/ranges/algorithm.h" #include "base/ranges/algorithm.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -33,12 +32,10 @@ const intptr_t kAccumulatedBytesOffset = 1 << 29;
bool g_deterministic = false; bool g_deterministic = false;
// Pointer to the current |LockFreeAddressHashSet|. // Pointer to the current |LockFreeAddressHashSet|.
ABSL_CONST_INIT std::atomic<LockFreeAddressHashSet*> g_sampled_addresses_set{ constinit std::atomic<LockFreeAddressHashSet*> g_sampled_addresses_set{nullptr};
nullptr};
// Sampling interval parameter, the mean value for intervals between samples. // Sampling interval parameter, the mean value for intervals between samples.
ABSL_CONST_INIT std::atomic_size_t g_sampling_interval{ constinit std::atomic_size_t g_sampling_interval{kDefaultSamplingIntervalBytes};
kDefaultSamplingIntervalBytes};
struct ThreadLocalData { struct ThreadLocalData {
// Accumulated bytes towards sample. // Accumulated bytes towards sample.
@ -180,7 +177,7 @@ PoissonAllocationSampler::ScopedMuteHookedSamplesForTesting::operator=(
ScopedMuteHookedSamplesForTesting&&) = default; ScopedMuteHookedSamplesForTesting&&) = default;
// static // static
ABSL_CONST_INIT std::atomic<PoissonAllocationSampler::ProfilingStateFlagMask> constinit std::atomic<PoissonAllocationSampler::ProfilingStateFlagMask>
PoissonAllocationSampler::profiling_state_{0}; PoissonAllocationSampler::profiling_state_{0};
PoissonAllocationSampler::PoissonAllocationSampler() { PoissonAllocationSampler::PoissonAllocationSampler() {

@ -5,7 +5,6 @@
#include "base/sequence_token.h" #include "base/sequence_token.h"
#include "base/atomic_sequence_num.h" #include "base/atomic_sequence_num.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
@ -16,10 +15,10 @@ base::AtomicSequenceNumber g_sequence_token_generator;
base::AtomicSequenceNumber g_task_token_generator; base::AtomicSequenceNumber g_task_token_generator;
ABSL_CONST_INIT thread_local SequenceToken current_sequence_token; constinit thread_local SequenceToken current_sequence_token;
ABSL_CONST_INIT thread_local TaskToken current_task_token; constinit thread_local TaskToken current_task_token;
ABSL_CONST_INIT thread_local bool current_task_is_thread_bound = true; constinit thread_local bool current_task_is_thread_bound = true;
ABSL_CONST_INIT thread_local bool current_task_is_running_synchronously = false; constinit thread_local bool current_task_is_running_synchronously = false;
} // namespace } // namespace

@ -5,7 +5,6 @@
#include "base/task/common/scoped_defer_task_posting.h" #include "base/task/common/scoped_defer_task_posting.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -13,7 +12,7 @@ namespace {
// Holds a thread-local pointer to the current scope or null when no // Holds a thread-local pointer to the current scope or null when no
// scope is active. // scope is active.
ABSL_CONST_INIT thread_local ScopedDeferTaskPosting* scoped_defer_task_posting = constinit thread_local ScopedDeferTaskPosting* scoped_defer_task_posting =
nullptr; nullptr;
} // namespace } // namespace

@ -22,7 +22,6 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "base/tracing_buildflags.h" #include "base/tracing_buildflags.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(ENABLE_BASE_TRACING) #if BUILDFLAG(ENABLE_BASE_TRACING)
#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_mojo_event_info.pbzero.h" // nogncheck #include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_mojo_event_info.pbzero.h" // nogncheck
@ -37,15 +36,15 @@ TaskAnnotator::ObserverForTesting* g_task_annotator_observer = nullptr;
// The PendingTask currently in progress on each thread. Used to allow creating // The PendingTask currently in progress on each thread. Used to allow creating
// a breadcrumb of program counters on the stack to help identify a task's // a breadcrumb of program counters on the stack to help identify a task's
// origin in crashes. // origin in crashes.
ABSL_CONST_INIT thread_local PendingTask* current_pending_task = nullptr; constinit thread_local PendingTask* current_pending_task = nullptr;
// Scoped IPC-related data (IPC hash and/or IPC interface name). IPC hash or // Scoped IPC-related data (IPC hash and/or IPC interface name). IPC hash or
// interface name can be known before the associated task object is created; // interface name can be known before the associated task object is created;
// thread-local so that this data can be affixed to the associated task. // thread-local so that this data can be affixed to the associated task.
ABSL_CONST_INIT thread_local TaskAnnotator::ScopedSetIpcHash* constinit thread_local TaskAnnotator::ScopedSetIpcHash*
current_scoped_ipc_hash = nullptr; current_scoped_ipc_hash = nullptr;
ABSL_CONST_INIT thread_local TaskAnnotator::LongTaskTracker* constinit thread_local TaskAnnotator::LongTaskTracker*
current_long_task_tracker = nullptr; current_long_task_tracker = nullptr;
// These functions can be removed, and the calls below replaced with direct // These functions can be removed, and the calls below replaced with direct

@ -5,14 +5,13 @@
#include "base/task/scoped_set_task_priority_for_current_thread.h" #include "base/task/scoped_set_task_priority_for_current_thread.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
namespace { namespace {
ABSL_CONST_INIT thread_local TaskPriority task_priority_for_current_thread = constinit thread_local TaskPriority task_priority_for_current_thread =
TaskPriority::USER_BLOCKING; TaskPriority::USER_BLOCKING;
} // namespace } // namespace

@ -45,7 +45,6 @@
#include "base/time/tick_clock.h" #include "base/time/tick_clock.h"
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace sequence_manager { namespace sequence_manager {
@ -57,7 +56,7 @@ BASE_FEATURE(kRecordSequenceManagerCrashKeys,
"RecordSequenceManagerCrashKeys", "RecordSequenceManagerCrashKeys",
base::FEATURE_DISABLED_BY_DEFAULT); base::FEATURE_DISABLED_BY_DEFAULT);
ABSL_CONST_INIT thread_local internal::SequenceManagerImpl* constinit thread_local internal::SequenceManagerImpl*
thread_local_sequence_manager = nullptr; thread_local_sequence_manager = nullptr;
class TracedBaseValue : public trace_event::ConvertableToTraceFormat { class TracedBaseValue : public trace_event::ConvertableToTraceFormat {

@ -9,13 +9,12 @@
#include "base/functional/bind.h" #include "base/functional/bind.h"
#include "base/task/default_delayed_task_handle_delegate.h" #include "base/task/default_delayed_task_handle_delegate.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace { namespace {
ABSL_CONST_INIT thread_local SequencedTaskRunner::CurrentDefaultHandle* constinit thread_local SequencedTaskRunner::CurrentDefaultHandle*
current_default_handle = nullptr; current_default_handle = nullptr;
} // namespace } // namespace

@ -14,13 +14,12 @@
#include "base/functional/bind.h" #include "base/functional/bind.h"
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace { namespace {
ABSL_CONST_INIT thread_local SingleThreadTaskRunner::CurrentDefaultHandle* constinit thread_local SingleThreadTaskRunner::CurrentDefaultHandle*
current_default_handle = nullptr; current_default_handle = nullptr;
// This function can be removed, and the calls below replaced with direct // This function can be removed, and the calls below replaced with direct

@ -34,7 +34,6 @@
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "base/values.h" #include "base/values.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
@ -127,7 +126,7 @@ auto EmitThreadPoolTraceEventMetadata(perfetto::EventContext& ctx,
// posting back to a BLOCK_SHUTDOWN sequence is a coincidence rather than part // posting back to a BLOCK_SHUTDOWN sequence is a coincidence rather than part
// of a shutdown blocking series of tasks, this prevents racy DCHECKs in those // of a shutdown blocking series of tasks, this prevents racy DCHECKs in those
// cases. // cases.
ABSL_CONST_INIT thread_local int fizzle_block_shutdown_tasks_ref = 0; constinit thread_local int fizzle_block_shutdown_tasks_ref = 0;
} // namespace } // namespace

@ -14,7 +14,6 @@
#include "base/task/task_features.h" #include "base/task/task_features.h"
#include "base/task/thread_pool/task_tracker.h" #include "base/task/thread_pool/task_tracker.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
#include "base/win/com_init_check_hook.h" #include "base/win/com_init_check_hook.h"
@ -54,7 +53,7 @@ constexpr TimeDelta kBackgroundMayBlockThreshold = Seconds(10);
constexpr TimeDelta kBackgroundBlockedWorkersPoll = Seconds(12); constexpr TimeDelta kBackgroundBlockedWorkersPoll = Seconds(12);
// ThreadGroup that owns the current thread, if any. // ThreadGroup that owns the current thread, if any.
ABSL_CONST_INIT thread_local const ThreadGroup* current_thread_group = nullptr; constinit thread_local const ThreadGroup* current_thread_group = nullptr;
} // namespace } // namespace

@ -9,6 +9,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/compiler_specific.h"
#include "base/containers/flat_map.h" #include "base/containers/flat_map.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
@ -16,14 +17,13 @@
#include "base/metrics/field_trial.h" #include "base/metrics/field_trial.h"
#include "base/metrics/field_trial_params.h" #include "base/metrics/field_trial_params.h"
#include "base/types/pass_key.h" #include "base/types/pass_key.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base::test { namespace base::test {
// A reference to a base::Feature and field trial params that should be force // A reference to a base::Feature and field trial params that should be force
// enabled and overwritten for test purposes. // enabled and overwritten for test purposes.
struct FeatureRefAndParams { struct FeatureRefAndParams {
FeatureRefAndParams(const Feature& feature ABSL_ATTRIBUTE_LIFETIME_BOUND, FeatureRefAndParams(const Feature& feature LIFETIME_BOUND,
const FieldTrialParams& params); const FieldTrialParams& params);
FeatureRefAndParams(const FeatureRefAndParams& other); FeatureRefAndParams(const FeatureRefAndParams& other);
@ -41,8 +41,7 @@ struct FeatureRefAndParams {
class FeatureRef { class FeatureRef {
public: public:
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
FeatureRef(const Feature& feature ABSL_ATTRIBUTE_LIFETIME_BOUND) FeatureRef(const Feature& feature LIFETIME_BOUND) : feature_(feature) {}
: feature_(feature) {}
const Feature& operator*() const { return *feature_; } const Feature& operator*() const { return *feature_; }
const Feature* operator->() const { return &*feature_; } const Feature* operator->() const { return &*feature_; }

@ -30,7 +30,6 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -44,8 +43,7 @@ namespace {
enum class LoggingLevel { kNone = 0, kUmaOnly = 1, kUmaAndCrash = 2 }; enum class LoggingLevel { kNone = 0, kUmaOnly = 1, kUmaAndCrash = 2 };
HangWatcher* g_instance = nullptr; HangWatcher* g_instance = nullptr;
ABSL_CONST_INIT thread_local internal::HangWatchState* hang_watch_state = constinit thread_local internal::HangWatchState* hang_watch_state = nullptr;
nullptr;
std::atomic<bool> g_use_hang_watcher{false}; std::atomic<bool> g_use_hang_watcher{false};
std::atomic<HangWatcher::ProcessType> g_hang_watcher_process_type{ std::atomic<HangWatcher::ProcessType> g_hang_watcher_process_type{
HangWatcher::ProcessType::kBrowserProcess}; HangWatcher::ProcessType::kBrowserProcess};

@ -6,7 +6,6 @@
#include "base/threading/thread_id_name_manager.h" #include "base/threading/thread_id_name_manager.h"
#include "base/task/current_thread.h" #include "base/task/current_thread.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(IS_FUCHSIA) #if BUILDFLAG(IS_FUCHSIA)
#include "base/fuchsia/scheduler.h" #include "base/fuchsia/scheduler.h"
@ -16,8 +15,7 @@ namespace base {
namespace { namespace {
ABSL_CONST_INIT thread_local ThreadType current_thread_type = constinit thread_local ThreadType current_thread_type = ThreadType::kDefault;
ThreadType::kDefault;
} // namespace } // namespace

@ -18,7 +18,6 @@
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#endif #endif
namespace base { namespace base {
@ -29,7 +28,7 @@ namespace {
// Used to verify that the trace events used in the constructor do not result in // Used to verify that the trace events used in the constructor do not result in
// instantiating a ScopedBlockingCall themselves (which would cause an infinite // instantiating a ScopedBlockingCall themselves (which would cause an infinite
// reentrancy loop). // reentrancy loop).
ABSL_CONST_INIT thread_local bool construction_in_progress = false; constinit thread_local bool construction_in_progress = false;
#endif #endif
} // namespace } // namespace

@ -25,18 +25,17 @@
#include "base/task/thread_pool/thread_pool_instance.h" #include "base/task/thread_pool/thread_pool_instance.h"
#include "base/threading/scoped_blocking_call.h" #include "base/threading/scoped_blocking_call.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
namespace { namespace {
ABSL_CONST_INIT thread_local BlockingObserver* blocking_observer = nullptr; constinit thread_local BlockingObserver* blocking_observer = nullptr;
// Last ScopedBlockingCall instantiated on this thread. // Last ScopedBlockingCall instantiated on this thread.
ABSL_CONST_INIT thread_local UncheckedScopedBlockingCall* constinit thread_local UncheckedScopedBlockingCall* last_scoped_blocking_call =
last_scoped_blocking_call = nullptr; nullptr;
// These functions can be removed, and the calls below replaced with direct // These functions can be removed, and the calls below replaced with direct
// variable accesses, once the MSAN workaround is not necessary. // variable accesses, once the MSAN workaround is not necessary.

@ -9,15 +9,14 @@
#include "base/check_op.h" #include "base/check_op.h"
#include "base/sequence_token.h" #include "base/sequence_token.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace internal { namespace internal {
namespace { namespace {
ABSL_CONST_INIT thread_local SequenceLocalStorageMap* constinit thread_local SequenceLocalStorageMap* current_sequence_local_storage =
current_sequence_local_storage = nullptr; nullptr;
} // namespace } // namespace

@ -26,7 +26,6 @@
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "base/types/pass_key.h" #include "base/types/pass_key.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/abseil-cpp/absl/base/dynamic_annotations.h" #include "third_party/abseil-cpp/absl/base/dynamic_annotations.h"
#if (BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_NACL)) || BUILDFLAG(IS_FUCHSIA) #if (BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_NACL)) || BUILDFLAG(IS_FUCHSIA)
@ -48,7 +47,7 @@ namespace {
// because its Stop method was called. This allows us to catch cases where // because its Stop method was called. This allows us to catch cases where
// MessageLoop::QuitWhenIdle() is called directly, which is unexpected when // MessageLoop::QuitWhenIdle() is called directly, which is unexpected when
// using a Thread to setup and run a MessageLoop. // using a Thread to setup and run a MessageLoop.
ABSL_CONST_INIT thread_local bool was_quit_properly = false; constinit thread_local bool was_quit_properly = false;
} // namespace } // namespace
#endif #endif

@ -12,7 +12,6 @@
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/trace_event/heap_profiler_allocation_context_tracker.h" // no-presubmit-check #include "base/trace_event/heap_profiler_allocation_context_tracker.h" // no-presubmit-check
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
namespace { namespace {
@ -20,7 +19,7 @@ namespace {
static const char kDefaultName[] = ""; static const char kDefaultName[] = "";
static std::string* g_default_name; static std::string* g_default_name;
ABSL_CONST_INIT thread_local const char* thread_name = kDefaultName; constinit thread_local const char* thread_name = kDefaultName;
} }
ThreadIdNameManager::Observer::~Observer() = default; ThreadIdNameManager::Observer::~Observer() = default;

@ -8,7 +8,6 @@
#include "base/threading/hang_watcher.h" #include "base/threading/hang_watcher.h"
#include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -39,11 +38,11 @@ std::ostream& operator<<(std::ostream& out,
namespace { namespace {
ABSL_CONST_INIT thread_local BooleanWithOptionalStack tls_blocking_disallowed; constinit thread_local BooleanWithOptionalStack tls_blocking_disallowed;
ABSL_CONST_INIT thread_local BooleanWithOptionalStack tls_singleton_disallowed; constinit thread_local BooleanWithOptionalStack tls_singleton_disallowed;
ABSL_CONST_INIT thread_local BooleanWithOptionalStack constinit thread_local BooleanWithOptionalStack
tls_base_sync_primitives_disallowed; tls_base_sync_primitives_disallowed;
ABSL_CONST_INIT thread_local BooleanWithOptionalStack constinit thread_local BooleanWithOptionalStack
tls_cpu_intensive_work_disallowed; tls_cpu_intensive_work_disallowed;
} // namespace } // namespace

@ -15,7 +15,6 @@
#include "base/android/apk_assets.h" #include "base/android/apk_assets.h"
#include "base/android/library_loader/anchor_functions.h" #include "base/android/library_loader/anchor_functions.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if !defined(ARCH_CPU_ARMEL) #if !defined(ARCH_CPU_ARMEL)
#error This file should not be built for this architecture. #error This file should not be built for this architecture.
@ -125,7 +124,7 @@ static_assert(
sizeof(CFIUnwindDataRow) == 4, sizeof(CFIUnwindDataRow) == 4,
"The CFIUnwindDataRow struct must be exactly 4 bytes for searching."); "The CFIUnwindDataRow struct must be exactly 4 bytes for searching.");
ABSL_CONST_INIT thread_local CFIBacktraceAndroid::CFICache cfi_cache; constinit thread_local CFIBacktraceAndroid::CFICache cfi_cache;
} // namespace } // namespace

@ -107,10 +107,10 @@ bool g_perfetto_initialized_by_tracelog = false;
TraceLog* g_trace_log_for_testing = nullptr; TraceLog* g_trace_log_for_testing = nullptr;
ABSL_CONST_INIT thread_local TraceLog::ThreadLocalEventBuffer* constinit thread_local TraceLog::ThreadLocalEventBuffer*
thread_local_event_buffer = nullptr; thread_local_event_buffer = nullptr;
ABSL_CONST_INIT thread_local bool thread_blocks_message_loop = false; constinit thread_local bool thread_blocks_message_loop = false;
ABSL_CONST_INIT thread_local bool thread_is_in_trace_event = false; constinit thread_local bool thread_is_in_trace_event = false;
ThreadTicks ThreadNow() { ThreadTicks ThreadNow() {
return ThreadTicks::IsSupported() return ThreadTicks::IsSupported()

@ -14,9 +14,9 @@
#include <string> #include <string>
#include <utility> #include <utility>
#include "base/compiler_specific.h"
#include "base/types/expected.h" #include "base/types/expected.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/google_benchmark/src/include/benchmark/benchmark.h" #include "third_party/google_benchmark/src/include/benchmark/benchmark.h"
namespace base { namespace base {
@ -32,7 +32,7 @@ class ReturnLoop {
: value_(std::move(return_value)) {} : value_(std::move(return_value)) {}
virtual ~ReturnLoop() = default; virtual ~ReturnLoop() = default;
ABSL_ATTRIBUTE_NO_TAIL_CALL ReturnType Loop(size_t* ops) { DISABLE_TAIL_CALLS ReturnType Loop(size_t* ops) {
if (!*ops) { if (!*ops) {
return value_; return value_;
} }

@ -10,8 +10,8 @@
#include <type_traits> #include <type_traits>
#include "base/check.h" #include "base/check.h"
#include "base/compiler_specific.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
@ -100,13 +100,12 @@ class optional_ref {
template <typename U> template <typename U>
requires(std::is_const_v<T> && IsCompatibleV<U>) requires(std::is_const_v<T> && IsCompatibleV<U>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
constexpr optional_ref( constexpr optional_ref(const std::optional<U>& o LIFETIME_BOUND)
const std::optional<U>& o ABSL_ATTRIBUTE_LIFETIME_BOUND)
: ptr_(o ? &*o : nullptr) {} : ptr_(o ? &*o : nullptr) {}
template <typename U> template <typename U>
requires(IsCompatibleV<U>) requires(IsCompatibleV<U>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
constexpr optional_ref(std::optional<U>& o ABSL_ATTRIBUTE_LIFETIME_BOUND) constexpr optional_ref(std::optional<U>& o LIFETIME_BOUND)
: ptr_(o ? &*o : nullptr) {} : ptr_(o ? &*o : nullptr) {}
// Constructs an `optional_ref` from a pointer; the resulting `optional_ref` // Constructs an `optional_ref` from a pointer; the resulting `optional_ref`
@ -118,7 +117,7 @@ class optional_ref {
template <typename U> template <typename U>
requires(IsCompatibleV<U>) requires(IsCompatibleV<U>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
constexpr optional_ref(U* p ABSL_ATTRIBUTE_LIFETIME_BOUND) : ptr_(p) {} constexpr optional_ref(U* p LIFETIME_BOUND) : ptr_(p) {}
// Constructs an `optional_ref` from a reference; the resulting `optional_ref` // Constructs an `optional_ref` from a reference; the resulting `optional_ref`
// is never empty. // is never empty.
@ -129,13 +128,11 @@ class optional_ref {
template <typename U> template <typename U>
requires(IsCompatibleV<const U>) requires(IsCompatibleV<const U>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
constexpr optional_ref(const U& r ABSL_ATTRIBUTE_LIFETIME_BOUND) constexpr optional_ref(const U& r LIFETIME_BOUND) : ptr_(std::addressof(r)) {}
: ptr_(std::addressof(r)) {}
template <typename U> template <typename U>
requires(IsCompatibleV<U>) requires(IsCompatibleV<U>)
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
constexpr optional_ref(U& r ABSL_ATTRIBUTE_LIFETIME_BOUND) constexpr optional_ref(U& r LIFETIME_BOUND) : ptr_(std::addressof(r)) {}
: ptr_(std::addressof(r)) {}
// An empty `optional_ref` must be constructed with `std::nullopt`, not // An empty `optional_ref` must be constructed with `std::nullopt`, not
// `nullptr`. Otherwise, `optional_ref<T*>` constructed with `nullptr` would // `nullptr`. Otherwise, `optional_ref<T*>` constructed with `nullptr` would

@ -21,7 +21,6 @@
#include "base/win/base_win_buildflags.h" #include "base/win/base_win_buildflags.h"
#include "base/win/current_module.h" #include "base/win/current_module.h"
#include "base/win/scoped_handle.h" #include "base/win/scoped_handle.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
extern "C" { extern "C" {
__declspec(dllexport) void* GetHandleVerifier(); __declspec(dllexport) void* GetHandleVerifier();
@ -38,7 +37,7 @@ namespace internal {
namespace { namespace {
ScopedHandleVerifier* g_active_verifier = nullptr; ScopedHandleVerifier* g_active_verifier = nullptr;
ABSL_CONST_INIT thread_local bool closing = false; constinit thread_local bool closing = false;
using GetHandleVerifierFn = void* (*)(); using GetHandleVerifierFn = void* (*)();
using HandleMap = using HandleMap =
std::unordered_map<HANDLE, ScopedHandleVerifierInfo, HandleHash>; std::unordered_map<HANDLE, ScopedHandleVerifierInfo, HandleHash>;

@ -27,7 +27,6 @@
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/sync/base/pref_names.h" #include "components/sync/base/pref_names.h"
#include "components/version_info/android/channel_getter.h" #include "components/version_info/android/channel_getter.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
using password_manager::prefs::kCurrentMigrationVersionToGoogleMobileServices; using password_manager::prefs::kCurrentMigrationVersionToGoogleMobileServices;
using password_manager::prefs::kPasswordsUseUPMLocalAndSeparateStores; using password_manager::prefs::kPasswordsUseUPMLocalAndSeparateStores;

@ -40,7 +40,6 @@
#include "content/public/test/browser_task_environment.h" #include "content/public/test/browser_task_environment.h"
#include "extensions/browser/quota_service.h" #include "extensions/browser/quota_service.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
#include "base/test/test_reg_util_win.h" #include "base/test/test_reg_util_win.h"
@ -49,8 +48,7 @@
namespace { namespace {
class TestIncidentReportingService; class TestIncidentReportingService;
ABSL_CONST_INIT thread_local TestIncidentReportingService* test_instance = constinit thread_local TestIncidentReportingService* test_instance = nullptr;
nullptr;
constexpr char kFakeOsName[] = "fakedows"; constexpr char kFakeOsName[] = "fakedows";
constexpr char kFakeDownloadToken[] = "fakedlt"; constexpr char kFakeDownloadToken[] = "fakedlt";

@ -51,7 +51,6 @@
#include "net/base/ip_endpoint.h" #include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/log/net_log_source.h" #include "net/log/net_log_source.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace { namespace {
@ -120,8 +119,8 @@ void HandleRequestOnIOThread(
send_response_func))); send_response_func)));
} }
ABSL_CONST_INIT thread_local HttpServer* server_ipv4 = nullptr; constinit thread_local HttpServer* server_ipv4 = nullptr;
ABSL_CONST_INIT thread_local HttpServer* server_ipv6 = nullptr; constinit thread_local HttpServer* server_ipv6 = nullptr;
void StopServerOnIOThread() { void StopServerOnIOThread() {
delete server_ipv4; delete server_ipv4;

@ -20,11 +20,10 @@
#include "chrome/test/chromedriver/chrome/status.h" #include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/chrome/web_view.h" #include "chrome/test/chromedriver/chrome/web_view.h"
#include "chrome/test/chromedriver/logging.h" #include "chrome/test/chromedriver/logging.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace { namespace {
ABSL_CONST_INIT thread_local Session* session = nullptr; constinit thread_local Session* session = nullptr;
} // namespace } // namespace

@ -15,6 +15,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -24,6 +24,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -17,6 +17,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -26,6 +26,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -30,6 +30,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -17,6 +17,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -14,6 +14,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -43,6 +43,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -14,6 +14,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -24,6 +24,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -15,6 +15,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -19,6 +19,7 @@ include_rules = [
# Please keep this section in sync with //DEPS. # Please keep this section in sync with //DEPS.
'+third_party/abseil-cpp', '+third_party/abseil-cpp',
'-third_party/abseil-cpp/absl/algorithm/container.h', '-third_party/abseil-cpp/absl/algorithm/container.h',
'-third_party/abseil-cpp/absl/base/attributes.h',
'-third_party/abseil-cpp/absl/base/nullability.h', '-third_party/abseil-cpp/absl/base/nullability.h',
'-third_party/abseil-cpp/absl/container', '-third_party/abseil-cpp/absl/container',
'+third_party/abseil-cpp/absl/container/inlined_vector.h', '+third_party/abseil-cpp/absl/container/inlined_vector.h',

@ -5,10 +5,10 @@
#ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_TESTING_CLOCK_TIME_PROVIDER_H_ #ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_TESTING_CLOCK_TIME_PROVIDER_H_
#define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_TESTING_CLOCK_TIME_PROVIDER_H_ #define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_TESTING_CLOCK_TIME_PROVIDER_H_
#include "base/compiler_specific.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "components/feature_engagement/internal/time_provider.h" #include "components/feature_engagement/internal/time_provider.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace base { namespace base {
class Clock; class Clock;
@ -20,8 +20,7 @@ namespace feature_engagement {
class TestingClockTimeProvider : public TimeProvider { class TestingClockTimeProvider : public TimeProvider {
public: public:
// The passed in clock must outlive this class. // The passed in clock must outlive this class.
TestingClockTimeProvider(const base::Clock& clock TestingClockTimeProvider(const base::Clock& clock LIFETIME_BOUND,
ABSL_ATTRIBUTE_LIFETIME_BOUND,
base::Time initial_now); base::Time initial_now);
TestingClockTimeProvider(const TestingClockTimeProvider&) = delete; TestingClockTimeProvider(const TestingClockTimeProvider&) = delete;

@ -14,7 +14,6 @@
#include "components/memory_system/memory_system_features.h" #include "components/memory_system/memory_system_features.h"
#include "components/memory_system/parameters.h" #include "components/memory_system/parameters.h"
#include "partition_alloc/buildflags.h" #include "partition_alloc/buildflags.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(ENABLE_GWP_ASAN) #if BUILDFLAG(ENABLE_GWP_ASAN)
#include "components/gwp_asan/client/gwp_asan.h" // nogncheck #include "components/gwp_asan/client/gwp_asan.h" // nogncheck

@ -9,7 +9,6 @@
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace metrics { namespace metrics {
@ -37,7 +36,7 @@ class SingleSampleMetricImpl : public base::SingleSampleMetric {
mojo::Remote<mojom::SingleSampleMetric> metric_; mojo::Remote<mojom::SingleSampleMetric> metric_;
}; };
ABSL_CONST_INIT thread_local mojo::Remote<mojom::SingleSampleMetricsProvider>* constinit thread_local mojo::Remote<mojom::SingleSampleMetricsProvider>*
provider = nullptr; provider = nullptr;
} // namespace } // namespace

@ -20,7 +20,6 @@
#include "components/subresource_filter/core/common/flat/indexed_ruleset_generated.h" #include "components/subresource_filter/core/common/flat/indexed_ruleset_generated.h"
#include "components/subresource_filter/core/common/load_policy.h" #include "components/subresource_filter/core/common/load_policy.h"
#include "components/url_pattern_index/url_pattern_index.h" #include "components/url_pattern_index/url_pattern_index.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/flatbuffers/src/include/flatbuffers/flatbuffers.h" #include "third_party/flatbuffers/src/include/flatbuffers/flatbuffers.h"
class GURL; class GURL;
@ -86,7 +85,7 @@ class RulesetIndexer {
// Returns a pointer to the buffer containing the serialized flat data // Returns a pointer to the buffer containing the serialized flat data
// structures. Should only be called after Finish(). // structures. Should only be called after Finish().
base::span<const uint8_t> data() const ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<const uint8_t> data() const LIFETIME_BOUND {
return base::span(builder_.GetBufferPointer(), builder_.GetSize()); return base::span(builder_.GetBufferPointer(), builder_.GetSize());
} }

@ -8,12 +8,12 @@
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
#include "base/compiler_specific.h"
#include "base/files/file.h" #include "base/files/file.h"
#include "base/files/memory_mapped_file.h" #include "base/files/memory_mapped_file.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace subresource_filter { namespace subresource_filter {
@ -31,7 +31,7 @@ class MemoryMappedRuleset final : public base::RefCounted<MemoryMappedRuleset> {
static void SetMemoryMapFailuresForTesting(bool fail); static void SetMemoryMapFailuresForTesting(bool fail);
base::span<const uint8_t> data() const ABSL_ATTRIBUTE_LIFETIME_BOUND { base::span<const uint8_t> data() const LIFETIME_BOUND {
return ruleset_.bytes(); return ruleset_.bytes();
} }

@ -12,14 +12,13 @@
#include "base/containers/contains.h" #include "base/containers/contains.h"
#include "base/metrics/field_trial_list_including_low_anonymity.h" #include "base/metrics/field_trial_list_including_low_anonymity.h"
#include "components/variations/variations_crash_keys.h" #include "components/variations/variations_crash_keys.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace variations { namespace variations {
namespace { namespace {
ChildProcessFieldTrialSyncer* g_instance = nullptr; ChildProcessFieldTrialSyncer* g_instance = nullptr;
ABSL_CONST_INIT thread_local bool in_set_field_trial_group_from_browser = false; constinit thread_local bool in_set_field_trial_group_from_browser = false;
} // namespace } // namespace

@ -11,7 +11,6 @@
#include "components/web_package/signed_web_bundles/signature_entry_parser.h" #include "components/web_package/signed_web_bundles/signature_entry_parser.h"
#include "components/web_package/signed_web_bundles/types.h" #include "components/web_package/signed_web_bundles/types.h"
#include "components/web_package/web_bundle_parser.h" #include "components/web_package/web_bundle_parser.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace web_package { namespace web_package {

@ -9,6 +9,7 @@
#include <string_view> #include <string_view>
#include "base/check.h" #include "base/check.h"
#include "base/compiler_specific.h"
#include "base/containers/span.h" #include "base/containers/span.h"
#include "base/functional/bind.h" #include "base/functional/bind.h"
#include "base/functional/callback.h" #include "base/functional/callback.h"
@ -203,7 +204,7 @@ class WebBundleParser::MetadataParser
: public WebBundleParser::WebBundleSectionParser { : public WebBundleParser::WebBundleSectionParser {
public: public:
MetadataParser(mojo::Remote<mojom::BundleDataSource>& data_source MetadataParser(mojo::Remote<mojom::BundleDataSource>& data_source
ABSL_ATTRIBUTE_LIFETIME_BOUND, LIFETIME_BOUND,
GURL base_url, GURL base_url,
std::optional<uint64_t> offset, std::optional<uint64_t> offset,
ParseMetadataCallback callback) ParseMetadataCallback callback)
@ -720,7 +721,7 @@ class WebBundleParser::ResponseParser
: public WebBundleParser::WebBundleSectionParser { : public WebBundleParser::WebBundleSectionParser {
public: public:
ResponseParser(mojo::Remote<mojom::BundleDataSource>& data_source ResponseParser(mojo::Remote<mojom::BundleDataSource>& data_source
ABSL_ATTRIBUTE_LIFETIME_BOUND, LIFETIME_BOUND,
uint64_t response_offset, uint64_t response_offset,
uint64_t response_length, uint64_t response_length,
WebBundleParser::ParseResponseCallback callback) WebBundleParser::ParseResponseCallback callback)

@ -22,7 +22,6 @@
#include "base/thread_annotations.h" #include "base/thread_annotations.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/webrtc/rtc_base/physical_socket_server.h" #include "third_party/webrtc/rtc_base/physical_socket_server.h"
#include "third_party/webrtc_overrides/api/location.h" #include "third_party/webrtc_overrides/api/location.h"
#include "third_party/webrtc_overrides/metronome_source.h" #include "third_party/webrtc_overrides/metronome_source.h"
@ -33,7 +32,7 @@ namespace {
constexpr base::TimeDelta kTaskLatencySampleDuration = base::Seconds(3); constexpr base::TimeDelta kTaskLatencySampleDuration = base::Seconds(3);
ABSL_CONST_INIT thread_local ThreadWrapper* jingle_thread_wrapper = nullptr; constinit thread_local ThreadWrapper* jingle_thread_wrapper = nullptr;
} // namespace } // namespace

@ -76,7 +76,6 @@
#include "media/capture/video/fake_video_capture_device_factory.h" #include "media/capture/video/fake_video_capture_device_factory.h"
#include "media/capture/video/video_capture_system_impl.h" #include "media/capture/video/video_capture_system_impl.h"
#include "media/mojo/mojom/display_media_information.mojom.h" #include "media/mojo/mojom/display_media_information.mojom.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/mediastream/media_devices.h" #include "third_party/blink/public/common/mediastream/media_devices.h"
#include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/common/mediastream/media_stream_request.h"
@ -114,7 +113,7 @@ using ::blink::mojom::MediaDeviceType;
namespace content { namespace content {
ABSL_CONST_INIT thread_local MediaStreamManager* media_stream_manager = nullptr; constinit thread_local MediaStreamManager* media_stream_manager = nullptr;
using ::blink::MediaStreamDevice; using ::blink::MediaStreamDevice;
using ::blink::MediaStreamDevices; using ::blink::MediaStreamDevices;

@ -21,7 +21,6 @@
#include "mojo/public/cpp/bindings/interface_endpoint_client.h" #include "mojo/public/cpp/bindings/interface_endpoint_client.h"
#include "sandbox/policy/sandbox_type.h" #include "sandbox/policy/sandbox_type.h"
#include "services/tracing/public/cpp/trace_startup.h" #include "services/tracing/public/cpp/trace_startup.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/features.h"
#if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX) #if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX)
@ -40,7 +39,7 @@ namespace content {
namespace { namespace {
ABSL_CONST_INIT thread_local ChildProcess* child_process = nullptr; constinit thread_local ChildProcess* child_process = nullptr;
class ChildIOThread : public base::Thread { class ChildIOThread : public base::Thread {
public: public:

@ -78,7 +78,6 @@
#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/tracing/public/cpp/background_tracing/background_tracing_agent_impl.h" #include "services/tracing/public/cpp/background_tracing/background_tracing_agent_impl.h"
#include "services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.h" #include "services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if BUILDFLAG(IS_POSIX) #if BUILDFLAG(IS_POSIX)
#include "base/posix/global_descriptors.h" #include "base/posix/global_descriptors.h"
@ -114,7 +113,7 @@ namespace {
// How long to wait for a connection to the browser process before giving up. // How long to wait for a connection to the browser process before giving up.
const int kConnectionTimeoutS = 15; const int kConnectionTimeoutS = 15;
ABSL_CONST_INIT thread_local ChildThreadImpl* child_thread_impl = nullptr; constinit thread_local ChildThreadImpl* child_thread_impl = nullptr;
// This isn't needed on Windows because there the sandbox's job object // This isn't needed on Windows because there the sandbox's job object
// terminates child processes automatically. For unsandboxed processes (i.e. // terminates child processes automatically. For unsandboxed processes (i.e.

@ -16,7 +16,6 @@
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace content { namespace content {
@ -85,7 +84,7 @@ class CONTENT_EXPORT RenderFrameHostReceiverSet : public WebContentsObserver {
// //
// Important: this method must only be called while the incoming message is // Important: this method must only be called while the incoming message is
// being dispatched on the stack. // being dispatched on the stack.
RenderFrameHost* GetCurrentTargetFrame() ABSL_ATTRIBUTE_RETURNS_NONNULL { RETURNS_NONNULL RenderFrameHost* GetCurrentTargetFrame() {
if (current_target_frame_for_testing_) if (current_target_frame_for_testing_)
return current_target_frame_for_testing_; return current_target_frame_for_testing_;
return receivers_.current_context(); return receivers_.current_context();

@ -6,7 +6,6 @@
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/threading/thread_checker_impl.h" #include "base/threading/thread_checker_impl.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace content { namespace content {
@ -14,7 +13,7 @@ namespace {
// Keep the global RenderThread in a TLS slot so it is impossible to access // Keep the global RenderThread in a TLS slot so it is impossible to access
// incorrectly from the wrong thread. // incorrectly from the wrong thread.
ABSL_CONST_INIT thread_local RenderThread* render_thread = nullptr; constinit thread_local RenderThread* render_thread = nullptr;
static const base::ThreadCheckerImpl& GetThreadChecker() { static const base::ThreadCheckerImpl& GetThreadChecker() {
static base::NoDestructor<base::ThreadCheckerImpl> checker; static base::NoDestructor<base::ThreadCheckerImpl> checker;

@ -4,7 +4,6 @@
#include "content/public/utility/utility_thread.h" #include "content/public/utility/utility_thread.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace content { namespace content {
@ -12,7 +11,7 @@ namespace {
// Keep the global UtilityThread in a TLS slot so it is impossible to access // Keep the global UtilityThread in a TLS slot so it is impossible to access
// incorrectly from the wrong thread. // incorrectly from the wrong thread.
ABSL_CONST_INIT thread_local UtilityThread* utility_thread = nullptr; constinit thread_local UtilityThread* utility_thread = nullptr;
} // namespace } // namespace

@ -147,7 +147,6 @@
#include "services/viz/public/cpp/gpu/gpu.h" #include "services/viz/public/cpp/gpu/gpu.h"
#include "skia/ext/font_utils.h" #include "skia/ext/font_utils.h"
#include "skia/ext/skia_memory_dump_provider.h" #include "skia/ext/skia_memory_dump_provider.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/origin_trials/origin_trials_settings_provider.h" #include "third_party/blink/public/common/origin_trials/origin_trials_settings_provider.h"
#include "third_party/blink/public/common/page/launching_process_state.h" #include "third_party/blink/public/common/page/launching_process_state.h"
#include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/common/switches.h"
@ -247,7 +246,7 @@ using ::blink::WebView;
// Keep the global RenderThreadImpl in a TLS slot so it is impossible to access // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access
// incorrectly from the wrong thread. // incorrectly from the wrong thread.
ABSL_CONST_INIT thread_local RenderThreadImpl* render_thread = nullptr; constinit thread_local RenderThreadImpl* render_thread = nullptr;
base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner>>:: base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner>>::
DestructorAtExit g_main_task_runner = LAZY_INSTANCE_INITIALIZER; DestructorAtExit g_main_task_runner = LAZY_INSTANCE_INITIALIZER;

@ -35,7 +35,7 @@ struct WorkerThreadData {
WorkerThreadObservers observers; WorkerThreadObservers observers;
}; };
ABSL_CONST_INIT thread_local WorkerThreadData* worker_data = nullptr; constinit thread_local WorkerThreadData* worker_data = nullptr;
// A task-runner that refuses to run any tasks. // A task-runner that refuses to run any tasks.
class DoNothingTaskRunner : public base::SequencedTaskRunner { class DoNothingTaskRunner : public base::SequencedTaskRunner {

@ -12,6 +12,7 @@
#include <algorithm> #include <algorithm>
#include <array> #include <array>
#include "base/compiler_specific.h"
#include "base/containers/span.h" #include "base/containers/span.h"
#include "base/metrics/crc32.h" #include "base/metrics/crc32.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
@ -41,7 +42,7 @@ const float kDpadMax = 7.0f;
constexpr uint16_t kTouchDimensionX = 1920; constexpr uint16_t kTouchDimensionX = 1920;
constexpr uint16_t kTouchDimensionY = 942; constexpr uint16_t kTouchDimensionY = 942;
struct ControllerData { struct PACKED_OBJ ControllerData {
uint8_t axis_left_x; uint8_t axis_left_x;
uint8_t axis_left_y; uint8_t axis_left_y;
uint8_t axis_right_x; uint8_t axis_right_x;
@ -76,7 +77,7 @@ struct ControllerData {
uint8_t battery_info : 5; uint8_t battery_info : 5;
uint8_t padding2 : 2; uint8_t padding2 : 2;
bool extension_detection : 1; bool extension_detection : 1;
} ABSL_ATTRIBUTE_PACKED; };
static_assert(sizeof(ControllerData) == 30, static_assert(sizeof(ControllerData) == 30,
"ControllerData has incorrect size"); "ControllerData has incorrect size");
@ -107,7 +108,7 @@ struct Dualshock4InputReportUsb {
static_assert(sizeof(Dualshock4InputReportUsb) == 64, static_assert(sizeof(Dualshock4InputReportUsb) == 64,
"Dualshock4InputReportUsb has incorrect size"); "Dualshock4InputReportUsb has incorrect size");
struct Dualshock4InputReportBluetooth { struct PACKED_OBJ Dualshock4InputReportBluetooth {
uint8_t padding1[2]; uint8_t padding1[2];
ControllerData controller_data; ControllerData controller_data;
uint8_t padding2[2]; uint8_t padding2[2];
@ -115,7 +116,7 @@ struct Dualshock4InputReportBluetooth {
TouchPadData touches[4]; TouchPadData touches[4];
uint8_t padding3[2]; uint8_t padding3[2];
uint32_t crc32; uint32_t crc32;
} ABSL_ATTRIBUTE_PACKED; };
static_assert(sizeof(Dualshock4InputReportBluetooth) == 77, static_assert(sizeof(Dualshock4InputReportBluetooth) == 77,
"Dualshock4InputReportBluetooth has incorrect size"); "Dualshock4InputReportBluetooth has incorrect size");

@ -123,7 +123,7 @@ footers.
- Make the symbol read-only (usually by adding "const"). - Make the symbol read-only (usually by adding "const").
- If you can't make it const, then rename it. - If you can't make it const, then rename it.
- If the symbol is logically const, and you really don't want to rename it to - If the symbol is logically const, and you really don't want to rename it to
reveal that it is not actually mutable, you can annotate it with the reveal that it is actually mutable, you can annotate it with the
[LOGICALLY_CONST] macro. [LOGICALLY_CONST] macro.
- To check what section a symbol is in for a local build: - To check what section a symbol is in for a local build:
```sh ```sh

@ -12,7 +12,6 @@
#include "extensions/renderer/dispatcher.h" #include "extensions/renderer/dispatcher.h"
#include "extensions/renderer/script_context.h" #include "extensions/renderer/script_context.h"
#include "extensions/renderer/worker_thread_util.h" #include "extensions/renderer/worker_thread_util.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "v8/include/v8-context.h" #include "v8/include/v8-context.h"
namespace extensions { namespace extensions {
@ -35,7 +34,7 @@ ContextVector::iterator FindContext(ContextVector* contexts,
} }
// Implement thread safety by storing each ScriptContext in TLS. // Implement thread safety by storing each ScriptContext in TLS.
ABSL_CONST_INIT thread_local ContextVector* contexts = nullptr; constinit thread_local ContextVector* contexts = nullptr;
} // namespace } // namespace

@ -28,14 +28,13 @@
#include "extensions/renderer/service_worker_data.h" #include "extensions/renderer/service_worker_data.h"
#include "extensions/renderer/worker_script_context_set.h" #include "extensions/renderer/worker_script_context_set.h"
#include "extensions/renderer/worker_thread_util.h" #include "extensions/renderer/worker_thread_util.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace extensions { namespace extensions {
namespace { namespace {
ABSL_CONST_INIT thread_local extensions::ServiceWorkerData* constinit thread_local extensions::ServiceWorkerData* service_worker_data =
service_worker_data = nullptr; nullptr;
ServiceWorkerData* GetServiceWorkerDataChecked() { ServiceWorkerData* GetServiceWorkerDataChecked() {
ServiceWorkerData* data = WorkerThreadDispatcher::GetServiceWorkerData(); ServiceWorkerData* data = WorkerThreadDispatcher::GetServiceWorkerData();

@ -13,14 +13,14 @@
#include "base/check.h" #include "base/check.h"
#include "base/check_op.h" #include "base/check_op.h"
#include "base/compiler_specific.h"
#include "base/memory/page_size.h" #include "base/memory/page_size.h"
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "partition_alloc/thread_isolation/alignment.h" #include "partition_alloc/thread_isolation/alignment.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
extern int pkey_alloc(unsigned int flags, WEAK_SYMBOL extern int pkey_alloc(unsigned int flags,
unsigned int access_rights) ABSL_ATTRIBUTE_WEAK; unsigned int access_rights);
namespace { namespace {

@ -8,7 +8,6 @@
#include "gpu/command_buffer/service/scheduler.h" #include "gpu/command_buffer/service/scheduler.h"
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
#include "third_party/abseil-cpp/absl/base/attributes.h"
#endif #endif
namespace gpu { namespace gpu {
@ -16,7 +15,7 @@ namespace gpu {
namespace { namespace {
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
ABSL_CONST_INIT thread_local bool schedule_task_disallowed = false; constinit thread_local bool schedule_task_disallowed = false;
#endif // DCHECK_IS_ON() #endif // DCHECK_IS_ON()
} // namespace } // namespace

@ -12,14 +12,12 @@
#include "base/functional/bind.h" #include "base/functional/bind.h"
#include "gpu/command_buffer/common/sync_token.h" #include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/service/scheduler.h" #include "gpu/command_buffer/service/scheduler.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace gpu { namespace gpu {
namespace { namespace {
ABSL_CONST_INIT thread_local const SchedulerTaskRunner* current_task_runner = constinit thread_local const SchedulerTaskRunner* current_task_runner = nullptr;
nullptr;
} // namespace } // namespace

@ -61,7 +61,6 @@
#include "gpu/config/gpu_preferences.h" #include "gpu/config/gpu_preferences.h"
#include "gpu/config/webgpu_blocklist.h" #include "gpu/config/webgpu_blocklist.h"
#include "gpu/webgpu/callback.h" #include "gpu/webgpu/callback.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/tokens/tokens.h" #include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/gpu/ganesh/GrBackendSemaphore.h" #include "third_party/skia/include/gpu/ganesh/GrBackendSemaphore.h"
@ -1005,7 +1004,7 @@ constexpr WebGPUDecoderImpl::CommandInfo WebGPUDecoderImpl::command_info[] = {
// This variable is set to DawnWireServer's parent decoder during execution of // This variable is set to DawnWireServer's parent decoder during execution of
// HandleCommands. It is cleared to nullptr after. // HandleCommands. It is cleared to nullptr after.
ABSL_CONST_INIT thread_local WebGPUDecoderImpl* parent_decoder = nullptr; constinit thread_local WebGPUDecoderImpl* parent_decoder = nullptr;
// DawnWireServer is a wrapper around dawn::wire::WireServer which allows // DawnWireServer is a wrapper around dawn::wire::WireServer which allows
// overriding some of the WGPU procs the server delegates calls to. // overriding some of the WGPU procs the server delegates calls to.

@ -55,7 +55,6 @@
#include "mojo/public/cpp/bindings/scoped_message_error_crash_key.h" #include "mojo/public/cpp/bindings/scoped_message_error_crash_key.h"
#include "mojo/public/cpp/bindings/sequence_local_sync_event_watcher.h" #include "mojo/public/cpp/bindings/sequence_local_sync_event_watcher.h"
#include "mojo/public/cpp/bindings/tracing_helpers.h" #include "mojo/public/cpp/bindings/tracing_helpers.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace IPC { namespace IPC {
@ -63,7 +62,7 @@ class ChannelAssociatedGroupController;
namespace { namespace {
ABSL_CONST_INIT thread_local bool off_sequence_binding_allowed = false; constinit thread_local bool off_sequence_binding_allowed = false;
BASE_FEATURE(kMojoChannelAssociatedSendUsesRunOrPostTask, BASE_FEATURE(kMojoChannelAssociatedSendUsesRunOrPostTask,
"MojoChannelAssociatedSendUsesRunOrPostTask", "MojoChannelAssociatedSendUsesRunOrPostTask",

@ -27,7 +27,6 @@
#include "ipc/ipc_message_macros.h" #include "ipc/ipc_message_macros.h"
#include "ipc/ipc_sync_message.h" #include "ipc/ipc_sync_message.h"
#include "mojo/public/cpp/bindings/sync_event_watcher.h" #include "mojo/public/cpp/bindings/sync_event_watcher.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#if !BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) #if !BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
#include "ipc/trace_ipc_message.h" #include "ipc/trace_ipc_message.h"
@ -46,7 +45,7 @@ void OnEventReady(bool* signal) {
} }
// Holds a pointer to the per-thread ReceivedSyncMsgQueue object. // Holds a pointer to the per-thread ReceivedSyncMsgQueue object.
ABSL_CONST_INIT thread_local SyncChannel::ReceivedSyncMsgQueue* received_queue = constinit thread_local SyncChannel::ReceivedSyncMsgQueue* received_queue =
nullptr; nullptr;
} // namespace } // namespace

@ -12,14 +12,13 @@
#include "mojo/core/platform_handle_dispatcher.h" #include "mojo/core/platform_handle_dispatcher.h"
#include "mojo/core/ports/event.h" #include "mojo/core/ports/event.h"
#include "mojo/core/shared_buffer_dispatcher.h" #include "mojo/core/shared_buffer_dispatcher.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace mojo { namespace mojo {
namespace core { namespace core {
namespace { namespace {
ABSL_CONST_INIT thread_local bool is_extracting_handles_from_message = false; constinit thread_local bool is_extracting_handles_from_message = false;
} // namespace } // namespace

@ -16,7 +16,6 @@
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
#include "base/check_op.h" #include "base/check_op.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#endif #endif
namespace mojo { namespace mojo {
@ -26,7 +25,7 @@ namespace ports {
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
namespace { namespace {
ABSL_CONST_INIT thread_local const PortLocker* port_locker = nullptr; constinit thread_local const PortLocker* port_locker = nullptr;
} // namespace } // namespace
#endif #endif

@ -5,14 +5,13 @@
#include "mojo/core/request_context.h" #include "mojo/core/request_context.h"
#include "base/check.h" #include "base/check.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace mojo { namespace mojo {
namespace core { namespace core {
namespace { namespace {
ABSL_CONST_INIT thread_local RequestContext* current_context = nullptr; constinit thread_local RequestContext* current_context = nullptr;
} // namespace } // namespace

@ -46,7 +46,7 @@ namespace mojo {
namespace { namespace {
ABSL_CONST_INIT thread_local base::HistogramBase* g_end_to_end_metric = nullptr; constinit thread_local base::HistogramBase* g_end_to_end_metric = nullptr;
// A helper to expose a subset of an InterfaceEndpointClient's functionality // A helper to expose a subset of an InterfaceEndpointClient's functionality
// through a thread-safe interface. Used by SharedRemote. // through a thread-safe interface. Used by SharedRemote.

@ -4,14 +4,13 @@
#include "mojo/public/cpp/bindings/urgent_message_scope.h" #include "mojo/public/cpp/bindings/urgent_message_scope.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace mojo { namespace mojo {
namespace { namespace {
// `UrgentMessageScope` is stack allocated and should never cross tasks, so // `UrgentMessageScope` is stack allocated and should never cross tasks, so
// using thread local is good enough to avoid collisions. // using thread local is good enough to avoid collisions.
ABSL_CONST_INIT thread_local bool is_in_urgent_message_scope = false; constinit thread_local bool is_in_urgent_message_scope = false;
} // namespace } // namespace
UrgentMessageScope::UrgentMessageScope() UrgentMessageScope::UrgentMessageScope()

@ -7,13 +7,12 @@
#include <atomic> #include <atomic>
#include <type_traits> #include <type_traits>
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace net::activity_monitor { namespace net::activity_monitor {
namespace { namespace {
ABSL_CONST_INIT std::atomic<uint64_t> g_bytes_received = 0; constinit std::atomic<uint64_t> g_bytes_received = 0;
} // namespace } // namespace

@ -25,7 +25,7 @@ bool g_partition_by_default = false;
// True if NAK::IsPartitioningEnabled has been called, and the value of // True if NAK::IsPartitioningEnabled has been called, and the value of
// `g_partition_by_default` cannot be changed. // `g_partition_by_default` cannot be changed.
ABSL_CONST_INIT std::atomic<bool> g_partition_by_default_locked = false; constinit std::atomic<bool> g_partition_by_default_locked = false;
} // namespace } // namespace

@ -7,7 +7,6 @@
#include "base/check.h" #include "base/check.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/task/single_thread_task_runner.h" #include "base/task/single_thread_task_runner.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace ppapi { namespace ppapi {
@ -15,7 +14,7 @@ namespace {
// Thread-local globals for testing. See SetPpapiGlobalsOnThreadForTest for more // Thread-local globals for testing. See SetPpapiGlobalsOnThreadForTest for more
// information. // information.
ABSL_CONST_INIT thread_local PpapiGlobals* ppapi_globals_for_test = nullptr; constinit thread_local PpapiGlobals* ppapi_globals_for_test = nullptr;
} // namespace } // namespace

@ -7,18 +7,17 @@
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "base/synchronization/lock.h" #include "base/synchronization/lock.h"
#include "ppapi/shared_impl/ppapi_globals.h" #include "ppapi/shared_impl/ppapi_globals.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace ppapi { namespace ppapi {
base::LazyInstance<base::Lock>::Leaky g_proxy_lock = LAZY_INSTANCE_INITIALIZER; base::LazyInstance<base::Lock>::Leaky g_proxy_lock = LAZY_INSTANCE_INITIALIZER;
bool g_disable_locking = false; bool g_disable_locking = false;
ABSL_CONST_INIT thread_local bool disable_locking_for_thread = false; constinit thread_local bool disable_locking_for_thread = false;
// Simple single-thread deadlock detector for the proxy lock. // Simple single-thread deadlock detector for the proxy lock.
// |true| when the current thread has the lock. // |true| when the current thread has the lock.
ABSL_CONST_INIT thread_local bool proxy_locked_on_thread = false; constinit thread_local bool proxy_locked_on_thread = false;
// static // static
base::Lock* ProxyLock::Get() { base::Lock* ProxyLock::Get() {

@ -15,7 +15,6 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/win/scoped_bstr.h" #include "base/win/scoped_bstr.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace remoting { namespace remoting {
@ -58,7 +57,7 @@ enum RdpAudioMode {
}; };
// Points to a per-thread instance of the window activation hook handle. // Points to a per-thread instance of the window activation hook handle.
ABSL_CONST_INIT thread_local RdpClientWindow::WindowHook* window_hook = nullptr; constinit thread_local RdpClientWindow::WindowHook* window_hook = nullptr;
// Finds a child window with the class name matching |class_name|. Unlike // Finds a child window with the class name matching |class_name|. Unlike
// FindWindowEx() this function walks the tree of windows recursively. The walk // FindWindowEx() this function walks the tree of windows recursively. The walk

@ -1743,6 +1743,28 @@ Banned since workaround for lack of RTTI
`std::any`. `std::any`.
*** ***
### Attributes <sup>[banned]</sup>
```c++
T* data() ABSL_ATTRIBUTE_LIFETIME_BOUND { return data_; }
ABSL_ATTRIBUTE_NO_TAIL_CALL ReturnType Loop();
struct S { bool b; int32_t i; } ABSL_ATTRIBUTE_PACKED;
```
**Description:** Cross-platform macros to expose compiler-specific
functionality.
**Documentation:** [attributes.h](https://source.chromium.org/chromium/chromium/src/+/main:third_party/abseil-cpp/absl/base/attributes.h)
**Notes:**
*** promo
Long names discourage use. Use standardized attributes over macros where
possible, and otherwise prefer shorter alternatives in
`base/compiler_specific.h`.
[Discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/lVQOJTng1RU)
***
### bind_front <sup>[banned]</sup> ### bind_front <sup>[banned]</sup>
```c++ ```c++

@ -35,7 +35,6 @@
#include <utility> #include <utility>
#include "base/notreached.h" #include "base/notreached.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/platform/web_isolated_world_info.h" #include "third_party/blink/public/platform/web_isolated_world_info.h"
#include "third_party/blink/renderer/platform/bindings/dom_data_store.h" #include "third_party/blink/renderer/platform/bindings/dom_data_store.h"
#include "third_party/blink/renderer/platform/bindings/v8_object_data_store.h" #include "third_party/blink/renderer/platform/bindings/v8_object_data_store.h"
@ -253,7 +252,7 @@ void DOMWrapperWorld::SetNonMainWorldHumanReadableName(
IsolatedWorldHumanReadableNames().Set(world_id, human_readable_name); IsolatedWorldHumanReadableNames().Set(world_id, human_readable_name);
} }
ABSL_CONST_INIT thread_local int next_world_id = constinit thread_local int next_world_id =
DOMWrapperWorld::kUnspecifiedWorldIdStart; DOMWrapperWorld::kUnspecifiedWorldIdStart;
// static // static

@ -4,14 +4,13 @@
#include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h" #include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
namespace blink { namespace blink {
unsigned ScriptForbiddenScope::g_main_thread_counter_ = 0; unsigned ScriptForbiddenScope::g_main_thread_counter_ = 0;
unsigned ScriptForbiddenScope::g_blink_lifecycle_counter_ = 0; unsigned ScriptForbiddenScope::g_blink_lifecycle_counter_ = 0;
ABSL_CONST_INIT thread_local unsigned script_forbidden_counter = 0; constinit thread_local unsigned script_forbidden_counter = 0;
unsigned& ScriptForbiddenScope::GetMutableCounter() { unsigned& ScriptForbiddenScope::GetMutableCounter() {
return IsMainThread() ? g_main_thread_counter_ : script_forbidden_counter; return IsMainThread() ? g_main_thread_counter_ : script_forbidden_counter;

@ -10,7 +10,6 @@
#include "base/threading/platform_thread.h" #include "base/threading/platform_thread.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "mojo/public/cpp/bindings/interface_endpoint_client.h" #include "mojo/public/cpp/bindings/interface_endpoint_client.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/platform/scheduler/public/main_thread.h" #include "third_party/blink/renderer/platform/scheduler/public/main_thread.h"
@ -31,7 +30,7 @@ namespace blink {
namespace { namespace {
ABSL_CONST_INIT thread_local Thread* current_thread = nullptr; constinit thread_local Thread* current_thread = nullptr;
std::unique_ptr<MainThread>& GetMainThread() { std::unique_ptr<MainThread>& GetMainThread() {
DEFINE_STATIC_LOCAL(std::unique_ptr<MainThread>, main_thread, ()); DEFINE_STATIC_LOCAL(std::unique_ptr<MainThread>, main_thread, ());

@ -29,7 +29,8 @@
#include <iosfwd> #include <iosfwd>
#include <memory> #include <memory>
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "base/compiler_specific.h"
#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h"
@ -169,7 +170,7 @@ class PLATFORM_EXPORT KURL {
String Protocol() const; String Protocol() const;
String Host() const; String Host() const;
StringView HostView() const ABSL_ATTRIBUTE_LIFETIME_BOUND; StringView HostView() const LIFETIME_BOUND;
// Returns 0 when there is no port or the default port was specified, or the // Returns 0 when there is no port or the default port was specified, or the
// URL is invalid. // URL is invalid.

@ -25,8 +25,8 @@
#include <iosfwd> #include <iosfwd>
#include <type_traits> #include <type_traits>
#include "base/compiler_specific.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/hash_table_deleted_value_type.h" #include "third_party/blink/renderer/platform/wtf/hash_table_deleted_value_type.h"
#include "third_party/blink/renderer/platform/wtf/ref_counted.h" #include "third_party/blink/renderer/platform/wtf/ref_counted.h"
@ -301,17 +301,14 @@ struct HashTraits<AtomicString>;
// double-quotes, and escapes characters other than ASCII printables. // double-quotes, and escapes characters other than ASCII printables.
WTF_EXPORT std::ostream& operator<<(std::ostream&, const AtomicString&); WTF_EXPORT std::ostream& operator<<(std::ostream&, const AtomicString&);
inline StringView::StringView(const AtomicString& string inline StringView::StringView(const AtomicString& string LIFETIME_BOUND,
ABSL_ATTRIBUTE_LIFETIME_BOUND,
unsigned offset, unsigned offset,
unsigned length) unsigned length)
: StringView(string.Impl(), offset, length) {} : StringView(string.Impl(), offset, length) {}
inline StringView::StringView(const AtomicString& string inline StringView::StringView(const AtomicString& string LIFETIME_BOUND,
ABSL_ATTRIBUTE_LIFETIME_BOUND,
unsigned offset) unsigned offset)
: StringView(string.Impl(), offset) {} : StringView(string.Impl(), offset) {}
inline StringView::StringView( inline StringView::StringView(const AtomicString& string LIFETIME_BOUND)
const AtomicString& string ABSL_ATTRIBUTE_LIFETIME_BOUND)
: StringView(string.Impl()) {} : StringView(string.Impl()) {}
} // namespace WTF } // namespace WTF

@ -13,10 +13,10 @@
#include <cstring> #include <cstring>
#include <type_traits> #include <type_traits>
#include "base/compiler_specific.h"
#include "base/containers/span.h" #include "base/containers/span.h"
#include "base/dcheck_is_on.h" #include "base/dcheck_is_on.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/get_ptr.h" #include "third_party/blink/renderer/platform/wtf/get_ptr.h"
#include "third_party/blink/renderer/platform/wtf/text/string_impl.h" #include "third_party/blink/renderer/platform/wtf/text/string_impl.h"
@ -121,22 +121,20 @@ class WTF_EXPORT StringView {
StringView(StringImpl&, unsigned offset, unsigned length); StringView(StringImpl&, unsigned offset, unsigned length);
// From a String, implemented in wtf_string.h // From a String, implemented in wtf_string.h
inline StringView(const String& string ABSL_ATTRIBUTE_LIFETIME_BOUND, inline StringView(const String& string LIFETIME_BOUND,
unsigned offset, unsigned offset,
unsigned length); unsigned length);
inline StringView(const String& string ABSL_ATTRIBUTE_LIFETIME_BOUND, inline StringView(const String& string LIFETIME_BOUND, unsigned offset);
unsigned offset);
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
inline StringView(const String& string ABSL_ATTRIBUTE_LIFETIME_BOUND); inline StringView(const String& string LIFETIME_BOUND);
// From an AtomicString, implemented in atomic_string.h // From an AtomicString, implemented in atomic_string.h
inline StringView(const AtomicString& string ABSL_ATTRIBUTE_LIFETIME_BOUND, inline StringView(const AtomicString& string LIFETIME_BOUND,
unsigned offset, unsigned offset,
unsigned length); unsigned length);
inline StringView(const AtomicString& string ABSL_ATTRIBUTE_LIFETIME_BOUND, inline StringView(const AtomicString& string LIFETIME_BOUND, unsigned offset);
unsigned offset);
// NOLINTNEXTLINE(google-explicit-constructor) // NOLINTNEXTLINE(google-explicit-constructor)
inline StringView(const AtomicString& string ABSL_ATTRIBUTE_LIFETIME_BOUND); inline StringView(const AtomicString& string LIFETIME_BOUND);
// From a literal string or LChar buffer: // From a literal string or LChar buffer:
StringView(const LChar* chars, unsigned length) StringView(const LChar* chars, unsigned length)

Some files were not shown because too many files have changed in this diff Show More