hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2016 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".
 
(a) The FSF's Front-Cover Text is:
 
A GNU Manual
 
(b) The FSF's Back-Cover Text is:
 
You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: GIMPLE_DEBUG</title>
 
<meta name="description" content="GNU Compiler Collection (GCC) Internals: GIMPLE_DEBUG">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: GIMPLE_DEBUG">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Tuple-specific-accessors.html#Tuple-specific-accessors" rel="up" title="Tuple specific accessors">
<link href="GIMPLE_005fEH_005fFILTER.html#GIMPLE_005fEH_005fFILTER" rel="next" title="GIMPLE_EH_FILTER">
<link href="GIMPLE_005fCOND.html#GIMPLE_005fCOND" rel="prev" title="GIMPLE_COND">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="GIMPLE_005fDEBUG"></a>
<div class="header">
<p>
Next: <a href="GIMPLE_005fEH_005fFILTER.html#GIMPLE_005fEH_005fFILTER" accesskey="n" rel="next"><code>GIMPLE_EH_FILTER</code></a>, Previous: <a href="GIMPLE_005fCOND.html#GIMPLE_005fCOND" accesskey="p" rel="prev"><code>GIMPLE_COND</code></a>, Up: <a href="Tuple-specific-accessors.html#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="GIMPLE_005fDEBUG-1"></a>
<h4 class="subsection">11.8.7 <code>GIMPLE_DEBUG</code></h4>
<a name="index-GIMPLE_005fDEBUG"></a>
<a name="index-GIMPLE_005fDEBUG_005fBIND"></a>
 
<dl>
<dt><a name="index-_002agimple_005fbuild_005fdebug_005fbind"></a>GIMPLE function: <em>gdebug</em> <strong>*gimple_build_debug_bind</strong> <em>(tree var, tree value, gimple stmt)</em></dt>
<dd><p>Build a <code>GIMPLE_DEBUG</code> statement with <code>GIMPLE_DEBUG_BIND</code> of
<code>subcode</code>.  The effect of this statement is to tell debug
information generation machinery that the value of user variable
<code>var</code> is given by <code>value</code> at that point, and to remain with
that value until <code>var</code> 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 <code>value</code> expression change afterwards, the
variable is supposed to retain the same value, though not necessarily
the same location.
</p>
<p>It is expected that <code>var</code> be most often a tree for automatic user
variables (<code>VAR_DECL</code> or <code>PARM_DECL</code>) that satisfy the
requirements for gimple registers, but it may also be a tree for a
scalarized component of a user variable (<code>ARRAY_REF</code>,
<code>COMPONENT_REF</code>), or a debug temporary (<code>DEBUG_EXPR_DECL</code>).
</p>
<p>As for <code>value</code>, it can be an arbitrary tree expression, but it is
recommended that it be in a suitable form for a gimple assignment
<code>RHS</code>.  It is not expected that user variables that could appear
as <code>var</code> ever appear in <code>value</code>, because in the latter we&rsquo;d
have their <code>SSA_NAME</code>s instead, but even if they were not in SSA
form, user variables appearing in <code>value</code> are to be regarded as
part of the executable code space, whereas those in <code>var</code> 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 <code>value</code>
expression.
</p>
<p>If <code>value</code> is <code>GIMPLE_DEBUG_BIND_NOVALUE</code>, debug information
generation machinery is informed that the variable <code>var</code> 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.
</p>
<p>Block and location information for the newly-created stmt are
taken from <code>stmt</code>, if given.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvar"></a>GIMPLE function: <em>tree</em> <strong>gimple_debug_bind_get_var</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the user variable <var>var</var> that is bound at <code>stmt</code>.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvalue"></a>GIMPLE function: <em>tree</em> <strong>gimple_debug_bind_get_value</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the value expression that is bound to a user variable at
<code>stmt</code>.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvalue_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_debug_bind_get_value_ptr</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return a pointer to the value expression that is bound to a user
variable at <code>stmt</code>.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fset_005fvar"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_set_var</strong> <em>(gimple stmt, tree var)</em></dt>
<dd><p>Modify the user variable bound at <code>stmt</code> to <var>var</var>.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fset_005fvalue"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_set_value</strong> <em>(gimple stmt, tree var)</em></dt>
<dd><p>Modify the value bound to the user variable bound at <code>stmt</code> to
<var>value</var>.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005freset_005fvalue"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_reset_value</strong> <em>(gimple stmt)</em></dt>
<dd><p>Modify the value bound to the user variable bound at <code>stmt</code> so
that the variable becomes unbound.
</p></dd></dl>
 
<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fhas_005fvalue_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_debug_bind_has_value_p</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return <code>TRUE</code> if <code>stmt</code> binds a user variable to a value,
and <code>FALSE</code> if it unbinds the variable.
</p></dd></dl>
 
<hr>
<div class="header">
<p>
Next: <a href="GIMPLE_005fEH_005fFILTER.html#GIMPLE_005fEH_005fFILTER" accesskey="n" rel="next"><code>GIMPLE_EH_FILTER</code></a>, Previous: <a href="GIMPLE_005fCOND.html#GIMPLE_005fCOND" accesskey="p" rel="prev"><code>GIMPLE_COND</code></a>, Up: <a href="Tuple-specific-accessors.html#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>