Skip to content
Snippets Groups Projects
Commit 2a6fc19e authored by Patrick Palka's avatar Patrick Palka
Browse files

c++: base-clause parsing and implicit 'this' [PR100362]

My r11-6815 change to defer access checking when processing a
base-clause removed a pair of pushclass / popclass calls that seemed to
be unnecessary now that we'd also defer access checking while parsing
the base-clause.

But it turns out these calls make a difference in the below testcase,
where we have a local class whose base-clause implicitly uses the 'this'
of the enclosing class.  Before r11-6815, while parsing the base-clause
of the local class, maybe_resolve_dummy would fail to resolve the dummy
'this' object because the current scope would be the local class.  Now,
since the current scope is the lambda, maybe_resolve_dummy succeeds and
returns the 'this' for the enclosing class Qux.  Later, during deferred
instantiation of the local class, we get confused trying to resolve the
access of 'a_' through this non-dummy 'this'.

So this patch just reinstates the calls to pushclass / popclass that
were removed in r11-6815.

gcc/cp/ChangeLog:

	PR c++/100362
	* parser.c (cp_parser_class_head): Reinstate calls to pushclass
	and popclass when parsing the base-clause that were removed in
	r11-6815.

gcc/testsuite/ChangeLog:

	PR c++/100362
	* g++.dg/cpp1y/lambda-generic-100362.C: New test.
parent eef4fa69
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment