source: public/doc/gnu-c/Label-Value-Caveats.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 4.3 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Label Value Caveats (GNU C Language Manual)</title>
23
24<meta name="description" content="Label Value Caveats (GNU C Language Manual)">
25<meta name="keywords" content="Label Value Caveats (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Labels-as-Values.html" rel="up" title="Labels as Values">
33<link href="Statement-Exprs.html" rel="next" title="Statement Exprs">
34<link href="Label-Value-Uses.html" rel="prev" title="Label Value Uses">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Label-Value-Caveats"></span><div class="header">
59<p>
60Previous: <a href="Label-Value-Uses.html" accesskey="p" rel="prev">Label Value Uses</a>, Up: <a href="Labels-as-Values.html" accesskey="u" rel="up">Labels as Values</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Label-Value-Caveats-1"></span><h4 class="subsection">19.14.2 Label Value Caveats</h4>
64
65<p>Jumping to a label defined in another function does not work.
66It can cause unpredictable results.
67</p>
68<p>The best way to avoid this is to store label values only in
69automatic variables, or static variables whose names are declared
70within the function. Never pass them as arguments.
71</p>
72<span id="index-cloning"></span>
73<p>An optimization known as <em>cloning</em> generates multiple simplified
74variants of a function&rsquo;s code, for use with specific fixed arguments.
75Using label values in certain ways, such as saving the address in one
76call to the function and using it again in another call, would make cloning
77give incorrect results. These functions must disable cloning.
78</p>
79<p>Inlining calls to the function would also result in multiple copies of
80the code, each with its own value of the same label. Using the label
81in a computed goto is no problem, because the computed goto inhibits
82inlining. However, using the label value in some other way, such as
83an indication of where an error occurred, would be optimized wrong.
84These functions must disable inlining.
85</p>
86<p>To prevent inlining or cloning of a function, specify
87<code>__attribute__((__noinline__,__noclone__))</code> in its definition.
88See <a href="Attributes.html">Attributes</a>.
89</p>
90<p>When a function uses a label value in a static variable initializer,
91that automatically prevents inlining or cloning the function.
92</p>
93
94
95
96</body>
97</html>
Note: See TracBrowser for help on using the repository browser.