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
This commit is contained in:
parent
4111c296f2
commit
b3ff651a97
6 changed files with 25 additions and 5 deletions
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR fortran/53824
|
||||
|
|
|
@ -5,8 +5,8 @@ class foo
|
|||
typedef int memfun; // { dg-error "private" }
|
||||
};
|
||||
|
||||
template<foo::memfun>
|
||||
struct fm_obj { }; // { dg-error "context" }
|
||||
template<foo::memfun> // { dg-error "context" }
|
||||
struct fm_obj { };
|
||||
|
||||
template <typename T = foo::memfun> // { dg-error "context" }
|
||||
struct S {};
|
||||
|
|
|
@ -14,14 +14,14 @@ template<typename T> struct enable_if<false, T> { };
|
|||
template<typename F, typename T1, typename T2>
|
||||
typename enable_if<sizeof(create_a<F>()(create_a<T1>(), create_a<T2>()), 1),
|
||||
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(...);
|
||||
|
||||
template<typename F, typename T1, typename T2 = T1>
|
||||
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(yes_type));
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue