]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/cp/init.cc
c++: access checking in aggregate initialization [PR96673]
authorJason Merrill <jason@redhat.com>
Tue, 6 Apr 2021 19:13:02 +0000 (15:13 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 6 Apr 2021 20:08:40 +0000 (16:08 -0400)
commitde03b82f3ca9103eba3699d1dc91b1d0ee1f16cb
tree2cfbdb03fd9ae1c5f07a02e5d40ed671000191f5
parent8685348075d91945066dea9b564bd42cbc1d22bd
c++: access checking in aggregate initialization [PR96673]

We were deferring access checks while parsing B<int>{}, didn't adjust that
when we went to instantiate the default member initializer for B::c,
deferred access checking for C::C, and then checked it after parsing
B<int>{}, back in the main() context which has no access.  We need to do the
access checks in the class context of the DMI.

I tried fixing this in push_to/pop_from_top_level, but that caused several
regressions.

gcc/cp/ChangeLog:

PR c++/96673
* init.c (get_nsdmi): Don't defer access checking.

gcc/testsuite/ChangeLog:

PR c++/96673
* g++.dg/cpp1y/nsdmi-aggr13.C: New test.
gcc/cp/init.c
gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr13.C [new file with mode: 0644]