1// Copyright 2024 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This is a "No Compile Test" suite. 6// https://dev.chromium.org/developers/testing/no-compile-tests 7 8#include <string> 9#include <type_traits> 10 11#include "base/memory/protected_memory.h" 12 13namespace base { 14namespace { 15struct NonTriviallyDestructibleData1 { 16 std::string data; 17}; 18 19static_assert(!std::is_trivially_destructible_v<NonTriviallyDestructibleData1>); 20 21struct NonTriviallyDestructibleData2 { 22 ~NonTriviallyDestructibleData2() { delete[] data; } 23 24 const char* const data = nullptr; 25}; 26 27static_assert(!std::is_trivially_destructible_v<NonTriviallyDestructibleData2>); 28} // namespace 29 30void DoNotAcceptDataWhichIsNotTriviallyDestructibleData() { 31 base::ProtectedMemory<NonTriviallyDestructibleData1, 32 false /*ConstructLazily*/> 33 data_1_eager; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData1>'}} 34 base::ProtectedMemory<NonTriviallyDestructibleData2, 35 false /*ConstructLazily*/> 36 data_2_eager; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData2>'}} 37 38 base::ProtectedMemory<NonTriviallyDestructibleData1, true /*ConstructLazily*/> 39 data_1_lazy; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData1>'}} 40 base::ProtectedMemory<NonTriviallyDestructibleData2, true /*ConstructLazily*/> 41 data_2_lazy; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData2>'}} 42} 43 44void DoNotAcceptParametersForDataWhichIsLazilyConstructible() { 45 base::ProtectedMemory<int, true /*ConstructLazily*/> data( 46 2); // expected-error@base/memory/protected_memory_nocompile.nc:* {{no matching constructor for initialization of 'base::ProtectedMemory<int, true>'}} 47} 48 49} // namespace base 50