From 9cdb98e73118f0485fdf5fadcb3e57ab852e65a1 Mon Sep 17 00:00:00 2001 From: Derek Mauro Date: Mon, 6 Jun 2022 07:43:30 -0700 Subject: [PATCH] InlinedVector: Limit the scope of the maybe-uninitialized warning suppression Due to changes in GCC 12, without this change, the warning fires PiperOrigin-RevId: 453197246 Change-Id: I2e31cbff1707ab09868cf77dcf040b033984e654 --- absl/container/inlined_vector.h | 12 ++++++++++++ absl/container/internal/inlined_vector.h | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/absl/container/inlined_vector.h b/absl/container/inlined_vector.h index 711b29c1..bc1c4a77 100644 --- a/absl/container/inlined_vector.h +++ b/absl/container/inlined_vector.h @@ -585,8 +585,20 @@ class InlinedVector { if (ABSL_PREDICT_TRUE(n != 0)) { value_type dealias = v; + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102329#c2 + // It appears that GCC thinks that since `pos` is a const pointer and may + // point to uninitialized memory at this point, a warning should be + // issued. But `pos` is actually only used to compute an array index to + // write to. +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif return storage_.Insert(pos, CopyValueAdapter(std::addressof(dealias)), n); +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } else { return const_cast(pos); } diff --git a/absl/container/internal/inlined_vector.h b/absl/container/internal/inlined_vector.h index 2baf26f3..bc1b8c1b 100644 --- a/absl/container/internal/inlined_vector.h +++ b/absl/container/internal/inlined_vector.h @@ -40,7 +40,6 @@ namespace inlined_vector_internal { #if !defined(__clang__) && defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Warray-bounds" -#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif template @@ -942,7 +941,7 @@ auto Storage::Swap(Storage* other_storage_ptr) -> void { swap(GetAllocator(), other_storage_ptr->GetAllocator()); } -// End ignore "array-bounds" and "maybe-uninitialized" +// End ignore "array-bounds" #if !defined(__clang__) && defined(__GNUC__) #pragma GCC diagnostic pop #endif