Variable Location Debug Information in RTL#
Variable tracking relies on MEM_EXPR and REG_EXPR
annotations to determine what user variables memory and register
references refer to.
Variable tracking at assignments uses these notes only when they refer to variables that live at fixed locations (e.g., addressable variables, global non-automatic variables). For variables whose location may vary, it relies on the following types of notes.
(var_location:mode var exp stat)Binds variable
var, a tree, to valueexp, an RTL expression. It appears only inNOTE_INSN_VAR_LOCATIONandDEBUG_INSNs, with slightly different meanings.mode, if present, represents the mode ofexp, which is useful if it is a modeless expression.statis only meaningful in notes, indicating whether the variable is known to be initialized or uninitialized.(debug_expr:mode decl)Stands for the value bound to the
DEBUG_EXPR_DECLdecl, that points back to it, within value expressions inVAR_LOCATIONnodes.(debug_implicit_ptr:mode decl)Stands for the location of a
declthat is no longer addressable.(entry_value:mode decl)Stands for the value a
declhad at the entry point of the containing function.(debug_parameter_ref:mode decl)Refers to a parameter that was completely optimized out.
(debug_marker:mode)Marks a program location. With
VOIDmode, it stands for the beginning of a statement, a recommended inspection point logically after all prior side effects, and before any subsequent side effects. WithBLKmode, it indicates an inline entry point: the lexical block encoded in theINSN_LOCATIONis the enclosing block that encloses the inlined function.