Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

129 lines
5.8KB

  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 Exception Handling (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="GIMPLE Exception Handling (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="GIMPLE Exception Handling (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="GIMPLE.html#GIMPLE" rel="up" title="GIMPLE">
  30. <link href="Temporaries.html#Temporaries" rel="next" title="Temporaries">
  31. <link href="GIMPLE-instruction-set.html#GIMPLE-instruction-set" rel="prev" title="GIMPLE instruction set">
  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-Exception-Handling"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="Temporaries.html#Temporaries" accesskey="n" rel="next">Temporaries</a>, Previous: <a href="GIMPLE-instruction-set.html#GIMPLE-instruction-set" accesskey="p" rel="prev">GIMPLE instruction set</a>, Up: <a href="GIMPLE.html#GIMPLE" accesskey="u" rel="up">GIMPLE</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="Exception-Handling-1"></a>
  68. <h3 class="section">12.4 Exception Handling</h3>
  69. <a name="index-GIMPLE-Exception-Handling"></a>
  70. <p>Other exception handling constructs are represented using
  71. <code>GIMPLE_TRY_CATCH</code>. <code>GIMPLE_TRY_CATCH</code> has two operands. The
  72. first operand is a sequence of statements to execute. If executing
  73. these statements does not throw an exception, then the second operand
  74. is ignored. Otherwise, if an exception is thrown, then the second
  75. operand of the <code>GIMPLE_TRY_CATCH</code> is checked. The second
  76. operand may have the following forms:
  77. </p>
  78. <ol>
  79. <li> A sequence of statements to execute. When an exception occurs,
  80. these statements are executed, and then the exception is rethrown.
  81. </li><li> A sequence of <code>GIMPLE_CATCH</code> statements. Each
  82. <code>GIMPLE_CATCH</code> has a list of applicable exception types and
  83. handler code. If the thrown exception matches one of the caught
  84. types, the associated handler code is executed. If the handler
  85. code falls off the bottom, execution continues after the original
  86. <code>GIMPLE_TRY_CATCH</code>.
  87. </li><li> A <code>GIMPLE_EH_FILTER</code> statement. This has a list of
  88. permitted exception types, and code to handle a match failure. If the
  89. thrown exception does not match one of the allowed types, the
  90. associated match failure code is executed. If the thrown exception
  91. does match, it continues unwinding the stack looking for the next
  92. handler.
  93. </li></ol>
  94. <p>Currently throwing an exception is not directly represented in
  95. GIMPLE, since it is implemented by calling a function. At some
  96. point in the future we will want to add some way to express that
  97. the call will throw an exception of a known type.
  98. </p>
  99. <p>Just before running the optimizers, the compiler lowers the
  100. high-level EH constructs above into a set of &lsquo;<samp>goto</samp>&rsquo;s, magic
  101. labels, and EH regions. Continuing to unwind at the end of a
  102. cleanup is represented with a <code>GIMPLE_RESX</code>.
  103. </p>
  104. <hr>
  105. <div class="header">
  106. <p>
  107. Next: <a href="Temporaries.html#Temporaries" accesskey="n" rel="next">Temporaries</a>, Previous: <a href="GIMPLE-instruction-set.html#GIMPLE-instruction-set" accesskey="p" rel="prev">GIMPLE instruction set</a>, Up: <a href="GIMPLE.html#GIMPLE" accesskey="u" rel="up">GIMPLE</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>
  108. </div>
  109. </body>
  110. </html>