decl2.c (collect_candidates_for_java_method_aliases): Use DECL_CLASS_SCOPE_P.
2013-03-31 Paolo Carlini <paolo.carlini@oracle.com> * decl2.c (collect_candidates_for_java_method_aliases): Use DECL_CLASS_SCOPE_P. * name-lookup.c (pushtag_1) Use TYPE_FUNCTION_SCOPE_P. (pushdecl_maybe_friend_1): Use DECL_DECLARES_FUNCTION_P. * decl.c (duplicate_decls): Likewise. * parser.c (cp_parser_template_declaration_after_export): Likewise, also DECL_DECLARES_TYPE_P. * pt.c (instantiate_class_template_1): Likewise. * search.c (lookup_field_1): Use DECL_DECLARES_TYPE_P. (lookup_field_r): Likewise. (friend_accessible_p): Use DECL_DECLARES_FUNCTION_P. (lookup_fnfields_slot_nolazy): Likewise. * semantics.c (finish_member_declaration): Likewise. * typeck.c (convert_for_initialization): Use TYPE_REFFN_P. From-SVN: r197283
This commit is contained in:
parent
cbde6c0f8a
commit
9ededfc5d0
|
@ -1,3 +1,20 @@
|
||||||
|
2013-03-31 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
* decl2.c (collect_candidates_for_java_method_aliases): Use
|
||||||
|
DECL_CLASS_SCOPE_P.
|
||||||
|
* name-lookup.c (pushtag_1) Use TYPE_FUNCTION_SCOPE_P.
|
||||||
|
(pushdecl_maybe_friend_1): Use DECL_DECLARES_FUNCTION_P.
|
||||||
|
* decl.c (duplicate_decls): Likewise.
|
||||||
|
* parser.c (cp_parser_template_declaration_after_export): Likewise,
|
||||||
|
also DECL_DECLARES_TYPE_P.
|
||||||
|
* pt.c (instantiate_class_template_1): Likewise.
|
||||||
|
* search.c (lookup_field_1): Use DECL_DECLARES_TYPE_P.
|
||||||
|
(lookup_field_r): Likewise.
|
||||||
|
(friend_accessible_p): Use DECL_DECLARES_FUNCTION_P.
|
||||||
|
(lookup_fnfields_slot_nolazy): Likewise.
|
||||||
|
* semantics.c (finish_member_declaration): Likewise.
|
||||||
|
* typeck.c (convert_for_initialization): Use TYPE_REFFN_P.
|
||||||
|
|
||||||
2013-03-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
2013-03-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||||
|
|
||||||
* pt.c (template_parms_to_args): Fix typo in comment.
|
* pt.c (template_parms_to_args): Fix typo in comment.
|
||||||
|
|
|
@ -2063,8 +2063,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
|
||||||
DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
|
DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
|
||||||
}
|
}
|
||||||
/* Only functions have these fields. */
|
/* Only functions have these fields. */
|
||||||
if (TREE_CODE (newdecl) == FUNCTION_DECL
|
if (DECL_DECLARES_FUNCTION_P (newdecl))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (newdecl))
|
|
||||||
{
|
{
|
||||||
DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
|
DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
|
||||||
olddecl_friend = DECL_FRIEND_P (olddecl);
|
olddecl_friend = DECL_FRIEND_P (olddecl);
|
||||||
|
|
|
@ -3665,8 +3665,7 @@ collect_candidates_for_java_method_aliases (void)
|
||||||
{
|
{
|
||||||
tree fndecl = node->symbol.decl;
|
tree fndecl = node->symbol.decl;
|
||||||
|
|
||||||
if (DECL_CONTEXT (fndecl)
|
if (DECL_CLASS_SCOPE_P (fndecl)
|
||||||
&& TYPE_P (DECL_CONTEXT (fndecl))
|
|
||||||
&& TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
|
&& TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
|
||||||
&& TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
|
&& TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
|
||||||
{
|
{
|
||||||
|
|
|
@ -887,7 +887,7 @@ pushdecl_maybe_friend_1 (tree x, bool is_friend)
|
||||||
add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
|
add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TREE_CODE (t) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (t))
|
if (DECL_DECLARES_FUNCTION_P (t))
|
||||||
check_default_args (t);
|
check_default_args (t);
|
||||||
|
|
||||||
if (t != x || DECL_FUNCTION_TEMPLATE_P (t))
|
if (t != x || DECL_FUNCTION_TEMPLATE_P (t))
|
||||||
|
@ -5823,8 +5823,7 @@ pushtag_1 (tree name, tree type, tag_scope scope)
|
||||||
convenient way. (It's otherwise tricky to find a member
|
convenient way. (It's otherwise tricky to find a member
|
||||||
function definition it's only pointed to from within a local
|
function definition it's only pointed to from within a local
|
||||||
class.) */
|
class.) */
|
||||||
if (TYPE_CONTEXT (type)
|
if (TYPE_FUNCTION_SCOPE_P (type))
|
||||||
&& TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)
|
|
||||||
{
|
{
|
||||||
if (processing_template_decl)
|
if (processing_template_decl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21983,8 +21983,7 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
|
||||||
decl = finish_member_template_decl (decl);
|
decl = finish_member_template_decl (decl);
|
||||||
}
|
}
|
||||||
else if (friend_p && decl
|
else if (friend_p && decl
|
||||||
&& (TREE_CODE (decl) == TYPE_DECL
|
&& DECL_DECLARES_TYPE_P (decl))
|
||||||
|| DECL_TYPE_TEMPLATE_P (decl)))
|
|
||||||
make_friend_class (current_class_type, TREE_TYPE (decl),
|
make_friend_class (current_class_type, TREE_TYPE (decl),
|
||||||
/*complain=*/true);
|
/*complain=*/true);
|
||||||
}
|
}
|
||||||
|
@ -21998,7 +21997,7 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
|
||||||
|
|
||||||
/* Check the template arguments for a literal operator template. */
|
/* Check the template arguments for a literal operator template. */
|
||||||
if (decl
|
if (decl
|
||||||
&& (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
|
&& DECL_DECLARES_FUNCTION_P (decl)
|
||||||
&& UDLIT_OPER_P (DECL_NAME (decl)))
|
&& UDLIT_OPER_P (DECL_NAME (decl)))
|
||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
@ -22034,8 +22033,7 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
|
||||||
(Even though there is no definition, there might be default
|
(Even though there is no definition, there might be default
|
||||||
arguments that need handling.) */
|
arguments that need handling.) */
|
||||||
if (member_p && decl
|
if (member_p && decl
|
||||||
&& (TREE_CODE (decl) == FUNCTION_DECL
|
&& DECL_DECLARES_FUNCTION_P (decl))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (decl)))
|
|
||||||
vec_safe_push (unparsed_funs_with_definitions, decl);
|
vec_safe_push (unparsed_funs_with_definitions, decl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8786,8 +8786,7 @@ instantiate_class_template_1 (tree type)
|
||||||
pushtag (name, newtag, /*tag_scope=*/ts_current);
|
pushtag (name, newtag, /*tag_scope=*/ts_current);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (TREE_CODE (t) == FUNCTION_DECL
|
else if (DECL_DECLARES_FUNCTION_P (t))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (t))
|
|
||||||
{
|
{
|
||||||
/* Build new TYPE_METHODS. */
|
/* Build new TYPE_METHODS. */
|
||||||
tree r;
|
tree r;
|
||||||
|
|
|
@ -424,8 +424,7 @@ lookup_field_1 (tree type, tree name, bool want_type)
|
||||||
do
|
do
|
||||||
field = fields[i--];
|
field = fields[i--];
|
||||||
while (i >= lo && DECL_NAME (fields[i]) == name);
|
while (i >= lo && DECL_NAME (fields[i]) == name);
|
||||||
if (TREE_CODE (field) != TYPE_DECL
|
if (!DECL_DECLARES_TYPE_P (field))
|
||||||
&& !DECL_TYPE_TEMPLATE_P (field))
|
|
||||||
field = NULL_TREE;
|
field = NULL_TREE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -478,9 +477,7 @@ lookup_field_1 (tree type, tree name, bool want_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DECL_NAME (decl) == name
|
if (DECL_NAME (decl) == name
|
||||||
&& (!want_type
|
&& (!want_type || DECL_DECLARES_TYPE_P (decl)))
|
||||||
|| TREE_CODE (decl) == TYPE_DECL
|
|
||||||
|| DECL_TYPE_TEMPLATE_P (decl)))
|
|
||||||
return decl;
|
return decl;
|
||||||
}
|
}
|
||||||
/* Not found. */
|
/* Not found. */
|
||||||
|
@ -777,8 +774,7 @@ friend_accessible_p (tree scope, tree decl, tree binfo)
|
||||||
if (!scope)
|
if (!scope)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (TREE_CODE (scope) == FUNCTION_DECL
|
if (DECL_DECLARES_FUNCTION_P (scope))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (scope))
|
|
||||||
befriending_classes = DECL_BEFRIENDING_CLASSES (scope);
|
befriending_classes = DECL_BEFRIENDING_CLASSES (scope);
|
||||||
else if (TYPE_P (scope))
|
else if (TYPE_P (scope))
|
||||||
befriending_classes = CLASSTYPE_BEFRIENDING_CLASSES (scope);
|
befriending_classes = CLASSTYPE_BEFRIENDING_CLASSES (scope);
|
||||||
|
@ -796,8 +792,7 @@ friend_accessible_p (tree scope, tree decl, tree binfo)
|
||||||
if (protected_accessible_p (decl, t, binfo))
|
if (protected_accessible_p (decl, t, binfo))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (TREE_CODE (scope) == FUNCTION_DECL
|
if (DECL_DECLARES_FUNCTION_P (scope))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (scope))
|
|
||||||
{
|
{
|
||||||
/* Perhaps this SCOPE is a member of a class which is a
|
/* Perhaps this SCOPE is a member of a class which is a
|
||||||
friend. */
|
friend. */
|
||||||
|
@ -1059,8 +1054,7 @@ lookup_field_r (tree binfo, void *data)
|
||||||
|
|
||||||
/* If we're looking up a type (as with an elaborated type specifier)
|
/* If we're looking up a type (as with an elaborated type specifier)
|
||||||
we ignore all non-types we find. */
|
we ignore all non-types we find. */
|
||||||
if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL
|
if (lfi->want_type && !DECL_DECLARES_TYPE_P (nval))
|
||||||
&& !DECL_TYPE_TEMPLATE_P (nval))
|
|
||||||
{
|
{
|
||||||
if (lfi->name == TYPE_IDENTIFIER (type))
|
if (lfi->name == TYPE_IDENTIFIER (type))
|
||||||
{
|
{
|
||||||
|
@ -1509,8 +1503,7 @@ lookup_fnfields_slot_nolazy (tree type, tree name)
|
||||||
int
|
int
|
||||||
class_method_index_for_fn (tree class_type, tree function)
|
class_method_index_for_fn (tree class_type, tree function)
|
||||||
{
|
{
|
||||||
gcc_assert (TREE_CODE (function) == FUNCTION_DECL
|
gcc_assert (DECL_DECLARES_FUNCTION_P (function));
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (function));
|
|
||||||
|
|
||||||
return lookup_fnfields_1 (class_type,
|
return lookup_fnfields_1 (class_type,
|
||||||
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
|
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
|
||||||
|
|
|
@ -2741,8 +2741,7 @@ finish_member_declaration (tree decl)
|
||||||
/* Put functions on the TYPE_METHODS list and everything else on the
|
/* Put functions on the TYPE_METHODS list and everything else on the
|
||||||
TYPE_FIELDS list. Note that these are built up in reverse order.
|
TYPE_FIELDS list. Note that these are built up in reverse order.
|
||||||
We reverse them (to obtain declaration order) in finish_struct. */
|
We reverse them (to obtain declaration order) in finish_struct. */
|
||||||
if (TREE_CODE (decl) == FUNCTION_DECL
|
if (DECL_DECLARES_FUNCTION_P (decl))
|
||||||
|| DECL_FUNCTION_TEMPLATE_P (decl))
|
|
||||||
{
|
{
|
||||||
/* We also need to add this function to the
|
/* We also need to add this function to the
|
||||||
CLASSTYPE_METHOD_VEC. */
|
CLASSTYPE_METHOD_VEC. */
|
||||||
|
|
|
@ -7963,8 +7963,7 @@ convert_for_initialization (tree exp, tree type, tree rhs, int flags,
|
||||||
&& (TREE_CODE (type) != REFERENCE_TYPE
|
&& (TREE_CODE (type) != REFERENCE_TYPE
|
||||||
|| TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
|
|| TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
|
||||||
|| (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
|
|| (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
|
||||||
&& (TREE_CODE (type) != REFERENCE_TYPE
|
&& !TYPE_REFFN_P (type))
|
||||||
|| TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
|
|
||||||
|| TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
|
|| TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
|
||||||
rhs = decay_conversion (rhs, complain);
|
rhs = decay_conversion (rhs, complain);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue