diff options
author | David Malcolm <dmalcolm@redhat.com> | 2017-05-16 19:52:26 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2017-05-16 19:52:26 +0000 |
commit | 10791753c191d1f9d886e8977ff331b28d48398d (patch) | |
tree | 7300ba80786b3a4015ecd026d0743b85a9c3b7cd /gcc/cp/semantics.c | |
parent | 727577c2300f8a1c4cf757e784267e11034f6b4a (diff) | |
download | gcc-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.c | 8 |
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; } |