C++: fix-it hints suggesting accessors for private fields
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 16 May 2017 19:52:26 +0000 (19:52 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 16 May 2017 19:52:26 +0000 (19:52 +0000)
commit10791753c191d1f9d886e8977ff331b28d48398d
tree7300ba80786b3a4015ecd026d0743b85a9c3b7cd
parent727577c2300f8a1c4cf757e784267e11034f6b4a
C++: fix-it hints suggesting accessors for private fields

gcc/cp/ChangeLog:
* call.c (enforce_access): Add access_failure_info * param and use
it to record access failures.
* cp-tree.h (class access_failure_info): New class.
(enforce_access): Add access_failure_info * param, defaulting to
NULL.
(lookup_member): Likewise.
(locate_field_accessor): New function decl.
(perform_or_defer_access_check): Add access_failure_info * param,
defaulting to NULL.
* search.c (lookup_member): Add access_failure_info * param and
pass it on to call to perform_or_defer_access_check.
(matches_code_and_type_p): New function.
(field_access_p): New function.
(direct_accessor_p): New function.
(reference_accessor_p): New function.
(field_accessor_p): New function.
(struct locate_field_data): New struct.
(dfs_locate_field_accessor_pre): New function.
(locate_field_accessor): New function.
* semantics.c (perform_or_defer_access_check): Add
access_failure_info * param, and pass it on to call to
enforce_access.
* typeck.c (access_failure_info::record_access_failure): New method.
(access_failure_info::maybe_suggest_accessor): New method.
(finish_class_member_access_expr): Pass an access_failure_info
instance to the lookup_member call, and call its
maybe_suggest_accessor method afterwards.

gcc/testsuite/ChangeLog:
* g++.dg/other/accessor-fixits-1.C: New test case.
* g++.dg/other/accessor-fixits-2.C: New test case.
* g++.dg/other/accessor-fixits-3.C: New test case.
* g++.dg/other/accessor-fixits-4.C: New test case.

From-SVN: r248128
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cp-tree.h
gcc/cp/search.c
gcc/cp/semantics.c
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/accessor-fixits-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/accessor-fixits-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/accessor-fixits-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/accessor-fixits-4.C [new file with mode: 0644]