summaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog17
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/cp/decl2.c3
-rw-r--r--gcc/cp/name-lookup.c5
-rw-r--r--gcc/cp/parser.c8
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/cp/search.c19
-rw-r--r--gcc/cp/semantics.c3
-rw-r--r--gcc/cp/typeck.c3
9 files changed, 33 insertions, 31 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b8c40305daa..df25c097b96 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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>
* pt.c (template_parms_to_args): Fix typo in comment.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index ae4c5b47148..98d30dd99eb 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -2063,8 +2063,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
}
/* Only functions have these fields. */
- if (TREE_CODE (newdecl) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (newdecl))
+ if (DECL_DECLARES_FUNCTION_P (newdecl))
{
DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
olddecl_friend = DECL_FRIEND_P (olddecl);
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 09fd86464b0..2b2171039d7 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -3665,8 +3665,7 @@ collect_candidates_for_java_method_aliases (void)
{
tree fndecl = node->symbol.decl;
- if (DECL_CONTEXT (fndecl)
- && TYPE_P (DECL_CONTEXT (fndecl))
+ if (DECL_CLASS_SCOPE_P (fndecl)
&& TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
&& TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
{
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index b25db14f1e1..e09eca174b6 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -887,7 +887,7 @@ pushdecl_maybe_friend_1 (tree x, bool is_friend)
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);
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
function definition it's only pointed to from within a local
class.) */
- if (TYPE_CONTEXT (type)
- && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)
+ if (TYPE_FUNCTION_SCOPE_P (type))
{
if (processing_template_decl)
{
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 78b13c3f7fb..44ef9adf02e 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -21983,8 +21983,7 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
decl = finish_member_template_decl (decl);
}
else if (friend_p && decl
- && (TREE_CODE (decl) == TYPE_DECL
- || DECL_TYPE_TEMPLATE_P (decl)))
+ && DECL_DECLARES_TYPE_P (decl))
make_friend_class (current_class_type, TREE_TYPE (decl),
/*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. */
if (decl
- && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
+ && DECL_DECLARES_FUNCTION_P (decl)
&& UDLIT_OPER_P (DECL_NAME (decl)))
{
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
arguments that need handling.) */
if (member_p && decl
- && (TREE_CODE (decl) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (decl)))
+ && DECL_DECLARES_FUNCTION_P (decl))
vec_safe_push (unparsed_funs_with_definitions, decl);
}
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index b5d570313f7..68da2c80133 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -8786,8 +8786,7 @@ instantiate_class_template_1 (tree type)
pushtag (name, newtag, /*tag_scope=*/ts_current);
}
}
- else if (TREE_CODE (t) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (t))
+ else if (DECL_DECLARES_FUNCTION_P (t))
{
/* Build new TYPE_METHODS. */
tree r;
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 19a4c43ff0d..b64398fac6d 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -424,8 +424,7 @@ lookup_field_1 (tree type, tree name, bool want_type)
do
field = fields[i--];
while (i >= lo && DECL_NAME (fields[i]) == name);
- if (TREE_CODE (field) != TYPE_DECL
- && !DECL_TYPE_TEMPLATE_P (field))
+ if (!DECL_DECLARES_TYPE_P (field))
field = NULL_TREE;
}
else
@@ -478,9 +477,7 @@ lookup_field_1 (tree type, tree name, bool want_type)
}
if (DECL_NAME (decl) == name
- && (!want_type
- || TREE_CODE (decl) == TYPE_DECL
- || DECL_TYPE_TEMPLATE_P (decl)))
+ && (!want_type || DECL_DECLARES_TYPE_P (decl)))
return decl;
}
/* Not found. */
@@ -777,8 +774,7 @@ friend_accessible_p (tree scope, tree decl, tree binfo)
if (!scope)
return 0;
- if (TREE_CODE (scope) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (scope))
+ if (DECL_DECLARES_FUNCTION_P (scope))
befriending_classes = DECL_BEFRIENDING_CLASSES (scope);
else if (TYPE_P (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))
return 1;
- if (TREE_CODE (scope) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (scope))
+ if (DECL_DECLARES_FUNCTION_P (scope))
{
/* Perhaps this SCOPE is a member of a class which is a
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)
we ignore all non-types we find. */
- if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL
- && !DECL_TYPE_TEMPLATE_P (nval))
+ if (lfi->want_type && !DECL_DECLARES_TYPE_P (nval))
{
if (lfi->name == TYPE_IDENTIFIER (type))
{
@@ -1509,8 +1503,7 @@ lookup_fnfields_slot_nolazy (tree type, tree name)
int
class_method_index_for_fn (tree class_type, tree function)
{
- gcc_assert (TREE_CODE (function) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (function));
+ gcc_assert (DECL_DECLARES_FUNCTION_P (function));
return lookup_fnfields_1 (class_type,
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 1821ff4217e..281ba75949a 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2741,8 +2741,7 @@ finish_member_declaration (tree decl)
/* Put functions on the TYPE_METHODS list and everything else on the
TYPE_FIELDS list. Note that these are built up in reverse order.
We reverse them (to obtain declaration order) in finish_struct. */
- if (TREE_CODE (decl) == FUNCTION_DECL
- || DECL_FUNCTION_TEMPLATE_P (decl))
+ if (DECL_DECLARES_FUNCTION_P (decl))
{
/* We also need to add this function to the
CLASSTYPE_METHOD_VEC. */
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 7e2dcccac6b..ae9267509b6 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -7963,8 +7963,7 @@ convert_for_initialization (tree exp, tree type, tree rhs, int flags,
&& (TREE_CODE (type) != REFERENCE_TYPE
|| TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
|| (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
- && (TREE_CODE (type) != REFERENCE_TYPE
- || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
+ && !TYPE_REFFN_P (type))
|| TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
rhs = decay_conversion (rhs, complain);