diff options
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 2 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 9 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a1326dd..a8b19ae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-07-16 Jason Merrill <jason@redhat.com> + + * cp-tree.h (struct deferred_access_check): Add location. + * semantics.c (perform_access_checks): Use it. + (perform_or_defer_access_check): Store it. + 2012-07-16 Steven Bosscher <steven@gcc.gnu.org> * dump.c (dump_stmt): Moved here from c-dump.c. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 10efa2a..59104e7 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -5484,6 +5484,8 @@ typedef struct GTY(()) deferred_access_check { tree decl; /* The declaration that should be used in the error message. */ tree diag_decl; + /* The location of this access. */ + location_t loc; } deferred_access_check; DEF_VEC_O(deferred_access_check); DEF_VEC_ALLOC_O(deferred_access_check,gc); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index a32e48a..8110295 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -259,12 +259,18 @@ perform_access_checks (VEC (deferred_access_check,gc)* checks) { int i; deferred_access_check *chk; + location_t loc = input_location; if (!checks) return; FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk) - enforce_access (chk->binfo, chk->decl, chk->diag_decl); + { + input_location = chk->loc; + enforce_access (chk->binfo, chk->decl, chk->diag_decl); + } + + input_location = loc; } /* Perform the deferred access checks. @@ -334,6 +340,7 @@ perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl) new_access->binfo = binfo; new_access->decl = decl; new_access->diag_decl = diag_decl; + new_access->loc = input_location; } /* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL |