[PATCH] Fix PR c++/70218 (illegal access to private field succeeds)

Matthias Klose doko@ubuntu.com
Wed Mar 16 21:20:00 GMT 2016


On 13.03.2016 21:03, Patrick Palka wrote:
> Here we are mishandling the deferred_access_stack by not coherently
> pushing/popping from it.  In cp_parser_lambda_expression we are calling
> (in order):
>
>    push_deferring_access_checks (dk_no_deferred);
>    cp_parser_start_tentative_firewall (parser);
>    ...
>    pop_deferring_access_checks ();
>    cp_parser_end_tentative_firewall (parser, start, lambda_expr);
>
> But the order of the last two popping calls does not correspond with the order
> of the first two pushing calls.  pop_deferring_access_checks should be
> called last.  This error may cause us to drop deferred access checks
> instead of performing them.
>
> Bootstrap + regtest in progress, does this look OK to commit if testing
> succeeds?

when applying this patch to the gcc-5-branch I see regressions like

/scratch/packages/gcc/5/gcc-5-5.3.1/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C: 
In function 'void foo()':
/scratch/packages/gcc/5/gcc-5-5.3.1/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C:6:8: 
error: 'int X::i' is private
/scratch/packages/gcc/5/gcc-5-5.3.1/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C:16:18: 
error: within this context

Excess errors:
/scratch/packages/gcc/5/gcc-5-5.3.1/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C:6:8: 
error: 'int X::i' is private
/scratch/packages/gcc/5/gcc-5-5.3.1/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C:16:18: 
error: within this context


haven't yet checked the trunk. I don't see any other regressions besides the 
usual noise in the ubsan tests.

Matthias




More information about the Gcc-patches mailing list