// 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>
//
// 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