Commit b3ff651a by Jason Merrill Committed by Jason Merrill

cp-tree.h (struct deferred_access_check): Add location.

	* cp-tree.h (struct deferred_access_check): Add location.
	* semantics.c (perform_access_checks): Use it.
	(perform_or_defer_access_check): Store it.

From-SVN: r189552
parent 4111c296
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> 2012-07-16 Steven Bosscher <steven@gcc.gnu.org>
* dump.c (dump_stmt): Moved here from c-dump.c. * dump.c (dump_stmt): Moved here from c-dump.c.
......
...@@ -5484,6 +5484,8 @@ typedef struct GTY(()) deferred_access_check { ...@@ -5484,6 +5484,8 @@ typedef struct GTY(()) deferred_access_check {
tree decl; tree decl;
/* The declaration that should be used in the error message. */ /* The declaration that should be used in the error message. */
tree diag_decl; tree diag_decl;
/* The location of this access. */
location_t loc;
} deferred_access_check; } deferred_access_check;
DEF_VEC_O(deferred_access_check); DEF_VEC_O(deferred_access_check);
DEF_VEC_ALLOC_O(deferred_access_check,gc); DEF_VEC_ALLOC_O(deferred_access_check,gc);
......
...@@ -259,12 +259,18 @@ perform_access_checks (VEC (deferred_access_check,gc)* checks) ...@@ -259,12 +259,18 @@ perform_access_checks (VEC (deferred_access_check,gc)* checks)
{ {
int i; int i;
deferred_access_check *chk; deferred_access_check *chk;
location_t loc = input_location;
if (!checks) if (!checks)
return; return;
FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk) 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. /* Perform the deferred access checks.
...@@ -334,6 +340,7 @@ perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl) ...@@ -334,6 +340,7 @@ perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
new_access->binfo = binfo; new_access->binfo = binfo;
new_access->decl = decl; new_access->decl = decl;
new_access->diag_decl = diag_decl; new_access->diag_decl = diag_decl;
new_access->loc = input_location;
} }
/* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL /* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL
......
2012-07-16 Jason Merrill <jason@redhat.com>
* g++.dg/parse/access8.C: Adjust.
* g++.dg/template/sfinae6_neg.C: Adjust.
2012-07-16 Thomas König <tkoenig@gcc.gnu.org> 2012-07-16 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/53824 PR fortran/53824
......
...@@ -5,8 +5,8 @@ class foo ...@@ -5,8 +5,8 @@ class foo
typedef int memfun; // { dg-error "private" } typedef int memfun; // { dg-error "private" }
}; };
template<foo::memfun> template<foo::memfun> // { dg-error "context" }
struct fm_obj { }; // { dg-error "context" } struct fm_obj { };
template <typename T = foo::memfun> // { dg-error "context" } template <typename T = foo::memfun> // { dg-error "context" }
struct S {}; struct S {};
...@@ -14,14 +14,14 @@ template<typename T> struct enable_if<false, T> { }; ...@@ -14,14 +14,14 @@ template<typename T> struct enable_if<false, T> { };
template<typename F, typename T1, typename T2> template<typename F, typename T1, typename T2>
typename enable_if<sizeof(create_a<F>()(create_a<T1>(), create_a<T2>()), 1), typename enable_if<sizeof(create_a<F>()(create_a<T1>(), create_a<T2>()), 1),
yes_type>::type yes_type>::type
check_is_callable2(type<F>, type<T1>, type<T2>); check_is_callable2(type<F>, type<T1>, type<T2>); // { dg-error "within this context" }
no_type check_is_callable2(...); no_type check_is_callable2(...);
template<typename F, typename T1, typename T2 = T1> template<typename F, typename T1, typename T2 = T1>
struct is_callable2 struct is_callable2
{ {
static const bool value = // { dg-error "within this context" } static const bool value =
(sizeof(check_is_callable2(type<F>(), type<T1>(), type<T2>())) (sizeof(check_is_callable2(type<F>(), type<T1>(), type<T2>()))
== sizeof(yes_type)); == sizeof(yes_type));
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment