summaryrefslogtreecommitdiffstats
path: root/gcc/cp/init.c
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-04-24 13:58:11 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-04-24 13:58:11 +0000
commit20ce13a9bdf9a7c698e76f9cf0669b03ee02dbcc (patch)
treeab973de9cde7ee1d253e0b8c86d0ef0a5f1b5212 /gcc/cp/init.c
parent6c73bbed49abc4402291b9d8c41dfb48508ef4e8 (diff)
downloadppe42-gcc-20ce13a9bdf9a7c698e76f9cf0669b03ee02dbcc.tar.gz
ppe42-gcc-20ce13a9bdf9a7c698e76f9cf0669b03ee02dbcc.zip
/cp
2013-04-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/56970 * init.c (build_offset_ref): Add tsubst_flags_t parameter. * semantics.c (finish_qualified_id_expr): Likewise. (finish_id_expression): Update. * typeck.c (cp_build_addr_expr_1): Likewise. * pt.c (tsubst_qualified_id, resolve_nondeduced_context): Likewise. * cp-tree.h: Update declarations. /testsuite 2013-04-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/56970 * g++.dg/cpp0x/sfinae45.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198232 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r--gcc/cp/init.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 7b7de022ee6..28e25558bbe 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1817,7 +1817,8 @@ get_type_value (tree name)
@@ This function should be rewritten and placed in search.c. */
tree
-build_offset_ref (tree type, tree member, bool address_p)
+build_offset_ref (tree type, tree member, bool address_p,
+ tsubst_flags_t complain)
{
tree decl;
tree basebinfo = NULL_TREE;
@@ -1841,7 +1842,8 @@ build_offset_ref (tree type, tree member, bool address_p)
type = TYPE_MAIN_VARIANT (type);
if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type)))
{
- error ("incomplete type %qT does not have member %qD", type, member);
+ if (complain & tf_error)
+ error ("incomplete type %qT does not have member %qD", type, member);
return error_mark_node;
}
@@ -1854,7 +1856,8 @@ build_offset_ref (tree type, tree member, bool address_p)
if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
{
- error ("invalid pointer to bit-field %qD", member);
+ if (complain & tf_error)
+ error ("invalid pointer to bit-field %qD", member);
return error_mark_node;
}
@@ -1883,10 +1886,10 @@ build_offset_ref (tree type, tree member, bool address_p)
if (address_p && DECL_P (t)
&& DECL_NONSTATIC_MEMBER_P (t))
perform_or_defer_access_check (TYPE_BINFO (type), t, t,
- tf_warning_or_error);
+ complain);
else
perform_or_defer_access_check (basebinfo, t, t,
- tf_warning_or_error);
+ complain);
if (DECL_STATIC_FUNCTION_P (t))
return t;
@@ -1900,7 +1903,7 @@ build_offset_ref (tree type, tree member, bool address_p)
check_accessibility_of_qualified_id in case it is
a pointer to non-static member. */
perform_or_defer_access_check (TYPE_BINFO (type), member, member,
- tf_warning_or_error);
+ complain);
if (!address_p)
{
@@ -1932,15 +1935,17 @@ build_offset_ref (tree type, tree member, bool address_p)
if (flag_ms_extensions)
{
PTRMEM_OK_P (member) = 1;
- return cp_build_addr_expr (member, tf_warning_or_error);
+ return cp_build_addr_expr (member, complain);
}
- error ("invalid use of non-static member function %qD",
- TREE_OPERAND (member, 1));
+ if (complain & tf_error)
+ error ("invalid use of non-static member function %qD",
+ TREE_OPERAND (member, 1));
return error_mark_node;
}
else if (TREE_CODE (member) == FIELD_DECL)
{
- error ("invalid use of non-static data member %qD", member);
+ if (complain & tf_error)
+ error ("invalid use of non-static data member %qD", member);
return error_mark_node;
}
return member;
OpenPOWER on IntegriCloud