You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
10KB

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