[libcxx-commits] [libcxx] [libc++][test] Fix more MSVC and Clang warnings (PR #74965)
Stephan T. Lavavej via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Dec 10 05:13:49 PST 2023
https://github.com/StephanTLavavej updated https://github.com/llvm/llvm-project/pull/74965
>From 5b4da31332c0f9e30edef4bf1ae842f6a9a21581 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 05:00:53 -0800
Subject: [PATCH 01/13] Fix MSVC "warning C4244: '=': conversion from '__int64'
to '_Ty', possible loss of data".
This is a valid warning. We're accumulating a `std::vector<std::streamsize>` and storing the result in `std::streamsize total_size` but we actually have to start with `std::streamsize{0}` or we'll truncate.
---
.../fstreams/ifstream.members/buffered_reads.pass.cpp | 4 ++--
.../fstreams/ofstream.members/buffered_writes.pass.cpp | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp
index d57b7c20a2da27..ecc11f4999ffa1 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp
@@ -44,7 +44,7 @@
template <class BufferPolicy>
void test_read(BufferPolicy policy, const std::vector<std::streamsize>& payload_sizes) {
- std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), 0);
+ std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), std::streamsize{0});
std::vector<char> data(total_size);
for (std::size_t i = 0; i < data.size(); ++i) {
data[i] = static_cast<char>(i % (1 << 8 * sizeof(char)));
@@ -99,7 +99,7 @@ void test_read(BufferPolicy policy, const std::vector<std::streamsize>& payload_
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
template <class BufferPolicy>
void test_read_codecvt(BufferPolicy policy, const std::vector<std::streamsize>& payload_sizes) {
- std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), 0);
+ std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), std::streamsize{0});
std::vector<wchar_t> data(total_size);
for (std::size_t i = 0; i < data.size(); ++i) {
data[i] = static_cast<wchar_t>(i);
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp
index e7820739505106..b5bbb0ca2ee4e7 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp
@@ -45,7 +45,7 @@
template <class BufferPolicy>
void test_write(BufferPolicy policy, const std::vector<std::streamsize>& payload_sizes) {
std::size_t previously_written = 0;
- std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), 0);
+ std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), std::streamsize{0});
std::vector<char> data(total_size);
for (std::size_t i = 0; i < data.size(); ++i) {
data[i] = static_cast<char>(i % (1 << 8 * sizeof(char)));
@@ -97,7 +97,7 @@ void test_write(BufferPolicy policy, const std::vector<std::streamsize>& payload
template <class BufferPolicy>
void test_write_codecvt(BufferPolicy policy, const std::vector<std::streamsize>& payload_sizes) {
std::size_t previously_written = 0;
- std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), 0);
+ std::streamsize total_size = std::accumulate(payload_sizes.begin(), payload_sizes.end(), std::streamsize{0});
std::vector<wchar_t> data(total_size);
for (std::size_t i = 0; i < data.size(); ++i) {
data[i] = static_cast<wchar_t>(i);
>From 04b6d68bdfaeab159e61251667714487628a3b2d Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 05:09:47 -0800
Subject: [PATCH 02/13] Fix MSVC "warning C4242: 'argument': conversion from
'int' to 'const _Elem', possible loss of data".
This is a valid warning as sputc() returns int_type. If sputc() returns something unexpected, we want to know, so we should separately say expected.push_back(CharT('B')).
---
.../syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libcxx/test/std/input.output/syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp b/libcxx/test/std/input.output/syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp
index ba007da5a054a7..a236bf4752a076 100644
--- a/libcxx/test/std/input.output/syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp
+++ b/libcxx/test/std/input.output/syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp
@@ -75,7 +75,8 @@ static void test_short_write_after_swap() {
sync_buf2.sputn(expected.data(), expected.size());
sync_buf1.swap(sync_buf2);
- expected.push_back(sync_buf1.sputc(CharT('B')));
+ sync_buf1.sputc(CharT('B'));
+ expected.push_back(CharT('B'));
sync_buf2.sputc(CharT('Z'));
assert(sstr1.str().empty());
>From e30248eaa56255e9123172dc075d47ed37716232 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 22:24:53 -0800
Subject: [PATCH 03/13] Fix MSVC "warning C4242: 'initializing': conversion
from '_Ty' to '_Ty2', possible loss of data".
This was being emitted in pair's perfect forwarding constructor. It's simple to start with the desired types and rely on CTAD.
---
.../range.elements/iterator/member_types.compile.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
index 9a76c2fcb70c24..6fec655c67810a 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
@@ -65,7 +65,7 @@ static_assert(std::same_as<ElementsIter<Range<std::tuple<int>*>>::iterator_categ
std::random_access_iterator_tag>);
using Generator = decltype(std::views::iota(0, 1) | std::views::transform([](int) {
- return std::pair<int, short>{1, 1};
+ return std::pair{1, short{1}};
}));
static_assert(std::ranges::random_access_range<Generator>);
>From d7d7d691ee832805b648b1c7c8e508074555eb2f Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 23:07:16 -0800
Subject: [PATCH 04/13] Fix MSVC "warning C4242: 'initializing': conversion
from '_Ty' to '_Ty', possible loss of data".
This was being emitted in pair and tuple's perfect forwarding constructors.
---
.../std/ranges/range.adaptors/range.elements/general.pass.cpp | 2 +-
.../range.adaptors/range.elements/iterator/deref.pass.cpp | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/libcxx/test/std/ranges/range.adaptors/range.elements/general.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.elements/general.pass.cpp
index 78792ae54bdbfc..d5318ced73dcd9 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.elements/general.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.elements/general.pass.cpp
@@ -70,7 +70,7 @@ int main(int, char**) {
// tuple
{
- std::tuple<short> tps[] = {{1}, {2}, {3}};
+ std::tuple<short> tps[] = {{short{1}}, {short{2}}, {short{3}}};
auto ev = tps | std::views::elements<0>;
auto expected = {1, 2, 3};
assert(std::ranges::equal(ev, expected));
diff --git a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/deref.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/deref.pass.cpp
index d87a3e53392036..f88091f42699e1 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/deref.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/deref.pass.cpp
@@ -50,7 +50,7 @@ constexpr void testValue(T t) {
constexpr bool test() {
// test tuple
{
- std::tuple<int, short, long> ts[] = {{1, 2, 3}, {4, 5, 6}};
+ std::tuple<int, short, long> ts[] = {{1, short{2}, 3}, {4, short{5}, 6}};
testReference<0>(ts);
testReference<1>(ts);
testReference<2>(ts);
@@ -61,7 +61,7 @@ constexpr bool test() {
// test pair
{
- std::pair<int, short> ps[] = {{1, 2}, {4, 5}};
+ std::pair<int, short> ps[] = {{1, short{2}}, {4, short{5}}};
testReference<0>(ps);
testReference<1>(ps);
testValue<0>(ps[0]);
>From 1c994b3945a24079af7bbddebd44442521be5a1e Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 05:16:46 -0800
Subject: [PATCH 05/13] Fix MSVC "warning C6001: Using uninitialized memory
'x'."
This warning is valid-ish. N4964 [new.delete.single]/12: "Effects: The deallocation functions (6.7.5.5.3) called by a delete-expression (7.6.2.9) to render the value of ptr invalid."
[basic.stc.general]/4: "When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values (6.8.4). Indirection through an invalid pointer value and passing an invalid pointer value to a deallocation function have undefined behavior. Any other use of an invalid pointer value has implementation-defined behavior."
In certain configurations, after `delete x;` MSVC will consider `x` to be radioactive (and in other configurations, it'll physically null out `x`). We can copy it into `old_x` before deletion, which the implementation finds acceptable.
---
.../new.delete.single/new.size_align_nothrow.pass.cpp | 3 ++-
.../new.delete/new.delete.single/new.size_nothrow.pass.cpp | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp
index 4e5d36cd7c6dfc..1c575729678d5c 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp
@@ -60,8 +60,9 @@ int main(int, char**) {
assert(reinterpret_cast<std::uintptr_t>(x) % alignof(TrackLifetimeOverAligned) == 0);
assert(info.address_constructed == x);
+ const auto old_x = x;
delete x;
- assert(info.address_destroyed == x);
+ assert(info.address_destroyed == old_x);
}
return 0;
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp
index 398de0068aba1b..56ae8df43f66fb 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp
@@ -50,8 +50,9 @@ int main(int, char**) {
assert(x != nullptr);
assert(info.address_constructed == x);
+ const auto old_x = x;
delete x;
- assert(info.address_destroyed == x);
+ assert(info.address_destroyed == old_x);
}
return 0;
>From ad1fa628f3b279768e91ac2f7903568ff9d2a891 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Thu, 7 Dec 2023 20:11:29 -0800
Subject: [PATCH 06/13] Fix MSVC static analysis warnings when replacing
`operator new`.
This emitted a bunch of warnings:
make_shared_for_overwrite.pass.cpp(61) : warning C28196: The requirement that '(_Param_(1)>0)?(return!=0):(1)' is not satisfied. (The expression does not evaluate to true.): Lines: 62, 63, 64, 63, 66
make_shared_for_overwrite.pass.cpp(61) : warning C6387: 'return' could be '0': this does not adhere to the specification for the function 'new'. See line 64 for an earlier location where this can occur: Lines: 62, 63, 64, 63, 66, 61
make_shared_for_overwrite.pass.cpp(64) : warning C6011: Dereferencing NULL pointer 'reinterpret_cast<char *>ptr+i'. : Lines: 62, 63, 64
All we need is a null check, which appears in other `operator new` replacements.
---
.../make_shared_for_overwrite.pass.cpp | 3 +++
.../make_unique_for_overwrite.default_init.pass.cpp | 3 +++
2 files changed, 6 insertions(+)
diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
index 21e1786f015882..ce8d91d4e26e6b 100644
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
@@ -60,6 +60,9 @@ constexpr char pattern = 0xDE;
void* operator new(std::size_t count) {
void* ptr = std::malloc(count);
+ if (!ptr) {
+ std::abort(); // placate MSVC's unchecked malloc warning
+ }
for (std::size_t i = 0; i < count; ++i) {
*(reinterpret_cast<char*>(ptr) + i) = pattern;
}
diff --git a/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp b/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
index 8011a37be08ecd..5954703109257d 100644
--- a/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
+++ b/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
@@ -27,6 +27,9 @@ constexpr char pattern = 0xDE;
void* operator new(std::size_t count) {
void* ptr = std::malloc(count);
+ if (!ptr) {
+ std::abort(); // placate MSVC's unchecked malloc warning
+ }
for (std::size_t i = 0; i < count; ++i) {
*(reinterpret_cast<char*>(ptr) + i) = pattern;
}
>From 891647f006570e5dc63400f5609470b9763ee237 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Fri, 8 Dec 2023 16:39:53 -0800
Subject: [PATCH 07/13] Fix -Wunused-variable in ranges_sort_heap.pass.cpp.
Same "always void-cast" change as LLVM-73437.
---
.../alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/test/std/algorithms/alg.sorting/alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp b/libcxx/test/std/algorithms/alg.sorting/alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp
index 1153ed573d635f..1e636ea9afac47 100644
--- a/libcxx/test/std/algorithms/alg.sorting/alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp
+++ b/libcxx/test/std/algorithms/alg.sorting/alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp
@@ -238,6 +238,7 @@ void test_complexity() {
const int debug_elements = std::min(100, n);
// Multiplier 2 because of comp(a,b) comp(b, a) checks.
const int debug_comparisons = 2 * (debug_elements + 1) * debug_elements;
+ (void)debug_comparisons;
std::shuffle(first, last, g);
std::make_heap(first, last, &MyInt::Comp);
// The exact stats of our current implementation are recorded here.
@@ -247,7 +248,6 @@ void test_complexity() {
LIBCPP_ASSERT(stats.moved <= 2 * n + n * logn);
#if _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_DEBUG
LIBCPP_ASSERT(stats.compared <= n * logn);
- (void)debug_comparisons;
#else
LIBCPP_ASSERT(stats.compared <= 2 * n * logn + debug_comparisons);
#endif
>From b2f4fd321ba551f2269c61830793a38438f8956f Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Fri, 8 Dec 2023 17:20:57 -0800
Subject: [PATCH 08/13] Fix MSVC "warning C4930: 'std::reference_wrapper<int>
purr(void)': prototyped function not called (was a variable definition
intended?)".
There's no reason for purr() to be locally declared (aside from isolating it to a narrow scope); it can be declared like meow() above.
---
.../refwrap/refwrap.const/type_conv_ctor.pass.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
index 2759b921fabe0c..3ff8a872095135 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
@@ -37,6 +37,8 @@ struct convertible_from_int {
void meow(std::reference_wrapper<int>) {}
void meow(convertible_from_int) {}
+std::reference_wrapper<int> purr();
+
int main(int, char**)
{
{
@@ -58,7 +60,6 @@ int main(int, char**)
meow(0);
}
{
- extern std::reference_wrapper<int> purr();
ASSERT_SAME_TYPE(decltype(true ? purr() : 0), int);
}
#if TEST_STD_VER > 14
>From cca6d855bfbd53980d9449c9db970db8c96afd77 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Fri, 8 Dec 2023 20:42:38 -0800
Subject: [PATCH 09/13] Fix -Wunused-local-typedef warning.
I'm just expanding it at the point of use, and using the dedicated LIBCPP_STATIC_ASSERT to keep the line length down.
---
.../filesystems/fs.enum/enum.path.format.pass.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/libcxx/test/std/input.output/filesystems/fs.enum/enum.path.format.pass.cpp b/libcxx/test/std/input.output/filesystems/fs.enum/enum.path.format.pass.cpp
index 7f3022a3ce9bdd..ad0cdb092def8f 100644
--- a/libcxx/test/std/input.output/filesystems/fs.enum/enum.path.format.pass.cpp
+++ b/libcxx/test/std/input.output/filesystems/fs.enum/enum.path.format.pass.cpp
@@ -25,9 +25,7 @@ int main(int, char**) {
typedef fs::path::format E;
static_assert(std::is_enum<E>::value, "");
- typedef std::underlying_type<E>::type UT;
-
- LIBCPP_ONLY(static_assert(std::is_same<UT, unsigned char>::value, "")); // Implementation detail
+ LIBCPP_STATIC_ASSERT(std::is_same<std::underlying_type<E>::type, unsigned char>::value, ""); // Implementation detail
static_assert(
E::auto_format != E::native_format &&
>From e7b8dbcb2da0b943fab675b06d0bba93598f3ed8 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Sat, 9 Dec 2023 21:04:17 -0800
Subject: [PATCH 10/13] Apply clang-format from CI.
---
.../range.elements/iterator/member_types.compile.pass.cpp | 4 +---
.../refwrap/refwrap.const/type_conv_ctor.pass.cpp | 4 +---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
index 6fec655c67810a..70d49c1304b541 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp
@@ -64,9 +64,7 @@ static_assert(std::same_as<ElementsIter<Range<contiguous_iterator<std::tuple<int
static_assert(std::same_as<ElementsIter<Range<std::tuple<int>*>>::iterator_category, //
std::random_access_iterator_tag>);
-using Generator = decltype(std::views::iota(0, 1) | std::views::transform([](int) {
- return std::pair{1, short{1}};
- }));
+using Generator = decltype(std::views::iota(0, 1) | std::views::transform([](int) { return std::pair{1, short{1}}; }));
static_assert(std::ranges::random_access_range<Generator>);
static_assert(std::same_as<ElementsIter<Generator>::iterator_category, //
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
index 3ff8a872095135..b6f60e6363ddbb 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
@@ -59,9 +59,7 @@ int main(int, char**)
{
meow(0);
}
- {
- ASSERT_SAME_TYPE(decltype(true ? purr() : 0), int);
- }
+ { ASSERT_SAME_TYPE(decltype(true ? purr() : 0), int); }
#if TEST_STD_VER > 14
{
int i = 0;
>From 78fb59a779734c6fb8385c31873dca2d27acad1a Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Sun, 10 Dec 2023 03:21:15 -0800
Subject: [PATCH 11/13] Scope and formatting cleanups for
type_conv_ctor.pass.cpp.
clang-format the file.
Remove braces around the `meow` and `ASSERT_SAME_TYPE` lines,
as we don't need to isolate anything by introducing scopes.
Add braces to cleanly separate `i` and `ri` from `j` and `rj`,
as there is always a low risk of unintentional mixups with such names.
---
.../refwrap/refwrap.const/type_conv_ctor.pass.cpp | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
index b6f60e6363ddbb..48c62ae7d45bbb 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp
@@ -39,8 +39,7 @@ void meow(convertible_from_int) {}
std::reference_wrapper<int> purr();
-int main(int, char**)
-{
+int main(int, char**) {
{
convertible_to_int_ref t;
std::reference_wrapper<convertible_to_int_ref> r(t);
@@ -56,18 +55,18 @@ int main(int, char**)
ASSERT_NOEXCEPT(Ref(nothrow_convertible<true>()));
ASSERT_NOT_NOEXCEPT(Ref(nothrow_convertible<false>()));
}
- {
- meow(0);
- }
- { ASSERT_SAME_TYPE(decltype(true ? purr() : 0), int); }
+ meow(0);
+ ASSERT_SAME_TYPE(decltype(true ? purr() : 0), int);
#if TEST_STD_VER > 14
{
int i = 0;
std::reference_wrapper ri(i);
- static_assert((std::is_same<decltype(ri), std::reference_wrapper<int>>::value), "" );
+ static_assert((std::is_same<decltype(ri), std::reference_wrapper<int>>::value), "");
+ }
+ {
const int j = 0;
std::reference_wrapper rj(j);
- static_assert((std::is_same<decltype(rj), std::reference_wrapper<const int>>::value), "" );
+ static_assert((std::is_same<decltype(rj), std::reference_wrapper<const int>>::value), "");
}
#endif
>From d30c58578f10ee979573b5ed9fc843df2c886612 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Sun, 10 Dec 2023 04:29:44 -0800
Subject: [PATCH 12/13] Update comments to add "(assert() won't silence it)".
---
.../new.delete.array/new.size.replace.indirect.pass.cpp | 2 +-
.../new.delete/new.delete.array/new.size.replace.pass.cpp | 2 +-
.../new.delete.array/new.size_nothrow.replace.indirect.pass.cpp | 2 +-
.../new.delete/new.delete.single/new.size.replace.pass.cpp | 2 +-
.../new.size_nothrow.replace.indirect.pass.cpp | 2 +-
.../thread.thread.class/thread.thread.constr/F.pass.cpp | 2 +-
.../make_shared_for_overwrite.pass.cpp | 2 +-
.../make_unique_for_overwrite.default_init.pass.cpp | 2 +-
8 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
index 172b6cc2f2944a..da23809f8f3de5 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
@@ -29,7 +29,7 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
index e352c00b4d0af9..aecfc9f26b7efa 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
@@ -27,7 +27,7 @@ int delete_called = 0;
void* operator new[](std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
index 8ad0292dcb5ca4..ccabc6a82390b4 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
@@ -33,7 +33,7 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new[](std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
index a03313e5872ef3..57f6480981f175 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
@@ -25,7 +25,7 @@ int delete_called = 0;
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
index 2ae0dfa4f1abc4..b3a7bc47e53af3 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
@@ -28,7 +28,7 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
index fc3d5c12227464..178ecd79c4d158 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
@@ -36,7 +36,7 @@ void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc)
} while (!throw_one.compare_exchange_weak(expected, expected - 1));
++outstanding_new;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning
+ if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
return ret;
}
diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
index ce8d91d4e26e6b..c701defeaf710b 100644
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp
@@ -61,7 +61,7 @@ constexpr char pattern = 0xDE;
void* operator new(std::size_t count) {
void* ptr = std::malloc(count);
if (!ptr) {
- std::abort(); // placate MSVC's unchecked malloc warning
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
}
for (std::size_t i = 0; i < count; ++i) {
*(reinterpret_cast<char*>(ptr) + i) = pattern;
diff --git a/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp b/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
index 5954703109257d..0afae3bd5ca94c 100644
--- a/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
+++ b/libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp
@@ -28,7 +28,7 @@ constexpr char pattern = 0xDE;
void* operator new(std::size_t count) {
void* ptr = std::malloc(count);
if (!ptr) {
- std::abort(); // placate MSVC's unchecked malloc warning
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
}
for (std::size_t i = 0; i < count; ++i) {
*(reinterpret_cast<char*>(ptr) + i) = pattern;
>From 31195f350102fdc6995cb66ed34e651d2556c5b1 Mon Sep 17 00:00:00 2001
From: "Stephan T. Lavavej" <stl at nuwen.net>
Date: Sun, 10 Dec 2023 05:13:05 -0800
Subject: [PATCH 13/13] Apply clang-format from CI and add braces.
---
.../new.delete.array/new.size.replace.indirect.pass.cpp | 4 +++-
.../new.delete/new.delete.array/new.size.replace.pass.cpp | 4 +++-
.../new.size_nothrow.replace.indirect.pass.cpp | 4 +++-
.../new.delete/new.delete.single/new.size.replace.pass.cpp | 4 +++-
.../new.size_nothrow.replace.indirect.pass.cpp | 4 +++-
.../thread.thread.class/thread.thread.constr/F.pass.cpp | 4 +++-
6 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
index da23809f8f3de5..f6f586a2b54786 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.indirect.pass.cpp
@@ -29,7 +29,9 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
index aecfc9f26b7efa..29e739d8515fd6 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size.replace.pass.cpp
@@ -27,7 +27,9 @@ int delete_called = 0;
void* operator new[](std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
index ccabc6a82390b4..b26eec0324af6d 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.replace.indirect.pass.cpp
@@ -33,7 +33,9 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new[](std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
index 57f6480981f175..ab1cf5ea464480 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp
@@ -25,7 +25,9 @@ int delete_called = 0;
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
index b3a7bc47e53af3..35a601339ddd36 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.replace.indirect.pass.cpp
@@ -28,7 +28,9 @@ TEST_WORKAROUND_BUG_109234844_WEAK
void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) {
++new_called;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
index 178ecd79c4d158..1c520652ba2297 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp
@@ -36,7 +36,9 @@ void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc)
} while (!throw_one.compare_exchange_weak(expected, expected - 1));
++outstanding_new;
void* ret = std::malloc(s);
- if (!ret) std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ if (!ret) {
+ std::abort(); // placate MSVC's unchecked malloc warning (assert() won't silence it)
+ }
return ret;
}
More information about the libcxx-commits
mailing list