aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/semantics.c9
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