c++: assignment from {} with array member NSDMI
Fixes initialization of array members in nested structure assignments using initializer lists.
The compiler previously failed to correctly initialize array members within nested structure assignments when using an empty initializer list. This commit updates the can_convert_array function to recognize VEC_INIT_EXPR as a valid initializer, resolving the issue and enabling proper implicit assignment operator generation for such cases. This fixes PR127016.
In Details
In C++, when an array member of a nested structure is initialized via an initializer list (e.g., in a nested structure designator init - NSDMI), the can_convert_array function in cp/call.cc previously only accepted CONSTRUCTOR or string literals. It incorrectly rejected VEC_INIT_EXPR which arises when array elements require complex initialization. This change ensures VEC_INIT_EXPR is handled, allowing assignment for such array members.
- NSDMI
- Nested Structure Designator Initialization. Refers to the initialization of members within nested structures or classes, particularly when using initializer lists.
- VEC_INIT_EXPR
- A GIMPLE intermediate representation construct representing an expression that initializes a vector or an array.