Summary:
weak_ptr has two pointers (more than the 4 bytes limit), so it will not be returned in registers on ARM, even if it is trivial.
The test, therefore, will fail on ARM.
Reviewers: #libc!
Subscribers: kristof.beyls, danielkiss, libcxx-commits
Tags: #libc
Differential Revision: https://reviews.llvm.org/D84200
//
// With trivial_abi, local_addr is the address of a local variable in
// make_val, and hence different from &ret.
+#ifndef __arm__
+ // On ARM32, structs larger than 4 bytes cannot be returned in registers.
+ // Thus, weak_ptr will be passed indrectly even if it is trivial.
assert((void*)&ret != local_addr);
-
+#endif
return 0;
}