The following macros and functions can be used on a FUNCTION_DECL:
DECL_MAIN_P::code.
DECL_NAMEIDENTIFIER_NODE. For an instantiation of a function template,
the DECL_NAME is the unqualified name of the template, not
something like f<int>. The value of DECL_NAME is
undefined when used on a constructor, destructor, overloaded operator,
or type-conversion operator, or any function that is implicitly
generated by the compiler. See below for macros that can be used to
distinguish these cases.
DECL_ASSEMBLER_NAMEIDENTIFIER_NODE. This name does not contain leading underscores
on systems that prefix all identifiers with underscores. The mangled
name is computed in the same way on all platforms; if special processing
is required to deal with the object file format used on a particular
platform, it is the responsibility of the back end to perform those
modifications. (Of course, the back end should not modify
DECL_ASSEMBLER_NAME itself.)
Using DECL_ASSEMBLER_NAME will cause additional memory to be
allocated (for the mangled name of the entity) so it should be used
only when emitting assembly code. It should not be used within the
optimizers to determine whether or not two declarations are the same,
even though some of the existing optimizers do use it in that way.
These uses will be removed over time.
DECL_EXTERNALTREE_PUBLICDECL_LOCAL_FUNCTION_PDECL_ANTICIPATEDDECL_EXTERN_C_FUNCTION_Pextern "C"' function.
DECL_LINKONCE_PDECL_LINKONCE_P holds; G++
instantiates needed templates in all translation units which require them,
and then relies on the linker to remove duplicate instantiations.
FIXME: This macro is not yet implemented.
DECL_FUNCTION_MEMBER_PDECL_STATIC_FUNCTION_PDECL_NONSTATIC_MEMBER_FUNCTION_PDECL_CONST_MEMFUNC_Pconst-member function.
DECL_VOLATILE_MEMFUNC_Pvolatile-member function.
DECL_CONSTRUCTOR_PDECL_NONCONVERTING_PDECL_COMPLETE_CONSTRUCTOR_PDECL_BASE_CONSTRUCTOR_PDECL_COPY_CONSTRUCTOR_PDECL_DESTRUCTOR_PDECL_COMPLETE_DESTRUCTOR_PDECL_OVERLOADED_OPERATOR_PDECL_CONV_FN_PDECL_GLOBAL_CTOR_PDECL_GLOBAL_DTOR_PDECL_THUNK_PThese functions represent stub code that adjusts the this pointer
and then jumps to another function. When the jumped-to function
returns, control is transferred directly to the caller, without
returning to the thunk. The first parameter to the thunk is always the
this pointer; the thunk should add THUNK_DELTA to this
value. (The THUNK_DELTA is an int, not an
INTEGER_CST.)
Then, if THUNK_VCALL_OFFSET (an INTEGER_CST) is nonzero
the adjusted this pointer must be adjusted again. The complete
calculation is given by the following pseudo-code:
this += THUNK_DELTA
if (THUNK_VCALL_OFFSET)
this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
Finally, the thunk should jump to the location given
by DECL_INITIAL; this will always be an expression for the
address of a function.
DECL_NON_THUNK_FUNCTION_PGLOBAL_INIT_PRIORITYDECL_GLOBAL_CTOR_P or DECL_GLOBAL_DTOR_P holds,
then this gives the initialization priority for the function. The
linker will arrange that all functions for which
DECL_GLOBAL_CTOR_P holds are run in increasing order of priority
before main is called. When the program exits, all functions for
which DECL_GLOBAL_DTOR_P holds are run in the reverse order.
DECL_ARTIFICIALDECL_ARGUMENTSPARM_DECL for the first argument to the
function. Subsequent PARM_DECL nodes can be obtained by
following the TREE_CHAIN links.
DECL_RESULTRESULT_DECL for the function.
TREE_TYPEFUNCTION_TYPE or METHOD_TYPE for
the function.
TYPE_RAISES_EXCEPTIONSNULL, is comprised of nodes
whose TREE_VALUE represents a type.
TYPE_NOTHROW_P()'.
DECL_ARRAY_DELETE_OPERATOR_Poperator delete[].