diff options
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/cp/decl.c | 3 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 3 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 8 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/cp/search.c | 19 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 3 |
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); |