gccint: Basic Statements

1 
1 11.7.1 Basic Statements
1 -----------------------
1 
1 'ASM_EXPR'
1 
1      Used to represent an inline assembly statement.  For an inline
1      assembly statement like:
1           asm ("mov x, y");
1      The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
1      y"'.  If the original statement made use of the extended-assembly
1      syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
1      be the outputs, inputs, and clobbers for the statement, represented
1      as 'STRING_CST' nodes.  The extended-assembly syntax looks like:
1           asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
1      The first string is the 'ASM_STRING', containing the instruction
1      template.  The next two strings are the output and inputs,
1      respectively; this statement has no clobbers.  As this example
1      indicates, "plain" assembly statements are merely a special case of
1      extended assembly statements; they have no cv-qualifiers, outputs,
1      inputs, or clobbers.  All of the strings will be 'NUL'-terminated,
1      and will contain no embedded 'NUL'-characters.
1 
1      If the assembly statement is declared 'volatile', or if the
1      statement was not an extended assembly statement, and is therefore
1      implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
1      of the 'ASM_EXPR'.
1 
1 'DECL_EXPR'
1 
1      Used to represent a local declaration.  The 'DECL_EXPR_DECL' macro
1      can be used to obtain the entity declared.  This declaration may be
1      a 'LABEL_DECL', indicating that the label declared is a local
1      label.  (As an extension, GCC allows the declaration of labels with
1      scope.)  In C, this declaration may be a 'FUNCTION_DECL',
1      indicating the use of the GCC nested function extension.  For more
1      information, ⇒Functions.
1 
1 'LABEL_EXPR'
1 
1      Used to represent a label.  The 'LABEL_DECL' declared by this
1      statement can be obtained with the 'LABEL_EXPR_LABEL' macro.  The
1      'IDENTIFIER_NODE' giving the name of the label can be obtained from
1      the 'LABEL_DECL' with 'DECL_NAME'.
1 
1 'GOTO_EXPR'
1 
1      Used to represent a 'goto' statement.  The 'GOTO_DESTINATION' will
1      usually be a 'LABEL_DECL'.  However, if the "computed goto"
1      extension has been used, the 'GOTO_DESTINATION' will be an
1      arbitrary expression indicating the destination.  This expression
1      will always have pointer type.
1 
1 'RETURN_EXPR'
1 
1      Used to represent a 'return' statement.  Operand 0 represents the
1      value to return.  It should either be the 'RESULT_DECL' for the
1      containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
1      function's 'RESULT_DECL'.  It will be 'NULL_TREE' if the statement
1      was just
1           return;
1 
1 'LOOP_EXPR'
1      These nodes represent "infinite" loops.  The 'LOOP_EXPR_BODY'
1      represents the body of the loop.  It should be executed forever,
1      unless an 'EXIT_EXPR' is encountered.
1 
1 'EXIT_EXPR'
1      These nodes represent conditional exits from the nearest enclosing
1      'LOOP_EXPR'.  The single operand is the condition; if it is
1      nonzero, then the loop should be exited.  An 'EXIT_EXPR' will only
1      appear within a 'LOOP_EXPR'.
1 
1 'SWITCH_STMT'
1 
1      Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
1      the expression on which the switch is occurring.  See the
1      documentation for an 'IF_STMT' for more information on the
1      representation used for the condition.  The 'SWITCH_STMT_BODY' is
1      the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
1      original type of switch expression as given in the source, before
1      any compiler conversions.
1 
1 'CASE_LABEL_EXPR'
1 
1      Use to represent a 'case' label, range of 'case' labels, or a
1      'default' label.  If 'CASE_LOW' is 'NULL_TREE', then this is a
1      'default' label.  Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
1      this is an ordinary 'case' label.  In this case, 'CASE_LOW' is an
1      expression giving the value of the label.  Both 'CASE_LOW' and
1      'CASE_HIGH' are 'INTEGER_CST' nodes.  These values will have the
1      same type as the condition expression in the switch statement.
1 
1      Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
1      statement is a range of case labels.  Such statements originate
1      with the extension that allows users to write things of the form:
1           case 2 ... 5:
1      The first value will be 'CASE_LOW', while the second will be
1      'CASE_HIGH'.
1 
1 'DEBUG_BEGIN_STMT'
1 
1      Marks the beginning of a source statement, for purposes of debug
1      information generation.
1