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)