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 data_1; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData1>'}} 33 base::ProtectedMemory<NonTriviallyDestructibleData2> 34 data_2; // expected-error@base/memory/protected_memory.h:* {{static assertion failed due to requirement 'std::is_trivially_destructible_v<base::(anonymous namespace)::NonTriviallyDestructibleData2>'}} 35} 36 37void DoNotAcceptParametersForData() { 38 base::ProtectedMemory<int> 39 data(2); // expected-error@base/memory/protected_memory_nocompile.nc:* {{no matching constructor for initialization of 'base::ProtectedMemory<int>'}} 40} 41 42} // namespace base 43