[libcxx-commits] [libcxx] [libc++][test] Make `deallocate_size.pass.cpp` MSVC-STL-friendly (PR #165162)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Oct 26 10:18:20 PDT 2025
https://github.com/frederick-vs-ja created https://github.com/llvm/llvm-project/pull/165162
This patch contains several changes to `deallocate_size.pass.cpp`:
1. `static_cast`-ing parameters to suitable types to avoid narrowing.
2. Allowing `allocated_ == 1` for MSVC STL because it dynamically allocates one container proxy object in debug modes.
3. Changing the type of `allocated_` to possibly larger and seemingly more appropriate `ptrdiff_t`.
>From d597c414e2f4a24f7ba52ca94b7a641975b028ac Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Mon, 27 Oct 2025 01:14:34 +0800
Subject: [PATCH] [libc++][test] Make `deallocate_size.pass.cpp`
MSVC-STL-friendly
This patch contains several changes to `deallocate_size.pass.cpp`:
1. `static_cast`-ing parameters to suitable types to avoid narrowing.
2. Allows `allocated_ == 1` for MSVC STL because it dynamically
allocates one container proxy object in debug modes.
3. Changes the type of `allocated_` to possibly larger and seemingly
more appropriate `ptrdiff_t`.
---
.../string.capacity/deallocate_size.pass.cpp | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/libcxx/test/std/strings/basic.string/string.capacity/deallocate_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/deallocate_size.pass.cpp
index 00f9e2b846783..b402bbc9bf823 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/deallocate_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/deallocate_size.pass.cpp
@@ -12,12 +12,13 @@
#include <string>
#include <cassert>
+#include <cstddef>
#include <cstdint>
#include <type_traits>
#include "test_macros.h"
-static int allocated_;
+static std::ptrdiff_t allocated_;
template <class T, class Sz>
struct test_alloc {
@@ -40,13 +41,13 @@ struct test_alloc {
TEST_CONSTEXPR test_alloc(const test_alloc<U, Sz>&) TEST_NOEXCEPT {}
pointer allocate(size_type n, const void* = nullptr) {
- allocated_ += n;
- return std::allocator<value_type>().allocate(n);
+ allocated_ += static_cast<std::ptrdiff_t>(n);
+ return std::allocator<value_type>().allocate(static_cast<std::size_t>(n));
}
void deallocate(pointer p, size_type s) {
- allocated_ -= s;
- std::allocator<value_type>().deallocate(p, s);
+ allocated_ -= static_cast<std::ptrdiff_t>(s);
+ std::allocator<value_type>().deallocate(p, static_cast<std::size_t>(s));
}
template <class U>
@@ -68,7 +69,11 @@ void test() {
using Str = std::basic_string<char, std::char_traits<char>, test_alloc<char, Sz> >;
{
Str s(i, 't');
+#ifdef _MSVC_STL_VERSION // MSVC STL dynamically allocates one container proxy object in debug modes.
+ assert(allocated_ == 0 || allocated_ == 1 || allocated_ >= i);
+#else // ^^^ MSVC STL / other vvv
assert(allocated_ == 0 || allocated_ >= i);
+#endif // ^^^ other ^^^
}
}
assert(allocated_ == 0);
More information about the libcxx-commits
mailing list