xref: /aosp_15_r20/external/cronet/base/containers/heap_array_nocompile.nc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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