GIMPLE-Exception-Handling.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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-2017 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 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>GNU Compiler Collection (GCC) Internals: GIMPLE Exception Handling</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: GIMPLE Exception Handling">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: GIMPLE Exception Handling">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  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.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  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.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="GIMPLE-Exception-Handling"></a>
  63. <div class="header">
  64. <p>
  65. 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>
  66. </div>
  67. <hr>
  68. <a name="Exception-Handling-1"></a>
  69. <h3 class="section">11.4 Exception Handling</h3>
  70. <a name="index-GIMPLE-Exception-Handling"></a>
  71. <p>Other exception handling constructs are represented using
  72. <code>GIMPLE_TRY_CATCH</code>. <code>GIMPLE_TRY_CATCH</code> has two operands. The
  73. first operand is a sequence of statements to execute. If executing
  74. these statements does not throw an exception, then the second operand
  75. is ignored. Otherwise, if an exception is thrown, then the second
  76. operand of the <code>GIMPLE_TRY_CATCH</code> is checked. The second
  77. operand may have the following forms:
  78. </p>
  79. <ol>
  80. <li> A sequence of statements to execute. When an exception occurs,
  81. these statements are executed, and then the exception is rethrown.
  82. </li><li> A sequence of <code>GIMPLE_CATCH</code> statements. Each
  83. <code>GIMPLE_CATCH</code> has a list of applicable exception types and
  84. handler code. If the thrown exception matches one of the caught
  85. types, the associated handler code is executed. If the handler
  86. code falls off the bottom, execution continues after the original
  87. <code>GIMPLE_TRY_CATCH</code>.
  88. </li><li> A <code>GIMPLE_EH_FILTER</code> statement. This has a list of
  89. permitted exception types, and code to handle a match failure. If the
  90. thrown exception does not match one of the allowed types, the
  91. associated match failure code is executed. If the thrown exception
  92. does match, it continues unwinding the stack looking for the next
  93. handler.
  94. </li></ol>
  95. <p>Currently throwing an exception is not directly represented in
  96. GIMPLE, since it is implemented by calling a function. At some
  97. point in the future we will want to add some way to express that
  98. the call will throw an exception of a known type.
  99. </p>
  100. <p>Just before running the optimizers, the compiler lowers the
  101. high-level EH constructs above into a set of &lsquo;<samp>goto</samp>&rsquo;s, magic
  102. labels, and EH regions. Continuing to unwind at the end of a
  103. cleanup is represented with a <code>GIMPLE_RESX</code>.
  104. </p>
  105. <hr>
  106. <div class="header">
  107. <p>
  108. 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>
  109. </div>
  110. </body>
  111. </html>