diff options
author | Jason Merrill <jason@redhat.com> | 2012-10-01 19:57:05 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-10-01 19:57:05 -0400 |
commit | 43f4447e6cff88a79d3e0f7a05f01fbbc4d03cda (patch) | |
tree | c71ae01e382b42cb1e6d1a75fc7824f4947a2c2e | |
parent | fe230d3c7d6c49eb06b3a8b5fb90d3d3ef7ad18c (diff) | |
download | gcc-43f4447e6cff88a79d3e0f7a05f01fbbc4d03cda.zip gcc-43f4447e6cff88a79d3e0f7a05f01fbbc4d03cda.tar.gz gcc-43f4447e6cff88a79d3e0f7a05f01fbbc4d03cda.tar.bz2 |
cp-tree.h (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK): New.
* cp-tree.h (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK): New.
(DECL_FRIEND_P, DECL_ANTICIPATED): Use it.
(TYPE_FUNCTION_OR_TEMPLATE_DECL_P): New.
* name-lookup.c (hidden_name_p): Use it.
From-SVN: r191946
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 18 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 1 |
3 files changed, 20 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9954928..487841a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2012-10-01 Jason Merrill <jason@redhat.com> + * cp-tree.h (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK): New. + (DECL_FRIEND_P, DECL_ANTICIPATED): Use it. + (TYPE_FUNCTION_OR_TEMPLATE_DECL_P): New. + * name-lookup.c (hidden_name_p): Use it. + * cp-tree.h (DECL_PRETTY_FUNCTION_P): Just look at the name. * decl.c (cp_make_fname_decl): Adjust. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index cee8590..e4f3761 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -202,6 +202,13 @@ c-common.h, not after. #define VAR_OR_FUNCTION_DECL_CHECK(NODE) \ TREE_CHECK2(NODE,VAR_DECL,FUNCTION_DECL) +#define TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK(NODE) \ + TREE_CHECK3(NODE,TYPE_DECL,TEMPLATE_DECL,FUNCTION_DECL) + +#define TYPE_FUNCTION_OR_TEMPLATE_DECL_P(NODE) \ + (TREE_CODE (NODE) == TYPE_DECL || TREE_CODE (NODE) == TEMPLATE_DECL \ + || TREE_CODE (NODE) == FUNCTION_DECL) + #define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \ TREE_CHECK3(NODE,VAR_DECL,FUNCTION_DECL,PARM_DECL) @@ -1875,8 +1882,8 @@ struct GTY(()) lang_decl_base { unsigned initialized_in_class : 1; /* var or fn */ unsigned repo_available_p : 1; /* var or fn */ unsigned threadprivate_or_deleted_p : 1; /* var or fn */ - unsigned anticipated_p : 1; /* fn or type */ - unsigned friend_attr : 1; /* fn or type */ + unsigned anticipated_p : 1; /* fn, type or template */ + unsigned friend_attr : 1; /* fn, type or template */ unsigned template_conv_p : 1; /* var or template */ unsigned odr_used : 1; /* var or fn */ unsigned u2sel : 1; @@ -2293,7 +2300,9 @@ struct GTY((variable_size)) lang_decl { /* Nonzero for DECL means that this decl is just a friend declaration, and should not be added to the list of members for this class. */ -#define DECL_FRIEND_P(NODE) (DECL_LANG_SPECIFIC (NODE)->u.base.friend_attr) +#define DECL_FRIEND_P(NODE) \ + (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \ + ->u.base.friend_attr) /* A TREE_LIST of the types which have befriended this FUNCTION_DECL. */ #define DECL_BEFRIENDING_CLASSES(NODE) \ @@ -3101,7 +3110,8 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) declared inside a class. In the latter case DECL_HIDDEN_FRIEND_P will be set. */ #define DECL_ANTICIPATED(NODE) \ - (DECL_LANG_SPECIFIC (DECL_COMMON_CHECK (NODE))->u.base.anticipated_p) + (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \ + ->u.base.anticipated_p) /* Nonzero if NODE is a FUNCTION_DECL which was declared as a friend within a class but has not been declared in the surrounding scope. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index e4e9827..cd328b3 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -4174,6 +4174,7 @@ hidden_name_p (tree val) { if (DECL_P (val) && DECL_LANG_SPECIFIC (val) + && TYPE_FUNCTION_OR_TEMPLATE_DECL_P (val) && DECL_ANTICIPATED (val)) return true; return false; |