]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/operators.def
Update copyright years.
[thirdparty/gcc.git] / gcc / cp / operators.def
CommitLineData
596ea4e5 1/* -*-C-*-
c8094d83 2
596ea4e5
AS
3 This file contains definitions of the various C++ operators,
4 including both overloadable operators (like `+') and
c8094d83 5 non-overloadable operators (like the `?:' ternary operator).
b599b135 6 Written by Mark Mitchell <mark@codesourcery.com>
596ea4e5 7
7adcbafe 8 Copyright (C) 2000-2022 Free Software Foundation, Inc.
596ea4e5 9
b599b135 10This file is part of GCC.
596ea4e5 11
b599b135 12GCC is free software; you can redistribute it and/or modify
596ea4e5 13it under the terms of the GNU General Public License as published by
e77f031d 14the Free Software Foundation; either version 3, or (at your option)
596ea4e5
AS
15any later version.
16
b599b135 17GCC is distributed in the hope that it will be useful,
596ea4e5
AS
18but WITHOUT ANY WARRANTY; without even the implied warranty of
19MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20GNU General Public License for more details.
21
22You should have received a copy of the GNU General Public License
e77f031d
NC
23along with GCC; see the file COPYING3. If not see
24<http://www.gnu.org/licenses/>. */
596ea4e5
AS
25
26/* The DEF_OPERATOR macro takes the following arguments:
27
28 NAME
29
30 The name of the operator, as a C string, but without the
aba649ba 31 preceding `operator'. This is the name that would be given in
596ea4e5
AS
32 the source program. For `operator +', for example, this would be
33 `+'.
c8094d83 34
596ea4e5
AS
35 CODE
36
37 The tree_code for this operator. For `operator +', for example,
38 this would be PLUS_EXPR. Because there are no tree codes for
39 assignment operators, the same tree-codes are reused; i.e.,
40 `operator +' will also have PLUS_EXPR as its CODE.
41
b80f8ef3 42 MANGLING
596ea4e5
AS
43
44 The mangling prefix for the operator, as a C string, and as
45 mangled under the new ABI. For `operator +', for example, this
46 would be "pl".
47
f26881e3 48 FLAGS
c8094d83 49
f26881e3
NS
50 ovl_op_flags bits. Postincrement and postdecrement operators are
51 marked as binary.
596ea4e5 52
39a13be5 53 Before including this file, you should define DEF_OPERATOR
c8094d83 54 to take these arguments.
596ea4e5
AS
55
56 There is code (such as in grok_op_properties) that depends on the
d6dd9d7f
NS
57 order the operators are presented in this file. Unary_ops must
58 preceed a matching binary op (i.e. '+'). Assignment operators must
59 be last, after OPERATOR_TRANSITION. */
596ea4e5
AS
60
61/* Use DEF_ASSN_OPERATOR to define an assignment operator. Its
62 arguments are as for DEF_OPERATOR, but there is no need to provide
d6dd9d7f 63 FLAGS (OVL_OP_FLAG_BINARY). */
596ea4e5 64
d6dd9d7f
NS
65#ifndef DEF_ASSN_OPERATOR
66#define DEF_ASSN_OPERATOR(NAME, CODE, MANGLING) \
67 DEF_OPERATOR(NAME, CODE, MANGLING, OVL_OP_FLAG_BINARY)
68#endif
596ea4e5 69
d6dd9d7f
NS
70/* Memory allocation operators. ARITY has special meaning. */
71DEF_OPERATOR ("new", NEW_EXPR, "nw", OVL_OP_FLAG_ALLOC)
f26881e3 72DEF_OPERATOR ("new []", VEC_NEW_EXPR, "na",
d6dd9d7f 73 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC)
f26881e3 74DEF_OPERATOR ("delete", DELETE_EXPR, "dl",
d6dd9d7f 75 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE)
f26881e3 76DEF_OPERATOR ("delete []", VEC_DELETE_EXPR, "da",
d6dd9d7f 77 OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC)
596ea4e5
AS
78
79/* Unary operators. */
d6dd9d7f
NS
80DEF_OPERATOR ("+", UNARY_PLUS_EXPR, "ps", OVL_OP_FLAG_UNARY)
81DEF_OPERATOR ("-", NEGATE_EXPR, "ng", OVL_OP_FLAG_UNARY)
82DEF_OPERATOR ("&", ADDR_EXPR, "ad", OVL_OP_FLAG_UNARY)
83DEF_OPERATOR ("*", INDIRECT_REF, "de", OVL_OP_FLAG_UNARY)
84DEF_OPERATOR ("~", BIT_NOT_EXPR, "co", OVL_OP_FLAG_UNARY)
85DEF_OPERATOR ("!", TRUTH_NOT_EXPR, "nt", OVL_OP_FLAG_UNARY)
86DEF_OPERATOR ("++", PREINCREMENT_EXPR, "pp", OVL_OP_FLAG_UNARY)
87DEF_OPERATOR ("--", PREDECREMENT_EXPR, "mm", OVL_OP_FLAG_UNARY)
88DEF_OPERATOR ("->", COMPONENT_REF, "pt", OVL_OP_FLAG_UNARY)
89DEF_OPERATOR ("sizeof", SIZEOF_EXPR, "sz", OVL_OP_FLAG_UNARY)
49789fd0 90DEF_OPERATOR ("co_await", CO_AWAIT_EXPR, "aw", OVL_OP_FLAG_UNARY)
d6dd9d7f 91
e05f7974 92/* These are extensions. */
d6dd9d7f
NS
93DEF_OPERATOR ("alignof", ALIGNOF_EXPR, "az", OVL_OP_FLAG_UNARY)
94DEF_OPERATOR ("__imag__", IMAGPART_EXPR, "v18__imag__", OVL_OP_FLAG_UNARY)
95DEF_OPERATOR ("__real__", REALPART_EXPR, "v18__real__", OVL_OP_FLAG_UNARY)
596ea4e5 96
596ea4e5 97/* Binary operators. */
d6dd9d7f
NS
98DEF_OPERATOR ("+", PLUS_EXPR, "pl", OVL_OP_FLAG_BINARY)
99DEF_OPERATOR ("-", MINUS_EXPR, "mi", OVL_OP_FLAG_BINARY)
100DEF_OPERATOR ("*", MULT_EXPR, "ml", OVL_OP_FLAG_BINARY)
101DEF_OPERATOR ("/", TRUNC_DIV_EXPR, "dv", OVL_OP_FLAG_BINARY)
102DEF_OPERATOR ("%", TRUNC_MOD_EXPR, "rm", OVL_OP_FLAG_BINARY)
103DEF_OPERATOR ("&", BIT_AND_EXPR, "an", OVL_OP_FLAG_BINARY)
104DEF_OPERATOR ("|", BIT_IOR_EXPR, "or", OVL_OP_FLAG_BINARY)
105DEF_OPERATOR ("^", BIT_XOR_EXPR, "eo", OVL_OP_FLAG_BINARY)
106DEF_OPERATOR ("<<", LSHIFT_EXPR, "ls", OVL_OP_FLAG_BINARY)
107DEF_OPERATOR (">>", RSHIFT_EXPR, "rs", OVL_OP_FLAG_BINARY)
b7689b96
JM
108
109/* defaultable_fn_check relies on the ordering of the comparison operators. */
d6dd9d7f
NS
110DEF_OPERATOR ("==", EQ_EXPR, "eq", OVL_OP_FLAG_BINARY)
111DEF_OPERATOR ("!=", NE_EXPR, "ne", OVL_OP_FLAG_BINARY)
112DEF_OPERATOR ("<", LT_EXPR, "lt", OVL_OP_FLAG_BINARY)
113DEF_OPERATOR (">", GT_EXPR, "gt", OVL_OP_FLAG_BINARY)
114DEF_OPERATOR ("<=", LE_EXPR, "le", OVL_OP_FLAG_BINARY)
115DEF_OPERATOR (">=", GE_EXPR, "ge", OVL_OP_FLAG_BINARY)
b7689b96
JM
116DEF_OPERATOR ("<=>", SPACESHIP_EXPR, "ss", OVL_OP_FLAG_BINARY)
117
d6dd9d7f
NS
118DEF_OPERATOR ("&&", TRUTH_ANDIF_EXPR, "aa", OVL_OP_FLAG_BINARY)
119DEF_OPERATOR ("||", TRUTH_ORIF_EXPR, "oo", OVL_OP_FLAG_BINARY)
120DEF_OPERATOR (",", COMPOUND_EXPR, "cm", OVL_OP_FLAG_BINARY)
121DEF_OPERATOR ("->*", MEMBER_REF, "pm", OVL_OP_FLAG_BINARY)
122DEF_OPERATOR (".*", DOTSTAR_EXPR, "ds", OVL_OP_FLAG_BINARY)
123DEF_OPERATOR ("[]", ARRAY_REF, "ix", OVL_OP_FLAG_BINARY)
124DEF_OPERATOR ("++", POSTINCREMENT_EXPR, "pp", OVL_OP_FLAG_BINARY)
125DEF_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", OVL_OP_FLAG_BINARY)
6ff16d19
NS
126
127/* Miscellaneous. */
d6dd9d7f
NS
128DEF_OPERATOR ("?:", COND_EXPR, "qu", OVL_OP_FLAG_NONE)
129DEF_OPERATOR ("()", CALL_EXPR, "cl", OVL_OP_FLAG_NONE)
6ff16d19
NS
130
131/* Operators needed for mangling. */
d6dd9d7f
NS
132DEF_OPERATOR (NULL, CAST_EXPR, "cv", OVL_OP_FLAG_UNARY)
133DEF_OPERATOR (NULL, DYNAMIC_CAST_EXPR, "dc", OVL_OP_FLAG_UNARY)
134DEF_OPERATOR (NULL, REINTERPRET_CAST_EXPR, "rc", OVL_OP_FLAG_UNARY)
135DEF_OPERATOR (NULL, CONST_CAST_EXPR, "cc", OVL_OP_FLAG_UNARY)
136DEF_OPERATOR (NULL, STATIC_CAST_EXPR, "sc", OVL_OP_FLAG_UNARY)
137DEF_OPERATOR (NULL, SCOPE_REF, "sr", OVL_OP_FLAG_NONE)
138DEF_OPERATOR (NULL, EXPR_PACK_EXPANSION, "sp", OVL_OP_FLAG_NONE)
139DEF_OPERATOR (NULL, UNARY_LEFT_FOLD_EXPR, "fl", OVL_OP_FLAG_NONE)
140DEF_OPERATOR (NULL, UNARY_RIGHT_FOLD_EXPR, "fr", OVL_OP_FLAG_NONE)
141DEF_OPERATOR (NULL, BINARY_LEFT_FOLD_EXPR, "fL", OVL_OP_FLAG_NONE)
142DEF_OPERATOR (NULL, BINARY_RIGHT_FOLD_EXPR, "fR", OVL_OP_FLAG_NONE)
143
144#ifdef OPERATOR_TRANSITION
145OPERATOR_TRANSITION
146#undef OPERATOR_TRANSITION
147#endif
596ea4e5
AS
148
149/* Assignment operators. */
d6dd9d7f
NS
150DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS")
151DEF_ASSN_OPERATOR ("+=", PLUS_EXPR, "pL")
152DEF_ASSN_OPERATOR ("-=", MINUS_EXPR, "mI")
153DEF_ASSN_OPERATOR ("*=", MULT_EXPR, "mL")
154DEF_ASSN_OPERATOR ("/=", TRUNC_DIV_EXPR, "dV")
155DEF_ASSN_OPERATOR ("%=", TRUNC_MOD_EXPR, "rM")
156DEF_ASSN_OPERATOR ("&=", BIT_AND_EXPR, "aN")
157DEF_ASSN_OPERATOR ("|=", BIT_IOR_EXPR, "oR")
158DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO")
159DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS")
160DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS")
161
162#undef DEF_ASSN_OPERATOR
163#undef DEF_OPERATOR