| 1 | /* This file contains the definitions and documentation for the | 
| 2 |    additional tree codes used in the GNU C compiler (see tree.def | 
| 3 |    for the standard codes). | 
| 4 |    Copyright (C) 1987-2025 Free Software Foundation, Inc. | 
| 5 |    Written by Benjamin Chelf <chelf@codesourcery.com> | 
| 6 |  | 
| 7 | This file is part of GCC. | 
| 8 |  | 
| 9 | GCC is free software; you can redistribute it and/or modify it under | 
| 10 | the terms of the GNU General Public License as published by the Free | 
| 11 | Software Foundation; either version 3, or (at your option) any later | 
| 12 | version. | 
| 13 |  | 
| 14 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY | 
| 15 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | 
| 16 | FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | 
| 17 | for more details. | 
| 18 |  | 
| 19 | You should have received a copy of the GNU General Public License | 
| 20 | along with GCC; see the file COPYING3.  If not see | 
| 21 | <http://www.gnu.org/licenses/>.  */ | 
| 22 |  | 
| 23 | /* Tree nodes used in the C frontend.  These are also shared with the | 
| 24 |    C++ and Objective C frontends.  */ | 
| 25 |  | 
| 26 | /* A C_MAYBE_CONST_EXPR, currently only used for C and Objective C, | 
| 27 |    tracks information about constancy of an expression and VLA type | 
| 28 |    sizes or VM expressions from typeof that need to be evaluated | 
| 29 |    before the main expression.  It is used during parsing and removed | 
| 30 |    in c_fully_fold.  C_MAYBE_CONST_EXPR_PRE is the expression to | 
| 31 |    evaluate first, if not NULL; C_MAYBE_CONST_EXPR_EXPR is the main | 
| 32 |    expression.  If C_MAYBE_CONST_EXPR_INT_OPERANDS is set then the | 
| 33 |    expression may be used in an unevaluated part of an integer | 
| 34 |    constant expression, but not in an evaluated part.  If | 
| 35 |    C_MAYBE_CONST_EXPR_NON_CONST is set then the expression contains | 
| 36 |    something that cannot occur in an evaluated part of a constant | 
| 37 |    expression (or outside of sizeof in C90 mode); otherwise it does | 
| 38 |    not.  */ | 
| 39 | DEFTREECODE (C_MAYBE_CONST_EXPR, "c_maybe_const_expr" , tcc_expression, 2) | 
| 40 |  | 
| 41 | /* An EXCESS_PRECISION_EXPR represents an expression evaluated in greater | 
| 42 |    range or precision than its type.  The type of the EXCESS_PRECISION_EXPR | 
| 43 |    is the semantic type while the operand represents what is actually being | 
| 44 |    evaluated.  */ | 
| 45 | DEFTREECODE (EXCESS_PRECISION_EXPR, "excess_precision_expr" , tcc_expression, 1) | 
| 46 |  | 
| 47 | /* Used to represent a user-defined literal. | 
| 48 |    The operands are an IDENTIFIER for the suffix, the VALUE of the literal, | 
| 49 |    and for numeric literals the original string representation of the | 
| 50 |    number.  */ | 
| 51 | DEFTREECODE (USERDEF_LITERAL, "userdef_literal" , tcc_exceptional, 3) | 
| 52 |  | 
| 53 | /* Represents a 'countof' expression.  */ | 
| 54 | DEFTREECODE (COUNTOF_EXPR, "countof_expr" , tcc_expression, 1) | 
| 55 |  | 
| 56 | /* Represents a 'sizeof' expression during C++ template expansion, | 
| 57 |    or for the purpose of -Wsizeof-pointer-memaccess warning.  */ | 
| 58 | DEFTREECODE (SIZEOF_EXPR, "sizeof_expr" , tcc_expression, 1) | 
| 59 |  | 
| 60 | /* Like above, but enclosed in parentheses.  Used to suppress warnings.  */ | 
| 61 | DEFTREECODE (PAREN_SIZEOF_EXPR, "paren_sizeof_expr" , tcc_expression, 1) | 
| 62 |  | 
| 63 | /* Used to represent a `for' statement. The operands are | 
| 64 |    FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY, FOR_SCOPE, FOR_NAME, | 
| 65 |    FOR_COND_PREP and FOR_COND_CLEANUP, respectively.  */ | 
| 66 | DEFTREECODE (FOR_STMT, "for_stmt" , tcc_statement, 8) | 
| 67 |  | 
| 68 | /* Used to represent a 'while' statement. The operands are WHILE_COND, | 
| 69 |    WHILE_BODY, WHILE_NAME, WHILE_COND_PREP and WHILE_COND_CLEANUP, | 
| 70 |    respectively.  */ | 
| 71 | DEFTREECODE (WHILE_STMT, "while_stmt" , tcc_statement, 5) | 
| 72 |  | 
| 73 | /* Used to represent a 'do' statement. The operands are DO_COND, DO_BODY, | 
| 74 |    and DO_NAME, respectively.  */ | 
| 75 | DEFTREECODE (DO_STMT, "do_stmt" , tcc_statement, 3) | 
| 76 |  | 
| 77 | /* Used to represent a 'break' statement.  The operand BREAK_NAME is | 
| 78 |    the {FOR,WHILE,DO,SWITCH}_NAME to which it applies.  NULL_TREE means | 
| 79 |    innermost.  */ | 
| 80 | DEFTREECODE (BREAK_STMT, "break_stmt" , tcc_statement, 1) | 
| 81 |  | 
| 82 | /* Used to represent a 'continue' statement.  The operand CONTINUE_NAME is | 
| 83 |    the {FOR,WHILE,DO}_STMT to which it applies.  NULL_TREE means innermost.  */ | 
| 84 | DEFTREECODE (CONTINUE_STMT, "continue_stmt" , tcc_statement, 1) | 
| 85 |  | 
| 86 | /* Used to represent a 'switch' statement. The operands are | 
| 87 |    SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE, SWITCH_STMT_SCOPE, | 
| 88 |    and SWITCH_STMT_NAME, respectively.  */ | 
| 89 | DEFTREECODE (SWITCH_STMT, "switch_stmt" , tcc_statement, 5) | 
| 90 |  | 
| 91 | /* Extensions for C++ Concepts. */ | 
| 92 |  | 
| 93 | /* Concept definition. This is not entirely different than a VAR_DECL | 
| 94 |    except that a) it must be a template, and b) doesn't have the wide | 
| 95 |    range of value and linkage options available to variables.  Used | 
| 96 |    by C++ FE and in c-family attribute handling.  */ | 
| 97 | DEFTREECODE (CONCEPT_DECL, "concept_decl" , tcc_declaration, 0) | 
| 98 |  | 
| 99 | /* | 
| 100 | Local variables: | 
| 101 | mode:c | 
| 102 | End: | 
| 103 | */ | 
| 104 |  |