//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This test verifies that the ASan annotations for basic_string objects remain accurate // after invoking basic_string::reserve(size_type __requested_capacity). // Different types are used to confirm that ASan works correctly with types of different sizes. #include #include #include "test_macros.h" #include "asan_testing.h" template void test() { S short_s1(3, 'a'), long_s1(100, 'c'); short_s1.reserve(0x1337); long_s1.reserve(0x1337); LIBCPP_ASSERT(is_string_asan_correct(short_s1)); LIBCPP_ASSERT(is_string_asan_correct(long_s1)); short_s1.clear(); long_s1.clear(); LIBCPP_ASSERT(is_string_asan_correct(short_s1)); LIBCPP_ASSERT(is_string_asan_correct(long_s1)); short_s1.reserve(0x1); long_s1.reserve(0x1); LIBCPP_ASSERT(is_string_asan_correct(short_s1)); LIBCPP_ASSERT(is_string_asan_correct(long_s1)); S short_s2(3, 'a'), long_s2(100, 'c'); short_s2.reserve(0x1); long_s2.reserve(0x1); LIBCPP_ASSERT(is_string_asan_correct(short_s2)); LIBCPP_ASSERT(is_string_asan_correct(long_s2)); } int main(int, char**) { test(); #ifndef TEST_HAS_NO_WIDE_CHARACTERS test(); #endif #if TEST_STD_VER >= 11 test(); test(); #endif #if TEST_STD_VER >= 20 test(); #endif return 0; }