|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
7:
8: Permission is granted to make and distribute verbatim copies of
9: this manual provided the copyright notice and this permission notice
10: are preserved on all copies.
11:
12: Permission is granted to copy and distribute modified versions of
13: this manual under the conditions for verbatim copying, provided also
14: that the section entitled "GNU General Public License" is included
15: exactly as in the original, and provided that the entire resulting
16: derived work is distributed under the terms of a permission notice
17: identical to this one.
18:
19: Permission is granted to copy and distribute translations of this
20: manual into another language, under the above conditions for modified
21: versions, except that the section entitled "GNU General Public
22: License" and this permission notice may be included in translations
23: approved by the Free Software Foundation instead of in the original
24: English.
25:
26:
27: File: gcc.info, Node: Function Attributes, Next: Dollar Signs, Prev: Case Ranges, Up: Extensions
28:
29: Declaring Attributes of Functions
30: =================================
31:
32: In GNU C, you declare certain things about functions called in your
33: program which help the compiler optimize function calls.
34:
35: A few standard library functions, such as `abort' and `exit',
36: cannot return. GNU CC knows this automatically. Some programs define
37: their own functions that never return. You can declare them
38: `volatile' to tell the compiler this fact. For example,
39:
40: extern void volatile fatal ();
41:
42: void
43: fatal (...)
44: {
45: ... /* Print error message. */ ...
46: exit (1);
47: }
48:
49: The `volatile' keyword tells the compiler to assume that `fatal'
50: cannot return. This makes slightly better code, but more importantly
51: it helps avoid spurious warnings of uninitialized variables.
52:
53: It does not make sense for a `volatile' function to have a return
54: type other than `void'.
55:
56: Many functions do not examine any values except their arguments, and
57: have no effects except the return value. Such a function can be
58: subject to common subexpression elimination and loop optimization just
59: as an arithmetic operator would be. These functions should be declared
60: `const'. For example,
61:
62: extern int const square ();
63:
64: says that the hypothetical function `square' is safe to call fewer
65: times than the program says.
66:
67: Note that a function that has pointer arguments and examines the
68: data pointed to must *not* be declared `const'. Likewise, a function
69: that calls a non-`const' function usually must not be `const'. It
70: does not make sense for a `const' function to return `void'.
71:
72: We recommend placing the keyword `const' after the function's
73: return type. It makes no difference in the example above, but when the
74: return type is a pointer, it is the only way to make the function
75: itself const. For example,
76:
77: const char *mincp (int);
78:
79: says that `mincp' returns `const char *'--a pointer to a const object.
80: To declare `mincp' const, you must write this:
81:
82: char * const mincp (int);
83:
84: Some people object to this feature, suggesting that ANSI C's
85: `#pragma' should be used instead. There are two reasons for not doing
86: this.
87:
88: 1. It is impossible to generate `#pragma' commands from a macro.
89:
90: 2. The `#pragma' command is just as likely as these keywords to mean
91: something else in another compiler.
92:
93: These two reasons apply to almost any application that might be
94: proposed for `#pragma'. It is basically a mistake to use `#pragma' for
95: *anything*.
96:
97:
98: File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: Function Attributes, Up: Extensions
99:
100: Dollar Signs in Identifier Names
101: ================================
102:
103: In GNU C, you may use dollar signs in identifier names. This is
104: because many traditional C implementations allow such identifiers.
105:
106: Dollar signs are allowed on certain machines if you specify
107: `-traditional'. On a few systems they are allowed by default, even if
108: `-traditional' is not used. But they are never allowed if you specify
109: `-ansi'.
110:
111: There are certain ANSI C programs (obscure, to be sure) that would
112: compile incorrectly if dollar signs were permitted in identifiers. For
113: example:
114:
115: #define foo(a) #a
116: #define lose(b) foo (b)
117: #define test$
118: lose (test)
119:
120:
121: File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: Extensions
122:
123: The Character ESC in Constants
124: ==============================
125:
126: You can use the sequence `\e' in a string or character constant to
127: stand for the ASCII character ESC.
128:
129:
130: File: gcc.info, Node: Alignment, Next: Inline, Prev: Variable Attributes, Up: Extensions
131:
132: Inquiring on Alignment of Types or Variables
133: ============================================
134:
135: The keyword `__alignof__' allows you to inquire about how an object
136: is aligned, or the minimum alignment usually required by a type. Its
137: syntax is just like `sizeof'.
138:
139: For example, if the target machine requires a `double' value to be
140: aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This
141: is true on many RISC machines. On more traditional machine designs,
142: `__alignof__ (double)' is 4 or even 2.
143:
144: Some machines never actually require alignment; they allow
145: reference to any data type even at an odd addresses. For these
146: machines, `__alignof__' reports the *recommended* alignment of a type.
147:
148: When the operand of `__alignof__' is an lvalue rather than a type,
149: the value is the largest alignment that the lvalue is known to have.
150: It may have this alignment as a result of its data type, or because it
151: is part of a structure and inherits alignment from that structure. For
152: example, after this declaration:
153:
154: struct foo { int x; char y; } foo1;
155:
156: the value of `__alignof__ (foo1.y)' is probably 2 or 4, the same as
157: `__alignof__ (int)', even though the data type of `foo1.y' does not
158: itself demand any alignment.
159:
160:
161: File: gcc.info, Node: Variable Attributes, Next: Alignment, Prev: Character Escapes, Up: Extensions
162:
163: Specifying Attributes of Variables
164: ==================================
165:
166: The keyword `__attribute__' allows you to specify special
167: attributes of variables or structure fields. The only attributes
168: currently defined are the `aligned' and `format' attributes.
169:
170: The `aligned' attribute specifies the alignment of the variable or
171: structure field. For example, the declaration:
172:
173: int x __attribute__ ((aligned (16))) = 0;
174:
175: causes the compiler to allocate the global variable `x' on a 16-byte
176: boundary. On a 68000, this could be used in conjunction with an `asm'
177: expression to access the `move16' instruction which requires 16-byte
178: aligned operands.
179:
180: You can also specify the alignment of structure fields. For
181: example, to create a double-word aligned `int' pair, you could write:
182:
183: struct foo { int x[2] __attribute__ ((aligned (8))); };
184:
185: This is an alternative to creating a union with a `double' member that
186: forces the union to be double-word aligned.
187:
188: It is not possible to specify the alignment of functions; the
189: alignment of functions is determined by the machine's requirements and
190: cannot be changed.
191:
192: The `format' attribute specifies that a function takes `printf' or
193: `scanf' style arguments which should be type-checked against a format
194: string. For example, the declaration:
195:
196: extern int
197: my_printf (void *my_object, const char *my_format, ...)
198: __attribute__ ((format (printf, 2, 3)));
199:
200: causes the compiler to check the arguments in calls to `my_printf' for
201: consistency with the `printf' style format string argument `my_format'.
202:
203: The first parameter of the `format' attribute determines how the
204: format string is interpreted, and should be either `printf' or
205: `scanf'. The second parameter specifies the number of the format
206: string argument (starting from 1). The third parameter specifies the
207: number of the first argument which should be checked against the
208: format string. For functions where the arguments are not available to
209: be checked (such as `vprintf'), specify the third parameter as zero.
210: In this case the compiler only checks the format string for
211: consistency.
212:
213: In the example above, the format string (`my_format') is the second
214: argument to `my_print' and the arguments to check start with the third
215: argument, so the correct parameters for the format attribute are 2 and
216: 3.
217:
218: The `format' attribute allows you to identify your own functions
219: which take format strings as arguments, so that GNU CC can check the
220: calls to these functions for errors. The compiler always checks
221: formats for the ANSI library functions `printf', `fprintf', `sprintf',
222: `scanf', `fscanf', `sscanf', `vprintf', `vfprintf' and `vsprintf'
223: whenever such warnings are requested (using `-Wformat'), so there is no
224: need to modify the header file `stdio.h'.
225:
226:
227: File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: Extensions
228:
229: An Inline Function is As Fast As a Macro
230: ========================================
231:
232: By declaring a function `inline', you can direct GNU CC to integrate
233: that function's code into the code for its callers. This makes
234: execution faster by eliminating the function-call overhead; in
235: addition, if any of the actual argument values are constant, their
236: known values may permit simplifications at compile time so that not
237: all of the inline function's code needs to be included.
238:
239: To declare a function inline, use the `inline' keyword in its
240: declaration, like this:
241:
242: inline int
243: inc (int *a)
244: {
245: (*a)++;
246: }
247:
248: (If you are writing a header file to be included in ANSI C
249: programs, write `__inline__' instead of `inline'. *Note Alternate
250: Keywords::.)
251:
252: You can also make all "simple enough" functions inline with the
253: option `-finline-functions'. Note that certain usages in a function
254: definition can make it unsuitable for inline substitution.
255:
256: When a function is both inline and `static', if all calls to the
257: function are integrated into the caller, and the function's address is
258: never used, then the function's own assembler code is never referenced.
259: In this case, GNU CC does not actually output assembler code for the
260: function, unless you specify the option `-fkeep-inline-functions'.
261: Some calls cannot be integrated for various reasons (in particular,
262: calls that precede the function's definition cannot be integrated, and
263: neither can recursive calls within the definition). If there is a
264: nonintegrated call, then the function is compiled to assembler code as
265: usual. The function must also be compiled as usual if the program
266: refers to its address, because that can't be inlined.
267:
268: When an inline function is not `static', then the compiler must
269: assume that there may be calls from other source files; since a global
270: symbol can be defined only once in any program, the function must not
271: be defined in the other source files, so the calls therein cannot be
272: integrated. Therefore, a non-`static' inline function is always
273: compiled on its own in the usual fashion.
274:
275: If you specify both `inline' and `extern' in the function
276: definition, then the definition is used only for inlining. In no case
277: is the function compiled on its own, not even if you refer to its
278: address explicitly. Such an address becomes an external reference, as
279: if you had only declared the function, and had not defined it.
280:
281: This combination of `inline' and `extern' has almost the effect of
282: a macro. The way to use it is to put a function definition in a
283: header file with these keywords, and put another copy of the
284: definition (lacking `inline' and `extern') in a library file. The
285: definition in the header file will cause most calls to the function to
286: be inlined. If any uses of the function remain, they will refer to
287: the single copy in the library.
288:
289:
290: File: gcc.info, Node: Extended Asm, Next: Asm Labels, Prev: Inline, Up: Extensions
291:
292: Assembler Instructions with C Expression Operands
293: =================================================
294:
295: In an assembler instruction using `asm', you can now specify the
296: operands of the instruction using C expressions. This means no more
297: guessing which registers or memory locations will contain the data you
298: want to use.
299:
300: You must specify an assembler instruction template much like what
301: appears in a machine description, plus an operand constraint string
302: for each operand.
303:
304: For example, here is how to use the 68881's `fsinx' instruction:
305:
306: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
307:
308: Here `angle' is the C expression for the input operand while `result'
309: is that of the output operand. Each has `"f"' as its operand
310: constraint, saying that a floating point register is required. The
311: `=' in `=f' indicates that the operand is an output; all output
312: operands' constraints must use `='. The constraints use the same
313: language used in the machine description (*note Constraints::.).
314:
315: Each operand is described by an operand-constraint string followed by
316: the C expression in parentheses. A colon separates the assembler
317: template from the first output operand, and another separates the last
318: output operand from the first input, if any. Commas separate output
319: operands and separate inputs. The total number of operands is limited
320: to ten or to the maximum number of operands in any instruction pattern
321: in the machine description, whichever is greater.
322:
323: If there are no output operands, and there are input operands, then
324: there must be two consecutive colons surrounding the place where the
325: output operands would go.
326:
327: Output operand expressions must be lvalues; the compiler can check
328: this. The input operands need not be lvalues. The compiler cannot
329: check whether the operands have data types that are reasonable for the
330: instruction being executed. It does not parse the assembler
331: instruction template and does not know what it means, or whether it is
332: valid assembler input. The extended `asm' feature is most often used
333: for machine instructions that the compiler itself does not know exist.
334:
335: The output operands must be write-only; GNU CC will assume that the
336: values in these operands before the instruction are dead and need not
337: be generated. Extended asm does not support input-output or read-write
338: operands. For this reason, the constraint character `+', which
339: indicates such an operand, may not be used.
340:
341: When the assembler instruction has a read-write operand, or an
342: operand in which only some of the bits are to be changed, you must
343: logically split its function into two separate operands, one input
344: operand and one write-only output operand. The connection between
345: them is expressed by constraints which say they need to be in the same
346: location when the instruction executes. You can use the same C
347: expression for both operands, or different expressions. For example,
348: here we write the (fictitious) `combine' instruction with `bar' as its
349: read-only source operand and `foo' as its read-write destination:
350:
351: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
352:
353: The constraint `"0"' for operand 1 says that it must occupy the same
354: location as operand 0. A digit in constraint is allowed only in an
355: input operand, and it must refer to an output operand.
356:
357: Only a digit in the constraint can guarantee that one operand will
358: be in the same place as another. The mere fact that `foo' is the
359: value of both operands is not enough to guarantee that they will be in
360: the same place in the generated assembler code. The following would
361: not work:
362:
363: asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
364:
365: Various optimizations or reloading could cause operands 0 and 1 to
366: be in different registers; GNU CC knows no reason not to do so. For
367: example, the compiler might find a copy of the value of `foo' in one
368: register and use it for operand 1, but generate the output operand 0
369: in a different register (copying it afterward to `foo''s own address).
370: Of course, since the register for operand 1 is not even mentioned in
371: the assembler code, the result will not work, but GNU CC can't tell
372: that.
373:
374: Some instructions clobber specific hard registers. To describe
375: this, write a third colon after the input operands, followed by the
376: names of the clobbered hard registers (given as strings). Here is a
377: realistic example for the Vax:
378:
379: asm volatile ("movc3 %0,%1,%2"
380: : /* no outputs */
381: : "g" (from), "g" (to), "g" (count)
382: : "r0", "r1", "r2", "r3", "r4", "r5");
383:
384: If you refer to a particular hardware register from the assembler
385: code, then you will probably have to list the register after the third
386: colon to tell the compiler that the register's value is modified. In
387: many assemblers, the register names begin with `%'; to produce one `%'
388: in the assembler code, you must write `%%' in the input.
389:
390: You can put multiple assembler instructions together in a single
391: `asm' template, separated either with newlines (written as `\n') or
392: with semicolons if the assembler allows such semicolons. The GNU
393: assembler allows semicolons and all Unix assemblers seem to do so.
394: The input operands are guaranteed not to use any of the clobbered
395: registers, and neither will the output operands' addresses, so you can
396: read and write the clobbered registers as many times as you like.
397: Here is an example of multiple instructions in a template; it assumes
398: that the subroutine `_foo' accepts arguments in registers 9 and 10:
399:
400: asm ("movl %0,r9;movl %1,r10;call _foo"
401: : /* no outputs */
402: : "g" (from), "g" (to)
403: : "r9", "r10");
404:
405: Unless an output operand has the `&' constraint modifier, GNU CC may
406: allocate it in the same register as an unrelated input operand, on the
407: assumption that the inputs are consumed before the outputs are
408: produced. This assumption may be false if the assembler code actually
409: consists of more than one instruction. In such a case, use `&' for
410: each output operand that may not overlap an input. *Note Modifiers::.
411:
412: If you want to test the condition code produced by an assembler
413: instruction, you must include a branch and a label in the `asm'
414: construct, as follows:
415:
416: asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
417: : "g" (result)
418: : "g" (input));
419:
420: This assumes your assembler supports local labels, as the GNU assembler
421: and most Unix assemblers do.
422:
423: Usually the most convenient way to use these `asm' instructions is
424: to encapsulate them in macros that look like functions. For example,
425:
426: #define sin(x) \
427: ({ double __value, __arg = (x); \
428: asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \
429: __value; })
430:
431: Here the variable `__arg' is used to make sure that the instruction
432: operates on a proper `double' value, and to accept only those
433: arguments `x' which can convert automatically to a `double'.
434:
435: Another way to make sure the instruction operates on the correct
436: data type is to use a cast in the `asm'. This is different from using
437: a variable `__arg' in that it converts more different types. For
438: example, if the desired type were `int', casting the argument to `int'
439: would accept a pointer with no complaint, while assigning the argument
440: to an `int' variable named `__arg' would warn about using a pointer
441: unless the caller explicitly casts it.
442:
443: If an `asm' has output operands, GNU CC assumes for optimization
444: purposes that the instruction has no side effects except to change the
445: output operands. This does not mean that instructions with a side
446: effect cannot be used, but you must be careful, because the compiler
447: may eliminate them if the output operands aren't used, or move them
448: out of loops, or replace two with one if they constitute a common
449: subexpression. Also, if your instruction does have a side effect on a
450: variable that otherwise appears not to change, the old value of the
451: variable may be reused later if it happens to be found in a register.
452:
453: You can prevent an `asm' instruction from being deleted, moved
454: significantly, or combined, by writing the keyword `volatile' after
455: the `asm'. For example:
456:
457: #define set_priority(x) \
458: asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
459:
460: An instruction without output operands will not be deleted or moved
461: significantly, regardless, unless it is unreachable.
462:
463: Note that even a volatile `asm' instruction can be moved in ways
464: that appear insignificant to the compiler, such as across jump
465: instructions. You can't expect a sequence of volatile `asm'
466: instructions to remain perfectly consecutive. If you want consecutive
467: output, use a single `asm'.
468:
469: It is a natural idea to look for a way to give access to the
470: condition code left by the assembler instruction. However, when we
471: attempted to implement this, we found no way to make it work reliably.
472: The problem is that output operands might need reloading, which would
473: result in additional following "store" instructions. On most
474: machines, these instructions would alter the condition code before
475: there was time to test it. This problem doesn't arise for ordinary
476: "test" and "compare" instructions because they don't have any output
477: operands.
478:
479: If you are writing a header file that should be includable in ANSI C
480: programs, write `__asm__' instead of `asm'. *Note Alternate
481: Keywords::.
482:
483:
484: File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Extended Asm, Up: Extensions
485:
486: Controlling Names Used in Assembler Code
487: ========================================
488:
489: You can specify the name to be used in the assembler code for a C
490: function or variable by writing the `asm' (or `__asm__') keyword after
491: the declarator as follows:
492:
493: int foo asm ("myfoo") = 2;
494:
495: This specifies that the name to be used for the variable `foo' in the
496: assembler code should be `myfoo' rather than the usual `_foo'.
497:
498: On systems where an underscore is normally prepended to the name of
499: a C function or variable, this feature allows you to define names for
500: the linker that do not start with an underscore.
501:
502: You cannot use `asm' in this way in a function *definition*; but
503: you can get the same effect by writing a declaration for the function
504: before its definition and putting `asm' there, like this:
505:
506: extern func () asm ("FUNC");
507:
508: func (x, y)
509: int x, y;
510: ...
511:
512: It is up to you to make sure that the assembler names you choose do
513: not conflict with any other assembler symbols. Also, you must not use
514: a register name; that would produce completely invalid assembler code.
515: GNU CC does not as yet have the ability to store static variables in
516: registers. Perhaps that will be added.
517:
518:
519: File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: Extensions
520:
521: Variables in Specified Registers
522: ================================
523:
524: GNU C allows you to put a few global variables into specified
525: hardware registers. You can also specify the register in which an
526: ordinary register variable should be allocated.
527:
528: * Global register variables reserve registers throughout the
529: program. This may be useful in programs such as programming
530: language interpreters which have a couple of global variables
531: that are accessed very often.
532:
533: * Local register variables in specific registers do not reserve the
534: registers. The compiler's data flow analysis is capable of
535: determining where the specified registers contain live values,
536: and where they are available for other uses.
537:
538: These local variables are sometimes convenient for use with the
539: extended `asm' feature (*note Extended Asm::.), if you want to
540: write one output of the assembler instruction directly into a
541: particular register. (This will work provided the register you
542: specify fits the constraints specified for that operand in the
543: `asm'.)
544:
545: * Menu:
546:
547: * Global Reg Vars::
548: * Local Reg Vars::
549:
550:
551: File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars
552:
553: Defining Global Register Variables
554: ----------------------------------
555:
556: You can define a global register variable in GNU C like this:
557:
558: register int *foo asm ("a5");
559:
560: Here `a5' is the name of the register which should be used. Choose a
561: register which is normally saved and restored by function calls on your
562: machine, so that library routines will not clobber it.
563:
564: Naturally the register name is cpu-dependent, so you would need to
565: conditionalize your program according to cpu type. The register `a5'
566: would be a good choice on a 68000 for a variable of pointer type. On
567: machines with register windows, be sure to choose a "global" register
568: that is not affected magically by the function call mechanism.
569:
570: In addition, operating systems on one type of cpu may differ in how
571: they name the registers; then you would need additional conditionals.
572: For example, some 68000 operating systems call this register `%a5'.
573:
574: Eventually there may be a way of asking the compiler to choose a
575: register automatically, but first we need to figure out how it should
576: choose and how to enable you to guide the choice. No solution is
577: evident.
578:
579: Defining a global register variable in a certain register reserves
580: that register entirely for this use, at least within the current
581: compilation. The register will not be allocated for any other purpose
582: in the functions in the current compilation. The register will not be
583: saved and restored by these functions. Stores into this register are
584: never deleted even if they would appear to be dead, but references may
585: be deleted or moved or simplified.
586:
587: It is not safe to access the global register variables from signal
588: handlers, or from more than one thread of control, because the system
589: library routines may temporarily use the register for other things
590: (unless you recompile them specially for the task at hand).
591:
592: It is not safe for one function that uses a global register
593: variable to call another such function `foo' by way of a third function
594: `lose' that was compiled without knowledge of this variable (i.e. in a
595: different source file in which the variable wasn't declared). This is
596: because `lose' might save the register and put some other value there.
597: For example, you can't expect a global register variable to be
598: available in the comparison-function that you pass to `qsort', since
599: `qsort' might have put something else in that register. (If you are
600: prepared to recompile `qsort' with the same global register variable,
601: you can solve this problem.)
602:
603: If you want to recompile `qsort' or other source files which do not
604: actually use your global register variable, so that they will not use
605: that register for any other purpose, then it suffices to specify the
606: compiler option `-ffixed-REG'. You need not actually add a global
607: register declaration to their source code.
608:
609: A function which can alter the value of a global register variable
610: cannot safely be called from a function compiled without this
611: variable, because it could clobber the value the caller expects to
612: find there on return. Therefore, the function which is the entry
613: point into the part of the program that uses the global register
614: variable must explicitly save and restore the value which belongs to
615: its caller.
616:
617: On most machines, `longjmp' will restore to each global register
618: variable the value it had at the time of the `setjmp'. On some
619: machines, however, `longjmp' will not change the value of global
620: register variables. To be portable, the function that called `setjmp'
621: should make other arrangements to save the values of the global
622: register variables, and to restore them in a `longjmp'. This way, the
623: same thing will happen regardless of what `longjmp' does.
624:
625: All global register variable declarations must precede all function
626: definitions. If such a declaration could appear after function
627: definitions, the declaration would be too late to prevent the register
628: from being used for other purposes in the preceding functions.
629:
630: Global register variables may not have initial values, because an
631: executable file has no means to supply initial contents for a register.
632:
633: On the Sparc, there are reports that g3 ... g7 are suitable
634: registers, but certain library functions, such as `getwd', as well as
635: the subroutines for division and remainder, modify g3 and g4. g1 and
636: g2 are local temporaries.
637:
638: On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.
639: Of course, it will not do to use more than a few of those.
640:
641:
642: File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars
643:
644: Specifying Registers for Local Variables
645: ----------------------------------------
646:
647: You can define a local register variable with a specified register
648: like this:
649:
650: register int *foo asm ("a5");
651:
652: Here `a5' is the name of the register which should be used. Note that
653: this is the same syntax used for defining global register variables,
654: but for a local variable it would appear within a function.
655:
656: Naturally the register name is cpu-dependent, but this is not a
657: problem, since specific registers are most often useful with explicit
658: assembler instructions (*note Extended Asm::.). Both of these things
659: generally require that you conditionalize your program according to
660: cpu type.
661:
662: In addition, operating systems on one type of cpu may differ in how
663: they name the registers; then you would need additional conditionals.
664: For example, some 68000 operating systems call this register `%a5'.
665:
666: Eventually there may be a way of asking the compiler to choose a
667: register automatically, but first we need to figure out how it should
668: choose and how to enable you to guide the choice. No solution is
669: evident.
670:
671: Defining such a register variable does not reserve the register; it
672: remains available for other uses in places where flow control
673: determines the variable's value is not live. However, these registers
674: are made unavailable for use in the reload pass. I would not be
675: surprised if excessive use of this feature leaves the compiler too few
676: available registers to compile certain functions.
677:
678:
679: File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: Extensions
680:
681: Alternate Keywords
682: ==================
683:
684: The option `-traditional' disables certain keywords; `-ansi'
685: disables certain others. This causes trouble when you want to use GNU
686: C extensions, or ANSI C features, in a general-purpose header file that
687: should be usable by all programs, including ANSI C programs and
688: traditional ones. The keywords `asm', `typeof' and `inline' cannot be
689: used since they won't work in a program compiled with `-ansi', while
690: the keywords `const', `volatile', `signed', `typeof' and `inline'
691: won't work in a program compiled with `-traditional'.
692:
693: The way to solve these problems is to put `__' at the beginning and
694: end of each problematical keyword. For example, use `__asm__' instead
695: of `asm', `__const__' instead of `const', and `__inline__' instead of
696: `inline'.
697:
698: Other C compilers won't accept these alternative keywords; if you
699: want to compile with another compiler, you can define the alternate
700: keywords as macros to replace them with the customary keywords. It
701: looks like this:
702:
703: #ifndef __GNUC__
704: #define __asm__ asm
705: #endif
706:
707: `-pedantic' causes warnings for many GNU C extensions. You can
708: prevent such warnings within one expression by writing `__extension__'
709: before the expression. `__extension__' has no effect aside from this.
710:
711:
712: File: gcc.info, Node: Incomplete Enums, Prev: Alternate Keywords, Up: Extensions
713:
714: Incomplete `enum' Types
715: =======================
716:
717: You can define an `enum' tag without specifying its possible values.
718: This results in an incomplete type, much like what you get if you write
719: `struct foo' without describing the elements. A later declaration
720: which does specify the possible values completes the type.
721:
722: You can't allocate variables or storage using the type while it is
723: incomplete. However, you can work with pointers to that type.
724:
725: This extension may not be very useful, but it makes the handling of
726: `enum' more consistent with the way `struct' and `union' are handled.
727:
728:
729: File: gcc.info, Node: Bugs, Next: VMS, Prev: Extensions, Up: Top
730:
731: Reporting Bugs
732: **************
733:
734: Your bug reports play an essential role in making GNU CC reliable.
735:
736: When you encounter a problem, the first thing to do is to see if it
737: is already known. *Note Trouble::. Also look in *Note
738: Incompatibilities::. If it isn't known, then you should report the
739: problem.
740:
741: Reporting a bug may help you by bringing a solution to your
742: problem, or it may not. (If it does not, look in the service
743: directory; see *Note Service::.) In any case, the principal function
744: of a bug report is to help the entire community by making the next
745: version of GNU CC work better. Bug reports are your contribution to
746: the maintenance of GNU CC.
747:
748: In order for a bug report to serve its purpose, you must include the
749: information that makes for fixing the bug.
750:
751: * Menu:
752:
753: * Criteria: Bug Criteria. Have you really found a bug?
754: * Reporting: Bug Reporting. How to report a bug effectively.
755: * Non-bugs:: Some things we think are not problems.
756: * Known: Trouble. Known problems.
757: * Help: Service. Where to ask for help.
758:
759:
760: File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Prev: Bugs, Up: Bugs
761:
762: Have You Found a Bug?
763: =====================
764:
765: If you are not sure whether you have found a bug, here are some
766: guidelines:
767:
768: * If the compiler gets a fatal signal, for any input whatever, that
769: is a compiler bug. Reliable compilers never crash.
770:
771: * If the compiler produces invalid assembly code, for any input
772: whatever (except an `asm' statement), that is a compiler bug,
773: unless the compiler reports errors (not just warnings) which
774: would ordinarily prevent the assembler from being run.
775:
776: * If the compiler produces valid assembly code that does not
777: correctly execute the input source code, that is a compiler bug.
778:
779: However, you must double-check to make sure, because you may have
780: run into an incompatibility between GNU C and traditional C
781: (*note Incompatibilities::.). These incompatibilities might be
782: considered bugs, but they are inescapable consequences of
783: valuable features.
784:
785: Or you may have a program whose behavior is undefined, which
786: happened by chance to give the desired results with another C
787: compiler.
788:
789: For example, in many nonoptimizing compilers, you can write `x;'
790: at the end of a function instead of `return x;', with the same
791: results. But the value of the function is undefined if `return'
792: is omitted; it is not a bug when GNU CC produces different
793: results.
794:
795: Problems often result from expressions with two increment
796: operators, as in `f (*p++, *p++)'. Your previous compiler might
797: have interpreted that expression the way you intended; GNU CC
798: might interpret it another way. Neither compiler is wrong. The
799: bug is in your code.
800:
801: After you have localized the error to a single source line, it
802: should be easy to check for these things. If your program is
803: correct and well defined, you have found a compiler bug.
804:
805: * If the compiler produces an error message for valid input, that
806: is a compiler bug.
807:
808: Note that the following is not valid input, and the error message
809: for it is not a bug:
810:
811: int foo (char);
812:
813: int
814: foo (x)
815: char x;
816: { ... }
817:
818: The prototype says to pass a `char', while the definition says to
819: pass an `int' and treat the value as a `char'. This is what the
820: ANSI standard says, and it makes sense.
821:
822: * If the compiler does not produce an error message for invalid
823: input, that is a compiler bug. However, you should note that
824: your idea of "invalid input" might be my idea of "an extension"
825: or "support for traditional practice".
826:
827: * If you are an experienced user of C compilers, your suggestions
828: for improvement of GNU CC are welcome in any case.
829:
830:
831: File: gcc.info, Node: Bug Reporting, Next: Non-bugs, Prev: Bug Criteria, Up: Bugs
832:
833: How to Report Bugs
834: ==================
835:
836: Send bug reports for GNU C to one of these addresses:
837:
838: [email protected]
839: {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-gcc
840:
841: *Do not send bug reports to `help-gcc', or to the newsgroup
842: `gnu.gcc.help'.* Most users of GNU CC do not want to receive bug
843: reports. Those that do, have asked to be on `bug-gcc'.
844:
845: The mailing list `bug-gcc' has a newsgroup which serves as a
846: repeater. The mailing list and the newsgroup carry exactly the same
847: messages. Often people think of posting bug reports to the newsgroup
848: instead of mailing them. This appears to work, but it has one problem
849: which can be crucial: a newsgroup posting does not contain a mail path
850: back to the sender. Thus, if I need to ask for more information, I
851: may be unable to reach you. For this reason, it is better to send bug
852: reports to the mailing list.
853:
854: As a last resort, send bug reports on paper to:
855:
856: GNU Compiler Bugs
857: Free Software Foundation
858: 675 Mass Ave
859: Cambridge, MA 02139
860:
861: The fundamental principle of reporting bugs usefully is this:
862: *report all the facts*. If you are not sure whether to state a fact
863: or leave it out, state it!
864:
865: Often people omit facts because they think they know what causes the
866: problem and they conclude that some details don't matter. Thus, you
867: might assume that the name of the variable you use in an example does
868: not matter. Well, probably it doesn't, but one cannot be sure.
869: Perhaps the bug is a stray memory reference which happens to fetch
870: from the location where that name is stored in memory; perhaps, if the
871: name were different, the contents of that location would fool the
872: compiler into doing the right thing despite the bug. Play it safe and
873: give a specific, complete example. That is the easiest thing for you
874: to do, and the most helpful.
875:
876: Keep in mind that the purpose of a bug report is to enable me to fix
877: the bug if it is not known. It isn't very important what happens if
878: the bug is already known. Therefore, always write your bug reports on
879: the assumption that the bug is not known.
880:
881: Sometimes people give a few sketchy facts and ask, "Does this ring a
882: bell?" Those bug reports are useless, and I urge everyone to *refuse
883: to respond to them* except to chide the sender to report bugs properly.
884:
885: To enable me to fix the bug, you should include all these things:
886:
887: * The version of GNU CC. You can get this by running it with the
888: `-v' option.
889:
890: Without this, I won't know whether there is any point in looking
891: for the bug in the current version of GNU CC.
892:
893: * A complete input file that will reproduce the bug. If the bug is
894: in the C preprocessor, send me a source file and any header files
895: that it requires. If the bug is in the compiler proper (`cc1'),
896: run your source file through the C preprocessor by doing `gcc -E
897: SOURCEFILE > OUTFILE', then include the contents of OUTFILE in
898: the bug report. (Any `-I', `-D' or `-U' options that you used in
899: actual compilation should also be used when doing this.)
900:
901: A single statement is not enough of an example. In order to
902: compile it, it must be embedded in a function definition; and the
903: bug might depend on the details of how this is done.
904:
905: Without a real example I can compile, all I can do about your bug
906: report is wish you luck. It would be futile to try to guess how
907: to provoke the bug. For example, bugs in register allocation and
908: reloading frequently depend on every little detail of the function
909: they happen in.
910:
911: * The command arguments you gave GNU CC to compile that example and
912: observe the bug. For example, did you use `-O'? To guarantee
913: you won't omit something important, list them all.
914:
915: If I were to try to guess the arguments, I would probably guess
916: wrong and then I would not encounter the bug.
917:
918: * The type of machine you are using, and the operating system name
919: and version number.
920:
921: * The operands you gave to the `configure' command when you
922: installed the compiler.
923:
924: * A description of what behavior you observe that you believe is
925: incorrect. For example, "It gets a fatal signal," or, "There is
926: an incorrect assembler instruction in the output."
927:
928: Of course, if the bug is that the compiler gets a fatal signal,
929: then I will certainly notice it. But if the bug is incorrect
930: output, I might not notice unless it is glaringly wrong. I won't
931: study all the assembler code from a 50-line C program just on the
932: off chance that it might be wrong.
933:
934: Even if the problem you experience is a fatal signal, you should
935: still say so explicitly. Suppose something strange is going on,
936: such as, your copy of the compiler is out of synch, or you have
937: encountered a bug in the C library on your system. (This has
938: happened!) Your copy might crash and mine would not. If you
939: told me to expect a crash, then when mine fails to crash, I would
940: know that the bug was not happening for me. If you had not told
941: me to expect a crash, then I would not be able to draw any
942: conclusion from my observations.
943:
944: Often the observed symptom is incorrect output when your program
945: is run. Sad to say, this is not enough information for me unless
946: the program is short and simple. If you send me a large program,
947: I don't have time to figure out how it would work if compiled
948: correctly, much less which line of it was compiled wrong. So you
949: will have to do that. Tell me which source line it is, and what
950: incorrect result happens when that line is executed. A person
951: who understands the program can find this as easily as a bug in
952: the program itself.
953:
954: * If you send me examples of output from GNU CC, please use `-g'
955: when you make them. The debugging information includes source
956: line numbers which are essential for correlating the output with
957: the input.
958:
959: * If you wish to suggest changes to the GNU CC source, send me
960: context diffs. If you even discuss something in the GNU CC
961: source, refer to it by context, not by line number.
962:
963: The line numbers in my development sources don't match those in
964: your sources. Your line numbers would convey no useful
965: information to me.
966:
967: * Additional information from a debugger might enable me to find a
968: problem on a machine which I do not have available myself.
969: However, you need to think when you collect this information if
970: you want it to have any chance of being useful.
971:
972: For example, many people send just a backtrace, but that is never
973: useful by itself. A simple backtrace with arguments conveys
974: little about GNU CC because the compiler is largely data-driven;
975: the same functions are called over and over for different RTL
976: insns, doing different things depending on the details of the
977: insn.
978:
979: Most of the arguments listed in the backtrace are useless because
980: they are pointers to RTL list structure. The numeric values of
981: the pointers, which the debugger prints in the backtrace, have no
982: significance whatever; all that matters is the contents of the
983: objects they point to (and most of the contents are other such
984: pointers).
985:
986: In addition, most compiler passes consist of one or more loops
987: that scan the RTL insn sequence. The most vital piece of
988: information about such a loop--which insn it has reached--is
989: usually in a local variable, not in an argument.
990:
991: What you need to provide in addition to a backtrace are the
992: values of the local variables for several stack frames up. When
993: a local variable or an argument is an RTX, first print its value
994: and then use the GDB command `pr' to print the RTL expression
995: that it points to. (If GDB doesn't run on your machine, use your
996: debugger to call the function `debug_rtx' with the RTX as an
997: argument.) In general, whenever a variable is a pointer, its
998: value is no use without the data it points to.
999:
1000: In addition, include a debugging dump from just before the pass
1001: in which the crash happens. Most bugs involve a series of insns,
1002: not just one.
1003:
1004: Here are some things that are not necessary:
1005:
1006: * A description of the envelope of the bug.
1007:
1008: Often people who encounter a bug spend a lot of time investigating
1009: which changes to the input file will make the bug go away and
1010: which changes will not affect it.
1011:
1012: This is often time consuming and not very useful, because the way
1013: I will find the bug is by running a single example under the
1014: debugger with breakpoints, not by pure deduction from a series of
1015: examples. I recommend that you save your time for something else.
1016:
1017: Of course, if you can find a simpler example to report *instead*
1018: of the original one, that is a convenience for me. Errors in the
1019: output will be easier to spot, running under the debugger will
1020: take less time, etc. Most GNU CC bugs involve just one function,
1021: so the most straightforward way to simplify an example is to
1022: delete all the function definitions except the one where the bug
1023: occurs. Those earlier in the file may be replaced by external
1024: declarations if the crucial function depends on them.
1025: (Exception: inline functions may affect compilation of functions
1026: defined later in the file.)
1027:
1028: However, simplification is not vital; if you don't want to do
1029: this, report the bug anyway and send me the entire test case you
1030: used.
1031:
1032: * A patch for the bug.
1033:
1034: A patch for the bug does help me if it is a good one. But don't
1035: omit the necessary information, such as the test case, on the
1036: assumption that a patch is all I need. I might see problems with
1037: your patch and decide to fix the problem another way, or I might
1038: not understand it at all.
1039:
1040: Sometimes with a program as complicated as GNU CC it is very hard
1041: to construct an example that will make the program follow a
1042: certain path through the code. If you don't send me the example,
1043: I won't be able to construct one, so I won't be able to verify
1044: that the bug is fixed.
1045:
1046: And if I can't understand what bug you are trying to fix, or why
1047: your patch should be an improvement, I won't install it. A test
1048: case will help me to understand.
1049:
1050: * A guess about what the bug is or what it depends on.
1051:
1052: Such guesses are usually wrong. Even I can't guess right about
1053: such things without first using the debugger to find the facts.
1054:
1055:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.