diff options
Diffstat (limited to 'gcc/cp/cp-tree.h')
-rw-r--r-- | gcc/cp/cp-tree.h | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index edd59d5..4d79c43 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1297,9 +1297,16 @@ struct GTY (()) tree_trait_expr { enum cp_trait_kind kind; }; +/* Identifiers used for lambda types are almost anonymous. Use this + spare flag to distinguish them (they also have the anonymous flag). */ +#define IDENTIFIER_LAMBDA_P(NODE) \ + (IDENTIFIER_NODE_CHECK(NODE)->base.protected_flag) + /* Based off of TYPE_UNNAMED_P. */ -#define LAMBDA_TYPE_P(NODE) \ - (CLASS_TYPE_P (NODE) && CLASSTYPE_LAMBDA_EXPR (NODE)) +#define LAMBDA_TYPE_P(NODE) \ + (TREE_CODE (NODE) == RECORD_TYPE \ + && TYPE_LINKAGE_IDENTIFIER (NODE) \ + && IDENTIFIER_LAMBDA_P (TYPE_LINKAGE_IDENTIFIER (NODE))) /* Test if FUNCTION_DECL is a lambda function. */ #define LAMBDA_FUNCTION_P(FNDECL) \ @@ -1935,9 +1942,15 @@ enum languages { lang_c, lang_cplusplus }; #define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE))) #define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE))) -/* Nonzero if NODE has no name for linkage purposes. */ -#define TYPE_UNNAMED_P(NODE) \ - (OVERLOAD_TYPE_P (NODE) && IDENTIFIER_ANON_P (TYPE_LINKAGE_IDENTIFIER (NODE))) +/* Any kind of anonymous type. */ +#define TYPE_ANON_P(NODE) \ + (TYPE_LINKAGE_IDENTIFIER (NODE) \ + && IDENTIFIER_ANON_P (TYPE_LINKAGE_IDENTIFIER (NODE))) + +/* Nonzero if NODE, a TYPE, has no name for linkage purposes. */ +#define TYPE_UNNAMED_P(NODE) \ + (TYPE_ANON_P (NODE) \ + && !IDENTIFIER_LAMBDA_P (TYPE_LINKAGE_IDENTIFIER (NODE))) /* The _DECL for this _TYPE. */ #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE))) @@ -5357,9 +5370,6 @@ extern GTY(()) vec<tree, va_gc> *keyed_classes; #endif /* NO_DOLLAR_IN_LABEL */ #endif /* NO_DOT_IN_LABEL */ -#define LAMBDANAME_PREFIX "__lambda" -#define LAMBDANAME_FORMAT LAMBDANAME_PREFIX "%d" - #define UDLIT_OP_ANSI_PREFIX "operator\"\"" #define UDLIT_OP_ANSI_FORMAT UDLIT_OP_ANSI_PREFIX "%s" #define UDLIT_OP_MANGLED_PREFIX "li" @@ -6365,7 +6375,6 @@ extern void note_break_stmt (void); extern bool note_iteration_stmt_body_start (void); extern void note_iteration_stmt_body_end (bool); extern void determine_local_discriminator (tree); -extern tree make_lambda_name (void); extern int decls_match (tree, tree, bool = true); extern bool maybe_version_functions (tree, tree, bool); extern tree duplicate_decls (tree, tree, bool); |