]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/extend.texi
dwarf2-1.C: Move...
[thirdparty/gcc.git] / gcc / doc / extend.texi
CommitLineData
0975678f 1@c Copyright (C) 1988,1989,1992,1993,1994,1996,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
c1f7febf
RK
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
fe203faf
RH
5@node C Implementation
6@chapter C Implementation-defined behavior
7@cindex implementation-defined behavior, C language
8
9A conforming implementation of ISO C is required to document its
10choice of behavior in each of the areas that are designated
11``implementation defined.'' The following lists all such areas,
12along with the section number from the ISO/IEC 9899:1999 standard.
13
14@menu
15* Translation implementation::
16* Environment implementation::
17* Identifiers implementation::
18* Characters implementation::
19* Integers implementation::
20* Floating point implementation::
21* Arrays and pointers implementation::
22* Hints implementation::
23* Structures unions enumerations and bit-fields implementation::
24* Qualifiers implementation::
25* Preprocessing directives implementation::
26* Library functions implementation::
27* Architecture implementation::
28* Locale-specific behavior implementation::
29@end menu
30
31@node Translation implementation
32@section Translation
33
34@itemize @bullet
35@item
36@cite{How a diagnostic is identified (3.10, 5.1.1.3).}
37
38@item
39@cite{Whether each nonempty sequence of white-space characters other than
40new-line is retained or replaced by one space character in translation
41phase 3 (5.1.1.2).}
42@end itemize
43
44@node Environment implementation
45@section Environment
46
0c688a7d 47The behavior of these points are dependent on the implementation
fe203faf
RH
48of the C library, and are not defined by GCC itself.
49
50@node Identifiers implementation
51@section Identifiers
52
53@itemize @bullet
54@item
55@cite{Which additional multibyte characters may appear in identifiers
56and their correspondence to universal character names (6.4.2).}
57
58@item
59@cite{The number of significant initial characters in an identifier
60(5.2.4.1, 6.4.2).}
61@end itemize
62
63@node Characters implementation
64@section Characters
65
66@itemize @bullet
67@item
68@cite{The number of bits in a byte (3.6).}
69
70@item
71@cite{The values of the members of the execution character set (5.2.1).}
72
73@item
74@cite{The unique value of the member of the execution character set produced
75for each of the standard alphabetic escape sequences (5.2.2).}
76
77@item
78@cite{The value of a @code{char} object into which has been stored any
79character other than a member of the basic execution character set (6.2.5).}
80
81@item
82@cite{Which of @code{signed char} or @code{unsigned char} has the same range,
39ffd3cb 83representation, and behavior as ``plain'' @code{char} (6.2.5, 6.3.1.1).}
fe203faf
RH
84
85@item
86@cite{The mapping of members of the source character set (in character
87constants and string literals) to members of the execution character
88set (6.4.4.4, 5.1.1.2).}
89
90@item
91@cite{The value of an integer character constant containing more than one
92character or containing a character or escape sequence that does not map
93to a single-byte execution character (6.4.4.4).}
94
95@item
96@cite{The value of a wide character constant containing more than one
97multibyte character, or containing a multibyte character or escape
98sequence not represented in the extended execution character set (6.4.4.4).}
99
100@item
101@cite{The current locale used to convert a wide character constant consisting
102of a single multibyte character that maps to a member of the extended
103execution character set into a corresponding wide character code (6.4.4.4).}
104
105@item
106@cite{The current locale used to convert a wide string literal into
107corresponding wide character codes (6.4.5).}
108
109@item
110@cite{The value of a string literal containing a multibyte character or escape
111sequence not represented in the execution character set (6.4.5).}
112@end itemize
113
114@node Integers implementation
115@section Integers
116
117@itemize @bullet
118@item
119@cite{Any extended integer types that exist in the implementation (6.2.5).}
120
121@item
122@cite{Whether signed integer types are represented using sign and magnitude,
123two's complement, or one's complement, and whether the extraordinary value
124is a trap representation or an ordinary value (6.2.6.2).}
125
126@item
127@cite{The rank of any extended integer type relative to another extended
128integer type with the same precision (6.3.1.1).}
129
130@item
131@cite{The result of, or the signal raised by, converting an integer to a
132signed integer type when the value cannot be represented in an object of
133that type (6.3.1.3).}
134
135@item
136@cite{The results of some bitwise operations on signed integers (6.5).}
137@end itemize
138
139@node Floating point implementation
140@section Floating point
141
142@itemize @bullet
143@item
144@cite{The accuracy of the floating-point operations and of the library
39ffd3cb 145functions in @code{<math.h>} and @code{<complex.h>} that return floating-point
fe203faf
RH
146results (5.2.4.2.2).}
147
148@item
149@cite{The rounding behaviors characterized by non-standard values
9c34dbbf
ZW
150of @code{FLT_ROUNDS} @gol
151(5.2.4.2.2).}
fe203faf
RH
152
153@item
154@cite{The evaluation methods characterized by non-standard negative
155values of @code{FLT_EVAL_METHOD} (5.2.4.2.2).}
156
157@item
158@cite{The direction of rounding when an integer is converted to a
159floating-point number that cannot exactly represent the original
160value (6.3.1.4).}
161
162@item
163@cite{The direction of rounding when a floating-point number is
164converted to a narrower floating-point number (6.3.1.5).}
165
166@item
167@cite{How the nearest representable value or the larger or smaller
168representable value immediately adjacent to the nearest representable
169value is chosen for certain floating constants (6.4.4.2).}
170
171@item
172@cite{Whether and how floating expressions are contracted when not
173disallowed by the @code{FP_CONTRACT} pragma (6.5).}
174
175@item
176@cite{The default state for the @code{FENV_ACCESS} pragma (7.6.1).}
177
178@item
179@cite{Additional floating-point exceptions, rounding modes, environments,
180and classifications, and their macro names (7.6, 7.12).}
181
182@item
183@cite{The default state for the @code{FP_CONTRACT} pragma (7.12.2).}
184
185@item
186@cite{Whether the ``inexact'' floating-point exception can be raised
187when the rounded result actually does equal the mathematical result
188in an IEC 60559 conformant implementation (F.9).}
189
190@item
191@cite{Whether the ``underflow'' (and ``inexact'') floating-point
192exception can be raised when a result is tiny but not inexact in an
193IEC 60559 conformant implementation (F.9).}
194
195@end itemize
196
197@node Arrays and pointers implementation
198@section Arrays and pointers
199
200@itemize @bullet
201@item
202@cite{The result of converting a pointer to an integer or
203vice versa (6.3.2.3).}
204
cbf4c36f 205A cast from pointer to integer discards most-significant bits if the
58f4de4f
RH
206pointer representation is larger than the integer type,
207sign-extends@footnote{Future versions of GCC may zero-extend, or use
208a target-defined @code{ptr_extend} pattern. Do not rely on sign extension.}
cbf4c36f
RH
209if the pointer representation is smaller than the integer type, otherwise
210the bits are unchanged.
211@c ??? We've always claimed that pointers were unsigned entities.
212@c Shouldn't we therefore be doing zero-extension? If so, the bug
213@c is in convert_to_integer, where we call type_for_size and request
214@c a signed integral type. On the other hand, it might be most useful
215@c for the target if we extend according to POINTERS_EXTEND_UNSIGNED.
216
217A cast from integer to pointer discards most-significant bits if the
218pointer representation is smaller than the integer type, extends according
219to the signedness of the integer type if the pointer representation
220is larger than the integer type, otherwise the bits are unchanged.
221
222When casting from pointer to integer and back again, the resulting
223pointer must reference the same object as the original pointer, otherwise
224the behavior is undefined. That is, one may not use integer arithmetic to
225avoid the undefined behavior of pointer arithmetic as proscribed in 6.5.6/8.
226
fe203faf
RH
227@item
228@cite{The size of the result of subtracting two pointers to elements
229of the same array (6.5.6).}
230
231@end itemize
232
233@node Hints implementation
234@section Hints
235
236@itemize @bullet
237@item
238@cite{The extent to which suggestions made by using the @code{register}
239storage-class specifier are effective (6.7.1).}
240
241@item
242@cite{The extent to which suggestions made by using the inline function
243specifier are effective (6.7.4).}
244
245@end itemize
246
247@node Structures unions enumerations and bit-fields implementation
248@section Structures, unions, enumerations, and bit-fields
249
250@itemize @bullet
251@item
252@cite{Whether a ``plain'' int bit-field is treated as a @code{signed int}
253bit-field or as an @code{unsigned int} bit-field (6.7.2, 6.7.2.1).}
254
255@item
256@cite{Allowable bit-field types other than @code{_Bool}, @code{signed int},
257and @code{unsigned int} (6.7.2.1).}
258
259@item
260@cite{Whether a bit-field can straddle a storage-unit boundary (6.7.2.1).}
261
262@item
263@cite{The order of allocation of bit-fields within a unit (6.7.2.1).}
264
265@item
266@cite{The alignment of non-bit-field members of structures (6.7.2.1).}
267
268@item
269@cite{The integer type compatible with each enumerated type (6.7.2.2).}
270
271@end itemize
272
273@node Qualifiers implementation
274@section Qualifiers
275
276@itemize @bullet
277@item
278@cite{What constitutes an access to an object that has volatile-qualified
279type (6.7.3).}
280
281@end itemize
282
283@node Preprocessing directives implementation
284@section Preprocessing directives
285
286@itemize @bullet
287@item
288@cite{How sequences in both forms of header names are mapped to headers
289or external source file names (6.4.7).}
290
291@item
292@cite{Whether the value of a character constant in a constant expression
293that controls conditional inclusion matches the value of the same character
294constant in the execution character set (6.10.1).}
295
296@item
297@cite{Whether the value of a single-character character constant in a
298constant expression that controls conditional inclusion may have a
299negative value (6.10.1).}
300
301@item
302@cite{The places that are searched for an included @samp{<>} delimited
303header, and how the places are specified or the header is
304identified (6.10.2).}
305
306@item
307@cite{How the named source file is searched for in an included @samp{""}
308delimited header (6.10.2).}
309
310@item
311@cite{The method by which preprocessing tokens (possibly resulting from
312macro expansion) in a @code{#include} directive are combined into a header
313name (6.10.2).}
314
315@item
316@cite{The nesting limit for @code{#include} processing (6.10.2).}
317
318@item
319@cite{Whether the @samp{#} operator inserts a @samp{\} character before
320the @samp{\} character that begins a universal character name in a
321character constant or string literal (6.10.3.2).}
322
323@item
324@cite{The behavior on each recognized non-@code{STDC #pragma}
325directive (6.10.6).}
326
327@item
328@cite{The definitions for @code{__DATE__} and @code{__TIME__} when
329respectively, the date and time of translation are not available (6.10.8).}
330
331@end itemize
332
333@node Library functions implementation
334@section Library functions
335
0c688a7d 336The behavior of these points are dependent on the implementation
fe203faf
RH
337of the C library, and are not defined by GCC itself.
338
339@node Architecture implementation
340@section Architecture
341
342@itemize @bullet
343@item
344@cite{The values or expressions assigned to the macros specified in the
39ffd3cb 345headers @code{<float.h>}, @code{<limits.h>}, and @code{<stdint.h>}
fe203faf
RH
346(5.2.4.2, 7.18.2, 7.18.3).}
347
348@item
349@cite{The number, order, and encoding of bytes in any object
350(when not explicitly specified in this International Standard) (6.2.6.1).}
351
352@item
353@cite{The value of the result of the sizeof operator (6.5.3.4).}
354
355@end itemize
356
357@node Locale-specific behavior implementation
358@section Locale-specific behavior
359
0c688a7d 360The behavior of these points are dependent on the implementation
fe203faf
RH
361of the C library, and are not defined by GCC itself.
362
c1f7febf
RK
363@node C Extensions
364@chapter Extensions to the C Language Family
365@cindex extensions, C language
366@cindex C language extensions
367
84330467 368@opindex pedantic
161d7b59 369GNU C provides several language features not found in ISO standard C@.
f0523f02 370(The @option{-pedantic} option directs GCC to print a warning message if
c1f7febf
RK
371any of these features is used.) To test for the availability of these
372features in conditional compilation, check for a predefined macro
161d7b59 373@code{__GNUC__}, which is always defined under GCC@.
c1f7febf 374
161d7b59 375These extensions are available in C and Objective-C@. Most of them are
c1f7febf
RK
376also available in C++. @xref{C++ Extensions,,Extensions to the
377C++ Language}, for extensions that apply @emph{only} to C++.
378
4b404517
JM
379Some features that are in ISO C99 but not C89 or C++ are also, as
380extensions, accepted by GCC in C89 mode and in C++.
5490d604 381
c1f7febf
RK
382@menu
383* Statement Exprs:: Putting statements and declarations inside expressions.
384* Local Labels:: Labels local to a statement-expression.
385* Labels as Values:: Getting pointers to labels, and computed gotos.
386* Nested Functions:: As in Algol and Pascal, lexical scoping of functions.
387* Constructing Calls:: Dispatching a call to another function.
388* Naming Types:: Giving a name to the type of some expression.
389* Typeof:: @code{typeof}: referring to the type of an expression.
390* Lvalues:: Using @samp{?:}, @samp{,} and casts in lvalues.
391* Conditionals:: Omitting the middle operand of a @samp{?:} expression.
392* Long Long:: Double-word integers---@code{long long int}.
393* Complex:: Data types for complex numbers.
6f4d7222 394* Hex Floats:: Hexadecimal floating-point constants.
c1f7febf
RK
395* Zero Length:: Zero-length arrays.
396* Variable Length:: Arrays whose length is computed at run time.
ccd96f0a
NB
397* Variadic Macros:: Macros with a variable number of arguments.
398* Escaped Newlines:: Slightly looser rules for escaped newlines.
399* Multi-line Strings:: String literals with embedded newlines.
c1f7febf
RK
400* Subscripting:: Any array can be subscripted, even if not an lvalue.
401* Pointer Arith:: Arithmetic on @code{void}-pointers and function pointers.
402* Initializers:: Non-constant initializers.
4b404517 403* Compound Literals:: Compound literals give structures, unions
c1f7febf 404 or arrays as values.
4b404517 405* Designated Inits:: Labeling elements of initializers.
c1f7febf
RK
406* Cast to Union:: Casting to union type from any member of the union.
407* Case Ranges:: `case 1 ... 9' and such.
4b404517 408* Mixed Declarations:: Mixing declarations and code.
c1f7febf
RK
409* Function Attributes:: Declaring that functions have no side effects,
410 or that they can never return.
2c5e91d2 411* Attribute Syntax:: Formal syntax for attributes.
c1f7febf
RK
412* Function Prototypes:: Prototype declarations and old-style definitions.
413* C++ Comments:: C++ comments are recognized.
414* Dollar Signs:: Dollar sign is allowed in identifiers.
415* Character Escapes:: @samp{\e} stands for the character @key{ESC}.
416* Variable Attributes:: Specifying attributes of variables.
417* Type Attributes:: Specifying attributes of types.
418* Alignment:: Inquiring about the alignment of a type or variable.
419* Inline:: Defining inline functions (as fast as macros).
420* Extended Asm:: Assembler instructions with C expressions as operands.
421 (With them you can define ``built-in'' functions.)
422* Constraints:: Constraints for asm operands
423* Asm Labels:: Specifying the assembler name to use for a C symbol.
424* Explicit Reg Vars:: Defining variables residing in specified registers.
425* Alternate Keywords:: @code{__const__}, @code{__asm__}, etc., for header files.
426* Incomplete Enums:: @code{enum foo;}, with details to follow.
427* Function Names:: Printable strings which are the name of the current
428 function.
429* Return Address:: Getting the return or frame address of a function.
1255c85c 430* Vector Extensions:: Using vector instructions through built-in functions.
c5c76735 431* Other Builtins:: Other built-in functions.
0975678f 432* Target Builtins:: Built-in functions specific to particular targets.
0168a849 433* Pragmas:: Pragmas accepted by GCC.
b11cc610 434* Unnamed Fields:: Unnamed struct/union fields within structs/unions.
c1f7febf 435@end menu
c1f7febf
RK
436
437@node Statement Exprs
438@section Statements and Declarations in Expressions
439@cindex statements inside expressions
440@cindex declarations inside expressions
441@cindex expressions containing statements
442@cindex macros, statements in expressions
443
444@c the above section title wrapped and causes an underfull hbox.. i
445@c changed it from "within" to "in". --mew 4feb93
446
447A compound statement enclosed in parentheses may appear as an expression
161d7b59 448in GNU C@. This allows you to use loops, switches, and local variables
c1f7febf
RK
449within an expression.
450
451Recall that a compound statement is a sequence of statements surrounded
452by braces; in this construct, parentheses go around the braces. For
453example:
454
455@example
456(@{ int y = foo (); int z;
457 if (y > 0) z = y;
458 else z = - y;
459 z; @})
460@end example
461
462@noindent
463is a valid (though slightly more complex than necessary) expression
464for the absolute value of @code{foo ()}.
465
466The last thing in the compound statement should be an expression
467followed by a semicolon; the value of this subexpression serves as the
468value of the entire construct. (If you use some other kind of statement
469last within the braces, the construct has type @code{void}, and thus
470effectively no value.)
471
472This feature is especially useful in making macro definitions ``safe'' (so
473that they evaluate each operand exactly once). For example, the
474``maximum'' function is commonly defined as a macro in standard C as
475follows:
476
477@example
478#define max(a,b) ((a) > (b) ? (a) : (b))
479@end example
480
481@noindent
482@cindex side effects, macro argument
483But this definition computes either @var{a} or @var{b} twice, with bad
484results if the operand has side effects. In GNU C, if you know the
485type of the operands (here let's assume @code{int}), you can define
486the macro safely as follows:
487
488@example
489#define maxint(a,b) \
490 (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
491@end example
492
493Embedded statements are not allowed in constant expressions, such as
c771326b 494the value of an enumeration constant, the width of a bit-field, or
c1f7febf
RK
495the initial value of a static variable.
496
497If you don't know the type of the operand, you can still do this, but you
498must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
499Types}).
500
b98e139b
MM
501Statement expressions are not supported fully in G++, and their fate
502there is unclear. (It is possible that they will become fully supported
503at some point, or that they will be deprecated, or that the bugs that
504are present will continue to exist indefinitely.) Presently, statement
02f52e19 505expressions do not work well as default arguments.
b98e139b
MM
506
507In addition, there are semantic issues with statement-expressions in
508C++. If you try to use statement-expressions instead of inline
509functions in C++, you may be surprised at the way object destruction is
510handled. For example:
511
512@example
513#define foo(a) (@{int b = (a); b + 3; @})
514@end example
515
516@noindent
517does not work the same way as:
518
519@example
54e1d3a6 520inline int foo(int a) @{ int b = a; return b + 3; @}
b98e139b
MM
521@end example
522
523@noindent
524In particular, if the expression passed into @code{foo} involves the
525creation of temporaries, the destructors for those temporaries will be
526run earlier in the case of the macro than in the case of the function.
527
528These considerations mean that it is probably a bad idea to use
529statement-expressions of this form in header files that are designed to
54e1d3a6
MM
530work with C++. (Note that some versions of the GNU C Library contained
531header files using statement-expression that lead to precisely this
532bug.)
b98e139b 533
c1f7febf
RK
534@node Local Labels
535@section Locally Declared Labels
536@cindex local labels
537@cindex macros, local labels
538
539Each statement expression is a scope in which @dfn{local labels} can be
540declared. A local label is simply an identifier; you can jump to it
541with an ordinary @code{goto} statement, but only from within the
542statement expression it belongs to.
543
544A local label declaration looks like this:
545
546@example
547__label__ @var{label};
548@end example
549
550@noindent
551or
552
553@example
554__label__ @var{label1}, @var{label2}, @dots{};
555@end example
556
557Local label declarations must come at the beginning of the statement
558expression, right after the @samp{(@{}, before any ordinary
559declarations.
560
561The label declaration defines the label @emph{name}, but does not define
562the label itself. You must do this in the usual way, with
563@code{@var{label}:}, within the statements of the statement expression.
564
565The local label feature is useful because statement expressions are
566often used in macros. If the macro contains nested loops, a @code{goto}
567can be useful for breaking out of them. However, an ordinary label
568whose scope is the whole function cannot be used: if the macro can be
569expanded several times in one function, the label will be multiply
570defined in that function. A local label avoids this problem. For
571example:
572
573@example
574#define SEARCH(array, target) \
310668e8 575(@{ \
c1f7febf
RK
576 __label__ found; \
577 typeof (target) _SEARCH_target = (target); \
578 typeof (*(array)) *_SEARCH_array = (array); \
579 int i, j; \
580 int value; \
581 for (i = 0; i < max; i++) \
582 for (j = 0; j < max; j++) \
583 if (_SEARCH_array[i][j] == _SEARCH_target) \
310668e8 584 @{ value = i; goto found; @} \
c1f7febf
RK
585 value = -1; \
586 found: \
587 value; \
588@})
589@end example
590
591@node Labels as Values
592@section Labels as Values
593@cindex labels as values
594@cindex computed gotos
595@cindex goto with computed label
596@cindex address of a label
597
598You can get the address of a label defined in the current function
599(or a containing function) with the unary operator @samp{&&}. The
600value has type @code{void *}. This value is a constant and can be used
601wherever a constant of that type is valid. For example:
602
603@example
604void *ptr;
605@dots{}
606ptr = &&foo;
607@end example
608
609To use these values, you need to be able to jump to one. This is done
610with the computed goto statement@footnote{The analogous feature in
611Fortran is called an assigned goto, but that name seems inappropriate in
612C, where one can do more than simply store label addresses in label
613variables.}, @code{goto *@var{exp};}. For example,
614
615@example
616goto *ptr;
617@end example
618
619@noindent
620Any expression of type @code{void *} is allowed.
621
622One way of using these constants is in initializing a static array that
623will serve as a jump table:
624
625@example
626static void *array[] = @{ &&foo, &&bar, &&hack @};
627@end example
628
629Then you can select a label with indexing, like this:
630
631@example
632goto *array[i];
633@end example
634
635@noindent
636Note that this does not check whether the subscript is in bounds---array
637indexing in C never does that.
638
639Such an array of label values serves a purpose much like that of the
640@code{switch} statement. The @code{switch} statement is cleaner, so
641use that rather than an array unless the problem does not fit a
642@code{switch} statement very well.
643
644Another use of label values is in an interpreter for threaded code.
645The labels within the interpreter function can be stored in the
646threaded code for super-fast dispatching.
647
02f52e19 648You may not use this mechanism to jump to code in a different function.
47620e09 649If you do that, totally unpredictable things will happen. The best way to
c1f7febf
RK
650avoid this is to store the label address only in automatic variables and
651never pass it as an argument.
652
47620e09
RH
653An alternate way to write the above example is
654
655@example
310668e8
JM
656static const int array[] = @{ &&foo - &&foo, &&bar - &&foo,
657 &&hack - &&foo @};
47620e09
RH
658goto *(&&foo + array[i]);
659@end example
660
661@noindent
662This is more friendly to code living in shared libraries, as it reduces
663the number of dynamic relocations that are needed, and by consequence,
664allows the data to be read-only.
665
c1f7febf
RK
666@node Nested Functions
667@section Nested Functions
668@cindex nested functions
669@cindex downward funargs
670@cindex thunks
671
672A @dfn{nested function} is a function defined inside another function.
673(Nested functions are not supported for GNU C++.) The nested function's
674name is local to the block where it is defined. For example, here we
675define a nested function named @code{square}, and call it twice:
676
677@example
678@group
679foo (double a, double b)
680@{
681 double square (double z) @{ return z * z; @}
682
683 return square (a) + square (b);
684@}
685@end group
686@end example
687
688The nested function can access all the variables of the containing
689function that are visible at the point of its definition. This is
690called @dfn{lexical scoping}. For example, here we show a nested
691function which uses an inherited variable named @code{offset}:
692
693@example
aee96fe9 694@group
c1f7febf
RK
695bar (int *array, int offset, int size)
696@{
697 int access (int *array, int index)
698 @{ return array[index + offset]; @}
699 int i;
700 @dots{}
701 for (i = 0; i < size; i++)
702 @dots{} access (array, i) @dots{}
703@}
aee96fe9 704@end group
c1f7febf
RK
705@end example
706
707Nested function definitions are permitted within functions in the places
708where variable definitions are allowed; that is, in any block, before
709the first statement in the block.
710
711It is possible to call the nested function from outside the scope of its
712name by storing its address or passing the address to another function:
713
714@example
715hack (int *array, int size)
716@{
717 void store (int index, int value)
718 @{ array[index] = value; @}
719
720 intermediate (store, size);
721@}
722@end example
723
724Here, the function @code{intermediate} receives the address of
725@code{store} as an argument. If @code{intermediate} calls @code{store},
726the arguments given to @code{store} are used to store into @code{array}.
727But this technique works only so long as the containing function
728(@code{hack}, in this example) does not exit.
729
730If you try to call the nested function through its address after the
731containing function has exited, all hell will break loose. If you try
732to call it after a containing scope level has exited, and if it refers
733to some of the variables that are no longer in scope, you may be lucky,
734but it's not wise to take the risk. If, however, the nested function
735does not refer to anything that has gone out of scope, you should be
736safe.
737
9c34dbbf
ZW
738GCC implements taking the address of a nested function using a technique
739called @dfn{trampolines}. A paper describing them is available as
740
741@noindent
742@uref{http://people.debian.org/~karlheg/Usenix88-lexic.pdf}.
c1f7febf
RK
743
744A nested function can jump to a label inherited from a containing
745function, provided the label was explicitly declared in the containing
746function (@pxref{Local Labels}). Such a jump returns instantly to the
747containing function, exiting the nested function which did the
748@code{goto} and any intermediate functions as well. Here is an example:
749
750@example
751@group
752bar (int *array, int offset, int size)
753@{
754 __label__ failure;
755 int access (int *array, int index)
756 @{
757 if (index > size)
758 goto failure;
759 return array[index + offset];
760 @}
761 int i;
762 @dots{}
763 for (i = 0; i < size; i++)
764 @dots{} access (array, i) @dots{}
765 @dots{}
766 return 0;
767
768 /* @r{Control comes here from @code{access}
769 if it detects an error.} */
770 failure:
771 return -1;
772@}
773@end group
774@end example
775
776A nested function always has internal linkage. Declaring one with
777@code{extern} is erroneous. If you need to declare the nested function
778before its definition, use @code{auto} (which is otherwise meaningless
779for function declarations).
780
781@example
782bar (int *array, int offset, int size)
783@{
784 __label__ failure;
785 auto int access (int *, int);
786 @dots{}
787 int access (int *array, int index)
788 @{
789 if (index > size)
790 goto failure;
791 return array[index + offset];
792 @}
793 @dots{}
794@}
795@end example
796
797@node Constructing Calls
798@section Constructing Function Calls
799@cindex constructing calls
800@cindex forwarding calls
801
802Using the built-in functions described below, you can record
803the arguments a function received, and call another function
804with the same arguments, without knowing the number or types
805of the arguments.
806
807You can also record the return value of that function call,
808and later return that value, without knowing what data type
809the function tried to return (as long as your caller expects
810that data type).
811
84330467
JM
812@deftypefn {Built-in Function} {void *} __builtin_apply_args ()
813This built-in function returns a pointer to data
c1f7febf
RK
814describing how to perform a call with the same arguments as were passed
815to the current function.
816
817The function saves the arg pointer register, structure value address,
818and all registers that might be used to pass arguments to a function
819into a block of memory allocated on the stack. Then it returns the
820address of that block.
84330467 821@end deftypefn
c1f7febf 822
84330467
JM
823@deftypefn {Built-in Function} {void *} __builtin_apply (void (*@var{function})(), void *@var{arguments}, size_t @var{size})
824This built-in function invokes @var{function}
825with a copy of the parameters described by @var{arguments}
826and @var{size}.
c1f7febf
RK
827
828The value of @var{arguments} should be the value returned by
829@code{__builtin_apply_args}. The argument @var{size} specifies the size
830of the stack argument data, in bytes.
831
84330467 832This function returns a pointer to data describing
c1f7febf
RK
833how to return whatever value was returned by @var{function}. The data
834is saved in a block of memory allocated on the stack.
835
836It is not always simple to compute the proper value for @var{size}. The
837value is used by @code{__builtin_apply} to compute the amount of data
838that should be pushed on the stack and copied from the incoming argument
839area.
84330467 840@end deftypefn
c1f7febf 841
84330467 842@deftypefn {Built-in Function} {void} __builtin_return (void *@var{result})
c1f7febf
RK
843This built-in function returns the value described by @var{result} from
844the containing function. You should specify, for @var{result}, a value
845returned by @code{__builtin_apply}.
84330467 846@end deftypefn
c1f7febf
RK
847
848@node Naming Types
849@section Naming an Expression's Type
850@cindex naming types
851
852You can give a name to the type of an expression using a @code{typedef}
853declaration with an initializer. Here is how to define @var{name} as a
854type name for the type of @var{exp}:
855
856@example
857typedef @var{name} = @var{exp};
858@end example
859
860This is useful in conjunction with the statements-within-expressions
861feature. Here is how the two together can be used to define a safe
862``maximum'' macro that operates on any arithmetic type:
863
864@example
865#define max(a,b) \
866 (@{typedef _ta = (a), _tb = (b); \
867 _ta _a = (a); _tb _b = (b); \
868 _a > _b ? _a : _b; @})
869@end example
870
871@cindex underscores in variables in macros
872@cindex @samp{_} in variables in macros
873@cindex local variables in macros
874@cindex variables, local, in macros
875@cindex macros, local variables in
876
877The reason for using names that start with underscores for the local
878variables is to avoid conflicts with variable names that occur within the
879expressions that are substituted for @code{a} and @code{b}. Eventually we
880hope to design a new form of declaration syntax that allows you to declare
881variables whose scopes start only after their initializers; this will be a
882more reliable way to prevent such conflicts.
883
884@node Typeof
885@section Referring to a Type with @code{typeof}
886@findex typeof
887@findex sizeof
888@cindex macros, types of arguments
889
890Another way to refer to the type of an expression is with @code{typeof}.
891The syntax of using of this keyword looks like @code{sizeof}, but the
892construct acts semantically like a type name defined with @code{typedef}.
893
894There are two ways of writing the argument to @code{typeof}: with an
895expression or with a type. Here is an example with an expression:
896
897@example
898typeof (x[0](1))
899@end example
900
901@noindent
89aed483
JM
902This assumes that @code{x} is an array of pointers to functions;
903the type described is that of the values of the functions.
c1f7febf
RK
904
905Here is an example with a typename as the argument:
906
907@example
908typeof (int *)
909@end example
910
911@noindent
912Here the type described is that of pointers to @code{int}.
913
5490d604 914If you are writing a header file that must work when included in ISO C
c1f7febf
RK
915programs, write @code{__typeof__} instead of @code{typeof}.
916@xref{Alternate Keywords}.
917
918A @code{typeof}-construct can be used anywhere a typedef name could be
919used. For example, you can use it in a declaration, in a cast, or inside
920of @code{sizeof} or @code{typeof}.
921
922@itemize @bullet
923@item
924This declares @code{y} with the type of what @code{x} points to.
925
926@example
927typeof (*x) y;
928@end example
929
930@item
931This declares @code{y} as an array of such values.
932
933@example
934typeof (*x) y[4];
935@end example
936
937@item
938This declares @code{y} as an array of pointers to characters:
939
940@example
941typeof (typeof (char *)[4]) y;
942@end example
943
944@noindent
945It is equivalent to the following traditional C declaration:
946
947@example
948char *y[4];
949@end example
950
951To see the meaning of the declaration using @code{typeof}, and why it
952might be a useful way to write, let's rewrite it with these macros:
953
954@example
955#define pointer(T) typeof(T *)
956#define array(T, N) typeof(T [N])
957@end example
958
959@noindent
960Now the declaration can be rewritten this way:
961
962@example
963array (pointer (char), 4) y;
964@end example
965
966@noindent
967Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
968pointers to @code{char}.
969@end itemize
970
971@node Lvalues
972@section Generalized Lvalues
973@cindex compound expressions as lvalues
974@cindex expressions, compound, as lvalues
975@cindex conditional expressions as lvalues
976@cindex expressions, conditional, as lvalues
977@cindex casts as lvalues
978@cindex generalized lvalues
979@cindex lvalues, generalized
980@cindex extensions, @code{?:}
981@cindex @code{?:} extensions
982Compound expressions, conditional expressions and casts are allowed as
983lvalues provided their operands are lvalues. This means that you can take
984their addresses or store values into them.
985
986Standard C++ allows compound expressions and conditional expressions as
987lvalues, and permits casts to reference type, so use of this extension
988is deprecated for C++ code.
989
990For example, a compound expression can be assigned, provided the last
991expression in the sequence is an lvalue. These two expressions are
992equivalent:
993
994@example
995(a, b) += 5
996a, (b += 5)
997@end example
998
999Similarly, the address of the compound expression can be taken. These two
1000expressions are equivalent:
1001
1002@example
1003&(a, b)
1004a, &b
1005@end example
1006
1007A conditional expression is a valid lvalue if its type is not void and the
1008true and false branches are both valid lvalues. For example, these two
1009expressions are equivalent:
1010
1011@example
1012(a ? b : c) = 5
1013(a ? b = 5 : (c = 5))
1014@end example
1015
1016A cast is a valid lvalue if its operand is an lvalue. A simple
1017assignment whose left-hand side is a cast works by converting the
1018right-hand side first to the specified type, then to the type of the
1019inner left-hand side expression. After this is stored, the value is
1020converted back to the specified type to become the value of the
1021assignment. Thus, if @code{a} has type @code{char *}, the following two
1022expressions are equivalent:
1023
1024@example
1025(int)a = 5
1026(int)(a = (char *)(int)5)
1027@end example
1028
1029An assignment-with-arithmetic operation such as @samp{+=} applied to a cast
1030performs the arithmetic using the type resulting from the cast, and then
1031continues as in the previous case. Therefore, these two expressions are
1032equivalent:
1033
1034@example
1035(int)a += 5
1036(int)(a = (char *)(int) ((int)a + 5))
1037@end example
1038
1039You cannot take the address of an lvalue cast, because the use of its
1040address would not work out coherently. Suppose that @code{&(int)f} were
1041permitted, where @code{f} has type @code{float}. Then the following
1042statement would try to store an integer bit-pattern where a floating
1043point number belongs:
1044
1045@example
1046*&(int)f = 1;
1047@end example
1048
1049This is quite different from what @code{(int)f = 1} would do---that
1050would convert 1 to floating point and store it. Rather than cause this
1051inconsistency, we think it is better to prohibit use of @samp{&} on a cast.
1052
1053If you really do want an @code{int *} pointer with the address of
1054@code{f}, you can simply write @code{(int *)&f}.
1055
1056@node Conditionals
1057@section Conditionals with Omitted Operands
1058@cindex conditional expressions, extensions
1059@cindex omitted middle-operands
1060@cindex middle-operands, omitted
1061@cindex extensions, @code{?:}
1062@cindex @code{?:} extensions
1063
1064The middle operand in a conditional expression may be omitted. Then
1065if the first operand is nonzero, its value is the value of the conditional
1066expression.
1067
1068Therefore, the expression
1069
1070@example
1071x ? : y
1072@end example
1073
1074@noindent
1075has the value of @code{x} if that is nonzero; otherwise, the value of
1076@code{y}.
1077
1078This example is perfectly equivalent to
1079
1080@example
1081x ? x : y
1082@end example
1083
1084@cindex side effect in ?:
1085@cindex ?: side effect
1086@noindent
1087In this simple case, the ability to omit the middle operand is not
1088especially useful. When it becomes useful is when the first operand does,
1089or may (if it is a macro argument), contain a side effect. Then repeating
1090the operand in the middle would perform the side effect twice. Omitting
1091the middle operand uses the value already computed without the undesirable
1092effects of recomputing it.
1093
1094@node Long Long
1095@section Double-Word Integers
1096@cindex @code{long long} data types
1097@cindex double-word arithmetic
1098@cindex multiprecision arithmetic
4b404517
JM
1099@cindex @code{LL} integer suffix
1100@cindex @code{ULL} integer suffix
c1f7febf 1101
4b404517
JM
1102ISO C99 supports data types for integers that are at least 64 bits wide,
1103and as an extension GCC supports them in C89 mode and in C++.
1104Simply write @code{long long int} for a signed integer, or
c1f7febf 1105@code{unsigned long long int} for an unsigned integer. To make an
84330467 1106integer constant of type @code{long long int}, add the suffix @samp{LL}
c1f7febf 1107to the integer. To make an integer constant of type @code{unsigned long
84330467 1108long int}, add the suffix @samp{ULL} to the integer.
c1f7febf
RK
1109
1110You can use these types in arithmetic like any other integer types.
1111Addition, subtraction, and bitwise boolean operations on these types
1112are open-coded on all types of machines. Multiplication is open-coded
1113if the machine supports fullword-to-doubleword a widening multiply
1114instruction. Division and shifts are open-coded only on machines that
1115provide special support. The operations that are not open-coded use
161d7b59 1116special library routines that come with GCC@.
c1f7febf
RK
1117
1118There may be pitfalls when you use @code{long long} types for function
1119arguments, unless you declare function prototypes. If a function
1120expects type @code{int} for its argument, and you pass a value of type
1121@code{long long int}, confusion will result because the caller and the
1122subroutine will disagree about the number of bytes for the argument.
1123Likewise, if the function expects @code{long long int} and you pass
1124@code{int}. The best way to avoid such problems is to use prototypes.
1125
1126@node Complex
1127@section Complex Numbers
1128@cindex complex numbers
4b404517
JM
1129@cindex @code{_Complex} keyword
1130@cindex @code{__complex__} keyword
c1f7febf 1131
4b404517
JM
1132ISO C99 supports complex floating data types, and as an extension GCC
1133supports them in C89 mode and in C++, and supports complex integer data
1134types which are not part of ISO C99. You can declare complex types
1135using the keyword @code{_Complex}. As an extension, the older GNU
1136keyword @code{__complex__} is also supported.
c1f7febf 1137
4b404517 1138For example, @samp{_Complex double x;} declares @code{x} as a
c1f7febf 1139variable whose real part and imaginary part are both of type
4b404517 1140@code{double}. @samp{_Complex short int y;} declares @code{y} to
c1f7febf
RK
1141have real and imaginary parts of type @code{short int}; this is not
1142likely to be useful, but it shows that the set of complex types is
1143complete.
1144
1145To write a constant with a complex data type, use the suffix @samp{i} or
1146@samp{j} (either one; they are equivalent). For example, @code{2.5fi}
4b404517
JM
1147has type @code{_Complex float} and @code{3i} has type
1148@code{_Complex int}. Such a constant always has a pure imaginary
c1f7febf 1149value, but you can form any complex value you like by adding one to a
4b404517
JM
1150real constant. This is a GNU extension; if you have an ISO C99
1151conforming C library (such as GNU libc), and want to construct complex
1152constants of floating type, you should include @code{<complex.h>} and
1153use the macros @code{I} or @code{_Complex_I} instead.
c1f7febf 1154
4b404517
JM
1155@cindex @code{__real__} keyword
1156@cindex @code{__imag__} keyword
c1f7febf
RK
1157To extract the real part of a complex-valued expression @var{exp}, write
1158@code{__real__ @var{exp}}. Likewise, use @code{__imag__} to
4b404517
JM
1159extract the imaginary part. This is a GNU extension; for values of
1160floating type, you should use the ISO C99 functions @code{crealf},
1161@code{creal}, @code{creall}, @code{cimagf}, @code{cimag} and
1162@code{cimagl}, declared in @code{<complex.h>} and also provided as
161d7b59 1163built-in functions by GCC@.
c1f7febf 1164
4b404517 1165@cindex complex conjugation
c1f7febf 1166The operator @samp{~} performs complex conjugation when used on a value
4b404517
JM
1167with a complex type. This is a GNU extension; for values of
1168floating type, you should use the ISO C99 functions @code{conjf},
1169@code{conj} and @code{conjl}, declared in @code{<complex.h>} and also
161d7b59 1170provided as built-in functions by GCC@.
c1f7febf 1171
f0523f02 1172GCC can allocate complex automatic variables in a noncontiguous
c1f7febf
RK
1173fashion; it's even possible for the real part to be in a register while
1174the imaginary part is on the stack (or vice-versa). None of the
1175supported debugging info formats has a way to represent noncontiguous
f0523f02 1176allocation like this, so GCC describes a noncontiguous complex
c1f7febf
RK
1177variable as if it were two separate variables of noncomplex type.
1178If the variable's actual name is @code{foo}, the two fictitious
1179variables are named @code{foo$real} and @code{foo$imag}. You can
1180examine and set these two fictitious variables with your debugger.
1181
1182A future version of GDB will know how to recognize such pairs and treat
1183them as a single variable with a complex type.
1184
6f4d7222 1185@node Hex Floats
6b42b9ea
UD
1186@section Hex Floats
1187@cindex hex floats
c5c76735 1188
4b404517 1189ISO C99 supports floating-point numbers written not only in the usual
6f4d7222 1190decimal notation, such as @code{1.55e1}, but also numbers such as
4b404517
JM
1191@code{0x1.fp3} written in hexadecimal format. As a GNU extension, GCC
1192supports this in C89 mode (except in some cases when strictly
1193conforming) and in C++. In that format the
84330467 1194@samp{0x} hex introducer and the @samp{p} or @samp{P} exponent field are
6f4d7222 1195mandatory. The exponent is a decimal number that indicates the power of
84330467 11962 by which the significant part will be multiplied. Thus @samp{0x1.f} is
aee96fe9
JM
1197@tex
1198$1 {15\over16}$,
1199@end tex
1200@ifnottex
12011 15/16,
1202@end ifnottex
1203@samp{p3} multiplies it by 8, and the value of @code{0x1.fp3}
6f4d7222
UD
1204is the same as @code{1.55e1}.
1205
1206Unlike for floating-point numbers in the decimal notation the exponent
1207is always required in the hexadecimal notation. Otherwise the compiler
1208would not be able to resolve the ambiguity of, e.g., @code{0x1.f}. This
84330467 1209could mean @code{1.0f} or @code{1.9375} since @samp{f} is also the
6f4d7222
UD
1210extension for floating-point constants of type @code{float}.
1211
c1f7febf
RK
1212@node Zero Length
1213@section Arrays of Length Zero
1214@cindex arrays of length zero
1215@cindex zero-length arrays
1216@cindex length-zero arrays
ffc5c6a9 1217@cindex flexible array members
c1f7febf 1218
161d7b59 1219Zero-length arrays are allowed in GNU C@. They are very useful as the
584ef5fe 1220last element of a structure which is really a header for a variable-length
c1f7febf
RK
1221object:
1222
1223@example
1224struct line @{
1225 int length;
1226 char contents[0];
1227@};
1228
584ef5fe
RH
1229struct line *thisline = (struct line *)
1230 malloc (sizeof (struct line) + this_length);
1231thisline->length = this_length;
c1f7febf
RK
1232@end example
1233
a25f1211 1234In ISO C89, you would have to give @code{contents} a length of 1, which
c1f7febf
RK
1235means either you waste space or complicate the argument to @code{malloc}.
1236
02f52e19 1237In ISO C99, you would use a @dfn{flexible array member}, which is
584ef5fe
RH
1238slightly different in syntax and semantics:
1239
1240@itemize @bullet
1241@item
1242Flexible array members are written as @code{contents[]} without
1243the @code{0}.
1244
1245@item
1246Flexible array members have incomplete type, and so the @code{sizeof}
1247operator may not be applied. As a quirk of the original implementation
1248of zero-length arrays, @code{sizeof} evaluates to zero.
1249
1250@item
1251Flexible array members may only appear as the last member of a
e7b6a0ee 1252@code{struct} that is otherwise non-empty.
ffc5c6a9 1253@end itemize
a25f1211 1254
ffc5c6a9 1255GCC versions before 3.0 allowed zero-length arrays to be statically
e7b6a0ee
DD
1256initialized, as if they were flexible arrays. In addition to those
1257cases that were useful, it also allowed initializations in situations
1258that would corrupt later data. Non-empty initialization of zero-length
1259arrays is now treated like any case where there are more initializer
1260elements than the array holds, in that a suitable warning about "excess
1261elements in array" is given, and the excess elements (all of them, in
1262this case) are ignored.
ffc5c6a9
RH
1263
1264Instead GCC allows static initialization of flexible array members.
1265This is equivalent to defining a new structure containing the original
1266structure followed by an array of sufficient size to contain the data.
e979f9e8 1267I.e.@: in the following, @code{f1} is constructed as if it were declared
ffc5c6a9 1268like @code{f2}.
a25f1211
RH
1269
1270@example
ffc5c6a9
RH
1271struct f1 @{
1272 int x; int y[];
1273@} f1 = @{ 1, @{ 2, 3, 4 @} @};
1274
1275struct f2 @{
1276 struct f1 f1; int data[3];
1277@} f2 = @{ @{ 1 @}, @{ 2, 3, 4 @} @};
1278@end example
584ef5fe 1279
ffc5c6a9
RH
1280@noindent
1281The convenience of this extension is that @code{f1} has the desired
1282type, eliminating the need to consistently refer to @code{f2.f1}.
1283
1284This has symmetry with normal static arrays, in that an array of
1285unknown size is also written with @code{[]}.
a25f1211 1286
ffc5c6a9
RH
1287Of course, this extension only makes sense if the extra data comes at
1288the end of a top-level object, as otherwise we would be overwriting
1289data at subsequent offsets. To avoid undue complication and confusion
1290with initialization of deeply nested arrays, we simply disallow any
1291non-empty initialization except when the structure is the top-level
1292object. For example:
584ef5fe 1293
ffc5c6a9
RH
1294@example
1295struct foo @{ int x; int y[]; @};
1296struct bar @{ struct foo z; @};
1297
13ba36b4
JM
1298struct foo a = @{ 1, @{ 2, 3, 4 @} @}; // @r{Valid.}
1299struct bar b = @{ @{ 1, @{ 2, 3, 4 @} @} @}; // @r{Invalid.}
1300struct bar c = @{ @{ 1, @{ @} @} @}; // @r{Valid.}
1301struct foo d[1] = @{ @{ 1 @{ 2, 3, 4 @} @} @}; // @r{Invalid.}
a25f1211 1302@end example
4b606faf 1303
c1f7febf
RK
1304@node Variable Length
1305@section Arrays of Variable Length
1306@cindex variable-length arrays
1307@cindex arrays of variable length
4b404517 1308@cindex VLAs
c1f7febf 1309
4b404517
JM
1310Variable-length automatic arrays are allowed in ISO C99, and as an
1311extension GCC accepts them in C89 mode and in C++. (However, GCC's
1312implementation of variable-length arrays does not yet conform in detail
1313to the ISO C99 standard.) These arrays are
c1f7febf
RK
1314declared like any other automatic arrays, but with a length that is not
1315a constant expression. The storage is allocated at the point of
1316declaration and deallocated when the brace-level is exited. For
1317example:
1318
1319@example
1320FILE *
1321concat_fopen (char *s1, char *s2, char *mode)
1322@{
1323 char str[strlen (s1) + strlen (s2) + 1];
1324 strcpy (str, s1);
1325 strcat (str, s2);
1326 return fopen (str, mode);
1327@}
1328@end example
1329
1330@cindex scope of a variable length array
1331@cindex variable-length array scope
1332@cindex deallocating variable length arrays
1333Jumping or breaking out of the scope of the array name deallocates the
1334storage. Jumping into the scope is not allowed; you get an error
1335message for it.
1336
1337@cindex @code{alloca} vs variable-length arrays
1338You can use the function @code{alloca} to get an effect much like
1339variable-length arrays. The function @code{alloca} is available in
1340many other C implementations (but not in all). On the other hand,
1341variable-length arrays are more elegant.
1342
1343There are other differences between these two methods. Space allocated
1344with @code{alloca} exists until the containing @emph{function} returns.
1345The space for a variable-length array is deallocated as soon as the array
1346name's scope ends. (If you use both variable-length arrays and
1347@code{alloca} in the same function, deallocation of a variable-length array
1348will also deallocate anything more recently allocated with @code{alloca}.)
1349
1350You can also use variable-length arrays as arguments to functions:
1351
1352@example
1353struct entry
1354tester (int len, char data[len][len])
1355@{
1356 @dots{}
1357@}
1358@end example
1359
1360The length of an array is computed once when the storage is allocated
1361and is remembered for the scope of the array in case you access it with
1362@code{sizeof}.
1363
1364If you want to pass the array first and the length afterward, you can
1365use a forward declaration in the parameter list---another GNU extension.
1366
1367@example
1368struct entry
1369tester (int len; char data[len][len], int len)
1370@{
1371 @dots{}
1372@}
1373@end example
1374
1375@cindex parameter forward declaration
1376The @samp{int len} before the semicolon is a @dfn{parameter forward
1377declaration}, and it serves the purpose of making the name @code{len}
1378known when the declaration of @code{data} is parsed.
1379
1380You can write any number of such parameter forward declarations in the
1381parameter list. They can be separated by commas or semicolons, but the
1382last one must end with a semicolon, which is followed by the ``real''
1383parameter declarations. Each forward declaration must match a ``real''
4b404517
JM
1384declaration in parameter name and data type. ISO C99 does not support
1385parameter forward declarations.
c1f7febf 1386
ccd96f0a
NB
1387@node Variadic Macros
1388@section Macros with a Variable Number of Arguments.
c1f7febf
RK
1389@cindex variable number of arguments
1390@cindex macro with variable arguments
1391@cindex rest argument (in macro)
ccd96f0a 1392@cindex variadic macros
c1f7febf 1393
ccd96f0a
NB
1394In the ISO C standard of 1999, a macro can be declared to accept a
1395variable number of arguments much as a function can. The syntax for
1396defining the macro is similar to that of a function. Here is an
1397example:
c1f7febf
RK
1398
1399@example
ccd96f0a 1400#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
c1f7febf
RK
1401@end example
1402
ccd96f0a
NB
1403Here @samp{@dots{}} is a @dfn{variable argument}. In the invocation of
1404such a macro, it represents the zero or more tokens until the closing
1405parenthesis that ends the invocation, including any commas. This set of
1406tokens replaces the identifier @code{__VA_ARGS__} in the macro body
1407wherever it appears. See the CPP manual for more information.
1408
1409GCC has long supported variadic macros, and used a different syntax that
1410allowed you to give a name to the variable arguments just like any other
1411argument. Here is an example:
c1f7febf
RK
1412
1413@example
ccd96f0a 1414#define debug(format, args...) fprintf (stderr, format, args)
c1f7febf
RK
1415@end example
1416
ccd96f0a
NB
1417This is in all ways equivalent to the ISO C example above, but arguably
1418more readable and descriptive.
c1f7febf 1419
ccd96f0a
NB
1420GNU CPP has two further variadic macro extensions, and permits them to
1421be used with either of the above forms of macro definition.
1422
1423In standard C, you are not allowed to leave the variable argument out
1424entirely; but you are allowed to pass an empty argument. For example,
1425this invocation is invalid in ISO C, because there is no comma after
1426the string:
c1f7febf
RK
1427
1428@example
ccd96f0a 1429debug ("A message")
c1f7febf
RK
1430@end example
1431
ccd96f0a
NB
1432GNU CPP permits you to completely omit the variable arguments in this
1433way. In the above examples, the compiler would complain, though since
1434the expansion of the macro still has the extra comma after the format
1435string.
1436
1437To help solve this problem, CPP behaves specially for variable arguments
1438used with the token paste operator, @samp{##}. If instead you write
c1f7febf
RK
1439
1440@example
ccd96f0a 1441#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
c1f7febf
RK
1442@end example
1443
ccd96f0a
NB
1444and if the variable arguments are omitted or empty, the @samp{##}
1445operator causes the preprocessor to remove the comma before it. If you
1446do provide some variable arguments in your macro invocation, GNU CPP
1447does not complain about the paste operation and instead places the
1448variable arguments after the comma. Just like any other pasted macro
1449argument, these arguments are not macro expanded.
1450
1451@node Escaped Newlines
1452@section Slightly Looser Rules for Escaped Newlines
1453@cindex escaped newlines
1454@cindex newlines (escaped)
1455
f458d1d5
ZW
1456Recently, the preprocessor has relaxed its treatment of escaped
1457newlines. Previously, the newline had to immediately follow a
ccd96f0a
NB
1458backslash. The current implementation allows whitespace in the form of
1459spaces, horizontal and vertical tabs, and form feeds between the
1460backslash and the subsequent newline. The preprocessor issues a
1461warning, but treats it as a valid escaped newline and combines the two
1462lines to form a single logical line. This works within comments and
1463tokens, including multi-line strings, as well as between tokens.
1464Comments are @emph{not} treated as whitespace for the purposes of this
1465relaxation, since they have not yet been replaced with spaces.
1466
1467@node Multi-line Strings
1468@section String Literals with Embedded Newlines
1469@cindex multi-line string literals
1470
1471As an extension, GNU CPP permits string literals to cross multiple lines
1472without escaping the embedded newlines. Each embedded newline is
1473replaced with a single @samp{\n} character in the resulting string
1474literal, regardless of what form the newline took originally.
1475
1476CPP currently allows such strings in directives as well (other than the
1477@samp{#include} family). This is deprecated and will eventually be
1478removed.
c1f7febf
RK
1479
1480@node Subscripting
1481@section Non-Lvalue Arrays May Have Subscripts
1482@cindex subscripting
1483@cindex arrays, non-lvalue
1484
1485@cindex subscripting and function values
207bf485
JM
1486In ISO C99, arrays that are not lvalues still decay to pointers, and
1487may be subscripted, although they may not be modified or used after
1488the next sequence point and the unary @samp{&} operator may not be
1489applied to them. As an extension, GCC allows such arrays to be
1490subscripted in C89 mode, though otherwise they do not decay to
1491pointers outside C99 mode. For example,
4b404517 1492this is valid in GNU C though not valid in C89:
c1f7febf
RK
1493
1494@example
1495@group
1496struct foo @{int a[4];@};
1497
1498struct foo f();
1499
1500bar (int index)
1501@{
1502 return f().a[index];
1503@}
1504@end group
1505@end example
1506
1507@node Pointer Arith
1508@section Arithmetic on @code{void}- and Function-Pointers
1509@cindex void pointers, arithmetic
1510@cindex void, size of pointer to
1511@cindex function pointers, arithmetic
1512@cindex function, size of pointer to
1513
1514In GNU C, addition and subtraction operations are supported on pointers to
1515@code{void} and on pointers to functions. This is done by treating the
1516size of a @code{void} or of a function as 1.
1517
1518A consequence of this is that @code{sizeof} is also allowed on @code{void}
1519and on function types, and returns 1.
1520
84330467
JM
1521@opindex Wpointer-arith
1522The option @option{-Wpointer-arith} requests a warning if these extensions
c1f7febf
RK
1523are used.
1524
1525@node Initializers
1526@section Non-Constant Initializers
1527@cindex initializers, non-constant
1528@cindex non-constant initializers
1529
4b404517 1530As in standard C++ and ISO C99, the elements of an aggregate initializer for an
161d7b59 1531automatic variable are not required to be constant expressions in GNU C@.
c1f7febf
RK
1532Here is an example of an initializer with run-time varying elements:
1533
1534@example
1535foo (float f, float g)
1536@{
1537 float beat_freqs[2] = @{ f-g, f+g @};
1538 @dots{}
1539@}
1540@end example
1541
4b404517
JM
1542@node Compound Literals
1543@section Compound Literals
c1f7febf
RK
1544@cindex constructor expressions
1545@cindex initializations in expressions
1546@cindex structures, constructor expression
1547@cindex expressions, constructor
4b404517
JM
1548@cindex compound literals
1549@c The GNU C name for what C99 calls compound literals was "constructor expressions".
c1f7febf 1550
4b404517 1551ISO C99 supports compound literals. A compound literal looks like
c1f7febf
RK
1552a cast containing an initializer. Its value is an object of the
1553type specified in the cast, containing the elements specified in
db3acfa5
JM
1554the initializer; it is an lvalue. As an extension, GCC supports
1555compound literals in C89 mode and in C++.
c1f7febf
RK
1556
1557Usually, the specified type is a structure. Assume that
1558@code{struct foo} and @code{structure} are declared as shown:
1559
1560@example
1561struct foo @{int a; char b[2];@} structure;
1562@end example
1563
1564@noindent
4b404517 1565Here is an example of constructing a @code{struct foo} with a compound literal:
c1f7febf
RK
1566
1567@example
1568structure = ((struct foo) @{x + y, 'a', 0@});
1569@end example
1570
1571@noindent
1572This is equivalent to writing the following:
1573
1574@example
1575@{
1576 struct foo temp = @{x + y, 'a', 0@};
1577 structure = temp;
1578@}
1579@end example
1580
4b404517 1581You can also construct an array. If all the elements of the compound literal
c1f7febf 1582are (made up of) simple constant expressions, suitable for use in
db3acfa5
JM
1583initializers of objects of static storage duration, then the compound
1584literal can be coerced to a pointer to its first element and used in
1585such an initializer, as shown here:
c1f7febf
RK
1586
1587@example
1588char **foo = (char *[]) @{ "x", "y", "z" @};
1589@end example
1590
4b404517
JM
1591Compound literals for scalar types and union types are is
1592also allowed, but then the compound literal is equivalent
c1f7febf
RK
1593to a cast.
1594
59c83dbf
JJ
1595As a GNU extension, GCC allows initialization of objects with static storage
1596duration by compound literals (which is not possible in ISO C99, because
1597the initializer is not a constant).
1598It is handled as if the object was initialized only with the bracket
1599enclosed list if compound literal's and object types match.
1600The initializer list of the compound literal must be constant.
1601If the object being initialized has array type of unknown size, the size is
ad47f1e5 1602determined by compound literal size.
59c83dbf
JJ
1603
1604@example
1605static struct foo x = (struct foo) @{1, 'a', 'b'@};
1606static int y[] = (int []) @{1, 2, 3@};
1607static int z[] = (int [3]) @{1@};
1608@end example
1609
1610@noindent
1611The above lines are equivalent to the following:
1612@example
1613static struct foo x = @{1, 'a', 'b'@};
1614static int y[] = @{1, 2, 3@};
ad47f1e5 1615static int z[] = @{1, 0, 0@};
59c83dbf
JJ
1616@end example
1617
4b404517
JM
1618@node Designated Inits
1619@section Designated Initializers
c1f7febf
RK
1620@cindex initializers with labeled elements
1621@cindex labeled elements in initializers
1622@cindex case labels in initializers
4b404517 1623@cindex designated initializers
c1f7febf 1624
26d4fec7 1625Standard C89 requires the elements of an initializer to appear in a fixed
c1f7febf
RK
1626order, the same as the order of the elements in the array or structure
1627being initialized.
1628
26d4fec7
JM
1629In ISO C99 you can give the elements in any order, specifying the array
1630indices or structure field names they apply to, and GNU C allows this as
1631an extension in C89 mode as well. This extension is not
c1f7febf
RK
1632implemented in GNU C++.
1633
26d4fec7 1634To specify an array index, write
c1f7febf
RK
1635@samp{[@var{index}] =} before the element value. For example,
1636
1637@example
26d4fec7 1638int a[6] = @{ [4] = 29, [2] = 15 @};
c1f7febf
RK
1639@end example
1640
1641@noindent
1642is equivalent to
1643
1644@example
1645int a[6] = @{ 0, 0, 15, 0, 29, 0 @};
1646@end example
1647
1648@noindent
1649The index values must be constant expressions, even if the array being
1650initialized is automatic.
1651
26d4fec7
JM
1652An alternative syntax for this which has been obsolete since GCC 2.5 but
1653GCC still accepts is to write @samp{[@var{index}]} before the element
1654value, with no @samp{=}.
1655
c1f7febf 1656To initialize a range of elements to the same value, write
26d4fec7
JM
1657@samp{[@var{first} ... @var{last}] = @var{value}}. This is a GNU
1658extension. For example,
c1f7febf
RK
1659
1660@example
1661int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @};
1662@end example
1663
8b6a5902
JJ
1664@noindent
1665If the value in it has side-effects, the side-effects will happen only once,
1666not for each initialized field by the range initializer.
1667
c1f7febf
RK
1668@noindent
1669Note that the length of the array is the highest value specified
1670plus one.
1671
1672In a structure initializer, specify the name of a field to initialize
26d4fec7 1673with @samp{.@var{fieldname} =} before the element value. For example,
c1f7febf
RK
1674given the following structure,
1675
1676@example
1677struct point @{ int x, y; @};
1678@end example
1679
1680@noindent
1681the following initialization
1682
1683@example
26d4fec7 1684struct point p = @{ .y = yvalue, .x = xvalue @};
c1f7febf
RK
1685@end example
1686
1687@noindent
1688is equivalent to
1689
1690@example
1691struct point p = @{ xvalue, yvalue @};
1692@end example
1693
26d4fec7
JM
1694Another syntax which has the same meaning, obsolete since GCC 2.5, is
1695@samp{@var{fieldname}:}, as shown here:
c1f7febf
RK
1696
1697@example
26d4fec7 1698struct point p = @{ y: yvalue, x: xvalue @};
c1f7febf
RK
1699@end example
1700
4b404517
JM
1701@cindex designators
1702The @samp{[@var{index}]} or @samp{.@var{fieldname}} is known as a
1703@dfn{designator}. You can also use a designator (or the obsolete colon
1704syntax) when initializing a union, to specify which element of the union
1705should be used. For example,
c1f7febf
RK
1706
1707@example
1708union foo @{ int i; double d; @};
1709
26d4fec7 1710union foo f = @{ .d = 4 @};
c1f7febf
RK
1711@end example
1712
1713@noindent
1714will convert 4 to a @code{double} to store it in the union using
1715the second element. By contrast, casting 4 to type @code{union foo}
1716would store it into the union as the integer @code{i}, since it is
1717an integer. (@xref{Cast to Union}.)
1718
1719You can combine this technique of naming elements with ordinary C
1720initialization of successive elements. Each initializer element that
4b404517 1721does not have a designator applies to the next consecutive element of the
c1f7febf
RK
1722array or structure. For example,
1723
1724@example
1725int a[6] = @{ [1] = v1, v2, [4] = v4 @};
1726@end example
1727
1728@noindent
1729is equivalent to
1730
1731@example
1732int a[6] = @{ 0, v1, v2, 0, v4, 0 @};
1733@end example
1734
1735Labeling the elements of an array initializer is especially useful
1736when the indices are characters or belong to an @code{enum} type.
1737For example:
1738
1739@example
1740int whitespace[256]
1741 = @{ [' '] = 1, ['\t'] = 1, ['\h'] = 1,
1742 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 @};
1743@end example
1744
4b404517 1745@cindex designator lists
26d4fec7 1746You can also write a series of @samp{.@var{fieldname}} and
4b404517 1747@samp{[@var{index}]} designators before an @samp{=} to specify a
26d4fec7
JM
1748nested subobject to initialize; the list is taken relative to the
1749subobject corresponding to the closest surrounding brace pair. For
1750example, with the @samp{struct point} declaration above:
1751
1752@example
1753struct point ptarray[10] = @{ [2].y = yv2, [2].x = xv2, [0].x = xv0 @};
1754@end example
1755
8b6a5902
JJ
1756@noindent
1757If the same field is initialized multiple times, it will have value from
1758the last initialization. If any such overridden initialization has
1759side-effect, it is unspecified whether the side-effect happens or not.
1760Currently, gcc will discard them and issue a warning.
1761
c1f7febf
RK
1762@node Case Ranges
1763@section Case Ranges
1764@cindex case ranges
1765@cindex ranges in case statements
1766
1767You can specify a range of consecutive values in a single @code{case} label,
1768like this:
1769
1770@example
1771case @var{low} ... @var{high}:
1772@end example
1773
1774@noindent
1775This has the same effect as the proper number of individual @code{case}
1776labels, one for each integer value from @var{low} to @var{high}, inclusive.
1777
1778This feature is especially useful for ranges of ASCII character codes:
1779
1780@example
1781case 'A' ... 'Z':
1782@end example
1783
1784@strong{Be careful:} Write spaces around the @code{...}, for otherwise
1785it may be parsed wrong when you use it with integer values. For example,
1786write this:
1787
1788@example
1789case 1 ... 5:
1790@end example
1791
1792@noindent
1793rather than this:
1794
1795@example
1796case 1...5:
1797@end example
1798
1799@node Cast to Union
1800@section Cast to a Union Type
1801@cindex cast to a union
1802@cindex union, casting to a
1803
1804A cast to union type is similar to other casts, except that the type
1805specified is a union type. You can specify the type either with
1806@code{union @var{tag}} or with a typedef name. A cast to union is actually
1807a constructor though, not a cast, and hence does not yield an lvalue like
4b404517 1808normal casts. (@xref{Compound Literals}.)
c1f7febf
RK
1809
1810The types that may be cast to the union type are those of the members
1811of the union. Thus, given the following union and variables:
1812
1813@example
1814union foo @{ int i; double d; @};
1815int x;
1816double y;
1817@end example
1818
1819@noindent
aee96fe9 1820both @code{x} and @code{y} can be cast to type @code{union foo}.
c1f7febf
RK
1821
1822Using the cast as the right-hand side of an assignment to a variable of
1823union type is equivalent to storing in a member of the union:
1824
1825@example
1826union foo u;
1827@dots{}
1828u = (union foo) x @equiv{} u.i = x
1829u = (union foo) y @equiv{} u.d = y
1830@end example
1831
1832You can also use the union cast as a function argument:
1833
1834@example
1835void hack (union foo);
1836@dots{}
1837hack ((union foo) x);
1838@end example
1839
4b404517
JM
1840@node Mixed Declarations
1841@section Mixed Declarations and Code
1842@cindex mixed declarations and code
1843@cindex declarations, mixed with code
1844@cindex code, mixed with declarations
1845
1846ISO C99 and ISO C++ allow declarations and code to be freely mixed
1847within compound statements. As an extension, GCC also allows this in
1848C89 mode. For example, you could do:
1849
1850@example
1851int i;
1852@dots{}
1853i++;
1854int j = i + 2;
1855@end example
1856
1857Each identifier is visible from where it is declared until the end of
1858the enclosing block.
1859
c1f7febf
RK
1860@node Function Attributes
1861@section Declaring Attributes of Functions
1862@cindex function attributes
1863@cindex declaring attributes of functions
1864@cindex functions that never return
1865@cindex functions that have no side effects
1866@cindex functions in arbitrary sections
2a59078d 1867@cindex functions that behave like malloc
c1f7febf
RK
1868@cindex @code{volatile} applied to function
1869@cindex @code{const} applied to function
26f6672d 1870@cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments
c1f7febf
RK
1871@cindex functions that are passed arguments in registers on the 386
1872@cindex functions that pop the argument stack on the 386
1873@cindex functions that do not pop the argument stack on the 386
1874
1875In GNU C, you declare certain things about functions called in your program
1876which help the compiler optimize function calls and check your code more
1877carefully.
1878
1879The keyword @code{__attribute__} allows you to specify special
1880attributes when making a declaration. This keyword is followed by an
9162542e 1881attribute specification inside double parentheses. The following
eacecf96 1882attributes are currently defined for functions on all targets:
6aa77e6c
AH
1883@code{noreturn}, @code{noinline}, @code{always_inline},
1884@code{pure}, @code{const},
9162542e
AO
1885@code{format}, @code{format_arg}, @code{no_instrument_function},
1886@code{section}, @code{constructor}, @code{destructor}, @code{used},
e23bd218
IR
1887@code{unused}, @code{deprecated}, @code{weak}, @code{malloc}, and
1888@code{alias}. Several other attributes are defined for functions on
1889particular target systems. Other attributes, including @code{section}
1890are supported for variables declarations (@pxref{Variable Attributes})
1891and for types (@pxref{Type Attributes}).
c1f7febf
RK
1892
1893You may also specify attributes with @samp{__} preceding and following
1894each keyword. This allows you to use them in header files without
1895being concerned about a possible macro of the same name. For example,
1896you may use @code{__noreturn__} instead of @code{noreturn}.
1897
2c5e91d2
JM
1898@xref{Attribute Syntax}, for details of the exact syntax for using
1899attributes.
1900
c1f7febf
RK
1901@table @code
1902@cindex @code{noreturn} function attribute
1903@item noreturn
1904A few standard library functions, such as @code{abort} and @code{exit},
f0523f02 1905cannot return. GCC knows this automatically. Some programs define
c1f7febf
RK
1906their own functions that never return. You can declare them
1907@code{noreturn} to tell the compiler this fact. For example,
1908
1909@smallexample
aee96fe9 1910@group
c1f7febf
RK
1911void fatal () __attribute__ ((noreturn));
1912
1913void
1914fatal (@dots{})
1915@{
1916 @dots{} /* @r{Print error message.} */ @dots{}
1917 exit (1);
1918@}
aee96fe9 1919@end group
c1f7febf
RK
1920@end smallexample
1921
1922The @code{noreturn} keyword tells the compiler to assume that
1923@code{fatal} cannot return. It can then optimize without regard to what
1924would happen if @code{fatal} ever did return. This makes slightly
1925better code. More importantly, it helps avoid spurious warnings of
1926uninitialized variables.
1927
1928Do not assume that registers saved by the calling function are
1929restored before calling the @code{noreturn} function.
1930
1931It does not make sense for a @code{noreturn} function to have a return
1932type other than @code{void}.
1933
f0523f02 1934The attribute @code{noreturn} is not implemented in GCC versions
c1f7febf
RK
1935earlier than 2.5. An alternative way to declare that a function does
1936not return, which works in the current version and in some older
1937versions, is as follows:
1938
1939@smallexample
1940typedef void voidfn ();
1941
1942volatile voidfn fatal;
1943@end smallexample
1944
9162542e
AO
1945@cindex @code{noinline} function attribute
1946@item noinline
1947This function attribute prevents a function from being considered for
1948inlining.
1949
6aa77e6c
AH
1950@cindex @code{always_inline} function attribute
1951@item always_inline
1952Generally, functions are not inlined unless optimization is specified.
1953For functions declared inline, this attribute inlines the function even
1954if no optimization level was specified.
1955
2a8f6b90
JH
1956@cindex @code{pure} function attribute
1957@item pure
1958Many functions have no effects except the return value and their
d4047e24 1959return value depends only on the parameters and/or global variables.
2a8f6b90 1960Such a function can be subject
c1f7febf
RK
1961to common subexpression elimination and loop optimization just as an
1962arithmetic operator would be. These functions should be declared
2a8f6b90 1963with the attribute @code{pure}. For example,
c1f7febf
RK
1964
1965@smallexample
2a8f6b90 1966int square (int) __attribute__ ((pure));
c1f7febf
RK
1967@end smallexample
1968
1969@noindent
1970says that the hypothetical function @code{square} is safe to call
1971fewer times than the program says.
1972
2a8f6b90
JH
1973Some of common examples of pure functions are @code{strlen} or @code{memcmp}.
1974Interesting non-pure functions are functions with infinite loops or those
1975depending on volatile memory or other system resource, that may change between
2a59078d 1976two consecutive calls (such as @code{feof} in a multithreading environment).
2a8f6b90 1977
f0523f02 1978The attribute @code{pure} is not implemented in GCC versions earlier
2a8f6b90
JH
1979than 2.96.
1980@cindex @code{const} function attribute
1981@item const
1982Many functions do not examine any values except their arguments, and
1983have no effects except the return value. Basically this is just slightly
84330467 1984more strict class than the @code{pure} attribute above, since function is not
2a59078d 1985allowed to read global memory.
2a8f6b90
JH
1986
1987@cindex pointer arguments
1988Note that a function that has pointer arguments and examines the data
1989pointed to must @emph{not} be declared @code{const}. Likewise, a
1990function that calls a non-@code{const} function usually must not be
1991@code{const}. It does not make sense for a @code{const} function to
1992return @code{void}.
1993
f0523f02 1994The attribute @code{const} is not implemented in GCC versions earlier
c1f7febf
RK
1995than 2.5. An alternative way to declare that a function has no side
1996effects, which works in the current version and in some older versions,
1997is as follows:
1998
1999@smallexample
2000typedef int intfn ();
2001
2002extern const intfn square;
2003@end smallexample
2004
2005This approach does not work in GNU C++ from 2.6.0 on, since the language
2006specifies that the @samp{const} must be attached to the return value.
2007
c1f7febf
RK
2008
2009@item format (@var{archetype}, @var{string-index}, @var{first-to-check})
2010@cindex @code{format} function attribute
84330467 2011@opindex Wformat
bb72a084 2012The @code{format} attribute specifies that a function takes @code{printf},
26f6672d
JM
2013@code{scanf}, @code{strftime} or @code{strfmon} style arguments which
2014should be type-checked against a format string. For example, the
2015declaration:
c1f7febf
RK
2016
2017@smallexample
2018extern int
2019my_printf (void *my_object, const char *my_format, ...)
2020 __attribute__ ((format (printf, 2, 3)));
2021@end smallexample
2022
2023@noindent
2024causes the compiler to check the arguments in calls to @code{my_printf}
2025for consistency with the @code{printf} style format string argument
2026@code{my_format}.
2027
2028The parameter @var{archetype} determines how the format string is
26f6672d
JM
2029interpreted, and should be @code{printf}, @code{scanf}, @code{strftime}
2030or @code{strfmon}. (You can also use @code{__printf__},
2031@code{__scanf__}, @code{__strftime__} or @code{__strfmon__}.) The
c1f7febf
RK
2032parameter @var{string-index} specifies which argument is the format
2033string argument (starting from 1), while @var{first-to-check} is the
2034number of the first argument to check against the format string. For
2035functions where the arguments are not available to be checked (such as
2036@code{vprintf}), specify the third parameter as zero. In this case the
b722c82c
JM
2037compiler only checks the format string for consistency. For
2038@code{strftime} formats, the third parameter is required to be zero.
c1f7febf
RK
2039
2040In the example above, the format string (@code{my_format}) is the second
2041argument of the function @code{my_print}, and the arguments to check
2042start with the third argument, so the correct parameters for the format
2043attribute are 2 and 3.
2044
84330467 2045@opindex ffreestanding
c1f7febf 2046The @code{format} attribute allows you to identify your own functions
f0523f02 2047which take format strings as arguments, so that GCC can check the
b722c82c 2048calls to these functions for errors. The compiler always (unless
84330467 2049@option{-ffreestanding} is used) checks formats
b722c82c 2050for the standard library functions @code{printf}, @code{fprintf},
bb72a084 2051@code{sprintf}, @code{scanf}, @code{fscanf}, @code{sscanf}, @code{strftime},
c1f7febf 2052@code{vprintf}, @code{vfprintf} and @code{vsprintf} whenever such
84330467 2053warnings are requested (using @option{-Wformat}), so there is no need to
b722c82c
JM
2054modify the header file @file{stdio.h}. In C99 mode, the functions
2055@code{snprintf}, @code{vsnprintf}, @code{vscanf}, @code{vfscanf} and
26f6672d 2056@code{vsscanf} are also checked. Except in strictly conforming C
b4c984fb
KG
2057standard modes, the X/Open function @code{strfmon} is also checked as
2058are @code{printf_unlocked} and @code{fprintf_unlocked}.
b722c82c 2059@xref{C Dialect Options,,Options Controlling C Dialect}.
c1f7febf
RK
2060
2061@item format_arg (@var{string-index})
2062@cindex @code{format_arg} function attribute
84330467 2063@opindex Wformat-nonliteral
26f6672d
JM
2064The @code{format_arg} attribute specifies that a function takes a format
2065string for a @code{printf}, @code{scanf}, @code{strftime} or
2066@code{strfmon} style function and modifies it (for example, to translate
2067it into another language), so the result can be passed to a
2068@code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style
2069function (with the remaining arguments to the format function the same
2070as they would have been for the unmodified string). For example, the
2071declaration:
c1f7febf
RK
2072
2073@smallexample
2074extern char *
2075my_dgettext (char *my_domain, const char *my_format)
2076 __attribute__ ((format_arg (2)));
2077@end smallexample
2078
2079@noindent
26f6672d
JM
2080causes the compiler to check the arguments in calls to a @code{printf},
2081@code{scanf}, @code{strftime} or @code{strfmon} type function, whose
2082format string argument is a call to the @code{my_dgettext} function, for
2083consistency with the format string argument @code{my_format}. If the
2084@code{format_arg} attribute had not been specified, all the compiler
2085could tell in such calls to format functions would be that the format
2086string argument is not constant; this would generate a warning when
84330467 2087@option{-Wformat-nonliteral} is used, but the calls could not be checked
26f6672d 2088without the attribute.
c1f7febf
RK
2089
2090The parameter @var{string-index} specifies which argument is the format
2091string argument (starting from 1).
2092
2093The @code{format-arg} attribute allows you to identify your own
f0523f02 2094functions which modify format strings, so that GCC can check the
26f6672d
JM
2095calls to @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon}
2096type function whose operands are a call to one of your own function.
2097The compiler always treats @code{gettext}, @code{dgettext}, and
2098@code{dcgettext} in this manner except when strict ISO C support is
84330467
JM
2099requested by @option{-ansi} or an appropriate @option{-std} option, or
2100@option{-ffreestanding} is used. @xref{C Dialect Options,,Options
26f6672d 2101Controlling C Dialect}.
c1f7febf 2102
07417085
KR
2103@item no_instrument_function
2104@cindex @code{no_instrument_function} function attribute
84330467
JM
2105@opindex finstrument-functions
2106If @option{-finstrument-functions} is given, profiling function calls will
07417085
KR
2107be generated at entry and exit of most user-compiled functions.
2108Functions with this attribute will not be so instrumented.
2109
84330467 2110@item section ("@var{section-name}")
c1f7febf
RK
2111@cindex @code{section} function attribute
2112Normally, the compiler places the code it generates in the @code{text} section.
2113Sometimes, however, you need additional sections, or you need certain
2114particular functions to appear in special sections. The @code{section}
2115attribute specifies that a function lives in a particular section.
2116For example, the declaration:
2117
2118@smallexample
2119extern void foobar (void) __attribute__ ((section ("bar")));
2120@end smallexample
2121
2122@noindent
2123puts the function @code{foobar} in the @code{bar} section.
2124
2125Some file formats do not support arbitrary sections so the @code{section}
2126attribute is not available on all platforms.
2127If you need to map the entire contents of a module to a particular
2128section, consider using the facilities of the linker instead.
2129
2130@item constructor
2131@itemx destructor
2132@cindex @code{constructor} function attribute
2133@cindex @code{destructor} function attribute
2134The @code{constructor} attribute causes the function to be called
2135automatically before execution enters @code{main ()}. Similarly, the
2136@code{destructor} attribute causes the function to be called
2137automatically after @code{main ()} has completed or @code{exit ()} has
2138been called. Functions with these attributes are useful for
2139initializing data that will be used implicitly during the execution of
2140the program.
2141
161d7b59 2142These attributes are not currently implemented for Objective-C@.
c1f7febf 2143
9162542e 2144@cindex @code{unused} attribute.
c1f7febf
RK
2145@item unused
2146This attribute, attached to a function, means that the function is meant
f0523f02 2147to be possibly unused. GCC will not produce a warning for this
c1f7febf
RK
2148function. GNU C++ does not currently support this attribute as
2149definitions without parameters are valid in C++.
2150
9162542e
AO
2151@cindex @code{used} attribute.
2152@item used
2153This attribute, attached to a function, means that code must be emitted
2154for the function even if it appears that the function is not referenced.
2155This is useful, for example, when the function is referenced only in
2156inline assembly.
2157
e23bd218
IR
2158@cindex @code{deprecated} attribute.
2159@item deprecated
2160The @code{deprecated} attribute results in a warning if the function
2161is used anywhere in the source file. This is useful when identifying
2162functions that are expected to be removed in a future version of a
2163program. The warning also includes the location of the declaration
2164of the deprecated function, to enable users to easily find further
2165information about why the function is deprecated, or what they should
2166do instead. Note that the warnings only occurs for uses:
2167
2168@smallexample
2169int old_fn () __attribute__ ((deprecated));
2170int old_fn ();
2171int (*fn_ptr)() = old_fn;
2172@end smallexample
2173
2174results in a warning on line 3 but not line 2.
2175
2176The @code{deprecated} attribute can also be used for variables and
2177types (@pxref{Variable Attributes}, @pxref{Type Attributes}.)
2178
c1f7febf
RK
2179@item weak
2180@cindex @code{weak} attribute
2181The @code{weak} attribute causes the declaration to be emitted as a weak
2182symbol rather than a global. This is primarily useful in defining
2183library functions which can be overridden in user code, though it can
2184also be used with non-function declarations. Weak symbols are supported
2185for ELF targets, and also for a.out targets when using the GNU assembler
2186and linker.
2187
140592a0
AG
2188@item malloc
2189@cindex @code{malloc} attribute
2190The @code{malloc} attribute is used to tell the compiler that a function
2191may be treated as if it were the malloc function. The compiler assumes
2192that calls to malloc result in a pointers that cannot alias anything.
2193This will often improve optimization.
2194
84330467 2195@item alias ("@var{target}")
c1f7febf
RK
2196@cindex @code{alias} attribute
2197The @code{alias} attribute causes the declaration to be emitted as an
2198alias for another symbol, which must be specified. For instance,
2199
2200@smallexample
47bd70b5 2201void __f () @{ /* @r{Do something.} */; @}
c1f7febf
RK
2202void f () __attribute__ ((weak, alias ("__f")));
2203@end smallexample
2204
2205declares @samp{f} to be a weak alias for @samp{__f}. In C++, the
2206mangled name for the target must be used.
2207
af3e86c2
RK
2208Not all target machines support this attribute.
2209
47bd70b5
JJ
2210@item visibility ("@var{visibility_type}")
2211@cindex @code{visibility} attribute
2212The @code{visibility} attribute on ELF targets causes the declaration
2213to be emitted with hidden, protected or internal visibility.
2214
2215@smallexample
2216void __attribute__ ((visibility ("protected")))
2217f () @{ /* @r{Do something.} */; @}
2218int i __attribute__ ((visibility ("hidden")));
2219@end smallexample
2220
9e8aab55
RH
2221See the ELF gABI for complete details, but the short story is
2222
2223@table @dfn
2224@item hidden
2225Hidden visibility indicates that the symbol will not be placed into
2226the dynamic symbol table, so no other @dfn{module} (executable or
2227shared library) can reference it directly.
2228
2229@item protected
2230Protected visibility indicates that the symbol will be placed in the
2231dynamic symbol table, but that references within the defining module
2232will bind to the local symbol. That is, the symbol cannot be overridden
2233by another module.
2234
2235@item internal
2236Internal visibility is like hidden visibility, but with additional
2237processor specific semantics. Unless otherwise specified by the psABI,
2238gcc defines internal visibility to mean that the function is @emph{never}
2239called from another module. Note that hidden symbols, while then cannot
2240be referenced directly by other modules, can be referenced indirectly via
2241function pointers. By indicating that a symbol cannot be called from
2242outside the module, gcc may for instance omit the load of a PIC register
2243since it is known that the calling function loaded the correct value.
2244@end table
2245
47bd70b5
JJ
2246Not all ELF targets support this attribute.
2247
c1f7febf
RK
2248@item regparm (@var{number})
2249@cindex functions that are passed arguments in registers on the 386
2250On the Intel 386, the @code{regparm} attribute causes the compiler to
84330467
JM
2251pass up to @var{number} integer arguments in registers EAX,
2252EDX, and ECX instead of on the stack. Functions that take a
c1f7febf
RK
2253variable number of arguments will continue to be passed all of their
2254arguments on the stack.
2255
2256@item stdcall
2257@cindex functions that pop the argument stack on the 386
2258On the Intel 386, the @code{stdcall} attribute causes the compiler to
2259assume that the called function will pop off the stack space used to
2260pass arguments, unless it takes a variable number of arguments.
2261
2262The PowerPC compiler for Windows NT currently ignores the @code{stdcall}
2263attribute.
2264
2265@item cdecl
2266@cindex functions that do pop the argument stack on the 386
84330467 2267@opindex mrtd
c1f7febf
RK
2268On the Intel 386, the @code{cdecl} attribute causes the compiler to
2269assume that the calling function will pop off the stack space used to
2270pass arguments. This is
84330467 2271useful to override the effects of the @option{-mrtd} switch.
c1f7febf
RK
2272
2273The PowerPC compiler for Windows NT currently ignores the @code{cdecl}
2274attribute.
2275
2276@item longcall
2277@cindex functions called via pointer on the RS/6000 and PowerPC
2278On the RS/6000 and PowerPC, the @code{longcall} attribute causes the
2279compiler to always call the function via a pointer, so that functions
2280which reside further than 64 megabytes (67,108,864 bytes) from the
2281current location can be called.
2282
c27ba912
DM
2283@item long_call/short_call
2284@cindex indirect calls on ARM
2285This attribute allows to specify how to call a particular function on
161d7b59 2286ARM@. Both attributes override the @option{-mlong-calls} (@pxref{ARM Options})
c27ba912
DM
2287command line switch and @code{#pragma long_calls} settings. The
2288@code{long_call} attribute causes the compiler to always call the
2289function by first loading its address into a register and then using the
2290contents of that register. The @code{short_call} attribute always places
2291the offset to the function from the call site into the @samp{BL}
2292instruction directly.
2293
c1f7febf
RK
2294@item dllimport
2295@cindex functions which are imported from a dll on PowerPC Windows NT
2296On the PowerPC running Windows NT, the @code{dllimport} attribute causes
2297the compiler to call the function via a global pointer to the function
2298pointer that is set up by the Windows NT dll library. The pointer name
2299is formed by combining @code{__imp_} and the function name.
2300
2301@item dllexport
2302@cindex functions which are exported from a dll on PowerPC Windows NT
2303On the PowerPC running Windows NT, the @code{dllexport} attribute causes
2304the compiler to provide a global pointer to the function pointer, so
2305that it can be called with the @code{dllimport} attribute. The pointer
2306name is formed by combining @code{__imp_} and the function name.
2307
2308@item exception (@var{except-func} [, @var{except-arg}])
2309@cindex functions which specify exception handling on PowerPC Windows NT
2310On the PowerPC running Windows NT, the @code{exception} attribute causes
2311the compiler to modify the structured exception table entry it emits for
2312the declared function. The string or identifier @var{except-func} is
2313placed in the third entry of the structured exception table. It
2314represents a function, which is called by the exception handling
2315mechanism if an exception occurs. If it was specified, the string or
2316identifier @var{except-arg} is placed in the fourth entry of the
2317structured exception table.
2318
2319@item function_vector
2320@cindex calling functions through the function vector on the H8/300 processors
88ab0d1c 2321Use this attribute on the H8/300 and H8/300H to indicate that the specified
c1f7febf
RK
2322function should be called through the function vector. Calling a
2323function through the function vector will reduce code size, however;
2324the function vector has a limited size (maximum 128 entries on the H8/300
2325and 64 entries on the H8/300H) and shares space with the interrupt vector.
2326
2327You must use GAS and GLD from GNU binutils version 2.7 or later for
88ab0d1c 2328this attribute to work correctly.
c1f7febf 2329
6d3d9133
NC
2330@item interrupt
2331@cindex interrupt handler functions
88ab0d1c 2332Use this attribute on the ARM, AVR, M32R/D and Xstormy16 ports to indicate
9f339dde
GK
2333that the specified function is an interrupt handler. The compiler will
2334generate function entry and exit sequences suitable for use in an
2335interrupt handler when this attribute is present.
6d3d9133 2336
b93e3893
AO
2337Note, interrupt handlers for the H8/300, H8/300H and SH processors can
2338be specified via the @code{interrupt_handler} attribute.
6d3d9133
NC
2339
2340Note, on the AVR interrupts will be enabled inside the function.
2341
2342Note, for the ARM you can specify the kind of interrupt to be handled by
2343adding an optional parameter to the interrupt attribute like this:
2344
2345@smallexample
2346void f () __attribute__ ((interrupt ("IRQ")));
2347@end smallexample
2348
161d7b59 2349Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT and UNDEF@.
6d3d9133 2350
b93e3893
AO
2351@item interrupt_handler
2352@cindex interrupt handler functions on the H8/300 and SH processors
88ab0d1c 2353Use this attribute on the H8/300, H8/300H and SH to indicate that the
b93e3893
AO
2354specified function is an interrupt handler. The compiler will generate
2355function entry and exit sequences suitable for use in an interrupt
2356handler when this attribute is present.
2357
2358@item sp_switch
88ab0d1c 2359Use this attribute on the SH to indicate an @code{interrupt_handler}
b93e3893
AO
2360function should switch to an alternate stack. It expects a string
2361argument that names a global variable holding the address of the
2362alternate stack.
2363
2364@smallexample
2365void *alt_stack;
aee96fe9
JM
2366void f () __attribute__ ((interrupt_handler,
2367 sp_switch ("alt_stack")));
b93e3893
AO
2368@end smallexample
2369
2370@item trap_exit
88ab0d1c 2371Use this attribute on the SH for an @code{interrupt_handle} to return using
b93e3893
AO
2372@code{trapa} instead of @code{rte}. This attribute expects an integer
2373argument specifying the trap number to be used.
2374
c1f7febf
RK
2375@item eightbit_data
2376@cindex eight bit data on the H8/300 and H8/300H
88ab0d1c 2377Use this attribute on the H8/300 and H8/300H to indicate that the specified
c1f7febf
RK
2378variable should be placed into the eight bit data section.
2379The compiler will generate more efficient code for certain operations
2380on data in the eight bit data area. Note the eight bit data area is limited to
2381256 bytes of data.
2382
2383You must use GAS and GLD from GNU binutils version 2.7 or later for
88ab0d1c 2384this attribute to work correctly.
c1f7febf
RK
2385
2386@item tiny_data
2387@cindex tiny data section on the H8/300H
88ab0d1c 2388Use this attribute on the H8/300H to indicate that the specified
c1f7febf
RK
2389variable should be placed into the tiny data section.
2390The compiler will generate more efficient code for loads and stores
2391on data in the tiny data section. Note the tiny data area is limited to
2392slightly under 32kbytes of data.
845da534 2393
052a4b28
DC
2394@item signal
2395@cindex signal handler functions on the AVR processors
88ab0d1c 2396Use this attribute on the AVR to indicate that the specified
052a4b28
DC
2397function is an signal handler. The compiler will generate function
2398entry and exit sequences suitable for use in an signal handler when this
767094dd 2399attribute is present. Interrupts will be disabled inside function.
052a4b28
DC
2400
2401@item naked
6d3d9133 2402@cindex function without a prologue/epilogue code
88ab0d1c 2403Use this attribute on the ARM or AVR ports to indicate that the specified
6d3d9133
NC
2404function do not need prologue/epilogue sequences generated by the
2405compiler. It is up to the programmer to provide these sequences.
052a4b28 2406
845da534
DE
2407@item model (@var{model-name})
2408@cindex function addressability on the M32R/D
2409Use this attribute on the M32R/D to set the addressability of an object,
2410and the code generated for a function.
2411The identifier @var{model-name} is one of @code{small}, @code{medium},
2412or @code{large}, representing each of the code models.
2413
2414Small model objects live in the lower 16MB of memory (so that their
2415addresses can be loaded with the @code{ld24} instruction), and are
2416callable with the @code{bl} instruction.
2417
02f52e19 2418Medium model objects may live anywhere in the 32-bit address space (the
845da534
DE
2419compiler will generate @code{seth/add3} instructions to load their addresses),
2420and are callable with the @code{bl} instruction.
2421
02f52e19 2422Large model objects may live anywhere in the 32-bit address space (the
845da534
DE
2423compiler will generate @code{seth/add3} instructions to load their addresses),
2424and may not be reachable with the @code{bl} instruction (the compiler will
2425generate the much slower @code{seth/add3/jl} instruction sequence).
2426
c1f7febf
RK
2427@end table
2428
2429You can specify multiple attributes in a declaration by separating them
2430by commas within the double parentheses or by immediately following an
2431attribute declaration with another attribute declaration.
2432
2433@cindex @code{#pragma}, reason for not using
2434@cindex pragma, reason for not using
9f1bbeaa
JM
2435Some people object to the @code{__attribute__} feature, suggesting that
2436ISO C's @code{#pragma} should be used instead. At the time
2437@code{__attribute__} was designed, there were two reasons for not doing
2438this.
c1f7febf
RK
2439
2440@enumerate
2441@item
2442It is impossible to generate @code{#pragma} commands from a macro.
2443
2444@item
2445There is no telling what the same @code{#pragma} might mean in another
2446compiler.
2447@end enumerate
2448
9f1bbeaa
JM
2449These two reasons applied to almost any application that might have been
2450proposed for @code{#pragma}. It was basically a mistake to use
2451@code{#pragma} for @emph{anything}.
2452
2453The ISO C99 standard includes @code{_Pragma}, which now allows pragmas
2454to be generated from macros. In addition, a @code{#pragma GCC}
2455namespace is now in use for GCC-specific pragmas. However, it has been
2456found convenient to use @code{__attribute__} to achieve a natural
2457attachment of attributes to their corresponding declarations, whereas
2458@code{#pragma GCC} is of use for constructs that do not naturally form
2459part of the grammar. @xref{Other Directives,,Miscellaneous
2460Preprocessing Directives, cpp, The C Preprocessor}.
c1f7febf 2461
2c5e91d2
JM
2462@node Attribute Syntax
2463@section Attribute Syntax
2464@cindex attribute syntax
2465
2466This section describes the syntax with which @code{__attribute__} may be
2467used, and the constructs to which attribute specifiers bind, for the C
161d7b59 2468language. Some details may vary for C++ and Objective-C@. Because of
2c5e91d2
JM
2469infelicities in the grammar for attributes, some forms described here
2470may not be successfully parsed in all cases.
2471
91d231cb
JM
2472There are some problems with the semantics of attributes in C++. For
2473example, there are no manglings for attributes, although they may affect
2474code generation, so problems may arise when attributed types are used in
2475conjunction with templates or overloading. Similarly, @code{typeid}
2476does not distinguish between types with different attributes. Support
2477for attributes in C++ may be restricted in future to attributes on
2478declarations only, but not on nested declarators.
2479
2c5e91d2
JM
2480@xref{Function Attributes}, for details of the semantics of attributes
2481applying to functions. @xref{Variable Attributes}, for details of the
2482semantics of attributes applying to variables. @xref{Type Attributes},
2483for details of the semantics of attributes applying to structure, union
2484and enumerated types.
2485
2486An @dfn{attribute specifier} is of the form
2487@code{__attribute__ ((@var{attribute-list}))}. An @dfn{attribute list}
2488is a possibly empty comma-separated sequence of @dfn{attributes}, where
2489each attribute is one of the following:
2490
2491@itemize @bullet
2492@item
2493Empty. Empty attributes are ignored.
2494
2495@item
2496A word (which may be an identifier such as @code{unused}, or a reserved
2497word such as @code{const}).
2498
2499@item
2500A word, followed by, in parentheses, parameters for the attribute.
2501These parameters take one of the following forms:
2502
2503@itemize @bullet
2504@item
2505An identifier. For example, @code{mode} attributes use this form.
2506
2507@item
2508An identifier followed by a comma and a non-empty comma-separated list
2509of expressions. For example, @code{format} attributes use this form.
2510
2511@item
2512A possibly empty comma-separated list of expressions. For example,
2513@code{format_arg} attributes use this form with the list being a single
2514integer constant expression, and @code{alias} attributes use this form
2515with the list being a single string constant.
2516@end itemize
2517@end itemize
2518
2519An @dfn{attribute specifier list} is a sequence of one or more attribute
2520specifiers, not separated by any other tokens.
2521
2522An attribute specifier list may appear after the colon following a
2523label, other than a @code{case} or @code{default} label. The only
2524attribute it makes sense to use after a label is @code{unused}. This
2525feature is intended for code generated by programs which contains labels
2526that may be unused but which is compiled with @option{-Wall}. It would
2527not normally be appropriate to use in it human-written code, though it
2528could be useful in cases where the code that jumps to the label is
2529contained within an @code{#ifdef} conditional.
2530
2531An attribute specifier list may appear as part of a @code{struct},
2532@code{union} or @code{enum} specifier. It may go either immediately
2533after the @code{struct}, @code{union} or @code{enum} keyword, or after
2534the closing brace. It is ignored if the content of the structure, union
2535or enumerated type is not defined in the specifier in which the
2536attribute specifier list is used---that is, in usages such as
2537@code{struct __attribute__((foo)) bar} with no following opening brace.
2538Where attribute specifiers follow the closing brace, they are considered
2539to relate to the structure, union or enumerated type defined, not to any
2540enclosing declaration the type specifier appears in, and the type
2541defined is not complete until after the attribute specifiers.
2542@c Otherwise, there would be the following problems: a shift/reduce
4fe9b91c 2543@c conflict between attributes binding the struct/union/enum and
2c5e91d2
JM
2544@c binding to the list of specifiers/qualifiers; and "aligned"
2545@c attributes could use sizeof for the structure, but the size could be
2546@c changed later by "packed" attributes.
2547
2548Otherwise, an attribute specifier appears as part of a declaration,
2549counting declarations of unnamed parameters and type names, and relates
2550to that declaration (which may be nested in another declaration, for
91d231cb
JM
2551example in the case of a parameter declaration), or to a particular declarator
2552within a declaration. Where an
ff867905
JM
2553attribute specifier is applied to a parameter declared as a function or
2554an array, it should apply to the function or array rather than the
2555pointer to which the parameter is implicitly converted, but this is not
2556yet correctly implemented.
2c5e91d2
JM
2557
2558Any list of specifiers and qualifiers at the start of a declaration may
2559contain attribute specifiers, whether or not such a list may in that
2560context contain storage class specifiers. (Some attributes, however,
2561are essentially in the nature of storage class specifiers, and only make
2562sense where storage class specifiers may be used; for example,
2563@code{section}.) There is one necessary limitation to this syntax: the
2564first old-style parameter declaration in a function definition cannot
2565begin with an attribute specifier, because such an attribute applies to
2566the function instead by syntax described below (which, however, is not
2567yet implemented in this case). In some other cases, attribute
2568specifiers are permitted by this grammar but not yet supported by the
2569compiler. All attribute specifiers in this place relate to the
c771326b 2570declaration as a whole. In the obsolescent usage where a type of
2c5e91d2
JM
2571@code{int} is implied by the absence of type specifiers, such a list of
2572specifiers and qualifiers may be an attribute specifier list with no
2573other specifiers or qualifiers.
2574
2575An attribute specifier list may appear immediately before a declarator
2576(other than the first) in a comma-separated list of declarators in a
2577declaration of more than one identifier using a single list of
4b01f8d8 2578specifiers and qualifiers. Such attribute specifiers apply
9c34dbbf
ZW
2579only to the identifier before whose declarator they appear. For
2580example, in
2581
2582@smallexample
2583__attribute__((noreturn)) void d0 (void),
2584 __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
2585 d2 (void)
2586@end smallexample
2587
2588@noindent
2589the @code{noreturn} attribute applies to all the functions
4b01f8d8 2590declared; the @code{format} attribute only applies to @code{d1}.
2c5e91d2
JM
2591
2592An attribute specifier list may appear immediately before the comma,
2593@code{=} or semicolon terminating the declaration of an identifier other
2594than a function definition. At present, such attribute specifiers apply
2595to the declared object or function, but in future they may attach to the
2596outermost adjacent declarator. In simple cases there is no difference,
f282ffb3 2597but, for example, in
9c34dbbf
ZW
2598
2599@smallexample
2600void (****f)(void) __attribute__((noreturn));
2601@end smallexample
2602
2603@noindent
2604at present the @code{noreturn} attribute applies to @code{f}, which
2605causes a warning since @code{f} is not a function, but in future it may
2606apply to the function @code{****f}. The precise semantics of what
2607attributes in such cases will apply to are not yet specified. Where an
2608assembler name for an object or function is specified (@pxref{Asm
2609Labels}), at present the attribute must follow the @code{asm}
2610specification; in future, attributes before the @code{asm} specification
2611may apply to the adjacent declarator, and those after it to the declared
2612object or function.
2c5e91d2
JM
2613
2614An attribute specifier list may, in future, be permitted to appear after
2615the declarator in a function definition (before any old-style parameter
2616declarations or the function body).
2617
0e03329a
JM
2618Attribute specifiers may be mixed with type qualifiers appearing inside
2619the @code{[]} of a parameter array declarator, in the C99 construct by
2620which such qualifiers are applied to the pointer to which the array is
2621implicitly converted. Such attribute specifiers apply to the pointer,
2622not to the array, but at present this is not implemented and they are
2623ignored.
2624
2c5e91d2
JM
2625An attribute specifier list may appear at the start of a nested
2626declarator. At present, there are some limitations in this usage: the
91d231cb
JM
2627attributes correctly apply to the declarator, but for most individual
2628attributes the semantics this implies are not implemented.
2629When attribute specifiers follow the @code{*} of a pointer
4b01f8d8 2630declarator, they may be mixed with any type qualifiers present.
91d231cb 2631The following describes the formal semantics of this syntax. It will make the
2c5e91d2
JM
2632most sense if you are familiar with the formal specification of
2633declarators in the ISO C standard.
2634
2635Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration @code{T
2636D1}, where @code{T} contains declaration specifiers that specify a type
2637@var{Type} (such as @code{int}) and @code{D1} is a declarator that
2638contains an identifier @var{ident}. The type specified for @var{ident}
2639for derived declarators whose type does not include an attribute
2640specifier is as in the ISO C standard.
2641
2642If @code{D1} has the form @code{( @var{attribute-specifier-list} D )},
2643and the declaration @code{T D} specifies the type
2644``@var{derived-declarator-type-list} @var{Type}'' for @var{ident}, then
2645@code{T D1} specifies the type ``@var{derived-declarator-type-list}
2646@var{attribute-specifier-list} @var{Type}'' for @var{ident}.
2647
2648If @code{D1} has the form @code{*
2649@var{type-qualifier-and-attribute-specifier-list} D}, and the
2650declaration @code{T D} specifies the type
2651``@var{derived-declarator-type-list} @var{Type}'' for @var{ident}, then
2652@code{T D1} specifies the type ``@var{derived-declarator-type-list}
2653@var{type-qualifier-and-attribute-specifier-list} @var{Type}'' for
2654@var{ident}.
2655
f282ffb3 2656For example,
9c34dbbf
ZW
2657
2658@smallexample
2659void (__attribute__((noreturn)) ****f) (void);
2660@end smallexample
2661
2662@noindent
2663specifies the type ``pointer to pointer to pointer to pointer to
2664non-returning function returning @code{void}''. As another example,
2665
2666@smallexample
2667char *__attribute__((aligned(8))) *f;
2668@end smallexample
2669
2670@noindent
2671specifies the type ``pointer to 8-byte-aligned pointer to @code{char}''.
91d231cb
JM
2672Note again that this does not work with most attributes; for example,
2673the usage of @samp{aligned} and @samp{noreturn} attributes given above
2674is not yet supported.
2675
2676For compatibility with existing code written for compiler versions that
2677did not implement attributes on nested declarators, some laxity is
2678allowed in the placing of attributes. If an attribute that only applies
2679to types is applied to a declaration, it will be treated as applying to
2680the type of that declaration. If an attribute that only applies to
2681declarations is applied to the type of a declaration, it will be treated
2682as applying to that declaration; and, for compatibility with code
2683placing the attributes immediately before the identifier declared, such
2684an attribute applied to a function return type will be treated as
2685applying to the function type, and such an attribute applied to an array
2686element type will be treated as applying to the array type. If an
2687attribute that only applies to function types is applied to a
2688pointer-to-function type, it will be treated as applying to the pointer
2689target type; if such an attribute is applied to a function return type
2690that is not a pointer-to-function type, it will be treated as applying
2691to the function type.
2c5e91d2 2692
c1f7febf
RK
2693@node Function Prototypes
2694@section Prototypes and Old-Style Function Definitions
2695@cindex function prototype declarations
2696@cindex old-style function definitions
2697@cindex promotion of formal parameters
2698
5490d604 2699GNU C extends ISO C to allow a function prototype to override a later
c1f7febf
RK
2700old-style non-prototype definition. Consider the following example:
2701
2702@example
2703/* @r{Use prototypes unless the compiler is old-fashioned.} */
d863830b 2704#ifdef __STDC__
c1f7febf
RK
2705#define P(x) x
2706#else
2707#define P(x) ()
2708#endif
2709
2710/* @r{Prototype function declaration.} */
2711int isroot P((uid_t));
2712
2713/* @r{Old-style function definition.} */
2714int
2715isroot (x) /* ??? lossage here ??? */
2716 uid_t x;
2717@{
2718 return x == 0;
2719@}
2720@end example
2721
5490d604 2722Suppose the type @code{uid_t} happens to be @code{short}. ISO C does
c1f7febf
RK
2723not allow this example, because subword arguments in old-style
2724non-prototype definitions are promoted. Therefore in this example the
2725function definition's argument is really an @code{int}, which does not
2726match the prototype argument type of @code{short}.
2727
5490d604 2728This restriction of ISO C makes it hard to write code that is portable
c1f7febf
RK
2729to traditional C compilers, because the programmer does not know
2730whether the @code{uid_t} type is @code{short}, @code{int}, or
2731@code{long}. Therefore, in cases like these GNU C allows a prototype
2732to override a later old-style definition. More precisely, in GNU C, a
2733function prototype argument type overrides the argument type specified
2734by a later old-style definition if the former type is the same as the
2735latter type before promotion. Thus in GNU C the above example is
2736equivalent to the following:
2737
2738@example
2739int isroot (uid_t);
2740
2741int
2742isroot (uid_t x)
2743@{
2744 return x == 0;
2745@}
2746@end example
2747
9c34dbbf 2748@noindent
c1f7febf
RK
2749GNU C++ does not support old-style function definitions, so this
2750extension is irrelevant.
2751
2752@node C++ Comments
2753@section C++ Style Comments
2754@cindex //
2755@cindex C++ comments
2756@cindex comments, C++ style
2757
2758In GNU C, you may use C++ style comments, which start with @samp{//} and
2759continue until the end of the line. Many other C implementations allow
f458d1d5
ZW
2760such comments, and they are included in the 1999 C standard. However,
2761C++ style comments are not recognized if you specify an @option{-std}
2762option specifying a version of ISO C before C99, or @option{-ansi}
2763(equivalent to @option{-std=c89}).
c1f7febf
RK
2764
2765@node Dollar Signs
2766@section Dollar Signs in Identifier Names
2767@cindex $
2768@cindex dollar signs in identifier names
2769@cindex identifier names, dollar signs in
2770
79188db9
RK
2771In GNU C, you may normally use dollar signs in identifier names.
2772This is because many traditional C implementations allow such identifiers.
2773However, dollar signs in identifiers are not supported on a few target
2774machines, typically because the target assembler does not allow them.
c1f7febf
RK
2775
2776@node Character Escapes
2777@section The Character @key{ESC} in Constants
2778
2779You can use the sequence @samp{\e} in a string or character constant to
2780stand for the ASCII character @key{ESC}.
2781
2782@node Alignment
2783@section Inquiring on Alignment of Types or Variables
2784@cindex alignment
2785@cindex type alignment
2786@cindex variable alignment
2787
2788The keyword @code{__alignof__} allows you to inquire about how an object
2789is aligned, or the minimum alignment usually required by a type. Its
2790syntax is just like @code{sizeof}.
2791
2792For example, if the target machine requires a @code{double} value to be
2793aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
2794This is true on many RISC machines. On more traditional machine
2795designs, @code{__alignof__ (double)} is 4 or even 2.
2796
2797Some machines never actually require alignment; they allow reference to any
2798data type even at an odd addresses. For these machines, @code{__alignof__}
2799reports the @emph{recommended} alignment of a type.
2800
5372b3fb
NB
2801If the operand of @code{__alignof__} is an lvalue rather than a type,
2802its value is the required alignment for its type, taking into account
2803any minimum alignment specified with GCC's @code{__attribute__}
2804extension (@pxref{Variable Attributes}). For example, after this
2805declaration:
c1f7febf
RK
2806
2807@example
2808struct foo @{ int x; char y; @} foo1;
2809@end example
2810
2811@noindent
5372b3fb
NB
2812the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
2813alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
c1f7febf 2814
9d27bffe
SS
2815It is an error to ask for the alignment of an incomplete type.
2816
c1f7febf
RK
2817@node Variable Attributes
2818@section Specifying Attributes of Variables
2819@cindex attribute of variables
2820@cindex variable attributes
2821
2822The keyword @code{__attribute__} allows you to specify special
2823attributes of variables or structure fields. This keyword is followed
e23bd218 2824by an attribute specification inside double parentheses. Ten
c1f7febf
RK
2825attributes are currently defined for variables: @code{aligned},
2826@code{mode}, @code{nocommon}, @code{packed}, @code{section},
e23bd218
IR
2827@code{transparent_union}, @code{unused}, @code{deprecated},
2828@code{vector_size}, and @code{weak}. Some other attributes are defined
2829for variables on particular target systems. Other attributes are
2830available for functions (@pxref{Function Attributes}) and for types
2831(@pxref{Type Attributes}). Other front ends might define more
2832attributes (@pxref{C++ Extensions,,Extensions to the C++ Language}).
c1f7febf
RK
2833
2834You may also specify attributes with @samp{__} preceding and following
2835each keyword. This allows you to use them in header files without
2836being concerned about a possible macro of the same name. For example,
2837you may use @code{__aligned__} instead of @code{aligned}.
2838
2c5e91d2
JM
2839@xref{Attribute Syntax}, for details of the exact syntax for using
2840attributes.
2841
c1f7febf
RK
2842@table @code
2843@cindex @code{aligned} attribute
2844@item aligned (@var{alignment})
2845This attribute specifies a minimum alignment for the variable or
2846structure field, measured in bytes. For example, the declaration:
2847
2848@smallexample
2849int x __attribute__ ((aligned (16))) = 0;
2850@end smallexample
2851
2852@noindent
2853causes the compiler to allocate the global variable @code{x} on a
285416-byte boundary. On a 68040, this could be used in conjunction with
2855an @code{asm} expression to access the @code{move16} instruction which
2856requires 16-byte aligned operands.
2857
2858You can also specify the alignment of structure fields. For example, to
2859create a double-word aligned @code{int} pair, you could write:
2860
2861@smallexample
2862struct foo @{ int x[2] __attribute__ ((aligned (8))); @};
2863@end smallexample
2864
2865@noindent
2866This is an alternative to creating a union with a @code{double} member
2867that forces the union to be double-word aligned.
2868
2869It is not possible to specify the alignment of functions; the alignment
2870of functions is determined by the machine's requirements and cannot be
2871changed. You cannot specify alignment for a typedef name because such a
2872name is just an alias, not a distinct type.
2873
2874As in the preceding examples, you can explicitly specify the alignment
2875(in bytes) that you wish the compiler to use for a given variable or
2876structure field. Alternatively, you can leave out the alignment factor
2877and just ask the compiler to align a variable or field to the maximum
2878useful alignment for the target machine you are compiling for. For
2879example, you could write:
2880
2881@smallexample
2882short array[3] __attribute__ ((aligned));
2883@end smallexample
2884
2885Whenever you leave out the alignment factor in an @code{aligned} attribute
2886specification, the compiler automatically sets the alignment for the declared
2887variable or field to the largest alignment which is ever used for any data
2888type on the target machine you are compiling for. Doing this can often make
2889copy operations more efficient, because the compiler can use whatever
2890instructions copy the biggest chunks of memory when performing copies to
2891or from the variables or fields that you have aligned this way.
2892
2893The @code{aligned} attribute can only increase the alignment; but you
2894can decrease it by specifying @code{packed} as well. See below.
2895
2896Note that the effectiveness of @code{aligned} attributes may be limited
2897by inherent limitations in your linker. On many systems, the linker is
2898only able to arrange for variables to be aligned up to a certain maximum
2899alignment. (For some linkers, the maximum supported alignment may
2900be very very small.) If your linker is only able to align variables
2901up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
2902in an @code{__attribute__} will still only provide you with 8 byte
2903alignment. See your linker documentation for further information.
2904
2905@item mode (@var{mode})
2906@cindex @code{mode} attribute
2907This attribute specifies the data type for the declaration---whichever
2908type corresponds to the mode @var{mode}. This in effect lets you
2909request an integer or floating point type according to its width.
2910
2911You may also specify a mode of @samp{byte} or @samp{__byte__} to
2912indicate the mode corresponding to a one-byte integer, @samp{word} or
2913@samp{__word__} for the mode of a one-word integer, and @samp{pointer}
2914or @samp{__pointer__} for the mode used to represent pointers.
2915
2916@item nocommon
2917@cindex @code{nocommon} attribute
84330467 2918@opindex fno-common
f0523f02 2919This attribute specifies requests GCC not to place a variable
c1f7febf 2920``common'' but instead to allocate space for it directly. If you
f0523f02 2921specify the @option{-fno-common} flag, GCC will do this for all
c1f7febf
RK
2922variables.
2923
2924Specifying the @code{nocommon} attribute for a variable provides an
2925initialization of zeros. A variable may only be initialized in one
2926source file.
2927
2928@item packed
2929@cindex @code{packed} attribute
2930The @code{packed} attribute specifies that a variable or structure field
2931should have the smallest possible alignment---one byte for a variable,
2932and one bit for a field, unless you specify a larger value with the
2933@code{aligned} attribute.
2934
2935Here is a structure in which the field @code{x} is packed, so that it
2936immediately follows @code{a}:
2937
2938@example
2939struct foo
2940@{
2941 char a;
2942 int x[2] __attribute__ ((packed));
2943@};
2944@end example
2945
84330467 2946@item section ("@var{section-name}")
c1f7febf
RK
2947@cindex @code{section} variable attribute
2948Normally, the compiler places the objects it generates in sections like
2949@code{data} and @code{bss}. Sometimes, however, you need additional sections,
2950or you need certain particular variables to appear in special sections,
2951for example to map to special hardware. The @code{section}
2952attribute specifies that a variable (or function) lives in a particular
2953section. For example, this small program uses several specific section names:
2954
2955@smallexample
2956struct duart a __attribute__ ((section ("DUART_A"))) = @{ 0 @};
2957struct duart b __attribute__ ((section ("DUART_B"))) = @{ 0 @};
2958char stack[10000] __attribute__ ((section ("STACK"))) = @{ 0 @};
2959int init_data __attribute__ ((section ("INITDATA"))) = 0;
2960
2961main()
2962@{
2963 /* Initialize stack pointer */
2964 init_sp (stack + sizeof (stack));
2965
2966 /* Initialize initialized data */
2967 memcpy (&init_data, &data, &edata - &data);
2968
2969 /* Turn on the serial ports */
2970 init_duart (&a);
2971 init_duart (&b);
2972@}
2973@end smallexample
2974
2975@noindent
2976Use the @code{section} attribute with an @emph{initialized} definition
f0523f02 2977of a @emph{global} variable, as shown in the example. GCC issues
c1f7febf
RK
2978a warning and otherwise ignores the @code{section} attribute in
2979uninitialized variable declarations.
2980
2981You may only use the @code{section} attribute with a fully initialized
2982global definition because of the way linkers work. The linker requires
2983each object be defined once, with the exception that uninitialized
2984variables tentatively go in the @code{common} (or @code{bss}) section
84330467
JM
2985and can be multiply ``defined''. You can force a variable to be
2986initialized with the @option{-fno-common} flag or the @code{nocommon}
c1f7febf
RK
2987attribute.
2988
2989Some file formats do not support arbitrary sections so the @code{section}
2990attribute is not available on all platforms.
2991If you need to map the entire contents of a module to a particular
2992section, consider using the facilities of the linker instead.
2993
593d3a34
MK
2994@item shared
2995@cindex @code{shared} variable attribute
02f52e19
AJ
2996On Windows NT, in addition to putting variable definitions in a named
2997section, the section can also be shared among all running copies of an
161d7b59 2998executable or DLL@. For example, this small program defines shared data
84330467 2999by putting it in a named section @code{shared} and marking the section
593d3a34
MK
3000shareable:
3001
3002@smallexample
3003int foo __attribute__((section ("shared"), shared)) = 0;
3004
3005int
3006main()
3007@{
310668e8
JM
3008 /* Read and write foo. All running
3009 copies see the same value. */
593d3a34
MK
3010 return 0;
3011@}
3012@end smallexample
3013
3014@noindent
3015You may only use the @code{shared} attribute along with @code{section}
02f52e19 3016attribute with a fully initialized global definition because of the way
593d3a34
MK
3017linkers work. See @code{section} attribute for more information.
3018
161d7b59 3019The @code{shared} attribute is only available on Windows NT@.
593d3a34 3020
c1f7febf
RK
3021@item transparent_union
3022This attribute, attached to a function parameter which is a union, means
3023that the corresponding argument may have the type of any union member,
3024but the argument is passed as if its type were that of the first union
3025member. For more details see @xref{Type Attributes}. You can also use
3026this attribute on a @code{typedef} for a union data type; then it
3027applies to all function parameters with that type.
3028
3029@item unused
3030This attribute, attached to a variable, means that the variable is meant
f0523f02 3031to be possibly unused. GCC will not produce a warning for this
c1f7febf
RK
3032variable.
3033
e23bd218
IR
3034@item deprecated
3035The @code{deprecated} attribute results in a warning if the variable
3036is used anywhere in the source file. This is useful when identifying
3037variables that are expected to be removed in a future version of a
3038program. The warning also includes the location of the declaration
3039of the deprecated variable, to enable users to easily find further
3040information about why the variable is deprecated, or what they should
3041do instead. Note that the warnings only occurs for uses:
3042
3043@smallexample
3044extern int old_var __attribute__ ((deprecated));
3045extern int old_var;
3046int new_fn () @{ return old_var; @}
3047@end smallexample
3048
3049results in a warning on line 3 but not line 2.
3050
3051The @code{deprecated} attribute can also be used for functions and
3052types (@pxref{Function Attributes}, @pxref{Type Attributes}.)
3053
1b9191d2
AH
3054@item vector_size (@var{bytes})
3055This attribute specifies the vector size for the variable, measured in
3056bytes. For example, the declaration:
3057
3058@smallexample
3059int foo __attribute__ ((vector_size (16)));
3060@end smallexample
3061
3062@noindent
3063causes the compiler to set the mode for @code{foo}, to be 16 bytes,
3064divided into @code{int} sized units. Assuming a 32-bit int (a vector of
30654 units of 4 bytes), the corresponding mode of @code{foo} will be V4SI@.
3066
3067This attribute is only applicable to integral and float scalars,
3068although arrays, pointers, and function return values are allowed in
3069conjunction with this construct.
3070
3071Aggregates with this attribute are invalid, even if they are of the same
3072size as a corresponding scalar. For example, the declaration:
3073
3074@smallexample
ad706f54 3075struct S @{ int a; @};
1b9191d2
AH
3076struct S __attribute__ ((vector_size (16))) foo;
3077@end smallexample
3078
3079@noindent
3080is invalid even if the size of the structure is the same as the size of
3081the @code{int}.
3082
c1f7febf
RK
3083@item weak
3084The @code{weak} attribute is described in @xref{Function Attributes}.
845da534
DE
3085
3086@item model (@var{model-name})
3087@cindex variable addressability on the M32R/D
3088Use this attribute on the M32R/D to set the addressability of an object.
3089The identifier @var{model-name} is one of @code{small}, @code{medium},
3090or @code{large}, representing each of the code models.
3091
3092Small model objects live in the lower 16MB of memory (so that their
3093addresses can be loaded with the @code{ld24} instruction).
3094
02f52e19 3095Medium and large model objects may live anywhere in the 32-bit address space
845da534
DE
3096(the compiler will generate @code{seth/add3} instructions to load their
3097addresses).
3098
c1f7febf
RK
3099@end table
3100
3101To specify multiple attributes, separate them by commas within the
3102double parentheses: for example, @samp{__attribute__ ((aligned (16),
3103packed))}.
3104
3105@node Type Attributes
3106@section Specifying Attributes of Types
3107@cindex attribute of types
3108@cindex type attributes
3109
3110The keyword @code{__attribute__} allows you to specify special
3111attributes of @code{struct} and @code{union} types when you define such
3112types. This keyword is followed by an attribute specification inside
e23bd218
IR
3113double parentheses. Five attributes are currently defined for types:
3114@code{aligned}, @code{packed}, @code{transparent_union}, @code{unused},
3115and @code{deprecated}. Other attributes are defined for functions
3116(@pxref{Function Attributes}) and for variables (@pxref{Variable Attributes}).
c1f7febf
RK
3117
3118You may also specify any one of these attributes with @samp{__}
3119preceding and following its keyword. This allows you to use these
3120attributes in header files without being concerned about a possible
3121macro of the same name. For example, you may use @code{__aligned__}
3122instead of @code{aligned}.
3123
3124You may specify the @code{aligned} and @code{transparent_union}
3125attributes either in a @code{typedef} declaration or just past the
3126closing curly brace of a complete enum, struct or union type
3127@emph{definition} and the @code{packed} attribute only past the closing
3128brace of a definition.
3129
4051959b
JM
3130You may also specify attributes between the enum, struct or union
3131tag and the name of the type rather than after the closing brace.
3132
2c5e91d2
JM
3133@xref{Attribute Syntax}, for details of the exact syntax for using
3134attributes.
3135
c1f7febf
RK
3136@table @code
3137@cindex @code{aligned} attribute
3138@item aligned (@var{alignment})
3139This attribute specifies a minimum alignment (in bytes) for variables
3140of the specified type. For example, the declarations:
3141
3142@smallexample
f69eecfb
JL
3143struct S @{ short f[3]; @} __attribute__ ((aligned (8)));
3144typedef int more_aligned_int __attribute__ ((aligned (8)));
c1f7febf
RK
3145@end smallexample
3146
3147@noindent
d863830b 3148force the compiler to insure (as far as it can) that each variable whose
c1f7febf
RK
3149type is @code{struct S} or @code{more_aligned_int} will be allocated and
3150aligned @emph{at least} on a 8-byte boundary. On a Sparc, having all
3151variables of type @code{struct S} aligned to 8-byte boundaries allows
3152the compiler to use the @code{ldd} and @code{std} (doubleword load and
3153store) instructions when copying one variable of type @code{struct S} to
3154another, thus improving run-time efficiency.
3155
3156Note that the alignment of any given @code{struct} or @code{union} type
5490d604 3157is required by the ISO C standard to be at least a perfect multiple of
c1f7febf
RK
3158the lowest common multiple of the alignments of all of the members of
3159the @code{struct} or @code{union} in question. This means that you @emph{can}
3160effectively adjust the alignment of a @code{struct} or @code{union}
3161type by attaching an @code{aligned} attribute to any one of the members
3162of such a type, but the notation illustrated in the example above is a
3163more obvious, intuitive, and readable way to request the compiler to
3164adjust the alignment of an entire @code{struct} or @code{union} type.
3165
3166As in the preceding example, you can explicitly specify the alignment
3167(in bytes) that you wish the compiler to use for a given @code{struct}
3168or @code{union} type. Alternatively, you can leave out the alignment factor
3169and just ask the compiler to align a type to the maximum
3170useful alignment for the target machine you are compiling for. For
3171example, you could write:
3172
3173@smallexample
3174struct S @{ short f[3]; @} __attribute__ ((aligned));
3175@end smallexample
3176
3177Whenever you leave out the alignment factor in an @code{aligned}
3178attribute specification, the compiler automatically sets the alignment
3179for the type to the largest alignment which is ever used for any data
3180type on the target machine you are compiling for. Doing this can often
3181make copy operations more efficient, because the compiler can use
3182whatever instructions copy the biggest chunks of memory when performing
3183copies to or from the variables which have types that you have aligned
3184this way.
3185
3186In the example above, if the size of each @code{short} is 2 bytes, then
3187the size of the entire @code{struct S} type is 6 bytes. The smallest
3188power of two which is greater than or equal to that is 8, so the
3189compiler sets the alignment for the entire @code{struct S} type to 8
3190bytes.
3191
3192Note that although you can ask the compiler to select a time-efficient
3193alignment for a given type and then declare only individual stand-alone
3194objects of that type, the compiler's ability to select a time-efficient
3195alignment is primarily useful only when you plan to create arrays of
3196variables having the relevant (efficiently aligned) type. If you
3197declare or use arrays of variables of an efficiently-aligned type, then
3198it is likely that your program will also be doing pointer arithmetic (or
3199subscripting, which amounts to the same thing) on pointers to the
3200relevant type, and the code that the compiler generates for these
3201pointer arithmetic operations will often be more efficient for
3202efficiently-aligned types than for other types.
3203
3204The @code{aligned} attribute can only increase the alignment; but you
3205can decrease it by specifying @code{packed} as well. See below.
3206
3207Note that the effectiveness of @code{aligned} attributes may be limited
3208by inherent limitations in your linker. On many systems, the linker is
3209only able to arrange for variables to be aligned up to a certain maximum
3210alignment. (For some linkers, the maximum supported alignment may
3211be very very small.) If your linker is only able to align variables
3212up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
3213in an @code{__attribute__} will still only provide you with 8 byte
3214alignment. See your linker documentation for further information.
3215
3216@item packed
3217This attribute, attached to an @code{enum}, @code{struct}, or
3218@code{union} type definition, specified that the minimum required memory
3219be used to represent the type.
3220
84330467 3221@opindex fshort-enums
c1f7febf
RK
3222Specifying this attribute for @code{struct} and @code{union} types is
3223equivalent to specifying the @code{packed} attribute on each of the
84330467 3224structure or union members. Specifying the @option{-fshort-enums}
c1f7febf
RK
3225flag on the line is equivalent to specifying the @code{packed}
3226attribute on all @code{enum} definitions.
3227
3228You may only specify this attribute after a closing curly brace on an
1cd4bca9
BK
3229@code{enum} definition, not in a @code{typedef} declaration, unless that
3230declaration also contains the definition of the @code{enum}.
c1f7febf
RK
3231
3232@item transparent_union
3233This attribute, attached to a @code{union} type definition, indicates
3234that any function parameter having that union type causes calls to that
3235function to be treated in a special way.
3236
3237First, the argument corresponding to a transparent union type can be of
3238any type in the union; no cast is required. Also, if the union contains
3239a pointer type, the corresponding argument can be a null pointer
3240constant or a void pointer expression; and if the union contains a void
3241pointer type, the corresponding argument can be any pointer expression.
3242If the union member type is a pointer, qualifiers like @code{const} on
3243the referenced type must be respected, just as with normal pointer
3244conversions.
3245
3246Second, the argument is passed to the function using the calling
3247conventions of first member of the transparent union, not the calling
3248conventions of the union itself. All members of the union must have the
3249same machine representation; this is necessary for this argument passing
3250to work properly.
3251
3252Transparent unions are designed for library functions that have multiple
3253interfaces for compatibility reasons. For example, suppose the
3254@code{wait} function must accept either a value of type @code{int *} to
3255comply with Posix, or a value of type @code{union wait *} to comply with
3256the 4.1BSD interface. If @code{wait}'s parameter were @code{void *},
3257@code{wait} would accept both kinds of arguments, but it would also
3258accept any other pointer type and this would make argument type checking
3259less useful. Instead, @code{<sys/wait.h>} might define the interface
3260as follows:
3261
3262@smallexample
3263typedef union
3264 @{
3265 int *__ip;
3266 union wait *__up;
3267 @} wait_status_ptr_t __attribute__ ((__transparent_union__));
3268
3269pid_t wait (wait_status_ptr_t);
3270@end smallexample
3271
3272This interface allows either @code{int *} or @code{union wait *}
3273arguments to be passed, using the @code{int *} calling convention.
3274The program can call @code{wait} with arguments of either type:
3275
3276@example
3277int w1 () @{ int w; return wait (&w); @}
3278int w2 () @{ union wait w; return wait (&w); @}
3279@end example
3280
3281With this interface, @code{wait}'s implementation might look like this:
3282
3283@example
3284pid_t wait (wait_status_ptr_t p)
3285@{
3286 return waitpid (-1, p.__ip, 0);
3287@}
3288@end example
d863830b
JL
3289
3290@item unused
3291When attached to a type (including a @code{union} or a @code{struct}),
3292this attribute means that variables of that type are meant to appear
f0523f02 3293possibly unused. GCC will not produce a warning for any variables of
d863830b
JL
3294that type, even if the variable appears to do nothing. This is often
3295the case with lock or thread classes, which are usually defined and then
3296not referenced, but contain constructors and destructors that have
956d6950 3297nontrivial bookkeeping functions.
d863830b 3298
e23bd218
IR
3299@item deprecated
3300The @code{deprecated} attribute results in a warning if the type
3301is used anywhere in the source file. This is useful when identifying
3302types that are expected to be removed in a future version of a program.
3303If possible, the warning also includes the location of the declaration
3304of the deprecated type, to enable users to easily find further
3305information about why the type is deprecated, or what they should do
3306instead. Note that the warnings only occur for uses and then only
adc9fe67 3307if the type is being applied to an identifier that itself is not being
e23bd218
IR
3308declared as deprecated.
3309
3310@smallexample
3311typedef int T1 __attribute__ ((deprecated));
3312T1 x;
3313typedef T1 T2;
3314T2 y;
3315typedef T1 T3 __attribute__ ((deprecated));
3316T3 z __attribute__ ((deprecated));
3317@end smallexample
3318
3319results in a warning on line 2 and 3 but not lines 4, 5, or 6. No
3320warning is issued for line 4 because T2 is not explicitly
3321deprecated. Line 5 has no warning because T3 is explicitly
3322deprecated. Similarly for line 6.
3323
3324The @code{deprecated} attribute can also be used for functions and
3325variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.)
3326
c1f7febf
RK
3327@end table
3328
3329To specify multiple attributes, separate them by commas within the
3330double parentheses: for example, @samp{__attribute__ ((aligned (16),
3331packed))}.
3332
3333@node Inline
3334@section An Inline Function is As Fast As a Macro
3335@cindex inline functions
3336@cindex integrating function code
3337@cindex open coding
3338@cindex macros, inline alternative
3339
f0523f02 3340By declaring a function @code{inline}, you can direct GCC to
c1f7febf
RK
3341integrate that function's code into the code for its callers. This
3342makes execution faster by eliminating the function-call overhead; in
3343addition, if any of the actual argument values are constant, their known
3344values may permit simplifications at compile time so that not all of the
3345inline function's code needs to be included. The effect on code size is
3346less predictable; object code may be larger or smaller with function
3347inlining, depending on the particular case. Inlining of functions is an
3348optimization and it really ``works'' only in optimizing compilation. If
84330467 3349you don't use @option{-O}, no function is really inline.
c1f7febf 3350
4b404517
JM
3351Inline functions are included in the ISO C99 standard, but there are
3352currently substantial differences between what GCC implements and what
3353the ISO C99 standard requires.
3354
c1f7febf
RK
3355To declare a function inline, use the @code{inline} keyword in its
3356declaration, like this:
3357
3358@example
3359inline int
3360inc (int *a)
3361@{
3362 (*a)++;
3363@}
3364@end example
3365
5490d604 3366(If you are writing a header file to be included in ISO C programs, write
c1f7febf 3367@code{__inline__} instead of @code{inline}. @xref{Alternate Keywords}.)
c1f7febf 3368You can also make all ``simple enough'' functions inline with the option
84330467 3369@option{-finline-functions}.
247b14bd 3370
84330467 3371@opindex Winline
247b14bd
RH
3372Note that certain usages in a function definition can make it unsuitable
3373for inline substitution. Among these usages are: use of varargs, use of
3374alloca, use of variable sized data types (@pxref{Variable Length}),
3375use of computed goto (@pxref{Labels as Values}), use of nonlocal goto,
84330467 3376and nested functions (@pxref{Nested Functions}). Using @option{-Winline}
247b14bd
RH
3377will warn when a function marked @code{inline} could not be substituted,
3378and will give the reason for the failure.
c1f7febf 3379
2147b154 3380Note that in C and Objective-C, unlike C++, the @code{inline} keyword
c1f7febf
RK
3381does not affect the linkage of the function.
3382
3383@cindex automatic @code{inline} for C++ member fns
3384@cindex @code{inline} automatic for C++ member fns
3385@cindex member fns, automatically @code{inline}
3386@cindex C++ member fns, automatically @code{inline}
84330467 3387@opindex fno-default-inline
f0523f02 3388GCC automatically inlines member functions defined within the class
c1f7febf 3389body of C++ programs even if they are not explicitly declared
84330467 3390@code{inline}. (You can override this with @option{-fno-default-inline};
c1f7febf
RK
3391@pxref{C++ Dialect Options,,Options Controlling C++ Dialect}.)
3392
3393@cindex inline functions, omission of
84330467 3394@opindex fkeep-inline-functions
c1f7febf
RK
3395When a function is both inline and @code{static}, if all calls to the
3396function are integrated into the caller, and the function's address is
3397never used, then the function's own assembler code is never referenced.
f0523f02 3398In this case, GCC does not actually output assembler code for the
84330467 3399function, unless you specify the option @option{-fkeep-inline-functions}.
c1f7febf
RK
3400Some calls cannot be integrated for various reasons (in particular,
3401calls that precede the function's definition cannot be integrated, and
3402neither can recursive calls within the definition). If there is a
3403nonintegrated call, then the function is compiled to assembler code as
3404usual. The function must also be compiled as usual if the program
3405refers to its address, because that can't be inlined.
3406
3407@cindex non-static inline function
3408When an inline function is not @code{static}, then the compiler must assume
3409that there may be calls from other source files; since a global symbol can
3410be defined only once in any program, the function must not be defined in
3411the other source files, so the calls therein cannot be integrated.
3412Therefore, a non-@code{static} inline function is always compiled on its
3413own in the usual fashion.
3414
3415If you specify both @code{inline} and @code{extern} in the function
3416definition, then the definition is used only for inlining. In no case
3417is the function compiled on its own, not even if you refer to its
3418address explicitly. Such an address becomes an external reference, as
3419if you had only declared the function, and had not defined it.
3420
3421This combination of @code{inline} and @code{extern} has almost the
3422effect of a macro. The way to use it is to put a function definition in
3423a header file with these keywords, and put another copy of the
3424definition (lacking @code{inline} and @code{extern}) in a library file.
3425The definition in the header file will cause most calls to the function
3426to be inlined. If any uses of the function remain, they will refer to
3427the single copy in the library.
3428
4b404517
JM
3429For future compatibility with when GCC implements ISO C99 semantics for
3430inline functions, it is best to use @code{static inline} only. (The
3431existing semantics will remain available when @option{-std=gnu89} is
3432specified, but eventually the default will be @option{-std=gnu99} and
3433that will implement the C99 semantics, though it does not do so yet.)
3434
6aa77e6c
AH
3435GCC does not inline any functions when not optimizing unless you specify
3436the @samp{always_inline} attribute for the function, like this:
3437
3438@example
3439/* Prototype. */
3440inline void foo (const char) __attribute__((always_inline));
3441@end example
c1f7febf
RK
3442
3443@node Extended Asm
3444@section Assembler Instructions with C Expression Operands
3445@cindex extended @code{asm}
3446@cindex @code{asm} expressions
3447@cindex assembler instructions
3448@cindex registers
3449
c85f7c16
JL
3450In an assembler instruction using @code{asm}, you can specify the
3451operands of the instruction using C expressions. This means you need not
3452guess which registers or memory locations will contain the data you want
c1f7febf
RK
3453to use.
3454
c85f7c16
JL
3455You must specify an assembler instruction template much like what
3456appears in a machine description, plus an operand constraint string for
3457each operand.
c1f7febf
RK
3458
3459For example, here is how to use the 68881's @code{fsinx} instruction:
3460
3461@example
3462asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
3463@end example
3464
3465@noindent
3466Here @code{angle} is the C expression for the input operand while
3467@code{result} is that of the output operand. Each has @samp{"f"} as its
c85f7c16
JL
3468operand constraint, saying that a floating point register is required.
3469The @samp{=} in @samp{=f} indicates that the operand is an output; all
3470output operands' constraints must use @samp{=}. The constraints use the
3471same language used in the machine description (@pxref{Constraints}).
3472
3473Each operand is described by an operand-constraint string followed by
3474the C expression in parentheses. A colon separates the assembler
3475template from the first output operand and another separates the last
3476output operand from the first input, if any. Commas separate the
84b72302
RH
3477operands within each group. The total number of operands is currently
3478limited to 30; this limitation may be lifted in some future version of
3479GCC.
c85f7c16
JL
3480
3481If there are no output operands but there are input operands, you must
3482place two consecutive colons surrounding the place where the output
c1f7febf
RK
3483operands would go.
3484
84b72302
RH
3485As of GCC version 3.1, it is also possible to specify input and output
3486operands using symbolic names which can be referenced within the
3487assembler code. These names are specified inside square brackets
3488preceding the constraint string, and can be referenced inside the
3489assembler code using @code{%[@var{name}]} instead of a percentage sign
3490followed by the operand number. Using named operands the above example
3491could look like:
3492
3493@example
3494asm ("fsinx %[angle],%[output]"
3495 : [output] "=f" (result)
3496 : [angle] "f" (angle));
3497@end example
3498
3499@noindent
3500Note that the symbolic operand names have no relation whatsoever to
3501other C identifiers. You may use any name you like, even those of
3502existing C symbols, but must ensure that no two operands within the same
3503assembler construct use the same symbolic name.
3504
c1f7febf 3505Output operand expressions must be lvalues; the compiler can check this.
c85f7c16
JL
3506The input operands need not be lvalues. The compiler cannot check
3507whether the operands have data types that are reasonable for the
3508instruction being executed. It does not parse the assembler instruction
3509template and does not know what it means or even whether it is valid
3510assembler input. The extended @code{asm} feature is most often used for
3511machine instructions the compiler itself does not know exist. If
3512the output expression cannot be directly addressed (for example, it is a
f0523f02 3513bit-field), your constraint must allow a register. In that case, GCC
c85f7c16
JL
3514will use the register as the output of the @code{asm}, and then store
3515that register into the output.
3516
f0523f02 3517The ordinary output operands must be write-only; GCC will assume that
c85f7c16
JL
3518the values in these operands before the instruction are dead and need
3519not be generated. Extended asm supports input-output or read-write
3520operands. Use the constraint character @samp{+} to indicate such an
3521operand and list it with the output operands.
3522
3523When the constraints for the read-write operand (or the operand in which
3524only some of the bits are to be changed) allows a register, you may, as
3525an alternative, logically split its function into two separate operands,
3526one input operand and one write-only output operand. The connection
3527between them is expressed by constraints which say they need to be in
3528the same location when the instruction executes. You can use the same C
3529expression for both operands, or different expressions. For example,
3530here we write the (fictitious) @samp{combine} instruction with
3531@code{bar} as its read-only source operand and @code{foo} as its
3532read-write destination:
c1f7febf
RK
3533
3534@example
3535asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
3536@end example
3537
3538@noindent
c85f7c16 3539The constraint @samp{"0"} for operand 1 says that it must occupy the
84b72302
RH
3540same location as operand 0. A number in constraint is allowed only in
3541an input operand and it must refer to an output operand.
c1f7febf 3542
84b72302 3543Only a number in the constraint can guarantee that one operand will be in
c85f7c16
JL
3544the same place as another. The mere fact that @code{foo} is the value
3545of both operands is not enough to guarantee that they will be in the
3546same place in the generated assembler code. The following would not
3547work reliably:
c1f7febf
RK
3548
3549@example
3550asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
3551@end example
3552
3553Various optimizations or reloading could cause operands 0 and 1 to be in
f0523f02 3554different registers; GCC knows no reason not to do so. For example, the
c1f7febf
RK
3555compiler might find a copy of the value of @code{foo} in one register and
3556use it for operand 1, but generate the output operand 0 in a different
3557register (copying it afterward to @code{foo}'s own address). Of course,
3558since the register for operand 1 is not even mentioned in the assembler
f0523f02 3559code, the result will not work, but GCC can't tell that.
c1f7febf 3560
84b72302
RH
3561As of GCC version 3.1, one may write @code{[@var{name}]} instead of
3562the operand number for a matching constraint. For example:
3563
3564@example
3565asm ("cmoveq %1,%2,%[result]"
3566 : [result] "=r"(result)
3567 : "r" (test), "r"(new), "[result]"(old));
3568@end example
3569
c85f7c16
JL
3570Some instructions clobber specific hard registers. To describe this,
3571write a third colon after the input operands, followed by the names of
3572the clobbered hard registers (given as strings). Here is a realistic
3573example for the VAX:
c1f7febf
RK
3574
3575@example
3576asm volatile ("movc3 %0,%1,%2"
3577 : /* no outputs */
3578 : "g" (from), "g" (to), "g" (count)
3579 : "r0", "r1", "r2", "r3", "r4", "r5");
3580@end example
3581
c5c76735
JL
3582You may not write a clobber description in a way that overlaps with an
3583input or output operand. For example, you may not have an operand
3584describing a register class with one member if you mention that register
3585in the clobber list. There is no way for you to specify that an input
3586operand is modified without also specifying it as an output
3587operand. Note that if all the output operands you specify are for this
3588purpose (and hence unused), you will then also need to specify
3589@code{volatile} for the @code{asm} construct, as described below, to
f0523f02 3590prevent GCC from deleting the @code{asm} statement as unused.
8fe1938e 3591
c1f7febf 3592If you refer to a particular hardware register from the assembler code,
c85f7c16
JL
3593you will probably have to list the register after the third colon to
3594tell the compiler the register's value is modified. In some assemblers,
3595the register names begin with @samp{%}; to produce one @samp{%} in the
3596assembler code, you must write @samp{%%} in the input.
3597
3598If your assembler instruction can alter the condition code register, add
f0523f02 3599@samp{cc} to the list of clobbered registers. GCC on some machines
c85f7c16
JL
3600represents the condition codes as a specific hardware register;
3601@samp{cc} serves to name this register. On other machines, the
3602condition code is handled differently, and specifying @samp{cc} has no
3603effect. But it is valid no matter what the machine.
c1f7febf
RK
3604
3605If your assembler instruction modifies memory in an unpredictable
c85f7c16 3606fashion, add @samp{memory} to the list of clobbered registers. This
f0523f02 3607will cause GCC to not keep memory values cached in registers across
dd40655a
GK
3608the assembler instruction. You will also want to add the
3609@code{volatile} keyword if the memory affected is not listed in the
3610inputs or outputs of the @code{asm}, as the @samp{memory} clobber does
3611not count as a side-effect of the @code{asm}.
c1f7febf 3612
c85f7c16 3613You can put multiple assembler instructions together in a single
8720914b
HPN
3614@code{asm} template, separated by the characters normally used in assembly
3615code for the system. A combination that works in most places is a newline
3616to break the line, plus a tab character to move to the instruction field
3617(written as @samp{\n\t}). Sometimes semicolons can be used, if the
3618assembler allows semicolons as a line-breaking character. Note that some
3619assembler dialects use semicolons to start a comment.
3620The input operands are guaranteed not to use any of the clobbered
c85f7c16
JL
3621registers, and neither will the output operands' addresses, so you can
3622read and write the clobbered registers as many times as you like. Here
3623is an example of multiple instructions in a template; it assumes the
3624subroutine @code{_foo} accepts arguments in registers 9 and 10:
c1f7febf
RK
3625
3626@example
8720914b 3627asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
c1f7febf
RK
3628 : /* no outputs */
3629 : "g" (from), "g" (to)
3630 : "r9", "r10");
3631@end example
3632
f0523f02 3633Unless an output operand has the @samp{&} constraint modifier, GCC
c85f7c16
JL
3634may allocate it in the same register as an unrelated input operand, on
3635the assumption the inputs are consumed before the outputs are produced.
c1f7febf
RK
3636This assumption may be false if the assembler code actually consists of
3637more than one instruction. In such a case, use @samp{&} for each output
c85f7c16 3638operand that may not overlap an input. @xref{Modifiers}.
c1f7febf 3639
c85f7c16
JL
3640If you want to test the condition code produced by an assembler
3641instruction, you must include a branch and a label in the @code{asm}
3642construct, as follows:
c1f7febf
RK
3643
3644@example
8720914b 3645asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
c1f7febf
RK
3646 : "g" (result)
3647 : "g" (input));
3648@end example
3649
3650@noindent
3651This assumes your assembler supports local labels, as the GNU assembler
3652and most Unix assemblers do.
3653
3654Speaking of labels, jumps from one @code{asm} to another are not
c85f7c16
JL
3655supported. The compiler's optimizers do not know about these jumps, and
3656therefore they cannot take account of them when deciding how to
c1f7febf
RK
3657optimize.
3658
3659@cindex macros containing @code{asm}
3660Usually the most convenient way to use these @code{asm} instructions is to
3661encapsulate them in macros that look like functions. For example,
3662
3663@example
3664#define sin(x) \
3665(@{ double __value, __arg = (x); \
3666 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \
3667 __value; @})
3668@end example
3669
3670@noindent
3671Here the variable @code{__arg} is used to make sure that the instruction
3672operates on a proper @code{double} value, and to accept only those
3673arguments @code{x} which can convert automatically to a @code{double}.
3674
c85f7c16
JL
3675Another way to make sure the instruction operates on the correct data
3676type is to use a cast in the @code{asm}. This is different from using a
c1f7febf
RK
3677variable @code{__arg} in that it converts more different types. For
3678example, if the desired type were @code{int}, casting the argument to
3679@code{int} would accept a pointer with no complaint, while assigning the
3680argument to an @code{int} variable named @code{__arg} would warn about
3681using a pointer unless the caller explicitly casts it.
3682
f0523f02 3683If an @code{asm} has output operands, GCC assumes for optimization
c85f7c16
JL
3684purposes the instruction has no side effects except to change the output
3685operands. This does not mean instructions with a side effect cannot be
3686used, but you must be careful, because the compiler may eliminate them
3687if the output operands aren't used, or move them out of loops, or
3688replace two with one if they constitute a common subexpression. Also,
3689if your instruction does have a side effect on a variable that otherwise
3690appears not to change, the old value of the variable may be reused later
3691if it happens to be found in a register.
c1f7febf
RK
3692
3693You can prevent an @code{asm} instruction from being deleted, moved
3694significantly, or combined, by writing the keyword @code{volatile} after
3695the @code{asm}. For example:
3696
3697@example
310668e8
JM
3698#define get_and_set_priority(new) \
3699(@{ int __old; \
3700 asm volatile ("get_and_set_priority %0, %1" \
3701 : "=g" (__old) : "g" (new)); \
c85f7c16 3702 __old; @})
24f98470 3703@end example
c1f7febf
RK
3704
3705@noindent
f0523f02 3706If you write an @code{asm} instruction with no outputs, GCC will know
c85f7c16 3707the instruction has side-effects and will not delete the instruction or
e71b34aa 3708move it outside of loops.
c85f7c16 3709
e71b34aa
MM
3710The @code{volatile} keyword indicates that the instruction has
3711important side-effects. GCC will not delete a volatile @code{asm} if
3712it is reachable. (The instruction can still be deleted if GCC can
3713prove that control-flow will never reach the location of the
3714instruction.) In addition, GCC will not reschedule instructions
3715across a volatile @code{asm} instruction. For example:
3716
3717@example
bd78000b 3718*(volatile int *)addr = foo;
e71b34aa
MM
3719asm volatile ("eieio" : : );
3720@end example
3721
ebb48a4d 3722@noindent
e71b34aa
MM
3723Assume @code{addr} contains the address of a memory mapped device
3724register. The PowerPC @code{eieio} instruction (Enforce In-order
aee96fe9 3725Execution of I/O) tells the CPU to make sure that the store to that
161d7b59 3726device register happens before it issues any other I/O@.
c1f7febf
RK
3727
3728Note that even a volatile @code{asm} instruction can be moved in ways
3729that appear insignificant to the compiler, such as across jump
3730instructions. You can't expect a sequence of volatile @code{asm}
3731instructions to remain perfectly consecutive. If you want consecutive
e71b34aa
MM
3732output, use a single @code{asm}. Also, GCC will perform some
3733optimizations across a volatile @code{asm} instruction; GCC does not
3734``forget everything'' when it encounters a volatile @code{asm}
3735instruction the way some other compilers do.
3736
3737An @code{asm} instruction without any operands or clobbers (an ``old
3738style'' @code{asm}) will be treated identically to a volatile
3739@code{asm} instruction.
c1f7febf
RK
3740
3741It is a natural idea to look for a way to give access to the condition
3742code left by the assembler instruction. However, when we attempted to
3743implement this, we found no way to make it work reliably. The problem
3744is that output operands might need reloading, which would result in
3745additional following ``store'' instructions. On most machines, these
3746instructions would alter the condition code before there was time to
3747test it. This problem doesn't arise for ordinary ``test'' and
3748``compare'' instructions because they don't have any output operands.
3749
eda3fbbe
GB
3750For reasons similar to those described above, it is not possible to give
3751an assembler instruction access to the condition code left by previous
3752instructions.
3753
5490d604 3754If you are writing a header file that should be includable in ISO C
c1f7febf
RK
3755programs, write @code{__asm__} instead of @code{asm}. @xref{Alternate
3756Keywords}.
3757
fe0ce426
JH
3758@subsection i386 floating point asm operands
3759
3760There are several rules on the usage of stack-like regs in
3761asm_operands insns. These rules apply only to the operands that are
3762stack-like regs:
3763
3764@enumerate
3765@item
3766Given a set of input regs that die in an asm_operands, it is
3767necessary to know which are implicitly popped by the asm, and
3768which must be explicitly popped by gcc.
3769
3770An input reg that is implicitly popped by the asm must be
3771explicitly clobbered, unless it is constrained to match an
3772output operand.
3773
3774@item
3775For any input reg that is implicitly popped by an asm, it is
3776necessary to know how to adjust the stack to compensate for the pop.
3777If any non-popped input is closer to the top of the reg-stack than
3778the implicitly popped reg, it would not be possible to know what the
84330467 3779stack looked like---it's not clear how the rest of the stack ``slides
fe0ce426
JH
3780up''.
3781
3782All implicitly popped input regs must be closer to the top of
3783the reg-stack than any input that is not implicitly popped.
3784
3785It is possible that if an input dies in an insn, reload might
3786use the input reg for an output reload. Consider this example:
3787
3788@example
3789asm ("foo" : "=t" (a) : "f" (b));
3790@end example
3791
3792This asm says that input B is not popped by the asm, and that
c771326b 3793the asm pushes a result onto the reg-stack, i.e., the stack is one
fe0ce426
JH
3794deeper after the asm than it was before. But, it is possible that
3795reload will think that it can use the same reg for both the input and
3796the output, if input B dies in this insn.
3797
3798If any input operand uses the @code{f} constraint, all output reg
3799constraints must use the @code{&} earlyclobber.
3800
3801The asm above would be written as
3802
3803@example
3804asm ("foo" : "=&t" (a) : "f" (b));
3805@end example
3806
3807@item
3808Some operands need to be in particular places on the stack. All
84330467 3809output operands fall in this category---there is no other way to
fe0ce426
JH
3810know which regs the outputs appear in unless the user indicates
3811this in the constraints.
3812
3813Output operands must specifically indicate which reg an output
3814appears in after an asm. @code{=f} is not allowed: the operand
3815constraints must select a class with a single reg.
3816
3817@item
3818Output operands may not be ``inserted'' between existing stack regs.
3819Since no 387 opcode uses a read/write operand, all output operands
3820are dead before the asm_operands, and are pushed by the asm_operands.
3821It makes no sense to push anywhere but the top of the reg-stack.
3822
3823Output operands must start at the top of the reg-stack: output
3824operands may not ``skip'' a reg.
3825
3826@item
3827Some asm statements may need extra stack space for internal
3828calculations. This can be guaranteed by clobbering stack registers
3829unrelated to the inputs and outputs.
3830
3831@end enumerate
3832
3833Here are a couple of reasonable asms to want to write. This asm
3834takes one input, which is internally popped, and produces two outputs.
3835
3836@example
3837asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
3838@end example
3839
3840This asm takes two inputs, which are popped by the @code{fyl2xp1} opcode,
3841and replaces them with one output. The user must code the @code{st(1)}
3842clobber for reg-stack.c to know that @code{fyl2xp1} pops both inputs.
3843
3844@example
3845asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
3846@end example
3847
c1f7febf 3848@include md.texi
c1f7febf
RK
3849
3850@node Asm Labels
3851@section Controlling Names Used in Assembler Code
3852@cindex assembler names for identifiers
3853@cindex names used in assembler code
3854@cindex identifiers, names in assembler code
3855
3856You can specify the name to be used in the assembler code for a C
3857function or variable by writing the @code{asm} (or @code{__asm__})
3858keyword after the declarator as follows:
3859
3860@example
3861int foo asm ("myfoo") = 2;
3862@end example
3863
3864@noindent
3865This specifies that the name to be used for the variable @code{foo} in
3866the assembler code should be @samp{myfoo} rather than the usual
3867@samp{_foo}.
3868
3869On systems where an underscore is normally prepended to the name of a C
3870function or variable, this feature allows you to define names for the
3871linker that do not start with an underscore.
3872
0adc3c19
MM
3873It does not make sense to use this feature with a non-static local
3874variable since such variables do not have assembler names. If you are
3875trying to put the variable in a particular register, see @ref{Explicit
3876Reg Vars}. GCC presently accepts such code with a warning, but will
3877probably be changed to issue an error, rather than a warning, in the
3878future.
3879
c1f7febf
RK
3880You cannot use @code{asm} in this way in a function @emph{definition}; but
3881you can get the same effect by writing a declaration for the function
3882before its definition and putting @code{asm} there, like this:
3883
3884@example
3885extern func () asm ("FUNC");
3886
3887func (x, y)
3888 int x, y;
3889@dots{}
3890@end example
3891
3892It is up to you to make sure that the assembler names you choose do not
3893conflict with any other assembler symbols. Also, you must not use a
f0523f02
JM
3894register name; that would produce completely invalid assembler code. GCC
3895does not as yet have the ability to store static variables in registers.
c1f7febf
RK
3896Perhaps that will be added.
3897
3898@node Explicit Reg Vars
3899@section Variables in Specified Registers
3900@cindex explicit register variables
3901@cindex variables in specified registers
3902@cindex specified registers
3903@cindex registers, global allocation
3904
3905GNU C allows you to put a few global variables into specified hardware
3906registers. You can also specify the register in which an ordinary
3907register variable should be allocated.
3908
3909@itemize @bullet
3910@item
3911Global register variables reserve registers throughout the program.
3912This may be useful in programs such as programming language
3913interpreters which have a couple of global variables that are accessed
3914very often.
3915
3916@item
3917Local register variables in specific registers do not reserve the
3918registers. The compiler's data flow analysis is capable of determining
3919where the specified registers contain live values, and where they are
8d344fbc 3920available for other uses. Stores into local register variables may be deleted
0deaf590
JL
3921when they appear to be dead according to dataflow analysis. References
3922to local register variables may be deleted or moved or simplified.
c1f7febf
RK
3923
3924These local variables are sometimes convenient for use with the extended
3925@code{asm} feature (@pxref{Extended Asm}), if you want to write one
3926output of the assembler instruction directly into a particular register.
3927(This will work provided the register you specify fits the constraints
3928specified for that operand in the @code{asm}.)
3929@end itemize
3930
3931@menu
3932* Global Reg Vars::
3933* Local Reg Vars::
3934@end menu
3935
3936@node Global Reg Vars
3937@subsection Defining Global Register Variables
3938@cindex global register variables
3939@cindex registers, global variables in
3940
3941You can define a global register variable in GNU C like this:
3942
3943@example
3944register int *foo asm ("a5");
3945@end example
3946
3947@noindent
3948Here @code{a5} is the name of the register which should be used. Choose a
3949register which is normally saved and restored by function calls on your
3950machine, so that library routines will not clobber it.
3951
3952Naturally the register name is cpu-dependent, so you would need to
3953conditionalize your program according to cpu type. The register
3954@code{a5} would be a good choice on a 68000 for a variable of pointer
3955type. On machines with register windows, be sure to choose a ``global''
3956register that is not affected magically by the function call mechanism.
3957
3958In addition, operating systems on one type of cpu may differ in how they
3959name the registers; then you would need additional conditionals. For
3960example, some 68000 operating systems call this register @code{%a5}.
3961
3962Eventually there may be a way of asking the compiler to choose a register
3963automatically, but first we need to figure out how it should choose and
3964how to enable you to guide the choice. No solution is evident.
3965
3966Defining a global register variable in a certain register reserves that
3967register entirely for this use, at least within the current compilation.
3968The register will not be allocated for any other purpose in the functions
3969in the current compilation. The register will not be saved and restored by
3970these functions. Stores into this register are never deleted even if they
3971would appear to be dead, but references may be deleted or moved or
3972simplified.
3973
3974It is not safe to access the global register variables from signal
3975handlers, or from more than one thread of control, because the system
3976library routines may temporarily use the register for other things (unless
3977you recompile them specially for the task at hand).
3978
3979@cindex @code{qsort}, and global register variables
3980It is not safe for one function that uses a global register variable to
3981call another such function @code{foo} by way of a third function
e979f9e8 3982@code{lose} that was compiled without knowledge of this variable (i.e.@: in a
c1f7febf
RK
3983different source file in which the variable wasn't declared). This is
3984because @code{lose} might save the register and put some other value there.
3985For example, you can't expect a global register variable to be available in
3986the comparison-function that you pass to @code{qsort}, since @code{qsort}
3987might have put something else in that register. (If you are prepared to
3988recompile @code{qsort} with the same global register variable, you can
3989solve this problem.)
3990
3991If you want to recompile @code{qsort} or other source files which do not
3992actually use your global register variable, so that they will not use that
3993register for any other purpose, then it suffices to specify the compiler
84330467 3994option @option{-ffixed-@var{reg}}. You need not actually add a global
c1f7febf
RK
3995register declaration to their source code.
3996
3997A function which can alter the value of a global register variable cannot
3998safely be called from a function compiled without this variable, because it
3999could clobber the value the caller expects to find there on return.
4000Therefore, the function which is the entry point into the part of the
4001program that uses the global register variable must explicitly save and
4002restore the value which belongs to its caller.
4003
4004@cindex register variable after @code{longjmp}
4005@cindex global register after @code{longjmp}
4006@cindex value after @code{longjmp}
4007@findex longjmp
4008@findex setjmp
4009On most machines, @code{longjmp} will restore to each global register
4010variable the value it had at the time of the @code{setjmp}. On some
4011machines, however, @code{longjmp} will not change the value of global
4012register variables. To be portable, the function that called @code{setjmp}
4013should make other arrangements to save the values of the global register
4014variables, and to restore them in a @code{longjmp}. This way, the same
4015thing will happen regardless of what @code{longjmp} does.
4016
4017All global register variable declarations must precede all function
4018definitions. If such a declaration could appear after function
4019definitions, the declaration would be too late to prevent the register from
4020being used for other purposes in the preceding functions.
4021
4022Global register variables may not have initial values, because an
4023executable file has no means to supply initial contents for a register.
4024
4025On the Sparc, there are reports that g3 @dots{} g7 are suitable
4026registers, but certain library functions, such as @code{getwd}, as well
4027as the subroutines for division and remainder, modify g3 and g4. g1 and
4028g2 are local temporaries.
4029
4030On the 68000, a2 @dots{} a5 should be suitable, as should d2 @dots{} d7.
4031Of course, it will not do to use more than a few of those.
4032
4033@node Local Reg Vars
4034@subsection Specifying Registers for Local Variables
4035@cindex local variables, specifying registers
4036@cindex specifying registers for local variables
4037@cindex registers for local variables
4038
4039You can define a local register variable with a specified register
4040like this:
4041
4042@example
4043register int *foo asm ("a5");
4044@end example
4045
4046@noindent
4047Here @code{a5} is the name of the register which should be used. Note
4048that this is the same syntax used for defining global register
4049variables, but for a local variable it would appear within a function.
4050
4051Naturally the register name is cpu-dependent, but this is not a
4052problem, since specific registers are most often useful with explicit
4053assembler instructions (@pxref{Extended Asm}). Both of these things
4054generally require that you conditionalize your program according to
4055cpu type.
4056
4057In addition, operating systems on one type of cpu may differ in how they
4058name the registers; then you would need additional conditionals. For
4059example, some 68000 operating systems call this register @code{%a5}.
4060
c1f7febf
RK
4061Defining such a register variable does not reserve the register; it
4062remains available for other uses in places where flow control determines
4063the variable's value is not live. However, these registers are made
e5e809f4
JL
4064unavailable for use in the reload pass; excessive use of this feature
4065leaves the compiler too few available registers to compile certain
4066functions.
4067
f0523f02 4068This option does not guarantee that GCC will generate code that has
e5e809f4
JL
4069this variable in the register you specify at all times. You may not
4070code an explicit reference to this register in an @code{asm} statement
4071and assume it will always refer to this variable.
c1f7febf 4072
8d344fbc 4073Stores into local register variables may be deleted when they appear to be dead
0deaf590
JL
4074according to dataflow analysis. References to local register variables may
4075be deleted or moved or simplified.
4076
c1f7febf
RK
4077@node Alternate Keywords
4078@section Alternate Keywords
4079@cindex alternate keywords
4080@cindex keywords, alternate
4081
5490d604 4082@option{-ansi} and the various @option{-std} options disable certain
f458d1d5
ZW
4083keywords. This causes trouble when you want to use GNU C extensions, or
4084a general-purpose header file that should be usable by all programs,
4085including ISO C programs. The keywords @code{asm}, @code{typeof} and
4086@code{inline} are not available in programs compiled with
4087@option{-ansi} or @option{-std} (although @code{inline} can be used in a
4088program compiled with @option{-std=c99}). The ISO C99 keyword
5490d604
JM
4089@code{restrict} is only available when @option{-std=gnu99} (which will
4090eventually be the default) or @option{-std=c99} (or the equivalent
bd819a4a 4091@option{-std=iso9899:1999}) is used.
c1f7febf
RK
4092
4093The way to solve these problems is to put @samp{__} at the beginning and
4094end of each problematical keyword. For example, use @code{__asm__}
f458d1d5 4095instead of @code{asm}, and @code{__inline__} instead of @code{inline}.
c1f7febf
RK
4096
4097Other C compilers won't accept these alternative keywords; if you want to
4098compile with another compiler, you can define the alternate keywords as
4099macros to replace them with the customary keywords. It looks like this:
4100
4101@example
4102#ifndef __GNUC__
4103#define __asm__ asm
4104#endif
4105@end example
4106
6e6b0525 4107@findex __extension__
84330467
JM
4108@opindex pedantic
4109@option{-pedantic} and other options cause warnings for many GNU C extensions.
dbe519e0 4110You can
c1f7febf
RK
4111prevent such warnings within one expression by writing
4112@code{__extension__} before the expression. @code{__extension__} has no
4113effect aside from this.
4114
4115@node Incomplete Enums
4116@section Incomplete @code{enum} Types
4117
4118You can define an @code{enum} tag without specifying its possible values.
4119This results in an incomplete type, much like what you get if you write
4120@code{struct foo} without describing the elements. A later declaration
4121which does specify the possible values completes the type.
4122
4123You can't allocate variables or storage using the type while it is
4124incomplete. However, you can work with pointers to that type.
4125
4126This extension may not be very useful, but it makes the handling of
4127@code{enum} more consistent with the way @code{struct} and @code{union}
4128are handled.
4129
4130This extension is not supported by GNU C++.
4131
4132@node Function Names
4133@section Function Names as Strings
4b404517
JM
4134@cindex @code{__FUNCTION__} identifier
4135@cindex @code{__PRETTY_FUNCTION__} identifier
4136@cindex @code{__func__} identifier
c1f7febf 4137
f0523f02 4138GCC predefines two magic identifiers to hold the name of the current
767094dd
JM
4139function. The identifier @code{__FUNCTION__} holds the name of the function
4140as it appears in the source. The identifier @code{__PRETTY_FUNCTION__}
22acfb79
NM
4141holds the name of the function pretty printed in a language specific
4142fashion.
c1f7febf
RK
4143
4144These names are always the same in a C function, but in a C++ function
4145they may be different. For example, this program:
4146
4147@smallexample
4148extern "C" @{
4149extern int printf (char *, ...);
4150@}
4151
4152class a @{
4153 public:
4154 sub (int i)
4155 @{
4156 printf ("__FUNCTION__ = %s\n", __FUNCTION__);
4157 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
4158 @}
4159@};
4160
4161int
4162main (void)
4163@{
4164 a ax;
4165 ax.sub (0);
4166 return 0;
4167@}
4168@end smallexample
4169
4170@noindent
4171gives this output:
4172
4173@smallexample
4174__FUNCTION__ = sub
4175__PRETTY_FUNCTION__ = int a::sub (int)
4176@end smallexample
4177
22acfb79 4178The compiler automagically replaces the identifiers with a string
767094dd 4179literal containing the appropriate name. Thus, they are neither
22acfb79 4180preprocessor macros, like @code{__FILE__} and @code{__LINE__}, nor
767094dd
JM
4181variables. This means that they catenate with other string literals, and
4182that they can be used to initialize char arrays. For example
22acfb79
NM
4183
4184@smallexample
4185char here[] = "Function " __FUNCTION__ " in " __FILE__;
4186@end smallexample
4187
4188On the other hand, @samp{#ifdef __FUNCTION__} does not have any special
c1f7febf
RK
4189meaning inside a function, since the preprocessor does not do anything
4190special with the identifier @code{__FUNCTION__}.
4191
9aa8a1df
NB
4192Note that these semantics are deprecated, and that GCC 3.2 will handle
4193@code{__FUNCTION__} and @code{__PRETTY_FUNCTION__} the same way as
4194@code{__func__}. @code{__func__} is defined by the ISO standard C99:
22acfb79
NM
4195
4196@display
4197The identifier @code{__func__} is implicitly declared by the translator
4198as if, immediately following the opening brace of each function
4199definition, the declaration
4200
4201@smallexample
4202static const char __func__[] = "function-name";
4203@end smallexample
4204
4205appeared, where function-name is the name of the lexically-enclosing
767094dd 4206function. This name is the unadorned name of the function.
22acfb79
NM
4207@end display
4208
4209By this definition, @code{__func__} is a variable, not a string literal.
4210In particular, @code{__func__} does not catenate with other string
4211literals.
4212
4213In @code{C++}, @code{__FUNCTION__} and @code{__PRETTY_FUNCTION__} are
4214variables, declared in the same way as @code{__func__}.
4215
c1f7febf
RK
4216@node Return Address
4217@section Getting the Return or Frame Address of a Function
4218
4219These functions may be used to get information about the callers of a
4220function.
4221
84330467 4222@deftypefn {Built-in Function} {void *} __builtin_return_address (unsigned int @var{level})
c1f7febf
RK
4223This function returns the return address of the current function, or of
4224one of its callers. The @var{level} argument is number of frames to
4225scan up the call stack. A value of @code{0} yields the return address
4226of the current function, a value of @code{1} yields the return address
4227of the caller of the current function, and so forth.
4228
4229The @var{level} argument must be a constant integer.
4230
4231On some machines it may be impossible to determine the return address of
4232any function other than the current one; in such cases, or when the top
dd96fbc5
L
4233of the stack has been reached, this function will return @code{0} or a
4234random value. In addition, @code{__builtin_frame_address} may be used
4235to determine if the top of the stack has been reached.
c1f7febf 4236
df2a54e9 4237This function should only be used with a nonzero argument for debugging
c1f7febf 4238purposes.
84330467 4239@end deftypefn
c1f7febf 4240
84330467 4241@deftypefn {Built-in Function} {void *} __builtin_frame_address (unsigned int @var{level})
c1f7febf
RK
4242This function is similar to @code{__builtin_return_address}, but it
4243returns the address of the function frame rather than the return address
4244of the function. Calling @code{__builtin_frame_address} with a value of
4245@code{0} yields the frame address of the current function, a value of
4246@code{1} yields the frame address of the caller of the current function,
4247and so forth.
4248
4249The frame is the area on the stack which holds local variables and saved
4250registers. The frame address is normally the address of the first word
4251pushed on to the stack by the function. However, the exact definition
4252depends upon the processor and the calling convention. If the processor
4253has a dedicated frame pointer register, and the function has a frame,
4254then @code{__builtin_frame_address} will return the value of the frame
4255pointer register.
4256
dd96fbc5
L
4257On some machines it may be impossible to determine the frame address of
4258any function other than the current one; in such cases, or when the top
4259of the stack has been reached, this function will return @code{0} if
4260the first frame pointer is properly initialized by the startup code.
4261
df2a54e9 4262This function should only be used with a nonzero argument for debugging
dd96fbc5 4263purposes.
84330467 4264@end deftypefn
c1f7febf 4265
1255c85c
BS
4266@node Vector Extensions
4267@section Using vector instructions through built-in functions
4268
4269On some targets, the instruction set contains SIMD vector instructions that
4270operate on multiple values contained in one large register at the same time.
4271For example, on the i386 the MMX, 3Dnow! and SSE extensions can be used
4272this way.
4273
4274The first step in using these extensions is to provide the necessary data
4275types. This should be done using an appropriate @code{typedef}:
4276
4277@example
4278typedef int v4si __attribute__ ((mode(V4SI)));
4279@end example
4280
4281The base type @code{int} is effectively ignored by the compiler, the
4282actual properties of the new type @code{v4si} are defined by the
4283@code{__attribute__}. It defines the machine mode to be used; for vector
80ebf43e
BS
4284types these have the form @code{V@var{n}@var{B}}; @var{n} should be the
4285number of elements in the vector, and @var{B} should be the base mode of the
1255c85c
BS
4286individual elements. The following can be used as base modes:
4287
4288@table @code
4289@item QI
4290An integer that is as wide as the smallest addressable unit, usually 8 bits.
4291@item HI
4292An integer, twice as wide as a QI mode integer, usually 16 bits.
4293@item SI
4294An integer, four times as wide as a QI mode integer, usually 32 bits.
4295@item DI
4296An integer, eight times as wide as a QI mode integer, usually 64 bits.
4297@item SF
4298A floating point value, as wide as a SI mode integer, usually 32 bits.
4299@item DF
4300A floating point value, as wide as a DI mode integer, usually 64 bits.
4301@end table
4302
4303Not all base types or combinations are always valid; which modes can be used
4304is determined by the target machine. For example, if targetting the i386 MMX
4305extensions, only @code{V8QI}, @code{V4HI} and @code{V2SI} are allowed modes.
4306
4307There are no @code{V1xx} vector modes - they would be identical to the
4308corresponding base mode.
4309
4310There is no distinction between signed and unsigned vector modes. This
4311distinction is made by the operations that perform on the vectors, not
4312by the data type.
4313
4314The types defined in this manner are somewhat special, they cannot be
4315used with most normal C operations (i.e., a vector addition can @emph{not}
4316be represented by a normal addition of two vector type variables). You
4317can declare only variables and use them in function calls and returns, as
4318well as in assignments and some casts. It is possible to cast from one
4319vector type to another, provided they are of the same size (in fact, you
4320can also cast vectors to and from other datatypes of the same size).
4321
4322A port that supports vector operations provides a set of built-in functions
4323that can be used to operate on vectors. For example, a function to add two
4324vectors and multiply the result by a third could look like this:
4325
4326@example
4327v4si f (v4si a, v4si b, v4si c)
4328@{
4329 v4si tmp = __builtin_addv4si (a, b);
4330 return __builtin_mulv4si (tmp, c);
4331@}
4332
4333@end example
4334
185ebd6c 4335@node Other Builtins
f0523f02 4336@section Other built-in functions provided by GCC
c771326b 4337@cindex built-in functions
01702459
JM
4338@findex __builtin_isgreater
4339@findex __builtin_isgreaterequal
4340@findex __builtin_isless
4341@findex __builtin_islessequal
4342@findex __builtin_islessgreater
4343@findex __builtin_isunordered
4344@findex abort
4345@findex abs
4346@findex alloca
4347@findex bcmp
4348@findex bzero
341e3d11
JM
4349@findex cimag
4350@findex cimagf
4351@findex cimagl
4352@findex conj
4353@findex conjf
4354@findex conjl
01702459
JM
4355@findex cos
4356@findex cosf
4357@findex cosl
341e3d11
JM
4358@findex creal
4359@findex crealf
4360@findex creall
01702459
JM
4361@findex exit
4362@findex _exit
796cdb65 4363@findex _Exit
01702459
JM
4364@findex fabs
4365@findex fabsf
4366@findex fabsl
4367@findex ffs
18f988a0 4368@findex fprintf
b4c984fb 4369@findex fprintf_unlocked
01702459 4370@findex fputs
b4c984fb 4371@findex fputs_unlocked
e78f4a97 4372@findex imaxabs
c7b6c6cd 4373@findex index
01702459
JM
4374@findex labs
4375@findex llabs
4376@findex memcmp
4377@findex memcpy
4378@findex memset
4379@findex printf
b4c984fb 4380@findex printf_unlocked
c7b6c6cd 4381@findex rindex
01702459
JM
4382@findex sin
4383@findex sinf
4384@findex sinl
4385@findex sqrt
4386@findex sqrtf
4387@findex sqrtl
d118937d 4388@findex strcat
01702459
JM
4389@findex strchr
4390@findex strcmp
4391@findex strcpy
d118937d 4392@findex strcspn
01702459 4393@findex strlen
d118937d 4394@findex strncat
da9e9f08
KG
4395@findex strncmp
4396@findex strncpy
01702459
JM
4397@findex strpbrk
4398@findex strrchr
d118937d 4399@findex strspn
01702459 4400@findex strstr
185ebd6c 4401
f0523f02 4402GCC provides a large number of built-in functions other than the ones
185ebd6c
RH
4403mentioned above. Some of these are for internal use in the processing
4404of exceptions or variable-length argument lists and will not be
4405documented here because they may change from time to time; we do not
4406recommend general use of these functions.
4407
4408The remaining functions are provided for optimization purposes.
4409
84330467 4410@opindex fno-builtin
9c34dbbf
ZW
4411GCC includes built-in versions of many of the functions in the standard
4412C library. The versions prefixed with @code{__builtin_} will always be
4413treated as having the same meaning as the C library function even if you
4414specify the @option{-fno-builtin} option. (@pxref{C Dialect Options})
4415Many of these functions are only optimized in certain cases; if they are
01702459
JM
4416not optimized in a particular case, a call to the library function will
4417be emitted.
4418
84330467
JM
4419@opindex ansi
4420@opindex std
796cdb65
JM
4421The functions @code{abort}, @code{exit}, @code{_Exit} and @code{_exit}
4422are recognized and presumed not to return, but otherwise are not built
84330467
JM
4423in. @code{_exit} is not recognized in strict ISO C mode (@option{-ansi},
4424@option{-std=c89} or @option{-std=c99}). @code{_Exit} is not recognized in
4425strict C89 mode (@option{-ansi} or @option{-std=c89}).
01702459
JM
4426
4427Outside strict ISO C mode, the functions @code{alloca}, @code{bcmp},
b4c984fb
KG
4428@code{bzero}, @code{index}, @code{rindex}, @code{ffs}, @code{fputs_unlocked},
4429@code{printf_unlocked} and @code{fprintf_unlocked} may be handled as
4430built-in functions. All these functions have corresponding versions
9c34dbbf
ZW
4431prefixed with @code{__builtin_}, which may be used even in strict C89
4432mode.
01702459 4433
341e3d11
JM
4434The ISO C99 functions @code{conj}, @code{conjf}, @code{conjl},
4435@code{creal}, @code{crealf}, @code{creall}, @code{cimag}, @code{cimagf},
9c34dbbf
ZW
4436@code{cimagl}, @code{llabs} and @code{imaxabs} are handled as built-in
4437functions except in strict ISO C89 mode. There are also built-in
4438versions of the ISO C99 functions @code{cosf}, @code{cosl},
4439@code{fabsf}, @code{fabsl}, @code{sinf}, @code{sinl}, @code{sqrtf}, and
4440@code{sqrtl}, that are recognized in any mode since ISO C89 reserves
4441these names for the purpose to which ISO C99 puts them. All these
4442functions have corresponding versions prefixed with @code{__builtin_}.
4443
4444The ISO C89 functions @code{abs}, @code{cos}, @code{fabs},
18f988a0
KG
4445@code{fprintf}, @code{fputs}, @code{labs}, @code{memcmp}, @code{memcpy},
4446@code{memset}, @code{printf}, @code{sin}, @code{sqrt}, @code{strcat},
4447@code{strchr}, @code{strcmp}, @code{strcpy}, @code{strcspn},
4448@code{strlen}, @code{strncat}, @code{strncmp}, @code{strncpy},
9c34dbbf
ZW
4449@code{strpbrk}, @code{strrchr}, @code{strspn}, and @code{strstr} are all
4450recognized as built-in functions unless @option{-fno-builtin} is
7d14c755 4451specified (or @option{-fno-builtin-@var{function}} is specified for an
dc6f4158
AJ
4452individual function). All of these functions have corresponding
4453versions prefixed with @code{__builtin_}.
9c34dbbf
ZW
4454
4455GCC provides built-in versions of the ISO C99 floating point comparison
4456macros that avoid raising exceptions for unordered operands. They have
4457the same names as the standard macros ( @code{isgreater},
4458@code{isgreaterequal}, @code{isless}, @code{islessequal},
4459@code{islessgreater}, and @code{isunordered}) , with @code{__builtin_}
4460prefixed. We intend for a library implementor to be able to simply
4461@code{#define} each standard macro to its built-in equivalent.
185ebd6c 4462
ecbcf7b3
AH
4463@deftypefn {Built-in Function} int __builtin_types_compatible_p (@var{type1}, @var{type2})
4464
4465You can use the built-in function @code{__builtin_types_compatible_p} to
4466determine whether two types are the same.
4467
4468This built-in function returns 1 if the unqualified versions of the
4469types @var{type1} and @var{type2} (which are types, not expressions) are
4470compatible, 0 otherwise. The result of this built-in function can be
4471used in integer constant expressions.
4472
4473This built-in function ignores top level qualifiers (e.g., @code{const},
4474@code{volatile}). For example, @code{int} is equivalent to @code{const
4475int}.
4476
4477The type @code{int[]} and @code{int[5]} are compatible. On the other
4478hand, @code{int} and @code{char *} are not compatible, even if the size
4479of their types, on the particular architecture are the same. Also, the
4480amount of pointer indirection is taken into account when determining
4481similarity. Consequently, @code{short *} is not similar to
4482@code{short **}. Furthermore, two types that are typedefed are
4483considered compatible if their underlying types are compatible.
4484
4485An @code{enum} type is considered to be compatible with another
4486@code{enum} type. For example, @code{enum @{foo, bar@}} is similar to
4487@code{enum @{hot, dog@}}.
4488
4489You would typically use this function in code whose execution varies
4490depending on the arguments' types. For example:
4491
4492@smallexample
6e5bb5ad
JM
4493#define foo(x) \
4494 (@{ \
4495 typeof (x) tmp; \
4496 if (__builtin_types_compatible_p (typeof (x), long double)) \
4497 tmp = foo_long_double (tmp); \
4498 else if (__builtin_types_compatible_p (typeof (x), double)) \
4499 tmp = foo_double (tmp); \
4500 else if (__builtin_types_compatible_p (typeof (x), float)) \
4501 tmp = foo_float (tmp); \
4502 else \
4503 abort (); \
4504 tmp; \
ecbcf7b3
AH
4505 @})
4506@end smallexample
4507
4508@emph{Note:} This construct is only available for C.
4509
4510@end deftypefn
4511
4512@deftypefn {Built-in Function} @var{type} __builtin_choose_expr (@var{const_exp}, @var{exp1}, @var{exp2})
4513
4514You can use the built-in function @code{__builtin_choose_expr} to
4515evaluate code depending on the value of a constant expression. This
4516built-in function returns @var{exp1} if @var{const_exp}, which is a
4517constant expression that must be able to be determined at compile time,
4518is nonzero. Otherwise it returns 0.
4519
4520This built-in function is analogous to the @samp{? :} operator in C,
4521except that the expression returned has its type unaltered by promotion
4522rules. Also, the built-in function does not evaluate the expression
4523that was not chosen. For example, if @var{const_exp} evaluates to true,
4524@var{exp2} is not evaluated even if it has side-effects.
4525
4526This built-in function can return an lvalue if the chosen argument is an
4527lvalue.
4528
4529If @var{exp1} is returned, the return type is the same as @var{exp1}'s
4530type. Similarly, if @var{exp2} is returned, its return type is the same
4531as @var{exp2}.
4532
4533Example:
4534
4535@smallexample
4536#define foo(x) \
4537 __builtin_choose_expr (__builtin_types_compatible_p (typeof (x), double), \
4538 foo_double (x), \
4539 __builtin_choose_expr (__builtin_types_compatible_p (typeof (x), float), \
4540 foo_float (x), \
4541 /* @r{The void expression results in a compile-time error} \
4542 @r{when assigning the result to something.} */ \
4543 (void)0))
4544@end smallexample
4545
4546@emph{Note:} This construct is only available for C. Furthermore, the
4547unused expression (@var{exp1} or @var{exp2} depending on the value of
4548@var{const_exp}) may still generate syntax errors. This may change in
4549future revisions.
4550
4551@end deftypefn
4552
84330467
JM
4553@deftypefn {Built-in Function} int __builtin_constant_p (@var{exp})
4554You can use the built-in function @code{__builtin_constant_p} to
185ebd6c 4555determine if a value is known to be constant at compile-time and hence
f0523f02 4556that GCC can perform constant-folding on expressions involving that
185ebd6c
RH
4557value. The argument of the function is the value to test. The function
4558returns the integer 1 if the argument is known to be a compile-time
4559constant and 0 if it is not known to be a compile-time constant. A
4560return of 0 does not indicate that the value is @emph{not} a constant,
f0523f02 4561but merely that GCC cannot prove it is a constant with the specified
84330467 4562value of the @option{-O} option.
185ebd6c
RH
4563
4564You would typically use this function in an embedded application where
4565memory was a critical resource. If you have some complex calculation,
4566you may want it to be folded if it involves constants, but need to call
4567a function if it does not. For example:
4568
4d390518 4569@smallexample
310668e8
JM
4570#define Scale_Value(X) \
4571 (__builtin_constant_p (X) \
4572 ? ((X) * SCALE + OFFSET) : Scale (X))
185ebd6c
RH
4573@end smallexample
4574
84330467 4575You may use this built-in function in either a macro or an inline
185ebd6c 4576function. However, if you use it in an inlined function and pass an
f0523f02 4577argument of the function as the argument to the built-in, GCC will
185ebd6c 4578never return 1 when you call the inline function with a string constant
4b404517 4579or compound literal (@pxref{Compound Literals}) and will not return 1
185ebd6c 4580when you pass a constant numeric value to the inline function unless you
84330467 4581specify the @option{-O} option.
13104975
ZW
4582
4583You may also use @code{__builtin_constant_p} in initializers for static
4584data. For instance, you can write
4585
4586@smallexample
79323c50 4587static const int table[] = @{
13104975
ZW
4588 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
4589 /* ... */
79323c50 4590@};
13104975
ZW
4591@end smallexample
4592
4593@noindent
4594This is an acceptable initializer even if @var{EXPRESSION} is not a
4595constant expression. GCC must be more conservative about evaluating the
4596built-in in this case, because it has no opportunity to perform
4597optimization.
4598
4599Previous versions of GCC did not accept this built-in in data
4600initializers. The earliest version where it is completely safe is
46013.0.1.
84330467 4602@end deftypefn
185ebd6c 4603
84330467
JM
4604@deftypefn {Built-in Function} long __builtin_expect (long @var{exp}, long @var{c})
4605@opindex fprofile-arcs
02f52e19 4606You may use @code{__builtin_expect} to provide the compiler with
994a57cd 4607branch prediction information. In general, you should prefer to
84330467 4608use actual profile feedback for this (@option{-fprofile-arcs}), as
994a57cd 4609programmers are notoriously bad at predicting how their programs
60b6e1f5 4610actually perform. However, there are applications in which this
994a57cd
RH
4611data is hard to collect.
4612
4613The return value is the value of @var{exp}, which should be an
4614integral expression. The value of @var{c} must be a compile-time
84330467 4615constant. The semantics of the built-in are that it is expected
994a57cd
RH
4616that @var{exp} == @var{c}. For example:
4617
4618@smallexample
4619if (__builtin_expect (x, 0))
4620 foo ();
4621@end smallexample
4622
4623@noindent
4624would indicate that we do not expect to call @code{foo}, since
4625we expect @code{x} to be zero. Since you are limited to integral
4626expressions for @var{exp}, you should use constructions such as
4627
4628@smallexample
4629if (__builtin_expect (ptr != NULL, 1))
4630 error ();
4631@end smallexample
4632
4633@noindent
4634when testing pointer or floating-point values.
84330467 4635@end deftypefn
994a57cd 4636
3bca17dd 4637@deftypefn {Built-in Function} void __builtin_prefetch (const void *@var{addr}, ...)
a9ccbb60
JJ
4638This function is used to minimize cache-miss latency by moving data into
4639a cache before it is accessed.
4640You can insert calls to @code{__builtin_prefetch} into code for which
4641you know addresses of data in memory that is likely to be accessed soon.
4642If the target supports them, data prefetch instructions will be generated.
4643If the prefetch is done early enough before the access then the data will
4644be in the cache by the time it is accessed.
4645
4646The value of @var{addr} is the address of the memory to prefetch.
e83d297b 4647There are two optional arguments, @var{rw} and @var{locality}.
a9ccbb60 4648The value of @var{rw} is a compile-time constant one or zero; one
e83d297b
JJ
4649means that the prefetch is preparing for a write to the memory address
4650and zero, the default, means that the prefetch is preparing for a read.
a9ccbb60
JJ
4651The value @var{locality} must be a compile-time constant integer between
4652zero and three. A value of zero means that the data has no temporal
4653locality, so it need not be left in the cache after the access. A value
4654of three means that the data has a high degree of temporal locality and
4655should be left in all levels of cache possible. Values of one and two
e83d297b
JJ
4656mean, respectively, a low or moderate degree of temporal locality. The
4657default is three.
a9ccbb60
JJ
4658
4659@smallexample
4660for (i = 0; i < n; i++)
4661 @{
4662 a[i] = a[i] + b[i];
4663 __builtin_prefetch (&a[i+j], 1, 1);
4664 __builtin_prefetch (&b[i+j], 0, 1);
4665 /* ... */
4666 @}
4667@end smallexample
4668
f282ffb3 4669Data prefetch does not generate faults if @var{addr} is invalid, but
a9ccbb60
JJ
4670the address expression itself must be valid. For example, a prefetch
4671of @code{p->next} will not fault if @code{p->next} is not a valid
4672address, but evaluation will fault if @code{p} is not a valid address.
4673
4674If the target does not support data prefetch, the address expression
4675is evaluated if it includes side effects but no other code is generated
4676and GCC does not issue a warning.
4677@end deftypefn
4678
0975678f
JM
4679@node Target Builtins
4680@section Built-in Functions Specific to Particular Target Machines
4681
4682On some target machines, GCC supports many built-in functions specific
4683to those machines. Generally these generate calls to specific machine
4684instructions, but allow the compiler to schedule those calls.
4685
4686@menu
4687* X86 Built-in Functions::
333c8841 4688* PowerPC AltiVec Built-in Functions::
0975678f
JM
4689@end menu
4690
4691@node X86 Built-in Functions
4692@subsection X86 Built-in Functions
4693
4694These built-in functions are available for the i386 and x86-64 family
4695of computers, depending on the command-line switches used.
4696
4697The following machine modes are available for use with MMX built-in functions
333c8841
AH
4698(@pxref{Vector Extensions}): @code{V2SI} for a vector of two 32-bit integers,
4699@code{V4HI} for a vector of four 16-bit integers, and @code{V8QI} for a
4700vector of eight 8-bit integers. Some of the built-in functions operate on
4701MMX registers as a whole 64-bit entity, these use @code{DI} as their mode.
0975678f
JM
4702
4703If 3Dnow extensions are enabled, @code{V2SF} is used as a mode for a vector
333c8841 4704of two 32-bit floating point values.
0975678f 4705
333c8841
AH
4706If SSE extensions are enabled, @code{V4SF} is used for a vector of four 32-bit
4707floating point values. Some instructions use a vector of four 32-bit
0975678f 4708integers, these use @code{V4SI}. Finally, some instructions operate on an
333c8841 4709entire vector register, interpreting it as a 128-bit integer, these use mode
0975678f
JM
4710@code{TI}.
4711
4712The following built-in functions are made available by @option{-mmmx}.
4713All of them generate the machine instruction that is part of the name.
4714
4715@example
4716v8qi __builtin_ia32_paddb (v8qi, v8qi)
4717v4hi __builtin_ia32_paddw (v4hi, v4hi)
4718v2si __builtin_ia32_paddd (v2si, v2si)
4719v8qi __builtin_ia32_psubb (v8qi, v8qi)
4720v4hi __builtin_ia32_psubw (v4hi, v4hi)
4721v2si __builtin_ia32_psubd (v2si, v2si)
4722v8qi __builtin_ia32_paddsb (v8qi, v8qi)
4723v4hi __builtin_ia32_paddsw (v4hi, v4hi)
4724v8qi __builtin_ia32_psubsb (v8qi, v8qi)
4725v4hi __builtin_ia32_psubsw (v4hi, v4hi)
4726v8qi __builtin_ia32_paddusb (v8qi, v8qi)
4727v4hi __builtin_ia32_paddusw (v4hi, v4hi)
4728v8qi __builtin_ia32_psubusb (v8qi, v8qi)
4729v4hi __builtin_ia32_psubusw (v4hi, v4hi)
4730v4hi __builtin_ia32_pmullw (v4hi, v4hi)
4731v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
4732di __builtin_ia32_pand (di, di)
4733di __builtin_ia32_pandn (di,di)
4734di __builtin_ia32_por (di, di)
4735di __builtin_ia32_pxor (di, di)
4736v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
4737v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
4738v2si __builtin_ia32_pcmpeqd (v2si, v2si)
4739v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
4740v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
4741v2si __builtin_ia32_pcmpgtd (v2si, v2si)
4742v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
4743v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
4744v2si __builtin_ia32_punpckhdq (v2si, v2si)
4745v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
4746v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
4747v2si __builtin_ia32_punpckldq (v2si, v2si)
4748v8qi __builtin_ia32_packsswb (v4hi, v4hi)
4749v4hi __builtin_ia32_packssdw (v2si, v2si)
4750v8qi __builtin_ia32_packuswb (v4hi, v4hi)
4751@end example
4752
4753The following built-in functions are made available either with
4754@option{-msse}, or with a combination of @option{-m3dnow} and
4755@option{-march=athlon}. All of them generate the machine
4756instruction that is part of the name.
4757
4758@example
4759v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
4760v8qi __builtin_ia32_pavgb (v8qi, v8qi)
4761v4hi __builtin_ia32_pavgw (v4hi, v4hi)
4762v4hi __builtin_ia32_psadbw (v8qi, v8qi)
4763v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
4764v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
4765v8qi __builtin_ia32_pminub (v8qi, v8qi)
4766v4hi __builtin_ia32_pminsw (v4hi, v4hi)
4767int __builtin_ia32_pextrw (v4hi, int)
4768v4hi __builtin_ia32_pinsrw (v4hi, int, int)
4769int __builtin_ia32_pmovmskb (v8qi)
4770void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
4771void __builtin_ia32_movntq (di *, di)
4772void __builtin_ia32_sfence (void)
4773@end example
4774
4775The following built-in functions are available when @option{-msse} is used.
4776All of them generate the machine instruction that is part of the name.
4777
4778@example
4779int __builtin_ia32_comieq (v4sf, v4sf)
4780int __builtin_ia32_comineq (v4sf, v4sf)
4781int __builtin_ia32_comilt (v4sf, v4sf)
4782int __builtin_ia32_comile (v4sf, v4sf)
4783int __builtin_ia32_comigt (v4sf, v4sf)
4784int __builtin_ia32_comige (v4sf, v4sf)
4785int __builtin_ia32_ucomieq (v4sf, v4sf)
4786int __builtin_ia32_ucomineq (v4sf, v4sf)
4787int __builtin_ia32_ucomilt (v4sf, v4sf)
4788int __builtin_ia32_ucomile (v4sf, v4sf)
4789int __builtin_ia32_ucomigt (v4sf, v4sf)
4790int __builtin_ia32_ucomige (v4sf, v4sf)
4791v4sf __builtin_ia32_addps (v4sf, v4sf)
4792v4sf __builtin_ia32_subps (v4sf, v4sf)
4793v4sf __builtin_ia32_mulps (v4sf, v4sf)
4794v4sf __builtin_ia32_divps (v4sf, v4sf)
4795v4sf __builtin_ia32_addss (v4sf, v4sf)
4796v4sf __builtin_ia32_subss (v4sf, v4sf)
4797v4sf __builtin_ia32_mulss (v4sf, v4sf)
4798v4sf __builtin_ia32_divss (v4sf, v4sf)
4799v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
4800v4si __builtin_ia32_cmpltps (v4sf, v4sf)
4801v4si __builtin_ia32_cmpleps (v4sf, v4sf)
4802v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
4803v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
4804v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
4805v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
4806v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
4807v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
4808v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
4809v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
4810v4si __builtin_ia32_cmpordps (v4sf, v4sf)
4811v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
4812v4si __builtin_ia32_cmpltss (v4sf, v4sf)
4813v4si __builtin_ia32_cmpless (v4sf, v4sf)
4814v4si __builtin_ia32_cmpgtss (v4sf, v4sf)
4815v4si __builtin_ia32_cmpgess (v4sf, v4sf)
4816v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
4817v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
4818v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
4819v4si __builtin_ia32_cmpnless (v4sf, v4sf)
4820v4si __builtin_ia32_cmpngtss (v4sf, v4sf)
4821v4si __builtin_ia32_cmpngess (v4sf, v4sf)
4822v4si __builtin_ia32_cmpordss (v4sf, v4sf)
4823v4sf __builtin_ia32_maxps (v4sf, v4sf)
4824v4sf __builtin_ia32_maxss (v4sf, v4sf)
4825v4sf __builtin_ia32_minps (v4sf, v4sf)
4826v4sf __builtin_ia32_minss (v4sf, v4sf)
4827v4sf __builtin_ia32_andps (v4sf, v4sf)
4828v4sf __builtin_ia32_andnps (v4sf, v4sf)
4829v4sf __builtin_ia32_orps (v4sf, v4sf)
4830v4sf __builtin_ia32_xorps (v4sf, v4sf)
4831v4sf __builtin_ia32_movss (v4sf, v4sf)
4832v4sf __builtin_ia32_movhlps (v4sf, v4sf)
4833v4sf __builtin_ia32_movlhps (v4sf, v4sf)
4834v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
4835v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
4836v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
4837v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
4838v2si __builtin_ia32_cvtps2pi (v4sf)
4839int __builtin_ia32_cvtss2si (v4sf)
4840v2si __builtin_ia32_cvttps2pi (v4sf)
4841int __builtin_ia32_cvttss2si (v4sf)
4842v4sf __builtin_ia32_rcpps (v4sf)
4843v4sf __builtin_ia32_rsqrtps (v4sf)
4844v4sf __builtin_ia32_sqrtps (v4sf)
4845v4sf __builtin_ia32_rcpss (v4sf)
4846v4sf __builtin_ia32_rsqrtss (v4sf)
4847v4sf __builtin_ia32_sqrtss (v4sf)
4848v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
4849void __builtin_ia32_movntps (float *, v4sf)
4850int __builtin_ia32_movmskps (v4sf)
4851@end example
4852
4853The following built-in functions are available when @option{-msse} is used.
4854
4855@table @code
4856@item v4sf __builtin_ia32_loadaps (float *)
4857Generates the @code{movaps} machine instruction as a load from memory.
4858@item void __builtin_ia32_storeaps (float *, v4sf)
4859Generates the @code{movaps} machine instruction as a store to memory.
4860@item v4sf __builtin_ia32_loadups (float *)
4861Generates the @code{movups} machine instruction as a load from memory.
4862@item void __builtin_ia32_storeups (float *, v4sf)
4863Generates the @code{movups} machine instruction as a store to memory.
4864@item v4sf __builtin_ia32_loadsss (float *)
4865Generates the @code{movss} machine instruction as a load from memory.
4866@item void __builtin_ia32_storess (float *, v4sf)
4867Generates the @code{movss} machine instruction as a store to memory.
4868@item v4sf __builtin_ia32_loadhps (v4sf, v2si *)
4869Generates the @code{movhps} machine instruction as a load from memory.
4870@item v4sf __builtin_ia32_loadlps (v4sf, v2si *)
4871Generates the @code{movlps} machine instruction as a load from memory
4872@item void __builtin_ia32_storehps (v4sf, v2si *)
4873Generates the @code{movhps} machine instruction as a store to memory.
4874@item void __builtin_ia32_storelps (v4sf, v2si *)
4875Generates the @code{movlps} machine instruction as a store to memory.
4876@end table
4877
4878The following built-in functions are available when @option{-m3dnow} is used.
4879All of them generate the machine instruction that is part of the name.
4880
4881@example
4882void __builtin_ia32_femms (void)
4883v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
4884v2si __builtin_ia32_pf2id (v2sf)
4885v2sf __builtin_ia32_pfacc (v2sf, v2sf)
4886v2sf __builtin_ia32_pfadd (v2sf, v2sf)
4887v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
4888v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
4889v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
4890v2sf __builtin_ia32_pfmax (v2sf, v2sf)
4891v2sf __builtin_ia32_pfmin (v2sf, v2sf)
4892v2sf __builtin_ia32_pfmul (v2sf, v2sf)
4893v2sf __builtin_ia32_pfrcp (v2sf)
4894v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
4895v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
4896v2sf __builtin_ia32_pfrsqrt (v2sf)
4897v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
4898v2sf __builtin_ia32_pfsub (v2sf, v2sf)
4899v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
4900v2sf __builtin_ia32_pi2fd (v2si)
4901v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
4902@end example
4903
4904The following built-in functions are available when both @option{-m3dnow}
4905and @option{-march=athlon} are used. All of them generate the machine
4906instruction that is part of the name.
4907
4908@example
4909v2si __builtin_ia32_pf2iw (v2sf)
4910v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
4911v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
4912v2sf __builtin_ia32_pi2fw (v2si)
4913v2sf __builtin_ia32_pswapdsf (v2sf)
4914v2si __builtin_ia32_pswapdsi (v2si)
4915@end example
4916
333c8841
AH
4917@node PowerPC AltiVec Built-in Functions
4918@subsection PowerPC AltiVec Built-in Functions
4919
4920These built-in functions are available for the PowerPC family
4921of computers, depending on the command-line switches used.
4922
4923The following machine modes are available for use with AltiVec built-in
4924functions (@pxref{Vector Extensions}): @code{V4SI} for a vector of four
492532-bit integers, @code{V4SF} for a vector of four 32-bit floating point
4926numbers, @code{V8HI} for a vector of eight 16-bit integers, and
4927@code{V16QI} for a vector of sixteen 8-bit integers.
4928
4929The following functions are made available by including
4930@code{<altivec.h>} and using @option{-maltivec} and
4931@option{-mabi=altivec}. The functions implement the functionality
4932described in Motorola's AltiVec Programming Interface Manual.
4933
ae4b4a02
AH
4934@emph{Note:} Only the @code{<altivec.h>} interface is supported.
4935Internally, GCC uses built-in functions to achieve the functionality in
4936the aforementioned header file, but they are not supported and are
4937subject to change without notice.
4938
333c8841
AH
4939@smallexample
4940vector signed char vec_abs (vector signed char, vector signed char);
4941vector signed short vec_abs (vector signed short, vector signed short);
4942vector signed int vec_abs (vector signed int, vector signed int);
4943vector signed float vec_abs (vector signed float, vector signed float);
4944
4945vector signed char vec_abss (vector signed char, vector signed char);
4946vector signed short vec_abss (vector signed short, vector signed short);
4947
4948vector signed char vec_add (vector signed char, vector signed char);
4949vector unsigned char vec_add (vector signed char, vector unsigned char);
4950
4951vector unsigned char vec_add (vector unsigned char, vector signed char);
4952
924fcc4e
JM
4953vector unsigned char vec_add (vector unsigned char,
4954 vector unsigned char);
333c8841 4955vector signed short vec_add (vector signed short, vector signed short);
924fcc4e
JM
4956vector unsigned short vec_add (vector signed short,
4957 vector unsigned short);
4958vector unsigned short vec_add (vector unsigned short,
4959 vector signed short);
6e5bb5ad
JM
4960vector unsigned short vec_add (vector unsigned short,
4961 vector unsigned short);
333c8841
AH
4962vector signed int vec_add (vector signed int, vector signed int);
4963vector unsigned int vec_add (vector signed int, vector unsigned int);
4964vector unsigned int vec_add (vector unsigned int, vector signed int);
4965vector unsigned int vec_add (vector unsigned int, vector unsigned int);
4966vector float vec_add (vector float, vector float);
4967
4968vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
4969
924fcc4e
JM
4970vector unsigned char vec_adds (vector signed char,
4971 vector unsigned char);
4972vector unsigned char vec_adds (vector unsigned char,
4973 vector signed char);
4974vector unsigned char vec_adds (vector unsigned char,
4975 vector unsigned char);
333c8841 4976vector signed char vec_adds (vector signed char, vector signed char);
924fcc4e
JM
4977vector unsigned short vec_adds (vector signed short,
4978 vector unsigned short);
4979vector unsigned short vec_adds (vector unsigned short,
4980 vector signed short);
6e5bb5ad
JM
4981vector unsigned short vec_adds (vector unsigned short,
4982 vector unsigned short);
333c8841
AH
4983vector signed short vec_adds (vector signed short, vector signed short);
4984
4985vector unsigned int vec_adds (vector signed int, vector unsigned int);
4986vector unsigned int vec_adds (vector unsigned int, vector signed int);
4987vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
4988
4989vector signed int vec_adds (vector signed int, vector signed int);
4990
4991vector float vec_and (vector float, vector float);
4992vector float vec_and (vector float, vector signed int);
4993vector float vec_and (vector signed int, vector float);
4994vector signed int vec_and (vector signed int, vector signed int);
4995vector unsigned int vec_and (vector signed int, vector unsigned int);
4996vector unsigned int vec_and (vector unsigned int, vector signed int);
4997vector unsigned int vec_and (vector unsigned int, vector unsigned int);
4998vector signed short vec_and (vector signed short, vector signed short);
924fcc4e
JM
4999vector unsigned short vec_and (vector signed short,
5000 vector unsigned short);
5001vector unsigned short vec_and (vector unsigned short,
5002 vector signed short);
6e5bb5ad
JM
5003vector unsigned short vec_and (vector unsigned short,
5004 vector unsigned short);
333c8841
AH
5005vector signed char vec_and (vector signed char, vector signed char);
5006vector unsigned char vec_and (vector signed char, vector unsigned char);
5007
5008vector unsigned char vec_and (vector unsigned char, vector signed char);
5009
924fcc4e
JM
5010vector unsigned char vec_and (vector unsigned char,
5011 vector unsigned char);
333c8841
AH
5012
5013vector float vec_andc (vector float, vector float);
5014vector float vec_andc (vector float, vector signed int);
5015vector float vec_andc (vector signed int, vector float);
5016vector signed int vec_andc (vector signed int, vector signed int);
5017vector unsigned int vec_andc (vector signed int, vector unsigned int);
5018vector unsigned int vec_andc (vector unsigned int, vector signed int);
5019vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
5020
5021vector signed short vec_andc (vector signed short, vector signed short);
5022
924fcc4e
JM
5023vector unsigned short vec_andc (vector signed short,
5024 vector unsigned short);
5025vector unsigned short vec_andc (vector unsigned short,
5026 vector signed short);
6e5bb5ad
JM
5027vector unsigned short vec_andc (vector unsigned short,
5028 vector unsigned short);
333c8841 5029vector signed char vec_andc (vector signed char, vector signed char);
924fcc4e
JM
5030vector unsigned char vec_andc (vector signed char,
5031 vector unsigned char);
5032vector unsigned char vec_andc (vector unsigned char,
5033 vector signed char);
5034vector unsigned char vec_andc (vector unsigned char,
5035 vector unsigned char);
333c8841 5036
924fcc4e
JM
5037vector unsigned char vec_avg (vector unsigned char,
5038 vector unsigned char);
333c8841 5039vector signed char vec_avg (vector signed char, vector signed char);
6e5bb5ad
JM
5040vector unsigned short vec_avg (vector unsigned short,
5041 vector unsigned short);
333c8841
AH
5042vector signed short vec_avg (vector signed short, vector signed short);
5043vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
5044vector signed int vec_avg (vector signed int, vector signed int);
5045
5046vector float vec_ceil (vector float);
5047
5048vector signed int vec_cmpb (vector float, vector float);
5049
5050vector signed char vec_cmpeq (vector signed char, vector signed char);
924fcc4e
JM
5051vector signed char vec_cmpeq (vector unsigned char,
5052 vector unsigned char);
5053vector signed short vec_cmpeq (vector signed short,
5054 vector signed short);
6e5bb5ad
JM
5055vector signed short vec_cmpeq (vector unsigned short,
5056 vector unsigned short);
333c8841
AH
5057vector signed int vec_cmpeq (vector signed int, vector signed int);
5058vector signed int vec_cmpeq (vector unsigned int, vector unsigned int);
5059vector signed int vec_cmpeq (vector float, vector float);
5060
5061vector signed int vec_cmpge (vector float, vector float);
5062
924fcc4e
JM
5063vector signed char vec_cmpgt (vector unsigned char,
5064 vector unsigned char);
333c8841 5065vector signed char vec_cmpgt (vector signed char, vector signed char);
6e5bb5ad
JM
5066vector signed short vec_cmpgt (vector unsigned short,
5067 vector unsigned short);
924fcc4e
JM
5068vector signed short vec_cmpgt (vector signed short,
5069 vector signed short);
333c8841
AH
5070vector signed int vec_cmpgt (vector unsigned int, vector unsigned int);
5071vector signed int vec_cmpgt (vector signed int, vector signed int);
5072vector signed int vec_cmpgt (vector float, vector float);
5073
5074vector signed int vec_cmple (vector float, vector float);
5075
924fcc4e
JM
5076vector signed char vec_cmplt (vector unsigned char,
5077 vector unsigned char);
333c8841 5078vector signed char vec_cmplt (vector signed char, vector signed char);
6e5bb5ad
JM
5079vector signed short vec_cmplt (vector unsigned short,
5080 vector unsigned short);
924fcc4e
JM
5081vector signed short vec_cmplt (vector signed short,
5082 vector signed short);
333c8841
AH
5083vector signed int vec_cmplt (vector unsigned int, vector unsigned int);
5084vector signed int vec_cmplt (vector signed int, vector signed int);
5085vector signed int vec_cmplt (vector float, vector float);
5086
5087vector float vec_ctf (vector unsigned int, const char);
5088vector float vec_ctf (vector signed int, const char);
5089
5090vector signed int vec_cts (vector float, const char);
5091
5092vector unsigned int vec_ctu (vector float, const char);
5093
5094void vec_dss (const char);
5095
5096void vec_dssall (void);
5097
5098void vec_dst (void *, int, const char);
5099
5100void vec_dstst (void *, int, const char);
5101
5102void vec_dststt (void *, int, const char);
5103
5104void vec_dstt (void *, int, const char);
5105
5106vector float vec_expte (vector float, vector float);
5107
5108vector float vec_floor (vector float, vector float);
5109
5110vector float vec_ld (int, vector float *);
5111vector float vec_ld (int, float *):
5112vector signed int vec_ld (int, int *);
5113vector signed int vec_ld (int, vector signed int *);
5114vector unsigned int vec_ld (int, vector unsigned int *);
5115vector unsigned int vec_ld (int, unsigned int *);
5116vector signed short vec_ld (int, short *, vector signed short *);
6e5bb5ad
JM
5117vector unsigned short vec_ld (int, unsigned short *,
5118 vector unsigned short *);
333c8841
AH
5119vector signed char vec_ld (int, signed char *);
5120vector signed char vec_ld (int, vector signed char *);
5121vector unsigned char vec_ld (int, unsigned char *);
5122vector unsigned char vec_ld (int, vector unsigned char *);
5123
5124vector signed char vec_lde (int, signed char *);
5125vector unsigned char vec_lde (int, unsigned char *);
5126vector signed short vec_lde (int, short *);
5127vector unsigned short vec_lde (int, unsigned short *);
5128vector float vec_lde (int, float *);
5129vector signed int vec_lde (int, int *);
5130vector unsigned int vec_lde (int, unsigned int *);
5131
5132void float vec_ldl (int, float *);
5133void float vec_ldl (int, vector float *);
5134void signed int vec_ldl (int, vector signed int *);
5135void signed int vec_ldl (int, int *);
5136void unsigned int vec_ldl (int, unsigned int *);
5137void unsigned int vec_ldl (int, vector unsigned int *);
5138void signed short vec_ldl (int, vector signed short *);
5139void signed short vec_ldl (int, short *);
5140void unsigned short vec_ldl (int, vector unsigned short *);
5141void unsigned short vec_ldl (int, unsigned short *);
5142void signed char vec_ldl (int, vector signed char *);
5143void signed char vec_ldl (int, signed char *);
5144void unsigned char vec_ldl (int, vector unsigned char *);
5145void unsigned char vec_ldl (int, unsigned char *);
5146
5147vector float vec_loge (vector float);
5148
5149vector unsigned char vec_lvsl (int, void *, int *);
5150
5151vector unsigned char vec_lvsr (int, void *, int *);
5152
5153vector float vec_madd (vector float, vector float, vector float);
5154
6e5bb5ad
JM
5155vector signed short vec_madds (vector signed short, vector signed short,
5156 vector signed short);
333c8841
AH
5157
5158vector unsigned char vec_max (vector signed char, vector unsigned char);
5159
5160vector unsigned char vec_max (vector unsigned char, vector signed char);
5161
924fcc4e
JM
5162vector unsigned char vec_max (vector unsigned char,
5163 vector unsigned char);
333c8841 5164vector signed char vec_max (vector signed char, vector signed char);
924fcc4e
JM
5165vector unsigned short vec_max (vector signed short,
5166 vector unsigned short);
5167vector unsigned short vec_max (vector unsigned short,
5168 vector signed short);
6e5bb5ad
JM
5169vector unsigned short vec_max (vector unsigned short,
5170 vector unsigned short);
333c8841
AH
5171vector signed short vec_max (vector signed short, vector signed short);
5172vector unsigned int vec_max (vector signed int, vector unsigned int);
5173vector unsigned int vec_max (vector unsigned int, vector signed int);
5174vector unsigned int vec_max (vector unsigned int, vector unsigned int);
5175vector signed int vec_max (vector signed int, vector signed int);
5176vector float vec_max (vector float, vector float);
5177
5178vector signed char vec_mergeh (vector signed char, vector signed char);
6e5bb5ad
JM
5179vector unsigned char vec_mergeh (vector unsigned char,
5180 vector unsigned char);
924fcc4e
JM
5181vector signed short vec_mergeh (vector signed short,
5182 vector signed short);
6e5bb5ad
JM
5183vector unsigned short vec_mergeh (vector unsigned short,
5184 vector unsigned short);
333c8841
AH
5185vector float vec_mergeh (vector float, vector float);
5186vector signed int vec_mergeh (vector signed int, vector signed int);
924fcc4e
JM
5187vector unsigned int vec_mergeh (vector unsigned int,
5188 vector unsigned int);
333c8841
AH
5189
5190vector signed char vec_mergel (vector signed char, vector signed char);
6e5bb5ad
JM
5191vector unsigned char vec_mergel (vector unsigned char,
5192 vector unsigned char);
924fcc4e
JM
5193vector signed short vec_mergel (vector signed short,
5194 vector signed short);
6e5bb5ad
JM
5195vector unsigned short vec_mergel (vector unsigned short,
5196 vector unsigned short);
333c8841
AH
5197vector float vec_mergel (vector float, vector float);
5198vector signed int vec_mergel (vector signed int, vector signed int);
924fcc4e
JM
5199vector unsigned int vec_mergel (vector unsigned int,
5200 vector unsigned int);
333c8841
AH
5201
5202vector unsigned short vec_mfvscr (void);
5203
5204vector unsigned char vec_min (vector signed char, vector unsigned char);
5205
5206vector unsigned char vec_min (vector unsigned char, vector signed char);
5207
924fcc4e
JM
5208vector unsigned char vec_min (vector unsigned char,
5209 vector unsigned char);
333c8841 5210vector signed char vec_min (vector signed char, vector signed char);
924fcc4e
JM
5211vector unsigned short vec_min (vector signed short,
5212 vector unsigned short);
5213vector unsigned short vec_min (vector unsigned short,
5214 vector signed short);
6e5bb5ad
JM
5215vector unsigned short vec_min (vector unsigned short,
5216 vector unsigned short);
333c8841
AH
5217vector signed short vec_min (vector signed short, vector signed short);
5218vector unsigned int vec_min (vector signed int, vector unsigned int);
5219vector unsigned int vec_min (vector unsigned int, vector signed int);
5220vector unsigned int vec_min (vector unsigned int, vector unsigned int);
5221vector signed int vec_min (vector signed int, vector signed int);
5222vector float vec_min (vector float, vector float);
5223
6e5bb5ad
JM
5224vector signed short vec_mladd (vector signed short, vector signed short,
5225 vector signed short);
924fcc4e
JM
5226vector signed short vec_mladd (vector signed short,
5227 vector unsigned short,
6e5bb5ad 5228 vector unsigned short);
924fcc4e
JM
5229vector signed short vec_mladd (vector unsigned short,
5230 vector signed short,
6e5bb5ad
JM
5231 vector signed short);
5232vector unsigned short vec_mladd (vector unsigned short,
5233 vector unsigned short,
5234 vector unsigned short);
5235
924fcc4e
JM
5236vector signed short vec_mradds (vector signed short,
5237 vector signed short,
6e5bb5ad
JM
5238 vector signed short);
5239
924fcc4e
JM
5240vector unsigned int vec_msum (vector unsigned char,
5241 vector unsigned char,
6e5bb5ad
JM
5242 vector unsigned int);
5243vector signed int vec_msum (vector signed char, vector unsigned char,
5244 vector signed int);
924fcc4e
JM
5245vector unsigned int vec_msum (vector unsigned short,
5246 vector unsigned short,
6e5bb5ad
JM
5247 vector unsigned int);
5248vector signed int vec_msum (vector signed short, vector signed short,
5249 vector signed int);
5250
5251vector unsigned int vec_msums (vector unsigned short,
924fcc4e
JM
5252 vector unsigned short,
5253 vector unsigned int);
6e5bb5ad
JM
5254vector signed int vec_msums (vector signed short, vector signed short,
5255 vector signed int);
333c8841
AH
5256
5257void vec_mtvscr (vector signed int);
5258void vec_mtvscr (vector unsigned int);
5259void vec_mtvscr (vector signed short);
5260void vec_mtvscr (vector unsigned short);
5261void vec_mtvscr (vector signed char);
5262void vec_mtvscr (vector unsigned char);
5263
924fcc4e
JM
5264vector unsigned short vec_mule (vector unsigned char,
5265 vector unsigned char);
333c8841 5266vector signed short vec_mule (vector signed char, vector signed char);
924fcc4e
JM
5267vector unsigned int vec_mule (vector unsigned short,
5268 vector unsigned short);
333c8841
AH
5269vector signed int vec_mule (vector signed short, vector signed short);
5270
924fcc4e
JM
5271vector unsigned short vec_mulo (vector unsigned char,
5272 vector unsigned char);
333c8841 5273vector signed short vec_mulo (vector signed char, vector signed char);
924fcc4e
JM
5274vector unsigned int vec_mulo (vector unsigned short,
5275 vector unsigned short);
333c8841
AH
5276vector signed int vec_mulo (vector signed short, vector signed short);
5277
5278vector float vec_nmsub (vector float, vector float, vector float);
5279
5280vector float vec_nor (vector float, vector float);
5281vector signed int vec_nor (vector signed int, vector signed int);
5282vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
5283vector signed short vec_nor (vector signed short, vector signed short);
6e5bb5ad
JM
5284vector unsigned short vec_nor (vector unsigned short,
5285 vector unsigned short);
333c8841 5286vector signed char vec_nor (vector signed char, vector signed char);
924fcc4e
JM
5287vector unsigned char vec_nor (vector unsigned char,
5288 vector unsigned char);
333c8841
AH
5289
5290vector float vec_or (vector float, vector float);
5291vector float vec_or (vector float, vector signed int);
5292vector float vec_or (vector signed int, vector float);
5293vector signed int vec_or (vector signed int, vector signed int);
5294vector unsigned int vec_or (vector signed int, vector unsigned int);
5295vector unsigned int vec_or (vector unsigned int, vector signed int);
5296vector unsigned int vec_or (vector unsigned int, vector unsigned int);
5297vector signed short vec_or (vector signed short, vector signed short);
924fcc4e
JM
5298vector unsigned short vec_or (vector signed short,
5299 vector unsigned short);
5300vector unsigned short vec_or (vector unsigned short,
5301 vector signed short);
5302vector unsigned short vec_or (vector unsigned short,
5303 vector unsigned short);
333c8841
AH
5304vector signed char vec_or (vector signed char, vector signed char);
5305vector unsigned char vec_or (vector signed char, vector unsigned char);
5306vector unsigned char vec_or (vector unsigned char, vector signed char);
924fcc4e
JM
5307vector unsigned char vec_or (vector unsigned char,
5308 vector unsigned char);
333c8841
AH
5309
5310vector signed char vec_pack (vector signed short, vector signed short);
6e5bb5ad
JM
5311vector unsigned char vec_pack (vector unsigned short,
5312 vector unsigned short);
333c8841 5313vector signed short vec_pack (vector signed int, vector signed int);
924fcc4e
JM
5314vector unsigned short vec_pack (vector unsigned int,
5315 vector unsigned int);
333c8841 5316
924fcc4e
JM
5317vector signed short vec_packpx (vector unsigned int,
5318 vector unsigned int);
333c8841 5319
6e5bb5ad
JM
5320vector unsigned char vec_packs (vector unsigned short,
5321 vector unsigned short);
333c8841
AH
5322vector signed char vec_packs (vector signed short, vector signed short);
5323
924fcc4e
JM
5324vector unsigned short vec_packs (vector unsigned int,
5325 vector unsigned int);
333c8841
AH
5326vector signed short vec_packs (vector signed int, vector signed int);
5327
6e5bb5ad
JM
5328vector unsigned char vec_packsu (vector unsigned short,
5329 vector unsigned short);
924fcc4e
JM
5330vector unsigned char vec_packsu (vector signed short,
5331 vector signed short);
5332vector unsigned short vec_packsu (vector unsigned int,
5333 vector unsigned int);
333c8841
AH
5334vector unsigned short vec_packsu (vector signed int, vector signed int);
5335
924fcc4e
JM
5336vector float vec_perm (vector float, vector float,
5337 vector unsigned char);
6e5bb5ad
JM
5338vector signed int vec_perm (vector signed int, vector signed int,
5339 vector unsigned char);
5340vector unsigned int vec_perm (vector unsigned int, vector unsigned int,
5341 vector unsigned char);
5342vector signed short vec_perm (vector signed short, vector signed short,
5343 vector unsigned char);
5344vector unsigned short vec_perm (vector unsigned short,
5345 vector unsigned short,
5346 vector unsigned char);
5347vector signed char vec_perm (vector signed char, vector signed char,
5348 vector unsigned char);
924fcc4e
JM
5349vector unsigned char vec_perm (vector unsigned char,
5350 vector unsigned char,
6e5bb5ad 5351 vector unsigned char);
333c8841
AH
5352
5353vector float vec_re (vector float);
5354
5355vector signed char vec_rl (vector signed char, vector unsigned char);
924fcc4e
JM
5356vector unsigned char vec_rl (vector unsigned char,
5357 vector unsigned char);
333c8841
AH
5358vector signed short vec_rl (vector signed short, vector unsigned short);
5359
924fcc4e
JM
5360vector unsigned short vec_rl (vector unsigned short,
5361 vector unsigned short);
333c8841
AH
5362vector signed int vec_rl (vector signed int, vector unsigned int);
5363vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
5364
5365vector float vec_round (vector float);
5366
5367vector float vec_rsqrte (vector float);
5368
5369vector float vec_sel (vector float, vector float, vector signed int);
5370vector float vec_sel (vector float, vector float, vector unsigned int);
6e5bb5ad
JM
5371vector signed int vec_sel (vector signed int, vector signed int,
5372 vector signed int);
5373vector signed int vec_sel (vector signed int, vector signed int,
5374 vector unsigned int);
5375vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
5376 vector signed int);
5377vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
5378 vector unsigned int);
5379vector signed short vec_sel (vector signed short, vector signed short,
5380 vector signed short);
5381vector signed short vec_sel (vector signed short, vector signed short,
5382 vector unsigned short);
5383vector unsigned short vec_sel (vector unsigned short,
924fcc4e
JM
5384 vector unsigned short,
5385 vector signed short);
6e5bb5ad
JM
5386vector unsigned short vec_sel (vector unsigned short,
5387 vector unsigned short,
5388 vector unsigned short);
5389vector signed char vec_sel (vector signed char, vector signed char,
5390 vector signed char);
5391vector signed char vec_sel (vector signed char, vector signed char,
5392 vector unsigned char);
924fcc4e
JM
5393vector unsigned char vec_sel (vector unsigned char,
5394 vector unsigned char,
6e5bb5ad 5395 vector signed char);
924fcc4e
JM
5396vector unsigned char vec_sel (vector unsigned char,
5397 vector unsigned char,
6e5bb5ad 5398 vector unsigned char);
333c8841
AH
5399
5400vector signed char vec_sl (vector signed char, vector unsigned char);
924fcc4e
JM
5401vector unsigned char vec_sl (vector unsigned char,
5402 vector unsigned char);
333c8841
AH
5403vector signed short vec_sl (vector signed short, vector unsigned short);
5404
924fcc4e
JM
5405vector unsigned short vec_sl (vector unsigned short,
5406 vector unsigned short);
333c8841
AH
5407vector signed int vec_sl (vector signed int, vector unsigned int);
5408vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
5409
5410vector float vec_sld (vector float, vector float, const char);
6e5bb5ad
JM
5411vector signed int vec_sld (vector signed int, vector signed int,
5412 const char);
5413vector unsigned int vec_sld (vector unsigned int, vector unsigned int,
5414 const char);
5415vector signed short vec_sld (vector signed short, vector signed short,
5416 const char);
5417vector unsigned short vec_sld (vector unsigned short,
5418 vector unsigned short, const char);
5419vector signed char vec_sld (vector signed char, vector signed char,
5420 const char);
924fcc4e
JM
5421vector unsigned char vec_sld (vector unsigned char,
5422 vector unsigned char,
6e5bb5ad 5423 const char);
333c8841
AH
5424
5425vector signed int vec_sll (vector signed int, vector unsigned int);
5426vector signed int vec_sll (vector signed int, vector unsigned short);
5427vector signed int vec_sll (vector signed int, vector unsigned char);
5428vector unsigned int vec_sll (vector unsigned int, vector unsigned int);
924fcc4e
JM
5429vector unsigned int vec_sll (vector unsigned int,
5430 vector unsigned short);
333c8841
AH
5431vector unsigned int vec_sll (vector unsigned int, vector unsigned char);
5432
5433vector signed short vec_sll (vector signed short, vector unsigned int);
924fcc4e
JM
5434vector signed short vec_sll (vector signed short,
5435 vector unsigned short);
333c8841
AH
5436vector signed short vec_sll (vector signed short, vector unsigned char);
5437
924fcc4e
JM
5438vector unsigned short vec_sll (vector unsigned short,
5439 vector unsigned int);
6e5bb5ad
JM
5440vector unsigned short vec_sll (vector unsigned short,
5441 vector unsigned short);
924fcc4e
JM
5442vector unsigned short vec_sll (vector unsigned short,
5443 vector unsigned char);
333c8841
AH
5444vector signed char vec_sll (vector signed char, vector unsigned int);
5445vector signed char vec_sll (vector signed char, vector unsigned short);
5446vector signed char vec_sll (vector signed char, vector unsigned char);
924fcc4e
JM
5447vector unsigned char vec_sll (vector unsigned char,
5448 vector unsigned int);
5449vector unsigned char vec_sll (vector unsigned char,
5450 vector unsigned short);
5451vector unsigned char vec_sll (vector unsigned char,
5452 vector unsigned char);
333c8841
AH
5453
5454vector float vec_slo (vector float, vector signed char);
5455vector float vec_slo (vector float, vector unsigned char);
5456vector signed int vec_slo (vector signed int, vector signed char);
5457vector signed int vec_slo (vector signed int, vector unsigned char);
5458vector unsigned int vec_slo (vector unsigned int, vector signed char);
5459vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
5460
5461vector signed short vec_slo (vector signed short, vector signed char);
5462vector signed short vec_slo (vector signed short, vector unsigned char);
5463
924fcc4e
JM
5464vector unsigned short vec_slo (vector unsigned short,
5465 vector signed char);
5466vector unsigned short vec_slo (vector unsigned short,
5467 vector unsigned char);
333c8841
AH
5468vector signed char vec_slo (vector signed char, vector signed char);
5469vector signed char vec_slo (vector signed char, vector unsigned char);
5470vector unsigned char vec_slo (vector unsigned char, vector signed char);
5471
924fcc4e
JM
5472vector unsigned char vec_slo (vector unsigned char,
5473 vector unsigned char);
333c8841
AH
5474
5475vector signed char vec_splat (vector signed char, const char);
5476vector unsigned char vec_splat (vector unsigned char, const char);
5477vector signed short vec_splat (vector signed short, const char);
5478vector unsigned short vec_splat (vector unsigned short, const char);
5479vector float vec_splat (vector float, const char);
5480vector signed int vec_splat (vector signed int, const char);
5481vector unsigned int vec_splat (vector unsigned int, const char);
5482
5483vector signed char vec_splat_s8 (const char);
5484
5485vector signed short vec_splat_s16 (const char);
5486
5487vector signed int vec_splat_s32 (const char);
5488
5489vector unsigned char vec_splat_u8 (const char);
5490
5491vector unsigned short vec_splat_u16 (const char);
5492
5493vector unsigned int vec_splat_u32 (const char);
5494
5495vector signed char vec_sr (vector signed char, vector unsigned char);
924fcc4e
JM
5496vector unsigned char vec_sr (vector unsigned char,
5497 vector unsigned char);
333c8841
AH
5498vector signed short vec_sr (vector signed short, vector unsigned short);
5499
924fcc4e
JM
5500vector unsigned short vec_sr (vector unsigned short,
5501 vector unsigned short);
333c8841
AH
5502vector signed int vec_sr (vector signed int, vector unsigned int);
5503vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
5504
5505vector signed char vec_sra (vector signed char, vector unsigned char);
924fcc4e
JM
5506vector unsigned char vec_sra (vector unsigned char,
5507 vector unsigned char);
5508vector signed short vec_sra (vector signed short,
5509 vector unsigned short);
6e5bb5ad
JM
5510vector unsigned short vec_sra (vector unsigned short,
5511 vector unsigned short);
333c8841
AH
5512vector signed int vec_sra (vector signed int, vector unsigned int);
5513vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
5514
5515vector signed int vec_srl (vector signed int, vector unsigned int);
5516vector signed int vec_srl (vector signed int, vector unsigned short);
5517vector signed int vec_srl (vector signed int, vector unsigned char);
5518vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
924fcc4e
JM
5519vector unsigned int vec_srl (vector unsigned int,
5520 vector unsigned short);
333c8841
AH
5521vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
5522
5523vector signed short vec_srl (vector signed short, vector unsigned int);
924fcc4e
JM
5524vector signed short vec_srl (vector signed short,
5525 vector unsigned short);
333c8841
AH
5526vector signed short vec_srl (vector signed short, vector unsigned char);
5527
924fcc4e
JM
5528vector unsigned short vec_srl (vector unsigned short,
5529 vector unsigned int);
6e5bb5ad
JM
5530vector unsigned short vec_srl (vector unsigned short,
5531 vector unsigned short);
924fcc4e
JM
5532vector unsigned short vec_srl (vector unsigned short,
5533 vector unsigned char);
333c8841
AH
5534vector signed char vec_srl (vector signed char, vector unsigned int);
5535vector signed char vec_srl (vector signed char, vector unsigned short);
5536vector signed char vec_srl (vector signed char, vector unsigned char);
924fcc4e
JM
5537vector unsigned char vec_srl (vector unsigned char,
5538 vector unsigned int);
5539vector unsigned char vec_srl (vector unsigned char,
5540 vector unsigned short);
5541vector unsigned char vec_srl (vector unsigned char,
5542 vector unsigned char);
333c8841
AH
5543
5544vector float vec_sro (vector float, vector signed char);
5545vector float vec_sro (vector float, vector unsigned char);
5546vector signed int vec_sro (vector signed int, vector signed char);
5547vector signed int vec_sro (vector signed int, vector unsigned char);
5548vector unsigned int vec_sro (vector unsigned int, vector signed char);
5549vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
5550
5551vector signed short vec_sro (vector signed short, vector signed char);
5552vector signed short vec_sro (vector signed short, vector unsigned char);
5553
924fcc4e
JM
5554vector unsigned short vec_sro (vector unsigned short,
5555 vector signed char);
5556vector unsigned short vec_sro (vector unsigned short,
5557 vector unsigned char);
333c8841
AH
5558vector signed char vec_sro (vector signed char, vector signed char);
5559vector signed char vec_sro (vector signed char, vector unsigned char);
5560vector unsigned char vec_sro (vector unsigned char, vector signed char);
5561
924fcc4e
JM
5562vector unsigned char vec_sro (vector unsigned char,
5563 vector unsigned char);
333c8841
AH
5564
5565void vec_st (vector float, int, float *);
5566void vec_st (vector float, int, vector float *);
5567void vec_st (vector signed int, int, int *);
5568void vec_st (vector signed int, int, unsigned int *);
5569void vec_st (vector unsigned int, int, unsigned int *);
5570void vec_st (vector unsigned int, int, vector unsigned int *);
5571void vec_st (vector signed short, int, short *);
5572void vec_st (vector signed short, int, vector unsigned short *);
5573void vec_st (vector signed short, int, vector signed short *);
5574void vec_st (vector unsigned short, int, unsigned short *);
5575void vec_st (vector unsigned short, int, vector unsigned short *);
5576void vec_st (vector signed char, int, signed char *);
5577void vec_st (vector signed char, int, unsigned char *);
5578void vec_st (vector signed char, int, vector signed char *);
5579void vec_st (vector unsigned char, int, unsigned char *);
5580void vec_st (vector unsigned char, int, vector unsigned char *);
5581
5582void vec_ste (vector signed char, int, unsigned char *);
5583void vec_ste (vector signed char, int, signed char *);
5584void vec_ste (vector unsigned char, int, unsigned char *);
5585void vec_ste (vector signed short, int, short *);
5586void vec_ste (vector signed short, int, unsigned short *);
5587void vec_ste (vector unsigned short, int, void *);
5588void vec_ste (vector signed int, int, unsigned int *);
5589void vec_ste (vector signed int, int, int *);
5590void vec_ste (vector unsigned int, int, unsigned int *);
5591void vec_ste (vector float, int, float *);
5592
5593void vec_stl (vector float, int, vector float *);
5594void vec_stl (vector float, int, float *);
5595void vec_stl (vector signed int, int, vector signed int *);
5596void vec_stl (vector signed int, int, int *);
5597void vec_stl (vector signed int, int, unsigned int *);
5598void vec_stl (vector unsigned int, int, vector unsigned int *);
5599void vec_stl (vector unsigned int, int, unsigned int *);
5600void vec_stl (vector signed short, int, short *);
5601void vec_stl (vector signed short, int, unsigned short *);
5602void vec_stl (vector signed short, int, vector signed short *);
5603void vec_stl (vector unsigned short, int, unsigned short *);
5604void vec_stl (vector unsigned short, int, vector signed short *);
5605void vec_stl (vector signed char, int, signed char *);
5606void vec_stl (vector signed char, int, unsigned char *);
5607void vec_stl (vector signed char, int, vector signed char *);
5608void vec_stl (vector unsigned char, int, unsigned char *);
5609void vec_stl (vector unsigned char, int, vector unsigned char *);
5610
5611vector signed char vec_sub (vector signed char, vector signed char);
5612vector unsigned char vec_sub (vector signed char, vector unsigned char);
5613
5614vector unsigned char vec_sub (vector unsigned char, vector signed char);
5615
924fcc4e
JM
5616vector unsigned char vec_sub (vector unsigned char,
5617 vector unsigned char);
333c8841 5618vector signed short vec_sub (vector signed short, vector signed short);
924fcc4e
JM
5619vector unsigned short vec_sub (vector signed short,
5620 vector unsigned short);
5621vector unsigned short vec_sub (vector unsigned short,
5622 vector signed short);
6e5bb5ad
JM
5623vector unsigned short vec_sub (vector unsigned short,
5624 vector unsigned short);
333c8841
AH
5625vector signed int vec_sub (vector signed int, vector signed int);
5626vector unsigned int vec_sub (vector signed int, vector unsigned int);
5627vector unsigned int vec_sub (vector unsigned int, vector signed int);
5628vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
5629vector float vec_sub (vector float, vector float);
5630
5631vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
5632
924fcc4e
JM
5633vector unsigned char vec_subs (vector signed char,
5634 vector unsigned char);
5635vector unsigned char vec_subs (vector unsigned char,
5636 vector signed char);
5637vector unsigned char vec_subs (vector unsigned char,
5638 vector unsigned char);
333c8841 5639vector signed char vec_subs (vector signed char, vector signed char);
924fcc4e
JM
5640vector unsigned short vec_subs (vector signed short,
5641 vector unsigned short);
5642vector unsigned short vec_subs (vector unsigned short,
5643 vector signed short);
6e5bb5ad
JM
5644vector unsigned short vec_subs (vector unsigned short,
5645 vector unsigned short);
333c8841
AH
5646vector signed short vec_subs (vector signed short, vector signed short);
5647
5648vector unsigned int vec_subs (vector signed int, vector unsigned int);
5649vector unsigned int vec_subs (vector unsigned int, vector signed int);
5650vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
5651
5652vector signed int vec_subs (vector signed int, vector signed int);
5653
924fcc4e
JM
5654vector unsigned int vec_sum4s (vector unsigned char,
5655 vector unsigned int);
333c8841
AH
5656vector signed int vec_sum4s (vector signed char, vector signed int);
5657vector signed int vec_sum4s (vector signed short, vector signed int);
5658
5659vector signed int vec_sum2s (vector signed int, vector signed int);
5660
5661vector signed int vec_sums (vector signed int, vector signed int);
5662
5663vector float vec_trunc (vector float);
5664
5665vector signed short vec_unpackh (vector signed char);
5666vector unsigned int vec_unpackh (vector signed short);
5667vector signed int vec_unpackh (vector signed short);
5668
5669vector signed short vec_unpackl (vector signed char);
5670vector unsigned int vec_unpackl (vector signed short);
5671vector signed int vec_unpackl (vector signed short);
5672
5673vector float vec_xor (vector float, vector float);
5674vector float vec_xor (vector float, vector signed int);
5675vector float vec_xor (vector signed int, vector float);
5676vector signed int vec_xor (vector signed int, vector signed int);
5677vector unsigned int vec_xor (vector signed int, vector unsigned int);
5678vector unsigned int vec_xor (vector unsigned int, vector signed int);
5679vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
5680vector signed short vec_xor (vector signed short, vector signed short);
924fcc4e
JM
5681vector unsigned short vec_xor (vector signed short,
5682 vector unsigned short);
5683vector unsigned short vec_xor (vector unsigned short,
5684 vector signed short);
6e5bb5ad
JM
5685vector unsigned short vec_xor (vector unsigned short,
5686 vector unsigned short);
333c8841
AH
5687vector signed char vec_xor (vector signed char, vector signed char);
5688vector unsigned char vec_xor (vector signed char, vector unsigned char);
5689
5690vector unsigned char vec_xor (vector unsigned char, vector signed char);
5691
924fcc4e
JM
5692vector unsigned char vec_xor (vector unsigned char,
5693 vector unsigned char);
333c8841
AH
5694
5695vector signed int vec_all_eq (vector signed char, vector unsigned char);
5696
5697vector signed int vec_all_eq (vector signed char, vector signed char);
5698vector signed int vec_all_eq (vector unsigned char, vector signed char);
5699
924fcc4e
JM
5700vector signed int vec_all_eq (vector unsigned char,
5701 vector unsigned char);
5702vector signed int vec_all_eq (vector signed short,
5703 vector unsigned short);
333c8841
AH
5704vector signed int vec_all_eq (vector signed short, vector signed short);
5705
924fcc4e
JM
5706vector signed int vec_all_eq (vector unsigned short,
5707 vector signed short);
5708vector signed int vec_all_eq (vector unsigned short,
5709 vector unsigned short);
333c8841
AH
5710vector signed int vec_all_eq (vector signed int, vector unsigned int);
5711vector signed int vec_all_eq (vector signed int, vector signed int);
5712vector signed int vec_all_eq (vector unsigned int, vector signed int);
5713vector signed int vec_all_eq (vector unsigned int, vector unsigned int);
5714
5715vector signed int vec_all_eq (vector float, vector float);
5716
5717vector signed int vec_all_ge (vector signed char, vector unsigned char);
5718
5719vector signed int vec_all_ge (vector unsigned char, vector signed char);
5720
924fcc4e
JM
5721vector signed int vec_all_ge (vector unsigned char,
5722 vector unsigned char);
333c8841 5723vector signed int vec_all_ge (vector signed char, vector signed char);
924fcc4e
JM
5724vector signed int vec_all_ge (vector signed short,
5725 vector unsigned short);
5726vector signed int vec_all_ge (vector unsigned short,
5727 vector signed short);
5728vector signed int vec_all_ge (vector unsigned short,
5729 vector unsigned short);
333c8841
AH
5730vector signed int vec_all_ge (vector signed short, vector signed short);
5731
5732vector signed int vec_all_ge (vector signed int, vector unsigned int);
5733vector signed int vec_all_ge (vector unsigned int, vector signed int);
5734vector signed int vec_all_ge (vector unsigned int, vector unsigned int);
5735
5736vector signed int vec_all_ge (vector signed int, vector signed int);
5737vector signed int vec_all_ge (vector float, vector float);
5738
5739vector signed int vec_all_gt (vector signed char, vector unsigned char);
5740
5741vector signed int vec_all_gt (vector unsigned char, vector signed char);
5742
924fcc4e
JM
5743vector signed int vec_all_gt (vector unsigned char,
5744 vector unsigned char);
333c8841 5745vector signed int vec_all_gt (vector signed char, vector signed char);
924fcc4e
JM
5746vector signed int vec_all_gt (vector signed short,
5747 vector unsigned short);
f282ffb3 5748vector signed int vec_all_gt (vector unsigned short,
924fcc4e
JM
5749 vector signed short);
5750vector signed int vec_all_gt (vector unsigned short,
5751 vector unsigned short);
333c8841
AH
5752vector signed int vec_all_gt (vector signed short, vector signed short);
5753
5754vector signed int vec_all_gt (vector signed int, vector unsigned int);
5755vector signed int vec_all_gt (vector unsigned int, vector signed int);
5756vector signed int vec_all_gt (vector unsigned int, vector unsigned int);
5757
5758vector signed int vec_all_gt (vector signed int, vector signed int);
5759vector signed int vec_all_gt (vector float, vector float);
5760
5761vector signed int vec_all_in (vector float, vector float);
5762
5763vector signed int vec_all_le (vector signed char, vector unsigned char);
5764
5765vector signed int vec_all_le (vector unsigned char, vector signed char);
5766
924fcc4e
JM
5767vector signed int vec_all_le (vector unsigned char,
5768 vector unsigned char);
333c8841 5769vector signed int vec_all_le (vector signed char, vector signed char);
924fcc4e
JM
5770vector signed int vec_all_le (vector signed short,
5771 vector unsigned short);
5772vector signed int vec_all_le (vector unsigned short,
5773 vector signed short);
5774vector signed int vec_all_le (vector unsigned short,
5775 vector unsigned short);
333c8841
AH
5776vector signed int vec_all_le (vector signed short, vector signed short);
5777
5778vector signed int vec_all_le (vector signed int, vector unsigned int);
5779vector signed int vec_all_le (vector unsigned int, vector signed int);
5780vector signed int vec_all_le (vector unsigned int, vector unsigned int);
5781
5782vector signed int vec_all_le (vector signed int, vector signed int);
5783vector signed int vec_all_le (vector float, vector float);
5784
5785vector signed int vec_all_lt (vector signed char, vector unsigned char);
5786
5787vector signed int vec_all_lt (vector unsigned char, vector signed char);
5788
924fcc4e
JM
5789vector signed int vec_all_lt (vector unsigned char,
5790 vector unsigned char);
333c8841 5791vector signed int vec_all_lt (vector signed char, vector signed char);
924fcc4e
JM
5792vector signed int vec_all_lt (vector signed short,
5793 vector unsigned short);
5794vector signed int vec_all_lt (vector unsigned short,
5795 vector signed short);
5796vector signed int vec_all_lt (vector unsigned short,
5797 vector unsigned short);
333c8841
AH
5798vector signed int vec_all_lt (vector signed short, vector signed short);
5799
5800vector signed int vec_all_lt (vector signed int, vector unsigned int);
5801vector signed int vec_all_lt (vector unsigned int, vector signed int);
5802vector signed int vec_all_lt (vector unsigned int, vector unsigned int);
5803
5804vector signed int vec_all_lt (vector signed int, vector signed int);
5805vector signed int vec_all_lt (vector float, vector float);
5806
5807vector signed int vec_all_nan (vector float);
5808
5809vector signed int vec_all_ne (vector signed char, vector unsigned char);
5810
5811vector signed int vec_all_ne (vector signed char, vector signed char);
5812vector signed int vec_all_ne (vector unsigned char, vector signed char);
5813
924fcc4e
JM
5814vector signed int vec_all_ne (vector unsigned char,
5815 vector unsigned char);
5816vector signed int vec_all_ne (vector signed short,
5817 vector unsigned short);
333c8841
AH
5818vector signed int vec_all_ne (vector signed short, vector signed short);
5819
924fcc4e
JM
5820vector signed int vec_all_ne (vector unsigned short,
5821 vector signed short);
5822vector signed int vec_all_ne (vector unsigned short,
5823 vector unsigned short);
333c8841
AH
5824vector signed int vec_all_ne (vector signed int, vector unsigned int);
5825vector signed int vec_all_ne (vector signed int, vector signed int);
5826vector signed int vec_all_ne (vector unsigned int, vector signed int);
5827vector signed int vec_all_ne (vector unsigned int, vector unsigned int);
5828
5829vector signed int vec_all_ne (vector float, vector float);
5830
5831vector signed int vec_all_nge (vector float, vector float);
5832
5833vector signed int vec_all_ngt (vector float, vector float);
5834
5835vector signed int vec_all_nle (vector float, vector float);
5836
5837vector signed int vec_all_nlt (vector float, vector float);
5838
5839vector signed int vec_all_numeric (vector float);
5840
5841vector signed int vec_any_eq (vector signed char, vector unsigned char);
5842
5843vector signed int vec_any_eq (vector signed char, vector signed char);
5844vector signed int vec_any_eq (vector unsigned char, vector signed char);
5845
924fcc4e
JM
5846vector signed int vec_any_eq (vector unsigned char,
5847 vector unsigned char);
5848vector signed int vec_any_eq (vector signed short,
5849 vector unsigned short);
333c8841
AH
5850vector signed int vec_any_eq (vector signed short, vector signed short);
5851
924fcc4e
JM
5852vector signed int vec_any_eq (vector unsigned short,
5853 vector signed short);
5854vector signed int vec_any_eq (vector unsigned short,
5855 vector unsigned short);
333c8841
AH
5856vector signed int vec_any_eq (vector signed int, vector unsigned int);
5857vector signed int vec_any_eq (vector signed int, vector signed int);
5858vector signed int vec_any_eq (vector unsigned int, vector signed int);
5859vector signed int vec_any_eq (vector unsigned int, vector unsigned int);
5860
5861vector signed int vec_any_eq (vector float, vector float);
5862
5863vector signed int vec_any_ge (vector signed char, vector unsigned char);
5864
5865vector signed int vec_any_ge (vector unsigned char, vector signed char);
5866
924fcc4e
JM
5867vector signed int vec_any_ge (vector unsigned char,
5868 vector unsigned char);
333c8841 5869vector signed int vec_any_ge (vector signed char, vector signed char);
924fcc4e
JM
5870vector signed int vec_any_ge (vector signed short,
5871 vector unsigned short);
5872vector signed int vec_any_ge (vector unsigned short,
5873 vector signed short);
5874vector signed int vec_any_ge (vector unsigned short,
5875 vector unsigned short);
333c8841
AH
5876vector signed int vec_any_ge (vector signed short, vector signed short);
5877
5878vector signed int vec_any_ge (vector signed int, vector unsigned int);
5879vector signed int vec_any_ge (vector unsigned int, vector signed int);
5880vector signed int vec_any_ge (vector unsigned int, vector unsigned int);
5881
5882vector signed int vec_any_ge (vector signed int, vector signed int);
5883vector signed int vec_any_ge (vector float, vector float);
5884
5885vector signed int vec_any_gt (vector signed char, vector unsigned char);
5886
5887vector signed int vec_any_gt (vector unsigned char, vector signed char);
5888
924fcc4e
JM
5889vector signed int vec_any_gt (vector unsigned char,
5890 vector unsigned char);
333c8841 5891vector signed int vec_any_gt (vector signed char, vector signed char);
924fcc4e
JM
5892vector signed int vec_any_gt (vector signed short,
5893 vector unsigned short);
5894vector signed int vec_any_gt (vector unsigned short,
5895 vector signed short);
5896vector signed int vec_any_gt (vector unsigned short,
5897 vector unsigned short);
333c8841
AH
5898vector signed int vec_any_gt (vector signed short, vector signed short);
5899
5900vector signed int vec_any_gt (vector signed int, vector unsigned int);
5901vector signed int vec_any_gt (vector unsigned int, vector signed int);
5902vector signed int vec_any_gt (vector unsigned int, vector unsigned int);
5903
5904vector signed int vec_any_gt (vector signed int, vector signed int);
5905vector signed int vec_any_gt (vector float, vector float);
5906
5907vector signed int vec_any_le (vector signed char, vector unsigned char);
5908
5909vector signed int vec_any_le (vector unsigned char, vector signed char);
5910
924fcc4e
JM
5911vector signed int vec_any_le (vector unsigned char,
5912 vector unsigned char);
333c8841 5913vector signed int vec_any_le (vector signed char, vector signed char);
924fcc4e
JM
5914vector signed int vec_any_le (vector signed short,
5915 vector unsigned short);
5916vector signed int vec_any_le (vector unsigned short,
5917 vector signed short);
5918vector signed int vec_any_le (vector unsigned short,
5919 vector unsigned short);
333c8841
AH
5920vector signed int vec_any_le (vector signed short, vector signed short);
5921
5922vector signed int vec_any_le (vector signed int, vector unsigned int);
5923vector signed int vec_any_le (vector unsigned int, vector signed int);
5924vector signed int vec_any_le (vector unsigned int, vector unsigned int);
5925
5926vector signed int vec_any_le (vector signed int, vector signed int);
5927vector signed int vec_any_le (vector float, vector float);
5928
5929vector signed int vec_any_lt (vector signed char, vector unsigned char);
5930
5931vector signed int vec_any_lt (vector unsigned char, vector signed char);
5932
924fcc4e
JM
5933vector signed int vec_any_lt (vector unsigned char,
5934 vector unsigned char);
333c8841 5935vector signed int vec_any_lt (vector signed char, vector signed char);
924fcc4e
JM
5936vector signed int vec_any_lt (vector signed short,
5937 vector unsigned short);
5938vector signed int vec_any_lt (vector unsigned short,
5939 vector signed short);
5940vector signed int vec_any_lt (vector unsigned short,
5941 vector unsigned short);
333c8841
AH
5942vector signed int vec_any_lt (vector signed short, vector signed short);
5943
5944vector signed int vec_any_lt (vector signed int, vector unsigned int);
5945vector signed int vec_any_lt (vector unsigned int, vector signed int);
5946vector signed int vec_any_lt (vector unsigned int, vector unsigned int);
5947
5948vector signed int vec_any_lt (vector signed int, vector signed int);
5949vector signed int vec_any_lt (vector float, vector float);
5950
5951vector signed int vec_any_nan (vector float);
5952
5953vector signed int vec_any_ne (vector signed char, vector unsigned char);
5954
5955vector signed int vec_any_ne (vector signed char, vector signed char);
5956vector signed int vec_any_ne (vector unsigned char, vector signed char);
5957
924fcc4e
JM
5958vector signed int vec_any_ne (vector unsigned char,
5959 vector unsigned char);
5960vector signed int vec_any_ne (vector signed short,
5961 vector unsigned short);
333c8841
AH
5962vector signed int vec_any_ne (vector signed short, vector signed short);
5963
924fcc4e
JM
5964vector signed int vec_any_ne (vector unsigned short,
5965 vector signed short);
5966vector signed int vec_any_ne (vector unsigned short,
5967 vector unsigned short);
333c8841
AH
5968vector signed int vec_any_ne (vector signed int, vector unsigned int);
5969vector signed int vec_any_ne (vector signed int, vector signed int);
5970vector signed int vec_any_ne (vector unsigned int, vector signed int);
5971vector signed int vec_any_ne (vector unsigned int, vector unsigned int);
5972
5973vector signed int vec_any_ne (vector float, vector float);
5974
5975vector signed int vec_any_nge (vector float, vector float);
5976
5977vector signed int vec_any_ngt (vector float, vector float);
5978
5979vector signed int vec_any_nle (vector float, vector float);
5980
5981vector signed int vec_any_nlt (vector float, vector float);
5982
5983vector signed int vec_any_numeric (vector float);
5984
5985vector signed int vec_any_out (vector float, vector float);
5986@end smallexample
5987
0168a849
SS
5988@node Pragmas
5989@section Pragmas Accepted by GCC
5990@cindex pragmas
5991@cindex #pragma
5992
5993GCC supports several types of pragmas, primarily in order to compile
5994code originally written for other compilers. Note that in general
5995we do not recommend the use of pragmas; @xref{Function Attributes},
5996for further explanation.
5997
5998@menu
5999* ARM Pragmas::
6000* Darwin Pragmas::
6001@end menu
6002
6003@node ARM Pragmas
6004@subsection ARM Pragmas
6005
6006The ARM target defines pragmas for controlling the default addition of
6007@code{long_call} and @code{short_call} attributes to functions.
6008@xref{Function Attributes}, for information about the effects of these
6009attributes.
6010
6011@table @code
6012@item long_calls
6013@cindex pragma, long_calls
6014Set all subsequent functions to have the @code{long_call} attribute.
6015
6016@item no_long_calls
6017@cindex pragma, no_long_calls
6018Set all subsequent functions to have the @code{short_call} attribute.
6019
6020@item long_calls_off
6021@cindex pragma, long_calls_off
6022Do not affect the @code{long_call} or @code{short_call} attributes of
6023subsequent functions.
6024@end table
6025
6026@c Describe c4x pragmas here.
6027@c Describe h8300 pragmas here.
6028@c Describe i370 pragmas here.
6029@c Describe i960 pragmas here.
6030@c Describe sh pragmas here.
6031@c Describe v850 pragmas here.
6032
6033@node Darwin Pragmas
6034@subsection Darwin Pragmas
6035
6036The following pragmas are available for all architectures running the
6037Darwin operating system. These are useful for compatibility with other
6038MacOS compilers.
6039
6040@table @code
6041@item mark @var{tokens}@dots{}
6042@cindex pragma, mark
6043This pragma is accepted, but has no effect.
6044
6045@item options align=@var{alignment}
6046@cindex pragma, options align
6047This pragma sets the alignment of fields in structures. The values of
6048@var{alignment} may be @code{mac68k}, to emulate m68k alignment, or
6049@code{power}, to emulate PowerPC alignment. Uses of this pragma nest
6050properly; to restore the previous setting, use @code{reset} for the
6051@var{alignment}.
6052
6053@item segment @var{tokens}@dots{}
6054@cindex pragma, segment
6055This pragma is accepted, but has no effect.
6056
6057@item unused (@var{var} [, @var{var}]@dots{})
6058@cindex pragma, unused
6059This pragma declares variables to be possibly unused. GCC will not
6060produce warnings for the listed variables. The effect is similar to
6061that of the @code{unused} attribute, except that this pragma may appear
6062anywhere within the variables' scopes.
6063@end table
6064
3e96a2fd
DD
6065@node Unnamed Fields
6066@section Unnamed struct/union fields within structs/unions.
6067@cindex struct
6068@cindex union
6069
6070For compatibility with other compilers, GCC allows you to define
6071a structure or union that contains, as fields, structures and unions
6072without names. For example:
6073
6074@example
6075struct @{
6076 int a;
6077 union @{
6078 int b;
6079 float c;
6080 @};
6081 int d;
6082@} foo;
6083@end example
6084
6085In this example, the user would be able to access members of the unnamed
6086union with code like @samp{foo.b}. Note that only unnamed structs and
6087unions are allowed, you may not have, for example, an unnamed
6088@code{int}.
6089
6090You must never create such structures that cause ambiguous field definitions.
6091For example, this structure:
6092
6093@example
6094struct @{
6095 int a;
6096 struct @{
6097 int a;
6098 @};
6099@} foo;
6100@end example
6101
6102It is ambiguous which @code{a} is being referred to with @samp{foo.a}.
6103Such constructs are not supported and must be avoided. In the future,
6104such constructs may be detected and treated as compilation errors.
6105
c1f7febf
RK
6106@node C++ Extensions
6107@chapter Extensions to the C++ Language
6108@cindex extensions, C++ language
6109@cindex C++ language extensions
6110
6111The GNU compiler provides these extensions to the C++ language (and you
6112can also use most of the C language extensions in your C++ programs). If you
6113want to write code that checks whether these features are available, you can
6114test for the GNU compiler the same way as for C programs: check for a
6115predefined macro @code{__GNUC__}. You can also use @code{__GNUG__} to
6116test specifically for GNU C++ (@pxref{Standard Predefined,,Standard
6117Predefined Macros,cpp.info,The C Preprocessor}).
6118
6119@menu
c1f7febf 6120* Min and Max:: C++ Minimum and maximum operators.
02cac427 6121* Volatiles:: What constitutes an access to a volatile object.
49419c8f 6122* Restricted Pointers:: C99 restricted pointers and references.
7a81cf7f 6123* Vague Linkage:: Where G++ puts inlines, vtables and such.
c1f7febf 6124* C++ Interface:: You can use a single C++ header file for both
e6f3b89d 6125 declarations and definitions.
c1f7febf 6126* Template Instantiation:: Methods for ensuring that exactly one copy of
e6f3b89d 6127 each needed template instantiation is emitted.
0ded1f18
JM
6128* Bound member functions:: You can extract a function pointer to the
6129 method denoted by a @samp{->*} or @samp{.*} expression.
e6f3b89d 6130* C++ Attributes:: Variable, function, and type attributes for C++ only.
1f730ff7 6131* Java Exceptions:: Tweaking exception handling to work with Java.
e6f3b89d
PE
6132* Deprecated Features:: Things might disappear from g++.
6133* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
c1f7febf
RK
6134@end menu
6135
c1f7febf
RK
6136@node Min and Max
6137@section Minimum and Maximum Operators in C++
6138
6139It is very convenient to have operators which return the ``minimum'' or the
6140``maximum'' of two arguments. In GNU C++ (but not in GNU C),
6141
6142@table @code
6143@item @var{a} <? @var{b}
6144@findex <?
6145@cindex minimum operator
6146is the @dfn{minimum}, returning the smaller of the numeric values
6147@var{a} and @var{b};
6148
6149@item @var{a} >? @var{b}
6150@findex >?
6151@cindex maximum operator
6152is the @dfn{maximum}, returning the larger of the numeric values @var{a}
6153and @var{b}.
6154@end table
6155
6156These operations are not primitive in ordinary C++, since you can
6157use a macro to return the minimum of two things in C++, as in the
6158following example.
6159
6160@example
6161#define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
6162@end example
6163
6164@noindent
6165You might then use @w{@samp{int min = MIN (i, j);}} to set @var{min} to
6166the minimum value of variables @var{i} and @var{j}.
6167
6168However, side effects in @code{X} or @code{Y} may cause unintended
6169behavior. For example, @code{MIN (i++, j++)} will fail, incrementing
6170the smaller counter twice. A GNU C extension allows you to write safe
6171macros that avoid this kind of problem (@pxref{Naming Types,,Naming an
6172Expression's Type}). However, writing @code{MIN} and @code{MAX} as
6173macros also forces you to use function-call notation for a
6174fundamental arithmetic operation. Using GNU C++ extensions, you can
6175write @w{@samp{int min = i <? j;}} instead.
6176
6177Since @code{<?} and @code{>?} are built into the compiler, they properly
6178handle expressions with side-effects; @w{@samp{int min = i++ <? j++;}}
6179works correctly.
6180
02cac427
NS
6181@node Volatiles
6182@section When is a Volatile Object Accessed?
6183@cindex accessing volatiles
6184@cindex volatile read
6185@cindex volatile write
6186@cindex volatile access
6187
767094dd
JM
6188Both the C and C++ standard have the concept of volatile objects. These
6189are normally accessed by pointers and used for accessing hardware. The
8117da65 6190standards encourage compilers to refrain from optimizations
02cac427 6191concerning accesses to volatile objects that it might perform on
767094dd
JM
6192non-volatile objects. The C standard leaves it implementation defined
6193as to what constitutes a volatile access. The C++ standard omits to
02cac427 6194specify this, except to say that C++ should behave in a similar manner
767094dd 6195to C with respect to volatiles, where possible. The minimum either
8117da65 6196standard specifies is that at a sequence point all previous accesses to
02cac427 6197volatile objects have stabilized and no subsequent accesses have
767094dd 6198occurred. Thus an implementation is free to reorder and combine
02cac427 6199volatile accesses which occur between sequence points, but cannot do so
767094dd 6200for accesses across a sequence point. The use of volatiles does not
02cac427
NS
6201allow you to violate the restriction on updating objects multiple times
6202within a sequence point.
6203
6204In most expressions, it is intuitively obvious what is a read and what is
767094dd 6205a write. For instance
02cac427
NS
6206
6207@example
c771326b
JM
6208volatile int *dst = @var{somevalue};
6209volatile int *src = @var{someothervalue};
02cac427
NS
6210*dst = *src;
6211@end example
6212
6213@noindent
6214will cause a read of the volatile object pointed to by @var{src} and stores the
767094dd 6215value into the volatile object pointed to by @var{dst}. There is no
02cac427
NS
6216guarantee that these reads and writes are atomic, especially for objects
6217larger than @code{int}.
6218
6219Less obvious expressions are where something which looks like an access
767094dd 6220is used in a void context. An example would be,
02cac427
NS
6221
6222@example
c771326b 6223volatile int *src = @var{somevalue};
02cac427
NS
6224*src;
6225@end example
6226
6227With C, such expressions are rvalues, and as rvalues cause a read of
f0523f02 6228the object, GCC interprets this as a read of the volatile being pointed
767094dd 6229to. The C++ standard specifies that such expressions do not undergo
02cac427 6230lvalue to rvalue conversion, and that the type of the dereferenced
767094dd 6231object may be incomplete. The C++ standard does not specify explicitly
02cac427 6232that it is this lvalue to rvalue conversion which is responsible for
767094dd
JM
6233causing an access. However, there is reason to believe that it is,
6234because otherwise certain simple expressions become undefined. However,
f0523f02 6235because it would surprise most programmers, G++ treats dereferencing a
02cac427 6236pointer to volatile object of complete type in a void context as a read
767094dd 6237of the object. When the object has incomplete type, G++ issues a
02cac427
NS
6238warning.
6239
6240@example
6241struct S;
6242struct T @{int m;@};
c771326b
JM
6243volatile S *ptr1 = @var{somevalue};
6244volatile T *ptr2 = @var{somevalue};
02cac427
NS
6245*ptr1;
6246*ptr2;
6247@end example
6248
6249In this example, a warning is issued for @code{*ptr1}, and @code{*ptr2}
767094dd 6250causes a read of the object pointed to. If you wish to force an error on
02cac427
NS
6251the first case, you must force a conversion to rvalue with, for instance
6252a static cast, @code{static_cast<S>(*ptr1)}.
6253
f0523f02 6254When using a reference to volatile, G++ does not treat equivalent
02cac427 6255expressions as accesses to volatiles, but instead issues a warning that
767094dd 6256no volatile is accessed. The rationale for this is that otherwise it
02cac427
NS
6257becomes difficult to determine where volatile access occur, and not
6258possible to ignore the return value from functions returning volatile
767094dd 6259references. Again, if you wish to force a read, cast the reference to
02cac427
NS
6260an rvalue.
6261
535233a8
NS
6262@node Restricted Pointers
6263@section Restricting Pointer Aliasing
6264@cindex restricted pointers
6265@cindex restricted references
6266@cindex restricted this pointer
6267
49419c8f 6268As with gcc, g++ understands the C99 feature of restricted pointers,
535233a8 6269specified with the @code{__restrict__}, or @code{__restrict} type
767094dd 6270qualifier. Because you cannot compile C++ by specifying the @option{-std=c99}
535233a8
NS
6271language flag, @code{restrict} is not a keyword in C++.
6272
6273In addition to allowing restricted pointers, you can specify restricted
6274references, which indicate that the reference is not aliased in the local
6275context.
6276
6277@example
6278void fn (int *__restrict__ rptr, int &__restrict__ rref)
6279@{
6280 @dots{}
6281@}
6282@end example
6283
6284@noindent
6285In the body of @code{fn}, @var{rptr} points to an unaliased integer and
6286@var{rref} refers to a (different) unaliased integer.
6287
6288You may also specify whether a member function's @var{this} pointer is
6289unaliased by using @code{__restrict__} as a member function qualifier.
6290
6291@example
6292void T::fn () __restrict__
6293@{
6294 @dots{}
6295@}
6296@end example
6297
6298@noindent
6299Within the body of @code{T::fn}, @var{this} will have the effective
767094dd 6300definition @code{T *__restrict__ const this}. Notice that the
535233a8
NS
6301interpretation of a @code{__restrict__} member function qualifier is
6302different to that of @code{const} or @code{volatile} qualifier, in that it
767094dd 6303is applied to the pointer rather than the object. This is consistent with
535233a8
NS
6304other compilers which implement restricted pointers.
6305
6306As with all outermost parameter qualifiers, @code{__restrict__} is
767094dd 6307ignored in function definition matching. This means you only need to
535233a8
NS
6308specify @code{__restrict__} in a function definition, rather than
6309in a function prototype as well.
6310
7a81cf7f
JM
6311@node Vague Linkage
6312@section Vague Linkage
6313@cindex vague linkage
6314
6315There are several constructs in C++ which require space in the object
6316file but are not clearly tied to a single translation unit. We say that
6317these constructs have ``vague linkage''. Typically such constructs are
6318emitted wherever they are needed, though sometimes we can be more
6319clever.
6320
6321@table @asis
6322@item Inline Functions
6323Inline functions are typically defined in a header file which can be
6324included in many different compilations. Hopefully they can usually be
6325inlined, but sometimes an out-of-line copy is necessary, if the address
6326of the function is taken or if inlining fails. In general, we emit an
6327out-of-line copy in all translation units where one is needed. As an
6328exception, we only emit inline virtual functions with the vtable, since
6329it will always require a copy.
6330
6331Local static variables and string constants used in an inline function
6332are also considered to have vague linkage, since they must be shared
6333between all inlined and out-of-line instances of the function.
6334
6335@item VTables
6336@cindex vtable
6337C++ virtual functions are implemented in most compilers using a lookup
6338table, known as a vtable. The vtable contains pointers to the virtual
6339functions provided by a class, and each object of the class contains a
6340pointer to its vtable (or vtables, in some multiple-inheritance
6341situations). If the class declares any non-inline, non-pure virtual
6342functions, the first one is chosen as the ``key method'' for the class,
6343and the vtable is only emitted in the translation unit where the key
6344method is defined.
6345
6346@emph{Note:} If the chosen key method is later defined as inline, the
6347vtable will still be emitted in every translation unit which defines it.
6348Make sure that any inline virtuals are declared inline in the class
6349body, even if they are not defined there.
6350
6351@item type_info objects
6352@cindex type_info
6353@cindex RTTI
6354C++ requires information about types to be written out in order to
6355implement @samp{dynamic_cast}, @samp{typeid} and exception handling.
6356For polymorphic classes (classes with virtual functions), the type_info
6357object is written out along with the vtable so that @samp{dynamic_cast}
6358can determine the dynamic type of a class object at runtime. For all
6359other types, we write out the type_info object when it is used: when
6360applying @samp{typeid} to an expression, throwing an object, or
6361referring to a type in a catch clause or exception specification.
6362
6363@item Template Instantiations
6364Most everything in this section also applies to template instantiations,
6365but there are other options as well.
6366@xref{Template Instantiation,,Where's the Template?}.
6367
6368@end table
6369
6370When used with GNU ld version 2.8 or later on an ELF system such as
6371Linux/GNU or Solaris 2, or on Microsoft Windows, duplicate copies of
6372these constructs will be discarded at link time. This is known as
6373COMDAT support.
6374
6375On targets that don't support COMDAT, but do support weak symbols, GCC
6376will use them. This way one copy will override all the others, but
6377the unused copies will still take up space in the executable.
6378
6379For targets which do not support either COMDAT or weak symbols,
6380most entities with vague linkage will be emitted as local symbols to
6381avoid duplicate definition errors from the linker. This will not happen
6382for local statics in inlines, however, as having multiple copies will
6383almost certainly break things.
6384
6385@xref{C++ Interface,,Declarations and Definitions in One Header}, for
6386another way to control placement of these constructs.
6387
c1f7febf
RK
6388@node C++ Interface
6389@section Declarations and Definitions in One Header
6390
6391@cindex interface and implementation headers, C++
6392@cindex C++ interface and implementation headers
6393C++ object definitions can be quite complex. In principle, your source
6394code will need two kinds of things for each object that you use across
6395more than one source file. First, you need an @dfn{interface}
6396specification, describing its structure with type declarations and
6397function prototypes. Second, you need the @dfn{implementation} itself.
6398It can be tedious to maintain a separate interface description in a
6399header file, in parallel to the actual implementation. It is also
6400dangerous, since separate interface and implementation definitions may
6401not remain parallel.
6402
6403@cindex pragmas, interface and implementation
6404With GNU C++, you can use a single header file for both purposes.
6405
6406@quotation
6407@emph{Warning:} The mechanism to specify this is in transition. For the
6408nonce, you must use one of two @code{#pragma} commands; in a future
6409release of GNU C++, an alternative mechanism will make these
6410@code{#pragma} commands unnecessary.
6411@end quotation
6412
6413The header file contains the full definitions, but is marked with
6414@samp{#pragma interface} in the source code. This allows the compiler
6415to use the header file only as an interface specification when ordinary
6416source files incorporate it with @code{#include}. In the single source
6417file where the full implementation belongs, you can use either a naming
6418convention or @samp{#pragma implementation} to indicate this alternate
6419use of the header file.
6420
6421@table @code
6422@item #pragma interface
6423@itemx #pragma interface "@var{subdir}/@var{objects}.h"
6424@kindex #pragma interface
6425Use this directive in @emph{header files} that define object classes, to save
6426space in most of the object files that use those classes. Normally,
6427local copies of certain information (backup copies of inline member
6428functions, debugging information, and the internal tables that implement
6429virtual functions) must be kept in each object file that includes class
6430definitions. You can use this pragma to avoid such duplication. When a
6431header file containing @samp{#pragma interface} is included in a
6432compilation, this auxiliary information will not be generated (unless
6433the main input source file itself uses @samp{#pragma implementation}).
6434Instead, the object files will contain references to be resolved at link
6435time.
6436
6437The second form of this directive is useful for the case where you have
6438multiple headers with the same name in different directories. If you
6439use this form, you must specify the same string to @samp{#pragma
6440implementation}.
6441
6442@item #pragma implementation
6443@itemx #pragma implementation "@var{objects}.h"
6444@kindex #pragma implementation
6445Use this pragma in a @emph{main input file}, when you want full output from
6446included header files to be generated (and made globally visible). The
6447included header file, in turn, should use @samp{#pragma interface}.
6448Backup copies of inline member functions, debugging information, and the
6449internal tables used to implement virtual functions are all generated in
6450implementation files.
6451
6452@cindex implied @code{#pragma implementation}
6453@cindex @code{#pragma implementation}, implied
6454@cindex naming convention, implementation headers
6455If you use @samp{#pragma implementation} with no argument, it applies to
6456an include file with the same basename@footnote{A file's @dfn{basename}
6457was the name stripped of all leading path information and of trailing
6458suffixes, such as @samp{.h} or @samp{.C} or @samp{.cc}.} as your source
6459file. For example, in @file{allclass.cc}, giving just
6460@samp{#pragma implementation}
6461by itself is equivalent to @samp{#pragma implementation "allclass.h"}.
6462
6463In versions of GNU C++ prior to 2.6.0 @file{allclass.h} was treated as
6464an implementation file whenever you would include it from
6465@file{allclass.cc} even if you never specified @samp{#pragma
6466implementation}. This was deemed to be more trouble than it was worth,
6467however, and disabled.
6468
6469If you use an explicit @samp{#pragma implementation}, it must appear in
6470your source file @emph{before} you include the affected header files.
6471
6472Use the string argument if you want a single implementation file to
6473include code from multiple header files. (You must also use
6474@samp{#include} to include the header file; @samp{#pragma
6475implementation} only specifies how to use the file---it doesn't actually
6476include it.)
6477
6478There is no way to split up the contents of a single header file into
6479multiple implementation files.
6480@end table
6481
6482@cindex inlining and C++ pragmas
6483@cindex C++ pragmas, effect on inlining
6484@cindex pragmas in C++, effect on inlining
6485@samp{#pragma implementation} and @samp{#pragma interface} also have an
6486effect on function inlining.
6487
6488If you define a class in a header file marked with @samp{#pragma
6489interface}, the effect on a function defined in that class is similar to
6490an explicit @code{extern} declaration---the compiler emits no code at
6491all to define an independent version of the function. Its definition
6492is used only for inlining with its callers.
6493
84330467 6494@opindex fno-implement-inlines
c1f7febf
RK
6495Conversely, when you include the same header file in a main source file
6496that declares it as @samp{#pragma implementation}, the compiler emits
6497code for the function itself; this defines a version of the function
6498that can be found via pointers (or by callers compiled without
6499inlining). If all calls to the function can be inlined, you can avoid
84330467 6500emitting the function by compiling with @option{-fno-implement-inlines}.
c1f7febf
RK
6501If any calls were not inlined, you will get linker errors.
6502
6503@node Template Instantiation
6504@section Where's the Template?
6505
6506@cindex template instantiation
6507
6508C++ templates are the first language feature to require more
6509intelligence from the environment than one usually finds on a UNIX
6510system. Somehow the compiler and linker have to make sure that each
6511template instance occurs exactly once in the executable if it is needed,
6512and not at all otherwise. There are two basic approaches to this
6513problem, which I will refer to as the Borland model and the Cfront model.
6514
6515@table @asis
6516@item Borland model
6517Borland C++ solved the template instantiation problem by adding the code
469b759e
JM
6518equivalent of common blocks to their linker; the compiler emits template
6519instances in each translation unit that uses them, and the linker
6520collapses them together. The advantage of this model is that the linker
6521only has to consider the object files themselves; there is no external
6522complexity to worry about. This disadvantage is that compilation time
6523is increased because the template code is being compiled repeatedly.
6524Code written for this model tends to include definitions of all
6525templates in the header file, since they must be seen to be
6526instantiated.
c1f7febf
RK
6527
6528@item Cfront model
6529The AT&T C++ translator, Cfront, solved the template instantiation
6530problem by creating the notion of a template repository, an
469b759e
JM
6531automatically maintained place where template instances are stored. A
6532more modern version of the repository works as follows: As individual
6533object files are built, the compiler places any template definitions and
6534instantiations encountered in the repository. At link time, the link
6535wrapper adds in the objects in the repository and compiles any needed
6536instances that were not previously emitted. The advantages of this
6537model are more optimal compilation speed and the ability to use the
6538system linker; to implement the Borland model a compiler vendor also
c1f7febf 6539needs to replace the linker. The disadvantages are vastly increased
469b759e
JM
6540complexity, and thus potential for error; for some code this can be
6541just as transparent, but in practice it can been very difficult to build
c1f7febf 6542multiple programs in one directory and one program in multiple
469b759e
JM
6543directories. Code written for this model tends to separate definitions
6544of non-inline member templates into a separate file, which should be
6545compiled separately.
c1f7febf
RK
6546@end table
6547
469b759e 6548When used with GNU ld version 2.8 or later on an ELF system such as
a4b3b54a
JM
6549Linux/GNU or Solaris 2, or on Microsoft Windows, g++ supports the
6550Borland model. On other systems, g++ implements neither automatic
6551model.
469b759e
JM
6552
6553A future version of g++ will support a hybrid model whereby the compiler
6554will emit any instantiations for which the template definition is
6555included in the compile, and store template definitions and
6556instantiation context information into the object file for the rest.
6557The link wrapper will extract that information as necessary and invoke
6558the compiler to produce the remaining instantiations. The linker will
6559then combine duplicate instantiations.
6560
6561In the mean time, you have the following options for dealing with
6562template instantiations:
c1f7febf
RK
6563
6564@enumerate
d863830b 6565@item
84330467
JM
6566@opindex frepo
6567Compile your template-using code with @option{-frepo}. The compiler will
d863830b
JL
6568generate files with the extension @samp{.rpo} listing all of the
6569template instantiations used in the corresponding object files which
6570could be instantiated there; the link wrapper, @samp{collect2}, will
6571then update the @samp{.rpo} files to tell the compiler where to place
6572those instantiations and rebuild any affected object files. The
6573link-time overhead is negligible after the first pass, as the compiler
6574will continue to place the instantiations in the same files.
6575
6576This is your best option for application code written for the Borland
6577model, as it will just work. Code written for the Cfront model will
6578need to be modified so that the template definitions are available at
6579one or more points of instantiation; usually this is as simple as adding
6580@code{#include <tmethods.cc>} to the end of each template header.
6581
6582For library code, if you want the library to provide all of the template
6583instantiations it needs, just try to link all of its object files
6584together; the link will fail, but cause the instantiations to be
6585generated as a side effect. Be warned, however, that this may cause
6586conflicts if multiple libraries try to provide the same instantiations.
6587For greater control, use explicit instantiation as described in the next
6588option.
6589
c1f7febf 6590@item
84330467
JM
6591@opindex fno-implicit-templates
6592Compile your code with @option{-fno-implicit-templates} to disable the
c1f7febf
RK
6593implicit generation of template instances, and explicitly instantiate
6594all the ones you use. This approach requires more knowledge of exactly
6595which instances you need than do the others, but it's less
6596mysterious and allows greater control. You can scatter the explicit
6597instantiations throughout your program, perhaps putting them in the
6598translation units where the instances are used or the translation units
6599that define the templates themselves; you can put all of the explicit
6600instantiations you need into one big file; or you can create small files
6601like
6602
6603@example
6604#include "Foo.h"
6605#include "Foo.cc"
6606
6607template class Foo<int>;
6608template ostream& operator <<
6609 (ostream&, const Foo<int>&);
6610@end example
6611
6612for each of the instances you need, and create a template instantiation
6613library from those.
6614
6615If you are using Cfront-model code, you can probably get away with not
84330467 6616using @option{-fno-implicit-templates} when compiling files that don't
c1f7febf
RK
6617@samp{#include} the member template definitions.
6618
6619If you use one big file to do the instantiations, you may want to
84330467 6620compile it without @option{-fno-implicit-templates} so you get all of the
c1f7febf
RK
6621instances required by your explicit instantiations (but not by any
6622other files) without having to specify them as well.
6623
6624g++ has extended the template instantiation syntax outlined in the
03d0f4af 6625Working Paper to allow forward declaration of explicit instantiations
4003d7f9 6626(with @code{extern}), instantiation of the compiler support data for a
e979f9e8 6627template class (i.e.@: the vtable) without instantiating any of its
4003d7f9
JM
6628members (with @code{inline}), and instantiation of only the static data
6629members of a template class, without the support data or member
6630functions (with (@code{static}):
c1f7febf
RK
6631
6632@example
6633extern template int max (int, int);
c1f7febf 6634inline template class Foo<int>;
4003d7f9 6635static template class Foo<int>;
c1f7febf
RK
6636@end example
6637
6638@item
6639Do nothing. Pretend g++ does implement automatic instantiation
6640management. Code written for the Borland model will work fine, but
6641each translation unit will contain instances of each of the templates it
6642uses. In a large program, this can lead to an unacceptable amount of code
6643duplication.
6644
6645@item
84330467 6646@opindex fexternal-templates
c1f7febf
RK
6647Add @samp{#pragma interface} to all files containing template
6648definitions. For each of these files, add @samp{#pragma implementation
6649"@var{filename}"} to the top of some @samp{.C} file which
6650@samp{#include}s it. Then compile everything with
84330467 6651@option{-fexternal-templates}. The templates will then only be expanded
e979f9e8 6652in the translation unit which implements them (i.e.@: has a @samp{#pragma
c1f7febf
RK
6653implementation} line for the file where they live); all other files will
6654use external references. If you're lucky, everything should work
6655properly. If you get undefined symbol errors, you need to make sure
6656that each template instance which is used in the program is used in the
6657file which implements that template. If you don't have any use for a
6658particular instance in that file, you can just instantiate it
6659explicitly, using the syntax from the latest C++ working paper:
6660
6661@example
6662template class A<int>;
6663template ostream& operator << (ostream&, const A<int>&);
6664@end example
6665
6666This strategy will work with code written for either model. If you are
6667using code written for the Cfront model, the file containing a class
6668template and the file containing its member templates should be
6669implemented in the same translation unit.
6670
9c34dbbf 6671@item
84330467 6672@opindex falt-external-templates
9c34dbbf
ZW
6673A slight variation on this approach is to use the flag
6674@option{-falt-external-templates} instead. This flag causes template
c1f7febf
RK
6675instances to be emitted in the translation unit that implements the
6676header where they are first instantiated, rather than the one which
6677implements the file where the templates are defined. This header must
6678be the same in all translation units, or things are likely to break.
6679
6680@xref{C++ Interface,,Declarations and Definitions in One Header}, for
6681more discussion of these pragmas.
6682@end enumerate
6683
0ded1f18
JM
6684@node Bound member functions
6685@section Extracting the function pointer from a bound pointer to member function
6686
6687@cindex pmf
6688@cindex pointer to member function
6689@cindex bound pointer to member function
6690
6691In C++, pointer to member functions (PMFs) are implemented using a wide
6692pointer of sorts to handle all the possible call mechanisms; the PMF
6693needs to store information about how to adjust the @samp{this} pointer,
6694and if the function pointed to is virtual, where to find the vtable, and
6695where in the vtable to look for the member function. If you are using
6696PMFs in an inner loop, you should really reconsider that decision. If
6697that is not an option, you can extract the pointer to the function that
6698would be called for a given object/PMF pair and call it directly inside
6699the inner loop, to save a bit of time.
6700
6701Note that you will still be paying the penalty for the call through a
6702function pointer; on most modern architectures, such a call defeats the
161d7b59 6703branch prediction features of the CPU@. This is also true of normal
0ded1f18
JM
6704virtual function calls.
6705
6706The syntax for this extension is
6707
6708@example
6709extern A a;
6710extern int (A::*fp)();
6711typedef int (*fptr)(A *);
6712
6713fptr p = (fptr)(a.*fp);
6714@end example
6715
e979f9e8 6716For PMF constants (i.e.@: expressions of the form @samp{&Klasse::Member}),
767094dd 6717no object is needed to obtain the address of the function. They can be
0fb6bbf5
ML
6718converted to function pointers directly:
6719
6720@example
6721fptr p1 = (fptr)(&A::foo);
6722@end example
6723
84330467
JM
6724@opindex Wno-pmf-conversions
6725You must specify @option{-Wno-pmf-conversions} to use this extension.
0ded1f18 6726
5c25e11d
PE
6727@node C++ Attributes
6728@section C++-Specific Variable, Function, and Type Attributes
6729
6730Some attributes only make sense for C++ programs.
6731
6732@table @code
6733@item init_priority (@var{priority})
6734@cindex init_priority attribute
6735
6736
6737In Standard C++, objects defined at namespace scope are guaranteed to be
6738initialized in an order in strict accordance with that of their definitions
6739@emph{in a given translation unit}. No guarantee is made for initializations
6740across translation units. However, GNU C++ allows users to control the
3844cd2e 6741order of initialization of objects defined at namespace scope with the
5c25e11d
PE
6742@code{init_priority} attribute by specifying a relative @var{priority},
6743a constant integral expression currently bounded between 101 and 65535
6744inclusive. Lower numbers indicate a higher priority.
6745
6746In the following example, @code{A} would normally be created before
6747@code{B}, but the @code{init_priority} attribute has reversed that order:
6748
6749@example
6750Some_Class A __attribute__ ((init_priority (2000)));
6751Some_Class B __attribute__ ((init_priority (543)));
6752@end example
6753
6754@noindent
6755Note that the particular values of @var{priority} do not matter; only their
6756relative ordering.
6757
60c87482
BM
6758@item java_interface
6759@cindex java_interface attribute
6760
02f52e19 6761This type attribute informs C++ that the class is a Java interface. It may
60c87482 6762only be applied to classes declared within an @code{extern "Java"} block.
02f52e19
AJ
6763Calls to methods declared in this interface will be dispatched using GCJ's
6764interface table mechanism, instead of regular virtual table dispatch.
60c87482 6765
5c25e11d
PE
6766@end table
6767
1f730ff7
ZW
6768@node Java Exceptions
6769@section Java Exceptions
6770
6771The Java language uses a slightly different exception handling model
6772from C++. Normally, GNU C++ will automatically detect when you are
6773writing C++ code that uses Java exceptions, and handle them
6774appropriately. However, if C++ code only needs to execute destructors
6775when Java exceptions are thrown through it, GCC will guess incorrectly.
9c34dbbf 6776Sample problematic code is:
1f730ff7
ZW
6777
6778@example
6779 struct S @{ ~S(); @};
9c34dbbf 6780 extern void bar(); // is written in Java, and may throw exceptions
1f730ff7
ZW
6781 void foo()
6782 @{
6783 S s;
6784 bar();
6785 @}
6786@end example
6787
6788@noindent
6789The usual effect of an incorrect guess is a link failure, complaining of
6790a missing routine called @samp{__gxx_personality_v0}.
6791
6792You can inform the compiler that Java exceptions are to be used in a
6793translation unit, irrespective of what it might think, by writing
6794@samp{@w{#pragma GCC java_exceptions}} at the head of the file. This
6795@samp{#pragma} must appear before any functions that throw or catch
6796exceptions, or run destructors when exceptions are thrown through them.
6797
6798You cannot mix Java and C++ exceptions in the same translation unit. It
6799is believed to be safe to throw a C++ exception from one file through
9c34dbbf
ZW
6800another file compiled for the Java exception model, or vice versa, but
6801there may be bugs in this area.
1f730ff7 6802
e6f3b89d
PE
6803@node Deprecated Features
6804@section Deprecated Features
6805
6806In the past, the GNU C++ compiler was extended to experiment with new
767094dd 6807features, at a time when the C++ language was still evolving. Now that
e6f3b89d 6808the C++ standard is complete, some of those features are superseded by
767094dd
JM
6809superior alternatives. Using the old features might cause a warning in
6810some cases that the feature will be dropped in the future. In other
e6f3b89d
PE
6811cases, the feature might be gone already.
6812
6813While the list below is not exhaustive, it documents some of the options
6814that are now deprecated:
6815
6816@table @code
6817@item -fexternal-templates
6818@itemx -falt-external-templates
6819These are two of the many ways for g++ to implement template
767094dd 6820instantiation. @xref{Template Instantiation}. The C++ standard clearly
e6f3b89d 6821defines how template definitions have to be organized across
767094dd 6822implementation units. g++ has an implicit instantiation mechanism that
e6f3b89d
PE
6823should work just fine for standard-conforming code.
6824
6825@item -fstrict-prototype
6826@itemx -fno-strict-prototype
6827Previously it was possible to use an empty prototype parameter list to
6828indicate an unspecified number of parameters (like C), rather than no
767094dd 6829parameters, as C++ demands. This feature has been removed, except where
e6f3b89d
PE
6830it is required for backwards compatibility @xref{Backwards Compatibility}.
6831@end table
6832
ad1a6d45
NS
6833The named return value extension has been deprecated, and is now
6834removed from g++.
e6f3b89d 6835
82c18d5c 6836The use of initializer lists with new expressions has been deprecated,
ad1a6d45
NS
6837and is now removed from g++.
6838
6839Floating and complex non-type template parameters have been deprecated,
6840and are now removed from g++.
6841
6842The implicit typename extension has been deprecated and will be removed
6843from g++ at some point. In some cases g++ determines that a dependant
6844type such as @code{TPL<T>::X} is a type without needing a
6845@code{typename} keyword, contrary to the standard.
82c18d5c 6846
e6f3b89d
PE
6847@node Backwards Compatibility
6848@section Backwards Compatibility
6849@cindex Backwards Compatibility
6850@cindex ARM [Annotated C++ Reference Manual]
6851
aee96fe9 6852Now that there is a definitive ISO standard C++, G++ has a specification
767094dd 6853to adhere to. The C++ language evolved over time, and features that
e6f3b89d 6854used to be acceptable in previous drafts of the standard, such as the ARM
767094dd 6855[Annotated C++ Reference Manual], are no longer accepted. In order to allow
aee96fe9 6856compilation of C++ written to such drafts, G++ contains some backwards
767094dd 6857compatibilities. @emph{All such backwards compatibility features are
aee96fe9 6858liable to disappear in future versions of G++.} They should be considered
e6f3b89d
PE
6859deprecated @xref{Deprecated Features}.
6860
6861@table @code
6862@item For scope
6863If a variable is declared at for scope, it used to remain in scope until
6864the end of the scope which contained the for statement (rather than just
aee96fe9 6865within the for scope). G++ retains this, but issues a warning, if such a
e6f3b89d
PE
6866variable is accessed outside the for scope.
6867
ad1a6d45 6868@item Implicit C language
630d3d5a 6869Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
767094dd
JM
6870scope to set the language. On such systems, all header files are
6871implicitly scoped inside a C language scope. Also, an empty prototype
e6f3b89d
PE
6872@code{()} will be treated as an unspecified number of arguments, rather
6873than no arguments, as C++ demands.
6874@end table