gcc/cp/ChangeLog: * cp-tree.h (cp_operator_id, cp_assignment_operator_id): Document. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index da45d95..b4795d2 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -209,8 +209,19 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX]; /* std::align_val_t */ #define align_type_node cp_global_trees[CPTI_ALIGN_TYPE] -/* We cache these tree nodes so as to call get_identifier less - frequently. */ +/* We cache these tree nodes so as to call get_identifier less frequently. + For identifiers for functions, including special member functions such + as ctors and assignment operators, the nodes can be used (among other + things) to iterate over their overloads defined by/for a type. For + example: + + tree ovlid = cp_assignment_operator_id (NOP_EXPR); + tree overloads = lookup_fnfields_slot (type, ovlid); + for (ovl_iterator it (overloads); it; ++it) { ... } + + iterates over the set of implicitly and explicitly defined overloads + of the assignment operator for type (including the copy and move + assignment operators, whether deleted or not). */ /* The name of a constructor that takes an in-charge parameter to decide whether or not to construct virtual base classes. */ @@ -231,6 +242,18 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX]; /* The name of a destructor that destroys virtual base classes, and then deletes the entire object. */ #define deleting_dtor_identifier cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER] + +/* The name of the identifier used internally to represent operator CODE. */ +#define cp_operator_id(CODE) \ + (operator_name_info[(int) (CODE)].identifier) + +/* The name of the identifier used to represent assignment operator CODE, + both simple (i.e., operator= with CODE == NOP_EXPR) and compound (e.g., + operator+= with CODE == PLUS_EXPR). Includes copy and move assignment. + Use copy_fn_p() to test specifically for copy assignment. */ +#define cp_assignment_operator_id(CODE) \ + (assignment_operator_name_info[(int) (CODE)].identifier) + #define delta_identifier cp_global_trees[CPTI_DELTA_IDENTIFIER] #define in_charge_identifier cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER] /* The name of the parameter that contains a pointer to the VTT to use @@ -1731,10 +1754,6 @@ struct GTY(()) language_function { || (NAME) == cp_operator_id (DELETE_EXPR) \ || (NAME) == cp_operator_id (VEC_DELETE_EXPR)) -#define cp_operator_id(CODE) \ - (operator_name_info[(int) (CODE)].identifier) -#define cp_assignment_operator_id(CODE) \ - (assignment_operator_name_info[(int) (CODE)].identifier) /* In parser.c. */ extern tree cp_literal_operator_id (const char *);