1*6777b538SAndroid Build Coastguard Worker// Copyright 2024 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker// This is a "No Compile Test" suite. 6*6777b538SAndroid Build Coastguard Worker// https://dev.chromium.org/developers/testing/no-compile-tests 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker#include "base/containers/heap_array.h" 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker#include <memory> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Workernamespace base { 13*6777b538SAndroid Build Coastguard Workernamespace { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Workerstruct ConstructorRequiresArgs { 16*6777b538SAndroid Build Coastguard Worker ConstructorRequiresArgs(int val) : val_(val) {} 17*6777b538SAndroid Build Coastguard Worker int val_; 18*6777b538SAndroid Build Coastguard Worker}; 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Workerstruct NonTrivialClass { 21*6777b538SAndroid Build Coastguard Worker std::unique_ptr<int> ptr_; 22*6777b538SAndroid Build Coastguard Worker}; 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Workervoid WontCompileUninithNonTrivialClass() { 25*6777b538SAndroid Build Coastguard Worker auto vec = HeapArray<NonTrivialClass>::Uninit(2u); // expected-error {{constraints not satisfied}} 26*6777b538SAndroid Build Coastguard Worker} 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Workervoid WontCompileWithSizeConstructorRequiresArgs() { 29*6777b538SAndroid Build Coastguard Worker auto vec = HeapArray<ConstructorRequiresArgs>::WithSize(2u); // expected-error {{constraints not satisfied}} 30*6777b538SAndroid Build Coastguard Worker} 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Workervoid WontCompileUninitConstructorRequiresArgs() { 33*6777b538SAndroid Build Coastguard Worker auto vec = base::HeapArray<ConstructorRequiresArgs>::Uninit(2u); // expected-error {{constraints not satisfied}} 34*6777b538SAndroid Build Coastguard Worker} 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Workervoid WontCompileConstNotAllowed() { 37*6777b538SAndroid Build Coastguard Worker auto vec = base::HeapArray<const int>(); // expected-error@*:* {{HeapArray cannot hold const types}} 38*6777b538SAndroid Build Coastguard Worker} 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Workervoid WontCompileReferencesNotAllowed() { 41*6777b538SAndroid Build Coastguard Worker auto vec = base::HeapArray<int&>(); // expected-error@*:* {{HeapArray cannot hold reference types}} 42*6777b538SAndroid Build Coastguard Worker} 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Workerint* WontCompileDataLifetime() { 45*6777b538SAndroid Build Coastguard Worker return HeapArray<int>::WithSize(1u).data(); // expected-error {{returning address}} 46*6777b538SAndroid Build Coastguard Worker} 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard WorkerHeapArray<int>::iterator WontCompileBeginLifetime() { 49*6777b538SAndroid Build Coastguard Worker return HeapArray<int>::WithSize(1u).begin(); // expected-error {{returning address}} 50*6777b538SAndroid Build Coastguard Worker} 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard WorkerHeapArray<int>::iterator WontCompileEndLifetime() { 53*6777b538SAndroid Build Coastguard Worker return HeapArray<int>::WithSize(1u).end(); // expected-error {{returning address}} 54*6777b538SAndroid Build Coastguard Worker} 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Workerint& WontCompileIndexLifetime() { 57*6777b538SAndroid Build Coastguard Worker return HeapArray<int>::WithSize(1u)[0]; // expected-error {{returning reference}} 58*6777b538SAndroid Build Coastguard Worker} 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Workerbase::span<int> WontCompileSpanLifetime() { 61*6777b538SAndroid Build Coastguard Worker return HeapArray<int>::WithSize(1u).as_span(); // expected-error {{returning address}} 62*6777b538SAndroid Build Coastguard Worker} 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker} // namespace 65*6777b538SAndroid Build Coastguard Worker} // namespace base 66