From: Martin Storsjö Date: Tue, 13 Jul 2021 12:39:54 +0000 (+0000) Subject: [libcxx] [test] Clarify weak_ptr_ret on Windows, remove a LIBCXX-WINDOWS-FIXME X-Git-Tag: llvmorg-14-init~1523 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c425c17e678c522d8f4961e9ad94ad718a7cba0;p=platform%2Fupstream%2Fllvm.git [libcxx] [test] Clarify weak_ptr_ret on Windows, remove a LIBCXX-WINDOWS-FIXME 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 --- diff --git a/libcxx/test/libcxx/memory/trivial_abi/weak_ptr_ret.pass.cpp b/libcxx/test/libcxx/memory/trivial_abi/weak_ptr_ret.pass.cpp index 2da9dd3..f556eaf 100644 --- a/libcxx/test/libcxx/memory/trivial_abi/weak_ptr_ret.pass.cpp +++ b/libcxx/test/libcxx/memory/trivial_abi/weak_ptr_ret.pass.cpp @@ -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 #include @@ -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