InlinedVector: Disable CFI checking on GetInlinedData()

GetInlinedDataUninitialized() is removed. Just use GetInlinedData() in
all cases instead. GetInlinedData() is sometimes used to return
uninitialized memory.  In these cases it is immediately constructed.

This is a followup to 511ad64. See also:
https://clang.llvm.org/docs/ControlFlowIntegrity.html#bad-cast-checking.

PiperOrigin-RevId: 551205766
Change-Id: I4ddb45e29a723ccf6fc7dc203e762f4ad559fc83
diff --git a/absl/container/inlined_vector_test.cc b/absl/container/inlined_vector_test.cc
index 0730451..5acad65 100644
--- a/absl/container/inlined_vector_test.cc
+++ b/absl/container/inlined_vector_test.cc
@@ -1626,6 +1626,12 @@
   EXPECT_EQ(v.size(), 1u);
 }
 
+TEST(DynamicVec, EmplaceBack) {
+  DynamicVec v;
+  v.emplace_back(Dynamic{});
+  EXPECT_EQ(v.size(), 1u);
+}
+
 TEST(AllocatorSupportTest, Constructors) {
   using MyAlloc = CountingAllocator<int>;
   using AllocVec = absl::InlinedVector<int, 4, MyAlloc>;
diff --git a/absl/container/internal/inlined_vector.h b/absl/container/internal/inlined_vector.h
index 639bf14..cdfd868 100644
--- a/absl/container/internal/inlined_vector.h
+++ b/absl/container/internal/inlined_vector.h
@@ -390,7 +390,13 @@
     return data_.allocated.allocated_data;
   }
 
-  Pointer<A> GetInlinedData() {
+  // ABSL_ATTRIBUTE_NO_SANITIZE_CFI is used because the memory pointed to may be
+  // uninitialized, a common pattern in allocate()+construct() APIs.
+  // https://clang.llvm.org/docs/ControlFlowIntegrity.html#bad-cast-checking
+  // NOTE: When this was written, LLVM documentation did not explicitly
+  // mention that casting `char*` and using `reinterpret_cast` qualifies
+  // as a bad cast.
+  ABSL_ATTRIBUTE_NO_SANITIZE_CFI Pointer<A> GetInlinedData() {
     return reinterpret_cast<Pointer<A>>(data_.inlined.inlined_data);
   }
 
@@ -398,17 +404,6 @@
     return reinterpret_cast<ConstPointer<A>>(data_.inlined.inlined_data);
   }
 
-  // Like GetInlinedData(), but for data that has not been constructed yet.  The
-  // only difference is ABSL_ATTRIBUTE_NO_SANITIZE_CFI, which is necessary
-  // because the object is uninitialized.
-  // https://clang.llvm.org/docs/ControlFlowIntegrity.html#bad-cast-checking
-  // NOTE: When this was written, LLVM documentation did not explicitly
-  // mention that casting `char*` and using `reinterpret_cast` qualifies
-  // as a bad cast.
-  ABSL_ATTRIBUTE_NO_SANITIZE_CFI Pointer<A> GetInlinedDataUninitialized() {
-    return reinterpret_cast<Pointer<A>>(data_.inlined.inlined_data);
-  }
-
   SizeType<A> GetAllocatedCapacity() const {
     return data_.allocated.allocated_capacity;
   }
@@ -637,7 +632,7 @@
     SetAllocation(allocation);
     SetIsAllocated();
   } else {
-    construct_data = GetInlinedDataUninitialized();
+    construct_data = GetInlinedData();
   }
 
   ConstructElements<A>(GetAllocator(), construct_data, values, new_size);