diff options
| author | Jakub Jelinek <jakub@redhat.com> | 2025-11-21 14:17:01 +0100 |
|---|---|---|
| committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2025-11-21 14:18:48 +0100 |
| commit | 0ac5a60c37d9a40e8993b8207e904b713e73b5d3 (patch) | |
| tree | 4a9403198d300d2485e436daf0303a2beb182353 /libjava/classpath/java/util/BitSet.java | |
| parent | d9b785ab9255fe16ee6d9e93034704112735cfb6 (diff) | |
c++: Fix up build_data_member_initialization [PR121445]
The following testcase ICEs, because the constexpr ctor in C++14
or later doesn't contain any member initializers and so the
massage_constexpr_body -> build_constexpr_constructor_member_initializers
-> build_data_member_initialization member initialization discovery
looks at the ctor body instead. And while it has various
cases where it punts, including COMPONENT_REF with a VAR_DECL as first
operand on lhs of INIT_EXPR, here there is COMPONENT_REF with
several COMPONENT_REFs and VAR_DECL only inside the innermost.
The following patch makes sure we punt on those as well, instead of
blindly assuming it is anonymous union member initializer or asserting
it is a vtable store.
An alternative to this would be some flag on the INIT_EXPRs created
by perform_member_init and let build_data_member_initialization inspect
only INIT_EXPRs with that flag set.
2025-11-21 Jakub Jelinek <jakub@redhat.com>
PR c++/121445
* constexpr.cc (build_data_member_initialization): Just return
false if member is COMPONENT_REF of COMPONENT_REF with
VAR_P get_base_address.
* g++.dg/cpp1y/constexpr-121445.C: New test.
Diffstat (limited to 'libjava/classpath/java/util/BitSet.java')
0 files changed, 0 insertions, 0 deletions
