aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcc.info-1
blob: d0ba9a463c5699b3dcda962bb23b47d79c856bf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
This is Info file gcc.info, produced by Makeinfo version 1.68 from the
input file gcc.texi.

   This file documents the use and the internals of the GNU compiler.

   Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA

   Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
Software Foundation, Inc.

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "GNU General Public License," "Funding for
Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
included exactly as in the original, and provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the sections entitled "GNU General Public
License," "Funding for Free Software," and "Protect Your Freedom--Fight
`Look And Feel'", and this permission notice, may be included in
translations approved by the Free Software Foundation instead of in the
original English.


File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)

Introduction
************

   This manual documents how to run, install and port the GNU compiler,
as well as its new features and incompatibilities, and how to report
bugs.  It corresponds to GNU CC version 2.8.0.

* Menu:


* G++ and GCC::     You can compile C or C++ programs.
* Invoking GCC::    Command options supported by `gcc'.
* Installation::    How to configure, compile and install GNU CC.
* C Extensions::    GNU extensions to the C language family.
* C++ Extensions::  GNU extensions to the C++ language.
* Gcov::	    gcov: a GNU CC test coverage program.
* Trouble::         If you have trouble installing GNU CC.
* Bugs::            How, why and where to report bugs.
* Service::         How to find suppliers of support for GNU CC.
* Contributing::    How to contribute to testing and developing GNU CC.
* VMS::             Using GNU CC on VMS.

* Portability::     Goals of GNU CC's portability features.
* Interface::       Function-call interface of GNU CC output.
* Passes::          Order of passes, what they do, and what each file is for.
* RTL::             The intermediate representation that most passes work on.
* Machine Desc::    How to write machine description instruction patterns.
* Target Macros::   How to write the machine description C macros.
* Config::          Writing the `xm-MACHINE.h' file.
* Fragments::       Writing the `t-TARGET' and `x-HOST' files.

* Funding::         How to help assure funding for free software.
* Look and Feel::   Protect your freedom--fight "look and feel".

* Copying::         GNU General Public License says
                     how you can copy and share GNU CC.
* Contributors::    People who have contributed to GNU CC.

* Index::	    Index of concepts and symbol names.


File: gcc.info,  Node: G++ and GCC,  Next: Invoking GCC,  Prev: Top,  Up: Top

Compile C, C++, or Objective C
******************************

   The C, C++, and Objective C versions of the compiler are integrated;
the GNU C compiler can compile programs written in C, C++, or Objective
C.

   "GCC" is a common shorthand term for the GNU C compiler.  This is
both the most general name for the compiler, and the name used when the
emphasis is on compiling C programs.

   When referring to C++ compilation, it is usual to call the compiler
"G++".  Since there is only one compiler, it is also accurate to call
it "GCC" no matter what the language context; however, the term "G++"
is more useful when the emphasis is on compiling C++ programs.

   We use the name "GNU CC" to refer to the compilation system as a
whole, and more specifically to the language-independent part of the
compiler.  For example, we refer to the optimization options as
affecting the behavior of "GNU CC" or sometimes just "the compiler".

   Front ends for other languages, such as Ada 9X, Fortran, Modula-3,
and Pascal, are under development.  These front-ends, like that for
C++, are built in subdirectories of GNU CC and link to it.  The result
is an integrated compiler that can compile programs written in C, C++,
Objective C, or any of the languages for which you have installed front
ends.

   In this manual, we only discuss the options for the C, Objective-C,
and C++ compilers and those of the GNU CC core.  Consult the
documentation of the other front ends for the options to use when
compiling programs written in other languages.

   G++ is a *compiler*, not merely a preprocessor.  G++ builds object
code directly from your C++ program source.  There is no intermediate C
version of the program.  (By contrast, for example, some other
implementations use a program that generates a C program from your C++
source.)  Avoiding an intermediate C representation of the program means
that you get better object code, and better debugging information.  The
GNU debugger, GDB, works with this information in the object code to
give you comprehensive C++ source-level editing capabilities (*note C
and C++: (gdb.info)C.).


File: gcc.info,  Node: Invoking GCC,  Next: Installation,  Prev: G++ and GCC,  Up: Top

GNU CC Command Options
**********************

   When you invoke GNU CC, it normally does preprocessing, compilation,
assembly and linking.  The "overall options" allow you to stop this
process at an intermediate stage.  For example, the `-c' option says
not to run the linker.  Then the output consists of object files output
by the assembler.

   Other options are passed on to one stage of processing.  Some options
control the preprocessor and others the compiler itself.  Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

   Most of the command line options that you can use with GNU CC are
useful for C programs; when an option is only useful with another
language (usually C++), the explanation says so explicitly.  If the
description for a particular option does not mention a source language,
you can use that option with all supported languages.

   *Note Compiling C++ Programs: Invoking G++, for a summary of special
options for compiling C++ programs.

   The `gcc' program accepts options and file names as operands.  Many
options have multiletter names; therefore multiple single-letter options
may *not* be grouped: `-dr' is very different from `-d -r'.

   You can mix options and other arguments.  For the most part, the
order you use doesn't matter.  Order does matter when you use several
options of the same kind; for example, if you specify `-L' more than
once, the directories are searched in the order specified.

   Many options have long names starting with `-f' or with `-W'--for
example, `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on.
Most of these have both positive and negative forms; the negative form
of `-ffoo' would be `-fno-foo'.  This manual documents only one of
these two forms, whichever one is not the default.

* Menu:

* Option Summary::	Brief list of all options, without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Invoking G++::	Compiling C++ programs.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Target Options::      Running a cross-compiler, or an old version of GNU CC.
* Submodel Options::    Specifying minor hardware or convention variations,
                        such as 68010 vs 68020.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Environment Variables:: Env vars that affect GNU CC.
* Running Protoize::    Automatically adding or removing function prototypes.


File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC

Option Summary
==============

   Here is a summary of all the options, grouped by type.  Explanations
are in the following sections.

*Overall Options*
     *Note Options Controlling the Kind of Output: Overall Options.
          -c  -S  -E  -o FILE  -pipe  -v  -x LANGUAGE

*C Language Options*
     *Note Options Controlling C Dialect: C Dialect Options.
          -ansi  -fallow-single-precision  -fcond-mismatch  -fno-asm
          -fno-builtin  -ffreestanding  -fhosted  -fsigned-bitfields  -fsigned-char
          -funsigned-bitfields  -funsigned-char  -fwritable-strings
          -traditional  -traditional-cpp  -trigraphs

*C++ Language Options*
     *Note Options Controlling C++ Dialect: C++ Dialect Options.
          -fall-virtual  -fdollars-in-identifiers  -felide-constructors
          -fenum-int-equiv  -fexternal-templates  -ffor-scope  -fno-for-scope
          -fhandle-signatures  -fmemoize-lookups  -fname-mangling-version-N
          -fno-default-inline  -fno-gnu-keywords -fnonnull-objects -fguiding-decls
          -foperator-names  -fstrict-prototype  -fthis-is-variable
          -ftemplate-depth-N  -nostdinc++  -traditional  +eN

*Warning Options*
     *Note Options to Request or Suppress Warnings: Warning Options.
          -fsyntax-only  -pedantic  -pedantic-errors
          -w  -W  -Wall  -Waggregate-return  -Wbad-function-cast
          -Wcast-align  -Wcast-qual  -Wchar-subscript  -Wcomment
          -Wconversion  -Werror  -Wformat
          -Wid-clash-LEN  -Wimplicit -Wimplicit-int
          -Wimplicit-function-declarations -Wimport  -Winline
          -Wlarger-than-LEN  -Wmain  -Wmissing-declarations
          -Wmissing-prototypes  -Wnested-externs
          -Wno-import  -Wold-style-cast  -Woverloaded-virtual  -Wparentheses
          -Wpointer-arith  -Wredundant-decls  -Wreorder  -Wreturn-type  -Wshadow
          -Wsign-compare  -Wstrict-prototypes  -Wswitch  -Wsynth
          -Wtemplate-debugging  -Wtraditional  -Wtrigraphs
          -Wundef  -Wuninitialized  -Wunused  -Wwrite-strings

*Debugging Options*
     *Note Options for Debugging Your Program or GCC: Debugging Options.
          -a  -ax  -dLETTERS  -fpretend-float
          -fprofile-arcs  -ftest-coverage
          -g  -gLEVEL  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2
          -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
          -print-prog-name=PROGRAM  -print-search-dirs  -save-temps

*Optimization Options*
     *Note Options that Control Optimization: Optimize Options.
          -fbranch-probabilities
          -fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
          -fdelayed-branch   -fexpensive-optimizations
          -ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
          -ffunction-sections  -finline-functions
          -fkeep-inline-functions  -fno-default-inline
          -fno-defer-pop  -fno-function-cse
          -fno-inline  -fno-peephole  -fomit-frame-pointer
          -frerun-cse-after-loop  -fschedule-insns
          -fschedule-insns2  -fstrength-reduce  -fthread-jumps
          -funroll-all-loops  -funroll-loops
          -O  -O0  -O1  -O2  -O3

*Preprocessor Options*
     *Note Options Controlling the Preprocessor: Preprocessor Options.
          -AQUESTION(ANSWER)  -C  -dD  -dM  -dN
          -DMACRO[=DEFN]  -E  -H
          -idirafter DIR
          -include FILE  -imacros FILE
          -iprefix FILE  -iwithprefix DIR
          -iwithprefixbefore DIR  -isystem DIR
          -M  -MD  -MM  -MMD  -MG  -nostdinc  -P  -trigraphs
          -undef  -UMACRO  -Wp,OPTION

*Assembler Option*
     *Note Passing Options to the Assembler: Assembler Options.
          -Wa,OPTION

*Linker Options*
     *Note Options for Linking: Link Options.
          OBJECT-FILE-NAME  -lLIBRARY
          -nostartfiles  -nodefaultlibs  -nostdlib
          -s  -static  -shared  -symbolic
          -Wl,OPTION  -Xlinker OPTION
          -u SYMBOL

*Directory Options*
     *Note Options for Directory Search: Directory Options.
          -BPREFIX  -IDIR  -I-  -LDIR  -specs=FILE

*Target Options*
     *Note Target Options::.
          -b MACHINE  -V VERSION

*Machine Dependent Options*
     *Note Hardware Models and Configurations: Submodel Options.
          *M680x0 Options*
          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
          -m68060  -m5200  -m68881  -mbitfield  -mc68000  -mc68020  -mfpa
          -mnobitfield  -mrtd  -mshort  -msoft-float  -malign-int
          
          *VAX Options*
          -mg  -mgnu  -munix
          
          *SPARC Options*
          -mcpu=CPU TYPE
          -mtune=CPU TYPE
          -mcmodel=CODE MODEL
          -malign-jumps=NUM  -malign-loops=NUM
          -malign-functions=NUM
          -m32  -m64
          -mapp-regs  -mbroken-saverestore  -mcypress  -mepilogue
          -mflat  -mfpu  -mhard-float  -mhard-quad-float
          -mimpure-text  -mlive-g0  -mno-app-regs  -mno-epilogue
          -mno-flat  -mno-fpu  -mno-impure-text
          -mno-stack-bias  -mno-unaligned-doubles
          -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias
          -msupersparc  -munaligned-doubles  -mv8
          
          *Convex Options*
          -mc1  -mc2  -mc32  -mc34  -mc38
          -margcount  -mnoargcount
          -mlong32  -mlong64
          -mvolatile-cache  -mvolatile-nocache
          
          *AMD29K Options*
          -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
          -mlarge  -mnormal  -msmall
          -mkernel-registers  -mno-reuse-arg-regs
          -mno-stack-check  -mno-storem-bug
          -mreuse-arg-regs  -msoft-float  -mstack-check
          -mstorem-bug  -muser-registers
          
          *ARM Options*
          -mapcs-frame  -mapcs-26  -mapcs-32
          -mlittle-endian  -mbig-endian  -mwords-little-endian
          -mshort-load-bytes  -mno-short-load-bytes
          -msoft-float  -mhard-float
          -mbsd  -mxopen  -mno-symrename
          
          *MN10300 Options*
          -mmult-bug
          -mno-mult-bug
          
          *M32R/D Options*
          -mcode-model=MODEL TYPE  -msdata=SDATA TYPE
          -G NUM
          
          *M88K Options*
          -m88000  -m88100  -m88110  -mbig-pic
          -mcheck-zero-division  -mhandle-large-shift
          -midentify-revision  -mno-check-zero-division
          -mno-ocs-debug-info  -mno-ocs-frame-position
          -mno-optimize-arg-area  -mno-serialize-volatile
          -mno-underscores  -mocs-debug-info
          -mocs-frame-position  -moptimize-arg-area
          -mserialize-volatile  -mshort-data-NUM  -msvr3
          -msvr4  -mtrap-large-shift  -muse-div-instruction
          -mversion-03.00  -mwarn-passed-structs
          
          *RS/6000 and PowerPC Options*
          -mcpu=CPU TYPE
          -mtune=CPU TYPE
          -mpower  -mno-power  -mpower2  -mno-power2
          -mpowerpc  -mno-powerpc
          -mpowerpc-gpopt  -mno-powerpc-gpopt
          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
          -mnew-mnemonics  -mno-new-mnemonics
          -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
          -mxl-call  -mno-xl-call  -mthreads  -mpe
          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
          -mstring  -mno-string  -mupdate  -mno-update
          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
          -mstrict-align  -mno-strict-align  -mrelocatable
          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
          -mtoc  -mno-toc  -mtraceback  -mno-traceback
          -mlittle  -mlittle-endian  -mbig  -mbig-endian
          -mcall-aix  -mcall-sysv  -mprototype  -mno-prototype
          -msim  -mmvme  -mads  -myellowknife  -memb
          -msdata  -msdata=OPT  -G NUM
          
          *RT Options*
          -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
          -mfull-fp-blocks  -mhc-struct-return  -min-line-mul
          -mminimum-fp-blocks  -mnohc-struct-return
          
          *MIPS Options*
          -mabicalls  -mcpu=CPU TYPE  -membedded-data
          -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
          -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1
          -mips2  -mips3  -mlong64  -mlong-calls  -mmemcpy
          -mmips-as  -mmips-tfile  -mno-abicalls
          -mno-embedded-data  -mno-embedded-pic
          -mno-gpopt  -mno-long-calls
          -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
          -mrnames  -msoft-float
          -m4650  -msingle-float  -mmad
          -mstats  -EL  -EB  -G NUM  -nocpp
          
          *i386 Options*
          -mcpu=CPU TYPE
          -march=CPU TYPE
          -mieee-fp  -mno-fancy-math-387
          -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
          -mno-wide-multiply  -mrtd  -malign-double
          -mreg-alloc=LIST  -mregparm=NUM
          -malign-jumps=NUM  -malign-loops=NUM
          -malign-functions=NUM
          
          *HPPA Options*
          -mbig-switch  -mdisable-fpregs  -mdisable-indexing  -mfast-indirect-calls
          -mgas  -mjump-in-delay  -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
          -mno-jump-in-delay
          -mno-long-load-store
          -mno-portable-runtime  -mno-soft-float  -mno-space  -mno-space-regs
          -msoft-float
          -mpa-risc-1-0  -mpa-risc-1-1  -mportable-runtime
          -mschedule=LIST  -mspace  -mspace-regs
          
          *Intel 960 Options*
          -mCPU TYPE  -masm-compat  -mclean-linkage
          -mcode-align  -mcomplex-addr  -mleaf-procedures
          -mic-compat  -mic2.0-compat  -mic3.0-compat
          -mintel-asm  -mno-clean-linkage  -mno-code-align
          -mno-complex-addr  -mno-leaf-procedures
          -mno-old-align  -mno-strict-align  -mno-tail-call
          -mnumerics  -mold-align  -msoft-float  -mstrict-align
          -mtail-call
          
          *DEC Alpha Options*
          -mfp-regs  -mno-fp-regs -mno-soft-float  -msoft-float
          -malpha-as -mgas
          -mieee  -mieee-with-inexact  -mieee-conformant
          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
          -mtrap-precision=MODE  -mbuild-constants
          -mcpu=CPU TYPE
          -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
          
          *Clipper Options*
          -mc300  -mc400
          
          *H8/300 Options*
          -mrelax  -mh -ms -mint32  -malign-300
          
          *SH Options*
          -m1  -m2  -m3  -m3e  -mb  -ml  -mrelax
          
          *System V Options*
          -Qy  -Qn  -YP,PATHS  -Ym,DIR
          
          *V850 Options*
          -mlong-calls -mno-long-calls -mep -mno-ep
          -mprolog-function -mno-prolog-function -mspace
          -mtda=N -msda=N -mzda=N
          -mv850 -mbig-switch

*Code Generation Options*
     *Note Options for Code Generation Conventions: Code Gen Options.
          -fcall-saved-REG  -fcall-used-REG
          -ffixed-REG  -finhibit-size-directive
          -fcheck-memory-usage  -fprefix-function-name
          -fno-common  -fno-ident  -fno-gnu-linker
          -fpcc-struct-return  -freg-struct-return
          -fshared-data  -fpic  -fPIC  -fexceptions
          -fshort-enums  -fshort-double  -fvolatile  -fvolatile-global
          -fverbose-asm  -fpack-struct  -fstack-check  +e0  +e1

* Menu:

* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Target Options::      Running a cross-compiler, or an old version of GNU CC.


File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC

Options Controlling the Kind of Output
======================================

   Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order.  The first three
stages apply to an individual source file, and end by producing an
object file; linking combines all the object files (those newly
compiled, and those specified as input) into an executable file.

   For any given input file, the file name suffix determines what kind
of compilation is done:

`FILE.c'
     C source code which must be preprocessed.

`FILE.i'
     C source code which should not be preprocessed.

`FILE.ii'
     C++ source code which should not be preprocessed.

`FILE.m'
     Objective-C source code.  Note that you must link with the library
     `libobjc.a' to make an Objective-C program work.

`FILE.h'
     C header file (not to be compiled or linked).

`FILE.cc'
`FILE.cxx'
`FILE.cpp'
`FILE.C'
     C++ source code which must be preprocessed.  Note that in `.cxx',
     the last two letters must both be literally `x'.  Likewise, `.C'
     refers to a literal capital C.

`FILE.s'
     Assembler code.

`FILE.S'
     Assembler code which must be preprocessed.

`OTHER'
     An object file to be fed straight into linking.  Any file name
     with no recognized suffix is treated this way.

   You can specify the input language explicitly with the `-x' option:

`-x LANGUAGE'
     Specify explicitly the LANGUAGE for the following input files
     (rather than letting the compiler choose a default based on the
     file name suffix).  This option applies to all following input
     files until the next `-x' option.  Possible values for LANGUAGE
     are:
          c  objective-c  c++
          c-header  cpp-output  c++-cpp-output
          assembler  assembler-with-cpp

`-x none'
     Turn off any specification of a language, so that subsequent files
     are handled according to their file name suffixes (as they are if
     `-x' has not been used at all).

   If you only want some of the stages of compilation, you can use `-x'
(or filename suffixes) to tell `gcc' where to start, and one of the
options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
some combinations (for example, `-x cpp-output -E' instruct `gcc' to do
nothing at all.

`-c'
     Compile or assemble the source files, but do not link.  The linking
     stage simply is not done.  The ultimate output is in the form of an
     object file for each source file.

     By default, the object file name for a source file is made by
     replacing the suffix `.c', `.i', `.s', etc., with `.o'.

     Unrecognized input files, not requiring compilation or assembly,
     are ignored.

`-S'
     Stop after the stage of compilation proper; do not assemble.  The
     output is in the form of an assembler code file for each
     non-assembler input file specified.

     By default, the assembler file name for a source file is made by
     replacing the suffix `.c', `.i', etc., with `.s'.

     Input files that don't require compilation are ignored.

`-E'
     Stop after the preprocessing stage; do not run the compiler
     proper.  The output is in the form of preprocessed source code,
     which is sent to the standard output.

     Input files which don't require preprocessing are ignored.

`-o FILE'
     Place output in file FILE.  This applies regardless to whatever
     sort of output is being produced, whether it be an executable file,
     an object file, an assembler file or preprocessed C code.

     Since only one output file can be specified, it does not make
     sense to use `-o' when compiling more than one input file, unless
     you are producing an executable file as output.

     If `-o' is not specified, the default is to put an executable file
     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
     assembler file in `SOURCE.s', and all preprocessed C source on
     standard output.

`-v'
     Print (on standard error output) the commands executed to run the
     stages of compilation.  Also print the version number of the
     compiler driver program and of the preprocessor and the compiler
     proper.

`-pipe'
     Use pipes rather than temporary files for communication between the
     various stages of compilation.  This fails to work on some systems
     where the assembler is unable to read from a pipe; but the GNU
     assembler has no trouble.


File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC

Compiling C++ Programs
======================

   C++ source files conventionally use one of the suffixes `.C', `.cc',
`cpp', or `.cxx'; preprocessed C++ files use the suffix `.ii'.  GNU CC
recognizes files with these names and compiles them as C++ programs
even if you call the compiler the same way as for compiling C programs
(usually with the name `gcc').

   However, C++ programs often require class libraries as well as a
compiler that understands the C++ language--and under some
circumstances, you might want to compile programs from standard input,
or otherwise without a suffix that flags them as C++ programs.  `g++'
is a program that calls GNU CC with the default language set to C++,
and automatically specifies linking against the GNU class library
libg++.  (1) On many systems, the script `g++' is also installed with
the name `c++'.

   When you compile C++ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for C++ programs.  *Note
Options Controlling C Dialect: C Dialect Options, for explanations of
options for languages related to C.  *Note Options Controlling C++
Dialect: C++ Dialect Options, for explanations of options that are
meaningful only for C++ programs.

   ---------- Footnotes ----------

   (1) Prior to release 2 of the compiler, there was a separate `g++'
compiler.  That version was based on GNU CC, but not integrated with
it.  Versions of `g++' with a `1.XX' version number--for example, `g++'
version 1.37 or 1.42--are much less reliable than the versions
integrated with GCC 2.  Moreover, combining G++ `1.XX' with a version 2
GCC will simply not work.


File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC

Options Controlling C Dialect
=============================

   The following options control the dialect of C (or languages derived
from C, such as C++ and Objective C) that the compiler accepts:

`-ansi'
     Support all ANSI standard C programs.

     This turns off certain features of GNU C that are incompatible
     with ANSI C, such as the `asm', `inline' and `typeof' keywords, and
     predefined macros such as `unix' and `vax' that identify the type
     of system you are using.  It also enables the undesirable and
     rarely used ANSI trigraph feature, and it disables recognition of
     C++ style `//' comments.

     The alternate keywords `__asm__', `__extension__', `__inline__'
     and `__typeof__' continue to work despite `-ansi'.  You would not
     want to use them in an ANSI C program, of course, but it is useful
     to put them in header files that might be included in compilations
     done with `-ansi'.  Alternate predefined macros such as `__unix__'
     and `__vax__' are also available, with or without `-ansi'.

     The `-ansi' option does not cause non-ANSI programs to be rejected
     gratuitously.  For that, `-pedantic' is required in addition to
     `-ansi'.  *Note Warning Options::.

     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
     is used.  Some header files may notice this macro and refrain from
     declaring certain functions or defining certain macros that the
     ANSI standard doesn't call for; this is to avoid interfering with
     any programs that might use these names for other things.

     The functions `alloca', `abort', `exit', and `_exit' are not
     builtin functions when `-ansi' is used.

`-fno-asm'
     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
     code can use these words as identifiers.  You can use the keywords
     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
     `-fno-asm'.

     In C++, this switch only affects the `typeof' keyword, since `asm'
     and `inline' are standard keywords.  You may want to use the
     `-fno-gnu-keywords' flag instead, as it also disables the other,
     C++-specific, extension keywords such as `headof'.

`-fno-builtin'
     Don't recognize builtin functions that do not begin with two
     leading underscores.  Currently, the functions affected include
     `abort', `abs', `alloca', `cos', `exit', `fabs', `ffs', `labs',
     `memcmp', `memcpy', `sin', `sqrt', `strcmp', `strcpy', and
     `strlen'.

     GCC normally generates special code to handle certain builtin
     functions more efficiently; for instance, calls to `alloca' may
     become single instructions that adjust the stack directly, and
     calls to `memcpy' may become inline copy loops.  The resulting
     code is often both smaller and faster, but since the function
     calls no longer appear as such, you cannot set a breakpoint on
     those calls, nor can you change the behavior of the functions by
     linking with a different library.

     The `-ansi' option prevents `alloca' and `ffs' from being builtin
     functions, since these functions do not have an ANSI standard
     meaning.

`-fhosted'
     Assert that compilation takes place in a hosted environment.  This
     implies `-fbuiltin'.  A hosted environment is one in which the
     entire standard library is available, and in which `main' has a
     return type of `int'.  Examples are nearly everything except a
     kernel.  This is equivalent to `-fno-freestanding'.

`-ffreestanding'
     Assert that compilation takes place in a freestanding environment.
     This implies `-fno-builtin'.  A freestanding environment is one
     in which the standard library may not exist, and program startup
     may not necessarily be at `main'.  The most obvious example is an
     OS kernel.  This is equivalent to `-fno-hosted'.

`-trigraphs'
     Support ANSI C trigraphs.  You don't want to know about this
     brain-damage.  The `-ansi' option implies `-trigraphs'.

`-traditional'
     Attempt to support some aspects of traditional C compilers.
     Specifically:

        * All `extern' declarations take effect globally even if they
          are written inside of a function definition.  This includes
          implicit declarations of functions.

        * The newer keywords `typeof', `inline', `signed', `const' and
          `volatile' are not recognized.  (You can still use the
          alternative keywords such as `__typeof__', `__inline__', and
          so on.)

        * Comparisons between pointers and integers are always allowed.

        * Integer types `unsigned short' and `unsigned char' promote to
          `unsigned int'.

        * Out-of-range floating point literals are not an error.

        * Certain constructs which ANSI regards as a single invalid
          preprocessing number, such as `0xe-0xd', are treated as
          expressions instead.

        * String "constants" are not necessarily constant; they are
          stored in writable space, and identical looking constants are
          allocated separately.  (This is the same as the effect of
          `-fwritable-strings'.)

        * All automatic variables not declared `register' are preserved
          by `longjmp'.  Ordinarily, GNU C follows ANSI C: automatic
          variables not declared `volatile' may be clobbered.

        * The character escape sequences `\x' and `\a' evaluate as the
          literal characters `x' and `a' respectively.  Without
          `-traditional', `\x' is a prefix for the hexadecimal
          representation of a character, and `\a' produces a bell.

        * In C++ programs, assignment to `this' is permitted with
          `-traditional'.  (The option `-fthis-is-variable' also has
          this effect.)

     You may wish to use `-fno-builtin' as well as `-traditional' if
     your program uses names that are normally GNU C builtin functions
     for other purposes of its own.

     You cannot use `-traditional' if you include any header files that
     rely on ANSI C features.  Some vendors are starting to ship
     systems with ANSI C header files and you cannot use `-traditional'
     on such systems to compile files that include any system headers.

     The `-traditional' option also enables the `-traditional-cpp'
     option, which is described next.

`-traditional-cpp'
     Attempt to support some aspects of traditional C preprocessors.
     Specifically:

        * Comments convert to nothing at all, rather than to a space.
          This allows traditional token concatenation.

        * In a preprocessing directive, the `#' symbol must appear as
          the first character of a line.

        * Macro arguments are recognized within string constants in a
          macro definition (and their values are stringified, though
          without additional quote marks, when they appear in such a
          context).  The preprocessor always considers a string
          constant to end at a newline.

        * The predefined macro `__STDC__' is not defined when you use
          `-traditional', but `__GNUC__' is (since the GNU extensions
          which `__GNUC__' indicates are not affected by
          `-traditional').  If you need to write header files that work
          differently depending on whether `-traditional' is in use, by
          testing both of these predefined macros you can distinguish
          four situations: GNU C, traditional GNU C, other ANSI C
          compilers, and other old C compilers.  The predefined macro
          `__STDC_VERSION__' is also not defined when you use
          `-traditional'.  *Note Standard Predefined Macros:
          (cpp.info)Standard Predefined, for more discussion of these
          and other predefined macros.

        * The preprocessor considers a string constant to end at a
          newline (unless the newline is escaped with `\').  (Without
          `-traditional', string constants can contain the newline
          character as typed.)

`-fcond-mismatch'
     Allow conditional expressions with mismatched types in the second
     and third arguments.  The value of such an expression is void.

`-funsigned-char'
     Let the type `char' be unsigned, like `unsigned char'.

     Each kind of machine has a default for what `char' should be.  It
     is either like `unsigned char' by default or like `signed char' by
     default.

     Ideally, a portable program should always use `signed char' or
     `unsigned char' when it depends on the signedness of an object.
     But many programs have been written to use plain `char' and expect
     it to be signed, or expect it to be unsigned, depending on the
     machines they were written for.  This option, and its inverse, let
     you make such a program work with the opposite default.

     The type `char' is always a distinct type from each of `signed
     char' or `unsigned char', even though its behavior is always just
     like one of those two.

`-fsigned-char'
     Let the type `char' be signed, like `signed char'.

     Note that this is equivalent to `-fno-unsigned-char', which is the
     negative form of `-funsigned-char'.  Likewise, the option
     `-fno-signed-char' is equivalent to `-funsigned-char'.

     You may wish to use `-fno-builtin' as well as `-traditional' if
     your program uses names that are normally GNU C builtin functions
     for other purposes of its own.

     You cannot use `-traditional' if you include any header files that
     rely on ANSI C features.  Some vendors are starting to ship
     systems with ANSI C header files and you cannot use `-traditional'
     on such systems to compile files that include any system headers.

`-fsigned-bitfields'
`-funsigned-bitfields'
`-fno-signed-bitfields'
`-fno-unsigned-bitfields'
     These options control whether a bitfield is signed or unsigned,
     when the declaration does not use either `signed' or `unsigned'.
     By default, such a bitfield is signed, because this is consistent:
     the basic integer types such as `int' are signed types.

     However, when `-traditional' is used, bitfields are all unsigned
     no matter what.

`-fwritable-strings'
     Store string constants in the writable data segment and don't
     uniquize them.  This is for compatibility with old programs which
     assume they can write into string constants.  The option
     `-traditional' also has this effect.

     Writing into string constants is a very bad idea; "constants"
     should be constant.

`-fallow-single-precision'
     Do not promote single precision math operations to double
     precision, even when compiling with `-traditional'.

     Traditional K&R C promotes all floating point operations to double
     precision, regardless of the sizes of the operands.   On the
     architecture for which you are compiling, single precision may be
     faster than double precision.   If you must use `-traditional',
     but want to use single precision operations when the operands are
     single precision, use this option.   This option has no effect
     when compiling with ANSI or GNU C conventions (the default).


File: gcc.info,  Node: C++ Dialect Options,  Next: Warning Options,  Prev: C Dialect Options,  Up: Invoking GCC

Options Controlling C++ Dialect
===============================

   This section describes the command-line options that are only
meaningful for C++ programs; but you can also use most of the GNU
compiler options regardless of what language your program is in.  For
example, you might compile a file `firstClass.C' like this:

     g++ -g -felide-constructors -O -c firstClass.C

In this example, only `-felide-constructors' is an option meant only
for C++ programs; you can use the other options with any language
supported by GNU CC.

   Here is a list of options that are *only* for compiling C++ programs:

`-fno-access-control'
     Turn off all access checking.  This switch is mainly useful for
     working around bugs in the access control code.

`-fall-virtual'
     Treat all possible member functions as virtual, implicitly.  All
     member functions (except for constructor functions and `new' or
     `delete' member operators) are treated as virtual functions of the
     class where they appear.

     This does not mean that all calls to these member functions will
     be made through the internal table of virtual functions.  Under
     some circumstances, the compiler can determine that a call to a
     given virtual function can be made directly; in these cases the
     calls are direct in any case.

`-fcheck-new'
     Check that the pointer returned by `operator new' is non-null
     before attempting to modify the storage allocated.  The current
     Working Paper requires that `operator new' never return a null
     pointer, so this check is normally unnecessary.

`-fconserve-space'
     Put uninitialized or runtime-initialized global variables into the
     common segment, as C does.  This saves space in the executable at
     the cost of not diagnosing duplicate definitions.  If you compile
     with this flag and your program mysteriously crashes after
     `main()' has completed, you may have an object that is being
     destroyed twice because two definitions were merged.

`-fdollars-in-identifiers'
     Accept `$' in identifiers.  You can also explicitly prohibit use of
     `$' with the option `-fno-dollars-in-identifiers'.  (GNU C allows
     `$' by default on most target systems, but there are a few
     exceptions.)  Traditional C allowed the character `$' to form part
     of identifiers.  However, ANSI C and C++ forbid `$' in identifiers.

`-fenum-int-equiv'
     Anachronistically permit implicit conversion of `int' to
     enumeration types.  Current C++ allows conversion of `enum' to
     `int', but not the other way around.

`-fexternal-templates'
     Cause template instantiations to obey `#pragma interface' and
     `implementation'; template instances are emitted or not according
     to the location of the template definition.  *Note Template
     Instantiation::, for more information.

     This option is deprecated.

`-falt-external-templates'
     Similar to -fexternal-templates, but template instances are
     emitted or not according to the place where they are first
     instantiated.  *Note Template Instantiation::, for more
     information.

     This option is deprecated.

`-ffor-scope'
`-fno-for-scope'
     If -ffor-scope is specified, the scope of variables declared in a
     for-init-statement is limited to the `for' loop itself, as
     specified by the draft C++ standard.  If -fno-for-scope is
     specified, the scope of variables declared in a for-init-statement
     extends to the end of the enclosing scope, as was the case in old
     versions of gcc, and other (traditional) implementations of C++.

     The default if neither flag is given to follow the standard, but
     to allow and give a warning for old-style code that would
     otherwise be invalid, or have different behavior.

`-fno-gnu-keywords'
     Do not recognize `classof', `headof', `signature', `sigof' or
     `typeof' as a keyword, so that code can use these words as
     identifiers.  You can use the keywords `__classof__',
     `__headof__', `__signature__', `__sigof__', and `__typeof__'
     instead.  `-ansi' implies `-fno-gnu-keywords'.

`-fguiding-decls'
     Treat a function declaration with the same type as a potential
     function template instantiation as though it declares that
     instantiation, not a normal function.  If a definition is given
     for the function later in the translation unit (or another
     translation unit if the target supports weak symbols), that
     definition will be used; otherwise the template will be
     instantiated.  This behavior reflects the C++ language prior to
     September 1996, when guiding declarations were removed.

     This option implies `-fname-mangling-version-0', and will not work
     with other name mangling versions.

`-fno-implicit-templates'
     Never emit code for templates which are instantiated implicitly
     (i.e. by use); only emit code for explicit instantiations.  *Note
     Template Instantiation::, for more information.

`-fhandle-signatures'
     Recognize the `signature' and `sigof' keywords for specifying
     abstract types.  The default (`-fno-handle-signatures') is not to
     recognize them.  *Note Type Abstraction using Signatures: C++
     Signatures.

`-fhuge-objects'
     Support virtual function calls for objects that exceed the size
     representable by a `short int'.  Users should not use this flag by
     default; if you need to use it, the compiler will tell you so.  If
     you compile any of your code with this flag, you must compile
     *all* of your code with this flag (including libg++, if you use
     it).

     This flag is not useful when compiling with -fvtable-thunks.

`-fno-implement-inlines'
     To save space, do not emit out-of-line copies of inline functions
     controlled by `#pragma implementation'.  This will cause linker
     errors if these functions are not inlined everywhere they are
     called.

`-fmemoize-lookups'
`-fsave-memoized'
     Use heuristics to compile faster.  These heuristics are not
     enabled by default, since they are only effective for certain
     input files.  Other input files compile more slowly.

     The first time the compiler must build a call to a member function
     (or reference to a data member), it must (1) determine whether the
     class implements member functions of that name; (2) resolve which
     member function to call (which involves figuring out what sorts of
     type conversions need to be made); and (3) check the visibility of
     the member function to the caller.  All of this adds up to slower
     compilation.  Normally, the second time a call is made to that
     member function (or reference to that data member), it must go
     through the same lengthy process again.  This means that code like
     this:

          cout << "This " << p << " has " << n << " legs.\n";

     makes six passes through all three steps.  By using a software
     cache, a "hit" significantly reduces this cost.  Unfortunately,
     using the cache introduces another layer of mechanisms which must
     be implemented, and so incurs its own overhead.
     `-fmemoize-lookups' enables the software cache.

     Because access privileges (visibility) to members and member
     functions may differ from one function context to the next, G++
     may need to flush the cache.  With the `-fmemoize-lookups' flag,
     the cache is flushed after every function that is compiled.  The
     `-fsave-memoized' flag enables the same software cache, but when
     the compiler determines that the context of the last function
     compiled would yield the same access privileges of the next
     function to compile, it preserves the cache.  This is most helpful
     when defining many member functions for the same class: with the
     exception of member functions which are friends of other classes,
     each member function has exactly the same access privileges as
     every other, and the cache need not be flushed.

     The code that implements these flags has rotted; you should
     probably avoid using them.

`-fstrict-prototype'
     Within an `extern "C"' linkage specification, treat a function
     declaration with no arguments, such as `int foo ();', as declaring
     the function to take no arguments.  Normally, such a declaration
     means that the function `foo' can take any combination of
     arguments, as in C.  `-pedantic' implies `-fstrict-prototype'
     unless overridden with `-fno-strict-prototype'.

     This flag no longer affects declarations with C++ linkage.

`-fname-mangling-version-N'
     Control the way in which names are mangled.  Version 0 is
     compatible with versions of g++ before 2.8.  Version 1 is the
     default.  Version 1 will allow correct mangling of function
     templates.  For example, version 0 mangling does not mangle
     foo<int, double> and foo<int, char> given this declaration:

          template <class T, class U> void foo(T t);

`-fno-nonnull-objects'
     Don't assume that a reference is initialized to refer to a valid
     object.  Although the current C++ Working Paper prohibits null
     references, some old code may rely on them, and you can use
     `-fno-nonnull-objects' to turn on checking.

     At the moment, the compiler only does this checking for
     conversions to virtual base classes.

`-foperator-names'
     Recognize the operator name keywords `and', `bitand', `bitor',
     `compl', `not', `or' and `xor' as synonyms for the symbols they
     refer to.  `-ansi' implies `-foperator-names'.

`-fthis-is-variable'
     Permit assignment to `this'.  The incorporation of user-defined
     free store management into C++ has made assignment to `this' an
     anachronism.  Therefore, by default it is invalid to assign to
     `this' within a class member function; that is, GNU C++ treats
     `this' in a member function of class `X' as a non-lvalue of type
     `X *'.  However, for backwards compatibility, you can make it
     valid with `-fthis-is-variable'.

`-fvtable-thunks'
     Use `thunks' to implement the virtual function dispatch table
     (`vtable').  The traditional (cfront-style) approach to
     implementing vtables was to store a pointer to the function and two
     offsets for adjusting the `this' pointer at the call site.  Newer
     implementations store a single pointer to a `thunk' function which
     does any necessary adjustment and then calls the target function.

     This option also enables a heuristic for controlling emission of
     vtables; if a class has any non-inline virtual functions, the
     vtable will be emitted in the translation unit containing the
     first one of those.

`-ftemplate-depth-N'
     Set the maximum instantiation depth for template classes to N.  A
     limit on the template instantiation depth is needed to detect
     endless recursions during template class instantiation. ANSI/ISO
     C++ conforming programs must not rely on a maximum depth greater
     than 17.

`-nostdinc++'
     Do not search for header files in the standard directories
     specific to C++, but do still search the other standard
     directories.  (This option is used when building libg++.)

`-traditional'
     For C++ programs (in addition to the effects that apply to both C
     and C++), this has the same effect as `-fthis-is-variable'.  *Note
     Options Controlling C Dialect: C Dialect Options.

   In addition, these optimization, warning, and code generation options
have meanings only for C++ programs:

`-fno-default-inline'
     Do not assume `inline' for functions defined inside a class scope.
     *Note Options That Control Optimization: Optimize Options.

`-Wold-style-cast'
`-Woverloaded-virtual'
`-Wtemplate-debugging'
     Warnings that apply only to C++ programs.  *Note Options to
     Request or Suppress Warnings: Warning Options.

`-Weffc++'
     Warn about violation of some style rules from Effective C++ by
     Scott Myers.

`+eN'
     Control how virtual function definitions are used, in a fashion
     compatible with `cfront' 1.x.  *Note Options for Code Generation
     Conventions: Code Gen Options.