Reject attempts to initialize non-aggregate types from a designated
authorRichard Smith <richard@metafoo.co.uk>
Fri, 7 Apr 2023 00:50:46 +0000 (17:50 -0700)
committerRichard Smith <richard@metafoo.co.uk>
Fri, 7 Apr 2023 01:01:01 +0000 (18:01 -0700)
commitbf9de4cf131032502c8967a65283a461fe36520d
tree62f0c32e723f21b183c1c4ff2cdf905a0b98a78c
parentb6ea46fe72c2ee192b334be6fffaae35a10f5900
Reject attempts to initialize non-aggregate types from a designated
initializer list.

This previously led to some weird behaviors where we would unwrap the
initializer list expression and then try to use the DesignatedInitExprs
as constructor arguments.

Under the C++20 language rules, it's not valid to initialize a
reference-to-aggregate from a designated initializer list, but we have
historically accepted that, as do other compilers, and we continue to
accept that with this change. I've asked WG21 whether this should be
considered a wording defect.
clang/include/clang/AST/Expr.h
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Initialization.h
clang/lib/Sema/SemaInit.cpp
clang/lib/Sema/SemaOverload.cpp
clang/test/Sema/designated-initializers.c
clang/test/Sema/sizeless-1.c
clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp
clang/test/SemaCXX/sizeless-1.cpp