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