// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This is a "No Compile Test" suite. // http://dev.chromium.org/developers/testing/no-compile-tests #include "base/containers/buffer_iterator.h" #include #include namespace base { class Complex { public: Complex() : string_("Moo") {} private: std::string string_; }; void CreateTypeUint16() { constexpr size_t size = 64; uint16_t data[size]; BufferIterator iterator(data, size); // expected-error@*:* {{Underlying buffer type must be char-type.}} } void ComplexMutableObject() { constexpr size_t size = 64; uint8_t data[size]; BufferIterator iterator(data, size); Complex* c = iterator.MutableObject(); // expected-error {{no matching member function for call to 'MutableObject'}} } void ComplexObject() { constexpr size_t size = 64; uint8_t data[size]; BufferIterator iterator(data, size); const Complex* c = iterator.Object(); // expected-error {{no matching member function for call to 'Object'}} } void ComplexMutableSpan() { constexpr size_t size = 64; uint8_t data[size]; BufferIterator iterator(data, size); base::span s = iterator.MutableSpan(3); // expected-error {{no matching member function for call to 'MutableSpan'}} } void ComplexSpan() { constexpr size_t size = 64; uint8_t data[size]; BufferIterator iterator(data, size); base::span s = iterator.Span(); // expected-error {{no matching member function for call to 'Span'}} } void OverflowCompileTime() { char buffer[64]; BufferIterator iterator( // SAFETY: This intentionally makes an incorrectly-sized span. The span // pointer, stored in the BufferIterator is never moved past the start in // this test, as that would cause Undefined Behaviour. UNSAFE_BUFFERS(span(buffer, std::numeric_limits::max()))); constexpr size_t kInvalidU64Size = (std::numeric_limits::max() / sizeof(uint64_t)) + 1u; iterator.Span(); // expected-error {{no matching member function}} iterator.Span::max()>(); // expected-error {{no matching member function}} } } // namespace base