GIMPLE_DEBUG
¶gdebug
*gimple_build_debug_bind (tree var, tree value, gimple stmt)
¶Build a GIMPLE_DEBUG
statement with GIMPLE_DEBUG_BIND
subcode
. The effect of this statement is to tell debug
information generation machinery that the value of user variable
var
is given by value
at that point, and to remain with
that value until var
runs out of scope, a
dynamically-subsequent debug bind statement overrides the binding, or
conflicting values reach a control flow merge point. Even if
components of the value
expression change afterwards, the
variable is supposed to retain the same value, though not necessarily
the same location.
It is expected that var
be most often a tree for automatic user
variables (VAR_DECL
or PARM_DECL
) that satisfy the
requirements for gimple registers, but it may also be a tree for a
scalarized component of a user variable (ARRAY_REF
,
COMPONENT_REF
), or a debug temporary (DEBUG_EXPR_DECL
).
As for value
, it can be an arbitrary tree expression, but it is
recommended that it be in a suitable form for a gimple assignment
RHS
. It is not expected that user variables that could appear
as var
ever appear in value
, because in the latter we’d
have their SSA_NAME
s instead, but even if they were not in SSA
form, user variables appearing in value
are to be regarded as
part of the executable code space, whereas those in var
are to
be regarded as part of the source code space. There is no way to
refer to the value bound to a user variable within a value
expression.
If value
is GIMPLE_DEBUG_BIND_NOVALUE
, debug information
generation machinery is informed that the variable var
is
unbound, i.e., that its value is indeterminate, which sometimes means
it is really unavailable, and other times that the compiler could not
keep track of it.
Block and location information for the newly-created stmt are
taken from stmt
, if given.
tree
gimple_debug_bind_get_var (gimple stmt)
¶Return the user variable var that is bound at stmt
.
tree
gimple_debug_bind_get_value (gimple stmt)
¶Return the value expression that is bound to a user variable at
stmt
.
tree *
gimple_debug_bind_get_value_ptr (gimple stmt)
¶Return a pointer to the value expression that is bound to a user
variable at stmt
.
void
gimple_debug_bind_set_var (gimple stmt, tree var)
¶Modify the user variable bound at stmt
to var.
void
gimple_debug_bind_set_value (gimple stmt, tree var)
¶Modify the value bound to the user variable bound at stmt
to
value.
void
gimple_debug_bind_reset_value (gimple stmt)
¶Modify the value bound to the user variable bound at stmt
so
that the variable becomes unbound.
bool
gimple_debug_bind_has_value_p (gimple stmt)
¶Return TRUE
if stmt
binds a user variable to a value,
and FALSE
if it unbinds the variable.
gimple
gimple_build_debug_begin_stmt (tree block, location_t location)
¶Build a GIMPLE_DEBUG
statement with
GIMPLE_DEBUG_BEGIN_STMT
subcode
. The effect of this
statement is to tell debug information generation machinery that the
user statement at the given location
and block
starts at
the point at which the statement is inserted. The intent is that side
effects (e.g. variable bindings) of all prior user statements are
observable, and that none of the side effects of subsequent user
statements are.
gimple
gimple_build_debug_inline_entry (tree block, location_t location)
¶Build a GIMPLE_DEBUG
statement with
GIMPLE_DEBUG_INLINE_ENTRY
subcode
. The effect of this
statement is to tell debug information generation machinery that a
function call at location
underwent inline substitution, that
block
is the enclosing lexical block created for the
substitution, and that at the point of the program in which the stmt is
inserted, all parameters for the inlined function are bound to the
respective arguments, and none of the side effects of its stmts are
observable.