1*38fd1498Szrj/* This file contains the definitions and documentation for the 2*38fd1498Szrj additional tree codes used in the GNU C compiler (see tree.def 3*38fd1498Szrj for the standard codes). 4*38fd1498Szrj Copyright (C) 1987-2018 Free Software Foundation, Inc. 5*38fd1498Szrj Written by Benjamin Chelf <chelf@codesourcery.com> 6*38fd1498Szrj 7*38fd1498SzrjThis file is part of GCC. 8*38fd1498Szrj 9*38fd1498SzrjGCC is free software; you can redistribute it and/or modify it under 10*38fd1498Szrjthe terms of the GNU General Public License as published by the Free 11*38fd1498SzrjSoftware Foundation; either version 3, or (at your option) any later 12*38fd1498Szrjversion. 13*38fd1498Szrj 14*38fd1498SzrjGCC is distributed in the hope that it will be useful, but WITHOUT ANY 15*38fd1498SzrjWARRANTY; without even the implied warranty of MERCHANTABILITY or 16*38fd1498SzrjFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17*38fd1498Szrjfor more details. 18*38fd1498Szrj 19*38fd1498SzrjYou should have received a copy of the GNU General Public License 20*38fd1498Szrjalong with GCC; see the file COPYING3. If not see 21*38fd1498Szrj<http://www.gnu.org/licenses/>. */ 22*38fd1498Szrj 23*38fd1498Szrj/* Tree nodes used in the C frontend. These are also shared with the 24*38fd1498Szrj C++ and Objective C frontends. */ 25*38fd1498Szrj 26*38fd1498Szrj/* A C_MAYBE_CONST_EXPR, currently only used for C and Objective C, 27*38fd1498Szrj tracks information about constancy of an expression and VLA type 28*38fd1498Szrj sizes or VM expressions from typeof that need to be evaluated 29*38fd1498Szrj before the main expression. It is used during parsing and removed 30*38fd1498Szrj in c_fully_fold. C_MAYBE_CONST_EXPR_PRE is the expression to 31*38fd1498Szrj evaluate first, if not NULL; C_MAYBE_CONST_EXPR_EXPR is the main 32*38fd1498Szrj expression. If C_MAYBE_CONST_EXPR_INT_OPERANDS is set then the 33*38fd1498Szrj expression may be used in an unevaluated part of an integer 34*38fd1498Szrj constant expression, but not in an evaluated part. If 35*38fd1498Szrj C_MAYBE_CONST_EXPR_NON_CONST is set then the expression contains 36*38fd1498Szrj something that cannot occur in an evaluated part of a constant 37*38fd1498Szrj expression (or outside of sizeof in C90 mode); otherwise it does 38*38fd1498Szrj not. */ 39*38fd1498SzrjDEFTREECODE (C_MAYBE_CONST_EXPR, "c_maybe_const_expr", tcc_expression, 2) 40*38fd1498Szrj 41*38fd1498Szrj/* An EXCESS_PRECISION_EXPR, currently only used for C and Objective 42*38fd1498Szrj C, represents an expression evaluated in greater range or precision 43*38fd1498Szrj than its type. The type of the EXCESS_PRECISION_EXPR is the 44*38fd1498Szrj semantic type while the operand represents what is actually being 45*38fd1498Szrj evaluated. */ 46*38fd1498SzrjDEFTREECODE (EXCESS_PRECISION_EXPR, "excess_precision_expr", tcc_expression, 1) 47*38fd1498Szrj 48*38fd1498Szrj/* Used to represent a user-defined literal. 49*38fd1498Szrj The operands are an IDENTIFIER for the suffix, the VALUE of the literal, 50*38fd1498Szrj and for numeric literals the original string representation of the 51*38fd1498Szrj number. */ 52*38fd1498SzrjDEFTREECODE (USERDEF_LITERAL, "userdef_literal", tcc_exceptional, 3) 53*38fd1498Szrj 54*38fd1498Szrj/* Represents a 'sizeof' expression during C++ template expansion, 55*38fd1498Szrj or for the purpose of -Wsizeof-pointer-memaccess warning. */ 56*38fd1498SzrjDEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_expression, 1) 57*38fd1498Szrj 58*38fd1498Szrj/* 59*38fd1498SzrjLocal variables: 60*38fd1498Szrjmode:c 61*38fd1498SzrjEnd: 62*38fd1498Szrj*/ 63