brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · d35a5bc Raw
64 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <string>10 11// This test verifies that the ASan annotations for basic_string objects remain accurate12// after invoking basic_string::reserve(size_type __requested_capacity).13// Different types are used to confirm that ASan works correctly with types of different sizes.14#include <string>15#include <cassert>16 17#include "test_macros.h"18#include "asan_testing.h"19 20template <class S>21void test() {22  S short_s1(3, 'a'), long_s1(100, 'c');23  short_s1.reserve(0x1337);24  long_s1.reserve(0x1337);25 26  LIBCPP_ASSERT(is_string_asan_correct(short_s1));27  LIBCPP_ASSERT(is_string_asan_correct(long_s1));28 29  short_s1.clear();30  long_s1.clear();31 32  LIBCPP_ASSERT(is_string_asan_correct(short_s1));33  LIBCPP_ASSERT(is_string_asan_correct(long_s1));34 35  short_s1.reserve(0x1);36  long_s1.reserve(0x1);37 38  LIBCPP_ASSERT(is_string_asan_correct(short_s1));39  LIBCPP_ASSERT(is_string_asan_correct(long_s1));40 41  S short_s2(3, 'a'), long_s2(100, 'c');42  short_s2.reserve(0x1);43  long_s2.reserve(0x1);44 45  LIBCPP_ASSERT(is_string_asan_correct(short_s2));46  LIBCPP_ASSERT(is_string_asan_correct(long_s2));47}48 49int main(int, char**) {50  test<std::string>();51#ifndef TEST_HAS_NO_WIDE_CHARACTERS52  test<std::wstring>();53#endif54#if TEST_STD_VER >= 1155  test<std::u16string>();56  test<std::u32string>();57#endif58#if TEST_STD_VER >= 2059  test<std::u8string>();60#endif61 62  return 0;63}64