Allow constexpr construction of subobjects unconditionally, not just in C++14.Summary:Per https://wg21.link/CWG1677, the C++11 standard did not clarify that constantinitialization of an object al
Allow constexpr construction of subobjects unconditionally, not just in C++14.Summary:Per https://wg21.link/CWG1677, the C++11 standard did not clarify that constantinitialization of an object allowed constexpr brace-or-equal initialization ofsubobjects: struct foo_t { union { int i; volatile int j; } u; }; __attribute__((__require_constant_initialization__)) static const foo_t x = {{0}};Because foo_t::u has a volatile member, the initializer for x fails. However,there is really no good reason, because this: union foo_u { int i; volatile int j; }; __attribute__((__require_constant_initialization__)) static const foo_u x = {0};does have a constant initializer.(This was triggered by musl's pthread_mutex_t type when building under C++11.)Reviewers: rsmithSubscribers: EricWF, cfe-commitsDifferential Revision: https://reviews.llvm.org/D28427llvm-svn: 291480
show more ...
Add a test file missed from r199782.llvm-svn: 199783