[libcxx] [test] Clarify weak_ptr_ret on Windows, remove a LIBCXX-WINDOWS-FIXME
authorMartin Storsjö <martin@martin.st>
Tue, 13 Jul 2021 12:39:54 +0000 (12:39 +0000)
committerMartin Storsjö <martin@martin.st>
Wed, 14 Jul 2021 06:08:06 +0000 (09:08 +0300)
On Windows, structs with a destructor are always returned indirectly;
add this to the list of known exceptions in the test where the class
isn't returned in registers as expected.

Differential Revision: https://reviews.llvm.org/D105906

libcxx/test/libcxx/memory/trivial_abi/weak_ptr_ret.pass.cpp

index 2da9dd3..f556eaf 100644 (file)
@@ -15,8 +15,6 @@
 // There were assertion failures in both parse and codegen, which are fixed in clang 11.
 // UNSUPPORTED: gcc, clang-4, clang-5, clang-6, clang-7, clang-8, clang-9, clang-10
 
-// XFAIL: LIBCXX-WINDOWS-FIXME
-
 #include <memory>
 #include <cassert>
 
@@ -51,9 +49,10 @@ int main(int, char**) {
   //
   // With trivial_abi, local_addr is the address of a local variable in
   // make_val, and hence different from &ret.
-#if !defined(__i386__) && !defined(__arm__)
+#if !defined(__i386__) && !defined(__arm__) && !defined(_WIN32)
   // On X86, structs are never returned in registers.
   // On ARM32, structs larger than 4 bytes cannot be returned in registers.
+  // On Windows, structs with a destructor are always returned indirectly.
   // Thus, weak_ptr will be passed indirectly even if it is trivial.
   assert((void*)&ret != local_addr);
 #endif