aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-05-16 19:52:26 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-05-16 19:52:26 +0000
commit10791753c191d1f9d886e8977ff331b28d48398d (patch)
tree7300ba80786b3a4015ecd026d0743b85a9c3b7cd /gcc/cp/semantics.c
parent727577c2300f8a1c4cf757e784267e11034f6b4a (diff)
downloadgcc-10791753c191d1f9d886e8977ff331b28d48398d.zip
gcc-10791753c191d1f9d886e8977ff331b28d48398d.tar.gz
gcc-10791753c191d1f9d886e8977ff331b28d48398d.tar.bz2
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
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index ce2899b..d3249fe 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -305,11 +305,13 @@ perform_deferred_access_checks (tsubst_flags_t complain)
/* Defer checking the accessibility of DECL, when looked up in
BINFO. DIAG_DECL is the declaration to use to print diagnostics.
- Return value like perform_access_checks above. */
+ Return value like perform_access_checks above.
+ If non-NULL, report failures to AFI. */
bool
perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl,
- tsubst_flags_t complain)
+ tsubst_flags_t complain,
+ access_failure_info *afi)
{
int i;
deferred_access *ptr;
@@ -328,7 +330,7 @@ perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl,
/* If we are not supposed to defer access checks, just check now. */
if (ptr->deferring_access_checks_kind == dk_no_deferred)
{
- bool ok = enforce_access (binfo, decl, diag_decl, complain);
+ bool ok = enforce_access (binfo, decl, diag_decl, complain, afi);
return (complain & tf_error) ? true : ok;
}