NITIAL holds the value to initialize a variable to,
   or the value of a constant.  For a function, it holds the body
   (a node of type BLOCK representing the function's binding contour
   and whose body contains the function's statements.)  For a LABEL_DECL
   in C, it is a flag, nonzero if the label's definition has been seen.

   PARM_DECLs use a special field:
   DECL_ARG_TYPE is the type in which the argument is actually
    passed, which may be different from its type within the function.

   FUNCTION_DECLs use four special fields:
   DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.
   DECL_RESULT holds a RESULT_DECL node for the value of a function.
    The DECL_RTL field is 0 for a function that returns no value.
    (C functions returning void have zero here.)
    The TREE_TYPE field is the type in which the result is actually
    returned.  This is usually the same as the return type of the
    FUNCTION_DECL, but it may be a wider integer type because of
    promotion.
   DECL_FUNCTION_CODE is a code number that is nonzero for
    built-in functions.  Its value is an enum built_in_function
    that says which built-in function it is.

   DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE
   holds a line number.  In some cases these can be the location of
   a reference, if no definition has been seen.

   DECL_ABSTRACT is nonzero if the decl represents an abstract instance
   of a decl (i.e. one which is nested within an abstract instance of a
   inline function.  */

DEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0)
DEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0)
/* The ordering of the following codes is optimized for the checking
   macros in tree.h.  Changing the order will degrade the speed of the
   compiler.  FIELD_DECL, VAR_DECL, CONST_DECL, PARM_DECL,
   TYPE_DECL.  */
DEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0)
DEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0)
DEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0)
DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0)
DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)
DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)

/* A "declaration" of a debug temporary.  It should only appear in
   DEBUG stmts.  */
DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0)

/* A stmt that marks the beginning of a source statement.  */
DEFTREECODE (DEBUG_BEGIN_STMT, "debug_begin_stmt", tcc_statement, 0)

/* A namespace declaration.  Namespaces appear in DECL_CONTEXT of other
   _DECLs, providing a hierarchy of names.  */
DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)

/* A declaration import.
   The C++ FE uses this to represent a using-directive; eg:
   "using namespace foo".
   But it could be used to represent any declaration import construct.
   Whenever a declaration import appears in a lexical block, the BLOCK node
   representing that lexical block in GIMPLE will contain an IMPORTED_DECL
   node, linked via BLOCK_VARS accessor of the said BLOCK.
   For a given NODE which code is IMPORTED_DECL,
   IMPORTED_DECL_ASSOCIATED_DECL (NODE) accesses the imported declaration.  */
DEFTREECODE (IMPORTED_DECL, "imported_decl", tcc_declaration, 0)

/* A namelist declaration.
   The Fortran FE uses this to represent a namelist statement, e.g.:
   NAMELIST /namelist-group-name/ namelist-group-object-list.
   Whenever a declaration import appears in a lexical block, the BLOCK node
   representing that lexical block in GIMPLE will contain an NAMELIST_DECL
   node, linked via BLOCK_VARS accessor of the said BLOCK.
   For a given NODE which code is NAMELIST_DECL,
   NAMELIST_DECL_ASSOCIATED_DECL (NODE) accesses the imported declaration.  */
DEFTREECODE (NAMELIST_DECL, "namelist_decl", tcc_declaration, 0)

/* A translation unit.  This is not technically a declaration, since it
   can't be looked up, but it's close enough.  */
DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\
	     tcc_declaration, 0)
