Home | History | Annotate | Line # | Download | only in dist
      1 This file contains information about GCC releases which has been generated
      2 automatically from the online release notes.  It covers releases of GCC
      3 (and the former EGCS project) since EGCS 1.0, on the line of development
      4 that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
      5 see ONEWS.
      6 
      7 ======================================================================
      8 http://gcc.gnu.org/gcc-12/index.html
      9 
     10                              GCC 12 Release Series
     11 
     12    July 11, 2025
     13 
     14    The GCC developers are pleased to announce the release of GCC 12.5.
     15 
     16    This release is a bug-fix release, containing fixes for regressions in
     17    GCC 12.4 relative to previous releases of GCC.
     18 
     19 Release History
     20 
     21    GCC 12.5
     22           July 11, 2025 ([1]changes, [2]documentation)
     23 
     24    GCC 12.4
     25           Jun 20, 2024 ([3]changes, [4]documentation)
     26 
     27    GCC 12.3
     28           May 8, 2023 ([5]changes, [6]documentation)
     29 
     30    GCC 12.2
     31           Aug 19, 2022 ([7]changes, [8]documentation)
     32 
     33    GCC 12.1
     34           May 6, 2022 ([9]changes, [10]documentation)
     35 
     36 References and Acknowledgements
     37 
     38    GCC used to stand for the GNU C Compiler, but since the compiler
     39    supports several other languages aside from C, it now stands for the
     40    GNU Compiler Collection.
     41 
     42    The GCC developers would like to thank the numerous people that have
     43    contributed new features, improvements, bug fixes, and other changes as
     44    well as test results to GCC. This [11]amazing group of volunteers is
     45    what makes GCC successful.
     46 
     47    For additional information about GCC please refer to the [12]GCC
     48    project web site or contact the [13]GCC development mailing list.
     49 
     50    To obtain GCC please use [14]our mirror sites or [15]our version
     51    control system.
     52 
     53 
     54     For questions related to the use of GCC, please consult these web
     55     pages and the [16]GCC manuals. If that fails, the
     56     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
     57     web pages and the development of GCC are welcome on our developer
     58     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
     59     archives.
     60 
     61    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
     62    distribution of this entire article is permitted in any medium,
     63    provided this notice is preserved.
     64 
     65    These pages are [21]maintained by the GCC team. Last modified
     66    2025-07-11.
     67 
     68 References
     69 
     70    1. https://gcc.gnu.org/gcc-12/changes.html
     71    2. https://gcc.gnu.org/onlinedocs/12.5.0/
     72    3. https://gcc.gnu.org/gcc-12/changes.html
     73    4. https://gcc.gnu.org/onlinedocs/12.4.0/
     74    5. https://gcc.gnu.org/gcc-12/changes.html
     75    6. https://gcc.gnu.org/onlinedocs/12.3.0/
     76    7. https://gcc.gnu.org/gcc-12/changes.html
     77    8. https://gcc.gnu.org/onlinedocs/12.2.0/
     78    9. https://gcc.gnu.org/gcc-12/changes.html
     79   10. https://gcc.gnu.org/onlinedocs/12.1.0/
     80   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
     81   12. https://gcc.gnu.org/index.html
     82   13. mailto:gcc (a] gcc.gnu.org
     83   14. https://gcc.gnu.org/mirrors.html
     84   15. https://gcc.gnu.org/git.html
     85   16. https://gcc.gnu.org/onlinedocs/
     86   17. mailto:gcc-help (a] gcc.gnu.org
     87   18. mailto:gcc (a] gcc.gnu.org
     88   19. https://gcc.gnu.org/lists.html
     89   20. https://www.fsf.org/
     90   21. https://gcc.gnu.org/about.html
     91 ======================================================================
     92 http://gcc.gnu.org/gcc-12/changes.html
     93 
     94                              GCC 12 Release Series
     95                         Changes, New Features, and Fixes
     96 
     97    This page is a "brief" summary of some of the huge number of
     98    improvements in GCC 12. You may also want to check out our [1]Porting
     99    to GCC 12 page and the [2]full GCC documentation.
    100 
    101 Caveats
    102 
    103      * An ABI incompatibility between C and C++ when passing or returning
    104        by value certain aggregates containing zero width bit-fields has
    105        been discovered on various targets. As mentioned in [3]PR102024,
    106        since the [4]PR42217 fix in GCC 4.5 the C++ front-end has been
    107        removing zero width bit-fields from the internal representation of
    108        the aggregates after the layout of those aggregates, but the C
    109        front-end kept them, so passing e.g. struct S { float a; int : 0;
    110        float b; } or struct T { float c; int : 0; } by value could differ
    111        between C and C++. Starting with GCC 12 the C++ front-end no longer
    112        removes those bit-fields from the internal representation and per
    113        clarified psABI some targets have been changed, so that they either
    114        ignore those bit-fields in the argument passing by value decisions
    115        in both C and C++, or they always take them into account. x86-64,
    116        ARM and AArch64 will always ignore them (so there is a C ABI
    117        incompatibility between GCC 11 and earlier with GCC 12 or later),
    118        PowerPC64 ELFv2 and S/390 always take them into account (so there
    119        is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with
    120        GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V
    121        has changed the handling of these already starting with GCC 10. As
    122        the ABI requires, MIPS takes them into account handling function
    123        return values so there is a C++ ABI incompatibility with GCC 4.5
    124        through 11. For function arguments on MIPS, refer to [5]the MIPS
    125        specific entry. GCC 12 on the above targets will report such
    126        incompatibilities as warnings or other diagnostics unless
    127        -Wno-psabi is used.
    128      * C: Computed gotos require a pointer type now.
    129      * C++: Two non-standard std::pair constructors have been deprecated.
    130        These allowed the use of an rvalue and a literal 0 to construct a
    131        pair containing a move-only type and a pointer. The nullptr keyword
    132        should be used to initialize the pointer member instead of a
    133        literal 0, as this is portable to other C++ implementations.
    134      * The configuration option --enable-libstdcxx-allocator no longer
    135        supports the bitmap, mt, and pool arguments. Those configurations
    136        had been broken for some time.
    137      * D: Building and bootstrapping GDC, the D compiler, now requires a
    138        working GDC (GCC version 9.1 or later) and D runtime library,
    139        libphobos, as the D front end is written in D. On some targets,
    140        libphobos isn't enabled by default, but compiles and works if
    141        --enable-libphobos is used. Other targets may require a more recent
    142        version of GCC to bootstrap. Specifics are documented for affected
    143        targets in the [6]Installing GCC manual.
    144      * Fortran: OpenMP code using the omp_lib.h include file can no longer
    145        be compiled with -std=f95 but now requires at least -std=f2003.
    146        Alternatively, use the omp_lib module, which still supports
    147        -std=f95 and is recommended to be used instead in general.
    148      * OpenMP offloading to Intel MIC has been deprecated and will be
    149        removed in a future release.
    150      * The cr16 target with the cr16-*-* configuration has been obsoleted
    151        and will be removed in a future release.
    152      * The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations
    153        targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be
    154        removed in a future release.
    155      * The m32c*-*-rtems* configuration has been obsoleted and will be
    156        removed in a future release.
    157      * The support for the m32r-*-linux*, m32rle-*-linux*,
    158        m68k*-*-openbsd* and vax-*-openbsd* configurations has been
    159        removed.
    160      * STABS: Support for emitting the STABS debugging format is
    161        deprecated and will be removed in the next release. All ports now
    162        default to emit DWARF (version 2 or later) debugging info or are
    163        obsoleted.
    164      * The optimization level -Ofast now implies
    165        -fno-semantic-interposition.
    166 
    167 [7]General Improvements
    168 
    169      * Vectorization is enabled at -O2 which is now equivalent to what
    170        would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
    171        in the past. Note that the default vectorizer cost model has been
    172        changed; it used to behave as if -fvect-cost-model=cheap had been
    173        specified.
    174      * GCC now supports the [8]ShadowCallStack sanitizer, which can be
    175        enabled using the command-line option
    176        [9]-fsanitize=shadow-call-stack. This sanitizer currently only
    177        works on AArch64 targets and it requires an environment in which
    178        all code has been compiled with -ffixed-r18. Its primary initial
    179        user is the Linux kernel.
    180 
    181 [10]New Languages and Language specific improvements
    182 
    183      * OpenMP
    184           + OpenMP 5.0 support has been extended: The close map modifier
    185             and the affinity clause are now supported. In addition,
    186             Fortran gained the following features which were available in
    187             C and C++ before: declare variant is now available, depobj,
    188             mutexinoutset and iterator can now also be used with the
    189             depend clause, defaultmap has been updated for OpenMP 5.0, and
    190             the loop directive and combined directives involving the
    191             master directive have been added.
    192           + The following OpenMP 5.1 features have been added: support for
    193             expressing OpenMP directives as C++ 11 attributes, the masked
    194             and scope constructs, the nothing and error directives, and
    195             using primary with the proc_bind clause and OMP_PROC_BIND
    196             environment variable, the reproducible and unconstrained
    197             modifiers to the order clause, and, for C/C++ only, the align
    198             and allocator modifiers to the allocate clause and the atomic
    199             extensions are now available. The OMP_PLACE environment
    200             variable supports the OpenMP 5.1 features. In addition, the
    201             OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT environment variables
    202             and their associated API routines are now supported as well as
    203             the memory-allocation routines added for Fortran and extended
    204             for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
    205             blocks can be used.
    206           + The [11]OpenMP Implementation Status can be found in the
    207             libgomp manual.
    208      * Version 2.6 of the [12]OpenACC specification continues to be
    209        maintained and improved in the C, C++ and Fortran compilers. See
    210        the [13]implementation status section on the OpenACC wiki page and
    211        the [14]run-time library documentation for further information. In
    212        addition to general performance tuning and bug fixing, new features
    213        include:
    214           + OpenACC worker parallelism for [15]AMD GPUs (already for a
    215             long time supported for [16]Nvidia GPUs).
    216           + Data privatization/sharing at the OpenACC gang level.
    217           + Considerable improvements for the experimental OpenACC
    218             'kernels' decomposition ([17]--param
    219             openacc-kernels=decompose).
    220           + A new warning flag [18]-Wopenacc-parallelism to warn about
    221             potentially suboptimal choices related to OpenACC parallelism.
    222      * The offload target code generation for OpenMP and OpenACC can now
    223        be better adjusted using the new [19]-foffload-options= flag and
    224        the pre-existing but now documented [20]-foffload= flag.
    225 
    226   [21]Ada
    227 
    228      * Ada 2022
    229           + Added the -gnat2022 flag to indicate strict Ada 2022
    230             compliance. The old -gnat2020 flag is now deprecated.
    231           + Support for Big Numbers (Annex G) has seen continuous
    232             improvements. It is now considered complete. It is compatible
    233             with SPARK, i.e. can be used from SPARK code.
    234           + Continuous improvements to the Ada 2022 standard since GCC 11.
    235           + Greatly improved compile time support. More functions can now
    236             have the with Static aspect and can be used in more contexts.
    237      * Ada 2022 extensions. The use of the -gnatX flag is necessary to
    238        access these features as they are not considered stable or
    239        standard.
    240           + Fixed lower bound for unconstrained arrays.
    241                o type Matrix is array (Natural range 0 .. <>, Natural
    242                  range 0 .. <>) of Integer; is now valid.
    243                o Subtypes can also specify a lower bound: subtype String_1
    244                  is String (1 .. <>);. Boundaries from slices will "slide"
    245                  to the correct lower bound of the subtype.
    246           + Generalized Object.Operand notation. The following code is now
    247             valid V.Add_Element(42);, with V being a vector, for example.
    248           + Additional when constructs. Keywords return, goto and raise
    249             can now use when in addition to the existing exit when. The
    250             following expression is therefore now valid raise
    251             Constraint_Error with "Element is null" when Element = null;
    252           + Pattern matching
    253                o The case statement has been extended to cover records and
    254                  arrays as well as finer grained casing on scalar types.
    255                  In the future it is expected to provide more compile time
    256                  guarantees when accessing discriminated fields. Case
    257                  exhaustion is supported for pattern matching. An example
    258                  would be
    259 type Sign is (Neg, Zero, Pos);
    260 
    261 function Multiply (S1, S2 : Sign) return Sign is
    262   (case (S1, S2) is
    263      when (Neg, Neg) | (Pos, Pos) => Pos,
    264      when (Zero, <>) | (<>, Zero) => Zero,
    265      when (Neg, Pos) | (Pos, Neg) => Neg);
    266 
    267      * gnatfind and gnatxref, which were already deprecated, have been
    268        removed.
    269      * Greatly expanded code covered by contracts. Thanks to this work,
    270        there are now several Ada standard libraries fully proven in SPARK
    271        which means they have no runtime nor logical errors. They are
    272        mostly numeric and string handling libraries.
    273      * Enable return-slot optimization for Pure functions.
    274      * General optimizations, improvements and additions to the standard
    275        library. Performance, correctness and in some cases stability was
    276        improved. Memory pools have also seen some minor enhancements.
    277      * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
    278        QNX. Older targets were removed or cleaned.
    279      * Added some [22]hardening features.
    280 
    281   [23]C family
    282 
    283      * Support for __builtin_shufflevector compatible with the clang
    284        language extension was added.
    285      * Support for attribute unavailable was added.
    286      * A new built-in function, __builtin_assoc_barrier, was added. It can
    287        be used to inhibit re-association of floating-point expressions.
    288      * Support for __builtin_dynamic_object_size compatible with the clang
    289        language extension was added.
    290      * New warnings:
    291           + [24]-Wbidi-chars warns about potentially misleading UTF-8
    292             bidirectional control characters. The default is
    293             -Wbidi-chars=unpaired ([25]PR103026)
    294           + [26]-Warray-compare warns about comparisons between two
    295             operands of array type ([27]PR97573)
    296      * Enhancements to existing warnings:
    297           + [28]-Wattributes has been extended so that it's possible to
    298             use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
    299             suppress warnings about unknown scoped attributes (in C++11
    300             and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
    301             "vendor::attr" can be used to achieve the same effect
    302             ([29]PR101940)
    303 
    304   [30]C
    305 
    306      * Some new features from the upcoming C2X revision of the ISO C
    307        standard are supported with -std=c2x and -std=gnu2x. Some of these
    308        features are also supported as extensions when compiling for older
    309        language versions. In addition to the features listed, some
    310        features previously supported as extensions and now added to the C
    311        standard are enabled by default in C2X mode and not diagnosed with
    312        -std=c2x -Wpedantic.
    313           + Digit separators (as in C++) are supported for C2X.
    314           + The #elifdef and #elifndef preprocessing directives are now
    315             supported.
    316           + The printf and scanf format checking with [31]-Wformat now
    317             supports the %b format specified by C2X for binary integers,
    318             and the %B format recommended by C2X for printf.
    319 
    320   [32]C++
    321 
    322      * Several C++23 features have been implemented:
    323           + [33]P1938R3, if consteval ([34]PR100974)
    324           + [35]P0849R8, auto(x): decay-copy in the language
    325             ([36]PR103049)
    326           + [37]P2242R3, Non-literal variables (and labels and gotos) in
    327             constexpr functions ([38]PR102612)
    328           + [39]P2334R1, Support for preprocessing directives elifdef and
    329             elifndef ([40]PR102616)
    330           + [41]P2360R0, Extend init-statement to allow alias-declaration
    331             ([42]PR102617)
    332           + [43]P2128R6, Multidimensional subscript operator
    333           + [44]DR 2397, auto specifier for pointers and references to
    334             arrays ([45]PR100975)
    335      * Several C++ Defect Reports have been resolved, e.g.:
    336           + [46]DR 960, Covariant functions and lvalue/rvalue references
    337           + [47]DR 1227, Mixing immediate and non-immediate contexts in
    338             deduction failure
    339           + [48]DR 1315, Restrictions on non-type template arguments in
    340             partial specializations
    341           + [49]DR 2082, Referring to parameters in unevaluated operands
    342             of default arguments
    343           + [50]DR 2351, void{}
    344           + [51]DR 2374, Overly permissive specification of enum
    345             direct-list-initialization
    346           + [52]DR 2397, auto specifier for pointers and references to
    347             arrays
    348           + [53]DR 2446, Questionable type-dependency of concept-ids
    349      * New command-line option -fimplicit-constexpr can be used to make
    350        inline functions implicitly constexpr ([54]git)
    351      * New command-line option -ffold-simple-inlines can be used to fold
    352        calls to certain trivial inline functions (currently std::move,
    353        std::forward, std::addressof and std::as_const). In contrast to
    354        inlining such calls, folding means that no intermediate code or
    355        debug information will be generated for them; this minimizes the
    356        abstraction penalty incurred for using these functions versus using
    357        the fundamental operations from which they're defined (e.g.
    358        std::move versus static_cast). This flag is enabled by default when
    359        -fno-inline is not active.
    360      * Deduction guides can be declared at class scope ([55]PR79501)
    361      * [56]-Wuninitialized warns about using uninitialized variables in
    362        member initializer lists ([57]PR19808)
    363      * [58]-Wint-in-bool-context is now disabled when instantiating a
    364        template ([59]git)
    365      * Stricter checking of attributes on friend declarations: if a friend
    366        declaration has an attribute, that declaration must be a
    367        definition. Moreover, a C++11 attribute cannot appear in the middle
    368        of the decl-specifier-seq. ([60]PR99032)
    369      * New warning options for C++ language mismatches:
    370        -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
    371        -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
    372        default and can be used to control existing pedwarns about
    373        occurrences of new C++ constructs in code using an old C++ standard
    374        dialect.
    375      * New warning [61]-Wmissing-requires warns about missing requires
    376        ([62]git)
    377      * The existing std::is_constant_evaluated in if warning was extended
    378        to warn in more cases ([63]PR100995)
    379      * [64]-Waddress has been enhanced so that it now warns about, for
    380        instance, comparing the address of a nonstatic member function to
    381        null ([65]PR102103)
    382      * Errors about narrowing are no longer hidden if they occur in system
    383        headers
    384      * Ordered comparison of null pointers is now rejected ([66]PR99701)
    385      * Anonymous structs with bases are now rejected ([67]git)
    386      * The compiler rejects taking the address of an immediate member
    387        function ([68]PR102753)
    388      * The compiler has support for C++20
    389        __cpp_lib_is_pointer_interconvertible and
    390        __cpp_lib_is_layout_compatible to help the C++ library implement
    391        [69]P0466, Layout-compatibility and Pointer-interconvertibility
    392        Traits ([70]PR101539)
    393      * Memory usage of constraint subsumption has been improved
    394        ([71]PR100828)
    395      * constinit thread_local variables are optimized better
    396        ([72]PR101786)
    397      * Support for C++17 std::hardware_destructive_interference_size was
    398        added, along with the [73]-Winterference-size warning ([74]git)
    399      * Many bugs in the CTAD handling have been fixed ([75]PR101344,
    400        [76]PR101883, [77]PR89062, [78]PR101233, [79]PR88252, [80]PR86439,
    401        [81]PR98832, [82]PR102933 ...)
    402      * Two-stage name lookup for dependent operator expressions has been
    403        corrected ([83]PR51577)
    404      * Several issues with constrained variable templates have been fixed
    405        ([84]PR98486)
    406      * The compiler performs less instantiating when doing speculative
    407        constant evaluation ([85]git)
    408      * Various diagnostic improvements; e.g., a more precise caret
    409        location for pointer-to-member expressions
    410      * The new -fconstexpr-fp-except flag allows IEC559 floating point
    411        exceptions in constant-expressions.
    412 
    413     [86]Runtime Library (libstdc++)
    414 
    415      * Improved experimental C++20 support, including:
    416           + std::vector, std::basic_string, std::optional, and
    417             std::variant can be used in constexpr functions.
    418           + std::make_shared for arrays with default initialization, and
    419             std::atomic<std::shared_ptr<T>>.
    420           + Layout-compatibility and pointer-interconvertibility traits.
    421      * Improved experimental C++23 support, including:
    422           + Monadic operations for std::optional.
    423           + std::expected
    424           + std::move_only_function
    425           + <spanstream>
    426           + std::basic_string::resize_and_overwrite
    427           + std::unique_ptr can be used in constexpr functions.
    428           + <stacktrace> (not built by default, requires linking to an
    429             extra library).
    430           + <stdatomic.h>
    431           + std::invoke_r
    432           + constexpr std::type_info::operator==
    433 
    434   [87]D
    435 
    436      * New features:
    437           + Support for the D programming language has been updated to
    438             version 2.100.1 of the language and run-time library. Full
    439             changelog for this release and previous releases can be found
    440             on the [88]dlang.org website.
    441           + On supported targets, the __traits(compiles) expression can
    442             now be used to determine whether a target-specific built-in is
    443             available without error during CTFE ([89]PR101127).
    444           + Functions annotated with pragma(inline, true) are now compiled
    445             into every module where they are used from ([90]PR106563).
    446           + Partial support for directly importing C99 sources into a D
    447             compilation ([91]ImportC) has been added to the language. A
    448             notable missing feature is support for preprocessing C
    449             imports, which can be worked around by preprocessing all C
    450             sources used for importing ahead of time.
    451      * New language options:
    452           + -fcheck=, enables or disables the code generation of specific
    453             run-time contract checks.
    454           + -fcheckaction=, controls the run-time behavior on an assert,
    455             array bounds check, or final switch contract failure. The
    456             default is -fcheckaction=throw.
    457           + -fdump-c++-spec=, dumps all compiled extern(C++) declarations
    458             as C++ code to the given file. The supplementary option
    459             -fdump-c++-spec-verbose turns on emission of comments for
    460             ignored declarations in the generated spec.
    461           + -fextern-std=, controls which C++ standard extern(C++)
    462             declarations are compiled to be compatible with. The default
    463             is -fextern-std=c++17.
    464           + -fpreview=, added to enable upcoming D language features in
    465             the compiler.
    466           + -frevert=, added to revert D language changes to support older
    467             D codebases that need more time to transition.
    468           + -fsave-mixins=, saves mixins expanded at compile-time to a
    469             file.
    470      * Deprecated and removed features:
    471           + The -Wtemplates compiler switch has been removed, as it had
    472             been superceded by -ftransition=templates, which more
    473             accurately reports on which templates have been instantiated.
    474           + The -ftransition=dip25 and -ftransition=dip1000 compiler
    475             switches have been renamed to -fpreview=dip25 and
    476             -fpreview=dip1000.
    477 
    478   [92]Fortran
    479 
    480      * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
    481        is now fully supported. In addition to implementing previously
    482        missing functionality, such as support for character arguments of
    483        length greater than one in functions marked bind(c) and gaps in the
    484        handling for assumed-rank arrays, numerous other bugs have been
    485        fixed, and an extensive set of new conformance test cases has been
    486        added.
    487      * GCC 12 now uses OPERATION as the name of the function to the
    488        CO_REDUCE intrinsic for the pairwise reduction, thus conforming to
    489        the Fortran 2018 standard. Previous versions used OPERATOR which
    490        conforms to TS 18508.
    491      * On POWER systems which support it, the -mabi=ieeelongdouble option
    492        now selects the IEEE 128-bit floating point format for
    493        REAL(KIND=16). R16_IBM and R16_IEEE have been added to the
    494        -fconvert option, the CONVERT specifier of the OPEN statement and
    495        the GFORTRAN_CONVERT_UNIT environment variable.
    496 
    497   [93]Go
    498 
    499      * GCC 12 provides a complete implementation of the Go 1.18 user
    500        packages.
    501      * Although Go 1.18 includes support for generic programming, that
    502        support is not yet available in GCC.
    503 
    504 [94]libgccjit
    505 
    506      * The libgccjit API gained 30 new entry points:
    507           + 17 new "reflection" entry points for querying functions and
    508             types ([95]LIBGCCJIT_ABI_16)
    509           + [96]gcc_jit_lvalue_set_tls_model for supporting thread-local
    510             variables ([97]LIBGCCJIT_ABI_17)
    511           + [98]gcc_jit_lvalue_set_link_section for setting the link
    512             section of global variables, analogous to
    513             [99]__attribute__((section(".section")))
    514             ([100]LIBGCCJIT_ABI_18)
    515           + 4 new entry points for initializing global variables and
    516             creating constructors for rvalues ([101]LIBGCCJIT_ABI_19)
    517           + Support for sized integer types, including 128-bit integers
    518             and helper functions for such types ([102]LIBGCCJIT_ABI_20)
    519           + [103]gcc_jit_context_new_bitcast for reinterpreting the bits
    520             of an rvalue as a different type ([104]LIBGCCJIT_ABI_21)
    521           + [105]gcc_jit_lvalue_set_register_name for setting a specific
    522             register for a variable ([106]LIBGCCJIT_ABI_22)
    523           + [107]gcc_jit_context_set_bool_print_errors_to_stderr
    524             ([108]LIBGCCJIT_ABI_23)
    525           + 2 new entry points for setting the alignment of a variable
    526             ([109]LIBGCCJIT_ABI_24)
    527      * libgccjit has gained support for the use of various atomic builtins
    528        ([110]PR96066, [111]PR96067)
    529      * [112]gcc_jit_context_new_cast is now able to handle truncation and
    530        extension between different integer types ([113]PR95498)
    531 
    532 [114]New Targets and Target Specific Improvements
    533 
    534   [115]AArch64 & arm
    535 
    536      * Newer revisions of the Arm Architecture are supported as arguments
    537        to the -march option: armv8.7-a, armv8.8-a, armv9-a.
    538      * The Arm Cortex-A510 CPU is now supported through the cortex-a510
    539        argument to the -mcpu and -mtune options.
    540      * GCC can now auto-vectorize operations performing sign-differing
    541        dot-product operations, taking advantage of instructions in the
    542        Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
    543 
    544   [116]AArch64
    545 
    546      * A number of new CPUs are supported through the -mcpu and -mtune
    547        options (GCC identifiers in parentheses).
    548           + Ampere-1 (ampere1).
    549           + Arm Cortex-A710 (cortex-a710).
    550           + Arm Cortex-X2 (cortex-x2).
    551      * The 64-byte atomic load/store intrinsics to accelerator memory from
    552        the [117]2020 Arm Architecture extensions are supported through the
    553        +ls64 option extension.
    554      * Initial code generation support is supported for hardware
    555        instructions used to accelerate the memcpy,memmove and memset
    556        standard functions. These instructions can be generated when
    557        compiling with the +mopsoption extension.
    558      * The ACLE Advanced SIMD intrinsics accessible through the arm_neon.h
    559        header have been significantly reimplemented and generate
    560        higher-performing code than previous GCC versions.
    561      * The option -mtune=neoverse-512tvb is added to tune for Arm Neoverse
    562        cores that have a total vector bandwidth of 512 bits. Please refer
    563        to the documentation for more details.
    564 
    565   [118]AMD Radeon (GCN)
    566 
    567      * Debug experience with ROCGDB has been improved.
    568      * Support for the type __int128_t/integer(kind=16) was added.
    569      * For offloading, the limitation of using only one wavefront per
    570        compute unit (CU) has been lifted. Up to 40 workgroups per CU and
    571        16 wavefronts per workgroup are supported (up to a limit of 40
    572        wavefronts in total, per CU). Additionally, the number of used
    573        wavefronts and workgroups was tuned for performance.
    574 
    575   [119]arm
    576 
    577      * Support is added for accessing the stack canary value via the TLS
    578        register through the -fstack-protector-guard=tls and
    579        -mstack-protector-guard-offset= options. This intended for use in
    580        Linux kernel development. Please refer to the documentation for
    581        more details.
    582 
    583   [120]BPF
    584 
    585      * Support for CO-RE (compile-once, run-everywhere) has been added to
    586        the BPF back end. CO-RE allows to compile portable BPF programs
    587        that are able to run among different versions of the Linux kernel.
    588 
    589   [121]IA-32/x86-64
    590 
    591      * New ISA extension support for Intel AVX512-FP16 was added.
    592        AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
    593        switch.
    594      * For both C and C++ the _Float16 type is supported on x86 systems
    595        with SSE2 enabled. Without {-mavx512fp16}, all operations will be
    596        emulated in software and float instructions.
    597      * Mitigation against straight line speculation (SLS) for function
    598        return and indirect jump is supported via
    599        -mharden-sls=[none|all|return|indirect-jmp].
    600      * Add CS prefix to call and jmp to indirect thunk with branch target
    601        in r8-r15 registers via -mindirect-branch-cs-prefix.
    602      * Always use global offset table (GOT) to access external data and
    603        function symbols when the new -mno-direct-extern-access
    604        command-line option is specified.
    605 
    606   [122]LoongArch
    607 
    608      * Support for the LoongArch architecture instruction set has been
    609        added.
    610      * The Loongson CPU codename LA464 and LoongArch 64-bit generic CPU
    611        codename loongarch64 are supported through the -march= and -mtune=
    612        options (GCC identifiers in parentheses).
    613           + Loongson LA464 core (la464).
    614           + LoongArch 64-bit generic core (loongarch64).
    615 
    616   [123]MIPS
    617 
    618      * The ABI passing arguments containing zero-width fields (for
    619        example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
    620        and GNU C empty structs) has changed. Now a zero-width field will
    621        not prevent an aligned 64-bit floating-point field next to it from
    622        being passed through FPR. This is compatible with LLVM, but
    623        incompatible with previous GCC releases. GCC 12 on MIPS will report
    624        such incompatibilities as an inform unless -Wno-psabi is used.
    625      * The ABI returning values containing C++17 empty bases has changed.
    626        Now an empty base will not prevent an aggregate containing only one
    627        or two floating-point fields from being returned through FPR. This
    628        is compatible with GCC 6 and earlier, but incompatible with GCC 7
    629        through 11. GCC 12 on MIPS will report such incompatibilities as an
    630        inform unless -Wno-psabi is used.
    631 
    632   [124]NVPTX
    633 
    634      * The -march flag has been added. The -misa flag is now considered an
    635        alias of the -march flag.
    636      * Support for PTX ISA target architectures sm_53, sm_70, sm_75 and
    637        sm_80 has been added. These can be specified using the -march flag.
    638      * The default PTX ISA target architecture has been set back to sm_30,
    639        to fix support for sm_30 boards.
    640      * The -march-map flag has been added. The -march-map value will be
    641        mapped to an valid -march flag value. For instance,
    642        -march-map=sm_50 maps to -march=sm_35. This can be used to specify
    643        that generated code is to be executed on a board with at least some
    644        specific compute capability, without having to know the valid
    645        values for the -march flag.
    646      * The -mptx flag has been added to specify the PTX ISA version for
    647        the generated code; permitted values are 3.1 (matches previous GCC
    648        versions), 6.0, 6.3, and 7.0. If not specified, the used version is
    649        the minimal version required for -march but at least 6.0.
    650      * An mptx-3.1 multilib was added. This allows using older drivers
    651        which do not support PTX ISA version 6.0.
    652      * The new __PTX_SM__ predefined macro allows code to check the PTX
    653        ISA target architecture being targeted by the compiler.
    654      * The new __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__
    655        predefined macros allows code to check the PTX ISA version being
    656        targeted by the compiler.
    657 
    658   [125]PowerPC / PowerPC64 / RS6000
    659 
    660      * The internal implementation of Power's target-specific built-in
    661        functions has been rewritten to be easier and less error-prone to
    662        maintain. Every attempt has been made to ensure that the new
    663        behavior matches the old behavior, but inevitably some bugs can be
    664        expected. Please [126]report any problems.
    665      * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
    666        __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
    667        __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
    668        now behave as documented in all supported configurations. On prior
    669        releases, the arguments and return values of these functions were
    670        treated as unsigned long long instead of as unsigned long, when the
    671        options -m32 -mpowerpc64 were in effect.
    672      * The overloaded built-in functions vec_cntlz_lsbb and vec_cnttz_lsbb
    673        now behave as documented. On prior releases, these built-in
    674        functions had incorrect semantics on little-endian targets.
    675 
    676   [127]PRU
    677 
    678      * The [128]__regio_symbol variable qualifier has been added. It
    679        allows easier access in C programs to the __R30 and __R31 CPU I/O
    680        registers.
    681 
    682   [129]RISC-V
    683 
    684      * The default ISA spec version was bumped to 20191213; see [130]this
    685        announcement for details.
    686      * New ISA extension support for zba, zbb, zbc, zbs was added.
    687      * New ISA extension support for vector and scalar crypto was added,
    688        only support architecture testing macro and -march= parsing.
    689      * The option -mtune=thead-c906 is added to tune for T-HEAD c906
    690        cores.
    691      * libstdc++ no longer attempts to detect built-in atomics.
    692        Distributions that have out-of-tree workarounds for -latomic should
    693        check their ABIs again.
    694 
    695 [131]Operating Systems
    696 
    697 [132]Improvements to Static Analyzer
    698 
    699      * The analyzer has gained a
    700        [133]-Wanalyzer-use-of-uninitialized-value warning, similar to
    701        [134]-Wuninitialized and [135]-Wmaybe-uninitialized, but based on
    702        an interprocedural path-sensitive analysis ([136]PR95006).
    703        Such warnings are not disabled by the new
    704        [137]-ftrivial-auto-var-init (see below), as the latter is
    705        considered a mitigation option.
    706      * [138]-Wanalyzer-write-to-const and
    707        [139]-Wanalyzer-write-to-string-literal will now check for
    708        [140]__attribute__ ((access, ....)) on calls to externally-defined
    709        functions, and complain about read-only regions pointed to by
    710        arguments marked with a write_only or read_write attribute
    711        ([141]PR104793).
    712      * The analyzer's "taint" mode, activated by
    713        [142]-fanalyzer-checker=taint (in addition to [143]-fanalyzer), has
    714        gained four new taint-based warnings:
    715           + [144]-Wanalyzer-tainted-allocation-size for e.g.
    716             attacker-controlled malloc and alloca,
    717           + [145]-Wanalyzer-tainted-divisor for detecting where an
    718             attacker can inject a divide-by-zero,
    719           + [146]-Wanalyzer-tainted-offset for attacker-controlled pointer
    720             offsets,
    721           + [147]-Wanalyzer-tainted-size for attacker-controlled values
    722             being used as a size parameter to calls to memset or to
    723             functions marked with [148]__attribute__ ((access, ....)).
    724        The existing [149]-Wanalyzer-tainted-array-index has been reworded
    725        to talk about "attacker-controlled" rather than "tainted" values,
    726        for consistency with the new warnings.
    727        A new [150]__attribute__ ((tainted_args)) has been added to the C
    728        and C++ front ends, usable on functions, and on function pointer
    729        callback fields in structs. The analyzer's taint mode will treat
    730        all parameters and buffers pointed to by parameters of such
    731        functions as being attacker-controlled, such as for annotating
    732        system calls in an operating system kernel as being an "attack
    733        surface".
    734      * The analyzer now respects [151]__attribute__((const)): it will
    735        treat such functions as returning the same value when given the
    736        same inputs ([152]PR104434), and as having no side effects
    737        ([153]PR104576).
    738      * The analyzer is now able to split its analysis into multiple
    739        execution paths in places where there isn't a split in the control
    740        flow graph. For example, it now handles realloc calls by splitting
    741        the execution path into three possible outcomes for the call:
    742           + failure, returning NULL
    743           + success, growing the buffer in-place without moving it
    744           + success, allocating a new buffer, copying the content of the
    745             old buffer to it, and freeing the old buffer
    746      * The analyzer's interprocedural path exploration logic is now able
    747        to track calls through function pointers.
    748      * The analyzer now makes the assumption that if we know PTR is
    749        non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
    750        true, but eliminates false positives in practice ([154]PR101962).
    751      * The analyzer has gained some initial support for inline assembler
    752        code. This is extremely limited, and is purely to help suppress
    753        false positives when analyzing the Linux kernel, which makes heavy
    754        use of inline assembler ([155]PR101570).
    755      * The way the analyzer tracks the state of memory along an execution
    756        path has been improved in various ways for GCC 12:
    757           + An optimization for representing bulk updates to memory (e.g.
    758             zero fills) has been removed as it never worked well. In GCC
    759             12 it has been replaced with a simpler and more accurate
    760             approach, eliminating many false positives ([156]PR95006).
    761           + Various optimizations have been added, speeding up the
    762             analysis on a particularly problematic source file from 4
    763             minutes down to 17 seconds ([157]PR104943, [158]PR104954, and
    764             [159]PR104955).
    765           + The analyzer now tracks the sizes of dynamically-allocated
    766             regions, both on the heap (via malloc etc) and stack (via
    767             alloca), though none of the analyzer warnings make use of this
    768             yet in GCC 12.
    769      * The analyzer's handling of switch statements has been rewritten,
    770        fixing various bugs.
    771 
    772 Other significant improvements
    773 
    774   [160]Eliminating uninitialized variables
    775 
    776      * GCC can now [161]initialize all stack variables implicitly,
    777        including padding. This is intended to eliminate all classes of
    778        uninitialized stack variable flaws. Lack of explicit initialization
    779        will still warn when [162]-Wuninitialized is active. For best
    780        debugging, use of the new command-line option
    781        [163]-ftrivial-auto-var-init=pattern can be used to fill variables
    782        with a repeated 0xFE pattern, which tends to illuminate many bugs
    783        (e.g. pointers receive invalid addresses, sizes and indices are
    784        very large). For best production results, the new command-line
    785        option [164]-ftrivial-auto-var-init=zero can be used to fill
    786        variables with 0x00, which tends to provide a safer state for bugs
    787        (e.g. pointers are NULL, strings are NUL filled, and sizes and
    788        indices are 0).
    789 
    790   [165]Debugging formats
    791 
    792      * GCC can now generate debugging information in [166]CTF, a
    793        lightweight debugging format that provides information about C
    794        types and the association between functions and data symbols and
    795        types. This format is designed to be embedded in ELF files and to
    796        be very compact and simple. A new command-line option -gctf enables
    797        the generation of CTF.
    798      * GCC can now generate debugging information in BTF. This is a
    799        debugging format mainly used in BPF programs and the Linux kernel.
    800        The compiler can generate BTF for any target, when enabled with the
    801        command-line option -gbtf
    802 
    803 [167]GCC 12.1
    804 
    805    This is the [168]list of problem reports (PRs) from GCC's bug tracking
    806    system that are known to be fixed in the 12.1 release. This list might
    807    not be complete (that is, it is possible that some PRs that have been
    808    fixed are not listed here).
    809 
    810 [169]GCC 12.2
    811 
    812    This is the [170]list of problem reports (PRs) from GCC's bug tracking
    813    system that are known to be fixed in the 12.2 release. This list might
    814    not be complete (that is, it is possible that some PRs that have been
    815    fixed are not listed here).
    816 
    817   Target Specific Changes
    818 
    819     LoongArch
    820 
    821      * The default setting of -m[check|no-check]-zero-division is changed
    822        for optimized code. Now -mno-check-zero-division is the default for
    823        all optimization levels but -O0 and -Og. The old behavior can be
    824        obtained by explicitly passing -mcheck-zero-division to GCC.
    825 
    826 [171]GCC 12.3
    827 
    828   Target Specific Changes
    829 
    830   x86-64
    831 
    832      * GCC now supports AMD CPUs based on the znver4 core via
    833        -march=znver4. The switch makes GCC consider using 512-bit vectors
    834        when auto-vectorizing.
    835 
    836    This is the [172]list of problem reports (PRs) from GCC's bug tracking
    837    system that are known to be fixed in the 12.3 release. This list might
    838    not be complete (that is, it is possible that some PRs that have been
    839    fixed are not listed here).
    840 
    841 [173]GCC 12.4
    842 
    843    This is the [174]list of problem reports (PRs) from GCC's bug tracking
    844    system that are known to be fixed in the 12.4 release. This list might
    845    not be complete (that is, it is possible that some PRs that have been
    846    fixed are not listed here).
    847 
    848 [175]GCC 12.5
    849 
    850    This is the [176]list of problem reports (PRs) from GCC's bug tracking
    851    system that are known to be fixed in the 12.5 release. This list might
    852    not be complete (that is, it is possible that some PRs that have been
    853    fixed are not listed here).
    854 
    855 
    856     For questions related to the use of GCC, please consult these web
    857     pages and the [177]GCC manuals. If that fails, the
    858     [178]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
    859     web pages and the development of GCC are welcome on our developer
    860     list at [179]gcc (a] gcc.gnu.org. All of [180]our lists have public
    861     archives.
    862 
    863    Copyright (C) [181]Free Software Foundation, Inc. Verbatim copying and
    864    distribution of this entire article is permitted in any medium,
    865    provided this notice is preserved.
    866 
    867    These pages are [182]maintained by the GCC team. Last modified
    868    2025-07-11.
    869 
    870 References
    871 
    872    1. https://gcc.gnu.org/gcc-12/porting_to.html
    873    2. https://gcc.gnu.org/onlinedocs/index.html#current
    874    3. https://gcc.gnu.org/PR102024
    875    4. https://gcc.gnu.org/PR42217
    876    5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
    877    6. https://gcc.gnu.org/install/specific.html
    878    7. https://gcc.gnu.org/gcc-12/changes.html#general
    879    8. https://clang.llvm.org/docs/ShadowCallStack.html
    880    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
    881   10. https://gcc.gnu.org/gcc-12/changes.html#languages
    882   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
    883   12. https://www.openacc.org/
    884   13. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-12
    885   14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
    886   15. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
    887   16. https://gcc.gnu.org/gcc-12/changes.html#nvptx
    888   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
    889   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
    890   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
    891   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
    892   21. https://gcc.gnu.org/gcc-12/changes.html#ada
    893   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
    894   23. https://gcc.gnu.org/gcc-12/changes.html#c-family
    895   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
    896   25. https://gcc.gnu.org/PR103026
    897   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
    898   27. https://gcc.gnu.org/PR97573
    899   28. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
    900   29. https://gcc.gnu.org/PR101940
    901   30. https://gcc.gnu.org/gcc-12/changes.html#c
    902   31. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
    903   32. https://gcc.gnu.org/gcc-12/changes.html#cxx
    904   33. https://wg21.link/p1938
    905   34. https://gcc.gnu.org/PR100974
    906   35. https://wg21.link/p0849
    907   36. https://gcc.gnu.org/PR103049
    908   37. https://wg21.link/p2242
    909   38. https://gcc.gnu.org/PR102612
    910   39. https://wg21.link/p2334
    911   40. https://gcc.gnu.org/PR102616
    912   41. https://wg21.link/p2360
    913   42. https://gcc.gnu.org/PR102617
    914   43. https://wg21.link/p2128
    915   44. https://wg21.link/cwg2397
    916   45. https://gcc.gnu.org/PR100975
    917   46. https://wg21.link/cwg960
    918   47. https://wg21.link/cwg1227
    919   48. https://wg21.link/cwg1315
    920   49. https://wg21.link/cwg2082
    921   50. https://wg21.link/cwg2351
    922   51. https://wg21.link/cwg2374
    923   52. https://wg21.link/cwg2397
    924   53. https://wg21.link/cwg2446
    925   54. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
    926   55. https://gcc.gnu.org/PR79501
    927   56. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
    928   57. https://gcc.gnu.org/PR19808
    929   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
    930   59. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
    931   60. https://gcc.gnu.org/PR99032
    932   61. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
    933   62. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
    934   63. https://gcc.gnu.org/PR100995
    935   64. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
    936   65. https://gcc.gnu.org/PR102103
    937   66. https://gcc.gnu.org/PR99701
    938   67. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
    939   68. https://gcc.gnu.org/PR102753
    940   69. https://wg21.link/p0466
    941   70. https://gcc.gnu.org/PR101539
    942   71. https://gcc.gnu.org/PR100828
    943   72. https://gcc.gnu.org/PR101786
    944   73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
    945   74. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
    946   75. https://gcc.gnu.org/PR101344
    947   76. https://gcc.gnu.org/PR101883
    948   77. https://gcc.gnu.org/PR89062
    949   78. https://gcc.gnu.org/PR101233
    950   79. https://gcc.gnu.org/PR88252
    951   80. https://gcc.gnu.org/PR86439
    952   81. https://gcc.gnu.org/PR98832
    953   82. https://gcc.gnu.org/PR102933
    954   83. https://gcc.gnu.org/PR51577
    955   84. https://gcc.gnu.org/PR98486
    956   85. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
    957   86. https://gcc.gnu.org/gcc-12/changes.html#libstdcxx
    958   87. https://gcc.gnu.org/gcc-12/changes.html#d
    959   88. https://dlang.org/changelog/2.100.1.html
    960   89. https://gcc.gnu.org/PR101127
    961   90. https://gcc.gnu.org/PR106563
    962   91. https://dlang.org/spec/importc.html
    963   92. https://gcc.gnu.org/gcc-12/changes.html#fortran
    964   93. https://gcc.gnu.org/gcc-12/changes.html#go
    965   94. https://gcc.gnu.org/gcc-12/changes.html#jit
    966   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
    967   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
    968   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
    969   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
    970   99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
    971  100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
    972  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
    973  102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
    974  103. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
    975  104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
    976  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
    977  106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
    978  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
    979  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
    980  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
    981  110. https://gcc.gnu.org/PR96066
    982  111. https://gcc.gnu.org/PR96067
    983  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
    984  113. https://gcc.gnu.org/PR95498
    985  114. https://gcc.gnu.org/gcc-12/changes.html#targets
    986  115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
    987  116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
    988  117. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
    989  118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
    990  119. https://gcc.gnu.org/gcc-12/changes.html#arm
    991  120. https://gcc.gnu.org/gcc-12/changes.html#bpf
    992  121. https://gcc.gnu.org/gcc-12/changes.html#x86
    993  122. https://gcc.gnu.org/gcc-12/changes.html#loongarch
    994  123. https://gcc.gnu.org/gcc-12/changes.html#mips
    995  124. https://gcc.gnu.org/gcc-12/changes.html#nvptx
    996  125. https://gcc.gnu.org/gcc-12/changes.html#powerpc
    997  126. https://gcc.gnu.org/bugs/
    998  127. https://gcc.gnu.org/gcc-12/changes.html#pru
    999  128. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
   1000  129. https://gcc.gnu.org/gcc-12/changes.html#riscv
   1001  130. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
   1002  131. https://gcc.gnu.org/gcc-12/changes.html#os
   1003  132. https://gcc.gnu.org/gcc-12/changes.html#analyzer
   1004  133. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
   1005  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   1006  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   1007  136. https://gcc.gnu.org/PR95006
   1008  137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   1009  138. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   1010  139. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   1011  140. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   1012  141. https://gcc.gnu.org/PR104793
   1013  142. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
   1014  143. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1015  144. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   1016  145. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
   1017  146. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
   1018  147. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
   1019  148. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   1020  149. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
   1021  150. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
   1022  151. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
   1023  152. https://gcc.gnu.org/PR104434
   1024  153. https://gcc.gnu.org/PR104576
   1025  154. https://gcc.gnu.org/PR101962
   1026  155. https://gcc.gnu.org/PR101570
   1027  156. https://gcc.gnu.org/PR95006
   1028  157. https://gcc.gnu.org/PR104943
   1029  158. https://gcc.gnu.org/PR104954
   1030  159. https://gcc.gnu.org/PR104955
   1031  160. https://gcc.gnu.org/gcc-12/changes.html#uninitialized
   1032  161. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   1033  162. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   1034  163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   1035  164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   1036  165. https://gcc.gnu.org/gcc-12/changes.html#debug
   1037  166. https://ctfstd.org/
   1038  167. https://gcc.gnu.org/gcc-12/changes.html#12.1
   1039  168. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
   1040  169. https://gcc.gnu.org/gcc-12/changes.html#12.2
   1041  170. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
   1042  171. https://gcc.gnu.org/gcc-12/changes.html#12.3
   1043  172. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
   1044  173. https://gcc.gnu.org/gcc-12/changes.html#12.4
   1045  174. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
   1046  175. https://gcc.gnu.org/gcc-12/changes.html#12.5
   1047  176. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.5
   1048  177. https://gcc.gnu.org/onlinedocs/
   1049  178. mailto:gcc-help (a] gcc.gnu.org
   1050  179. mailto:gcc (a] gcc.gnu.org
   1051  180. https://gcc.gnu.org/lists.html
   1052  181. https://www.fsf.org/
   1053  182. https://gcc.gnu.org/about.html
   1054 ======================================================================
   1055 http://gcc.gnu.org/gcc-11/index.html
   1056 
   1057                              GCC 11 Release Series
   1058 
   1059    July 19, 2024
   1060 
   1061    The GCC developers are pleased to announce the release of GCC 11.5.
   1062 
   1063    This release is a bug-fix release, containing fixes for regressions in
   1064    GCC 11.4 relative to previous releases of GCC.
   1065 
   1066 Release History
   1067 
   1068    GCC 11.5
   1069           July 19, 2024 ([1]changes, [2]documentation)
   1070 
   1071    GCC 11.4
   1072           May 29, 2023 ([3]changes, [4]documentation)
   1073 
   1074    GCC 11.3
   1075           April 21, 2022 ([5]changes, [6]documentation)
   1076 
   1077    GCC 11.2
   1078           July 28, 2021 ([7]changes, [8]documentation)
   1079 
   1080    GCC 11.1
   1081           April 27, 2021 ([9]changes, [10]documentation)
   1082 
   1083 References and Acknowledgements
   1084 
   1085    GCC used to stand for the GNU C Compiler, but since the compiler
   1086    supports several other languages aside from C, it now stands for the
   1087    GNU Compiler Collection.
   1088 
   1089    The GCC developers would like to thank the numerous people that have
   1090    contributed new features, improvements, bug fixes, and other changes as
   1091    well as test results to GCC. This [11]amazing group of volunteers is
   1092    what makes GCC successful.
   1093 
   1094    For additional information about GCC please refer to the [12]GCC
   1095    project web site or contact the [13]GCC development mailing list.
   1096 
   1097    To obtain GCC please use [14]our mirror sites or [15]our version
   1098    control system.
   1099 
   1100 
   1101     For questions related to the use of GCC, please consult these web
   1102     pages and the [16]GCC manuals. If that fails, the
   1103     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1104     web pages and the development of GCC are welcome on our developer
   1105     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   1106     archives.
   1107 
   1108    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   1109    distribution of this entire article is permitted in any medium,
   1110    provided this notice is preserved.
   1111 
   1112    These pages are [21]maintained by the GCC team. Last modified
   1113    2024-07-19.
   1114 
   1115 References
   1116 
   1117    1. https://gcc.gnu.org/gcc-11/changes.html
   1118    2. https://gcc.gnu.org/onlinedocs/11.5.0/
   1119    3. https://gcc.gnu.org/gcc-11/changes.html
   1120    4. https://gcc.gnu.org/onlinedocs/11.4.0/
   1121    5. https://gcc.gnu.org/gcc-11/changes.html
   1122    6. https://gcc.gnu.org/onlinedocs/11.3.0/
   1123    7. https://gcc.gnu.org/gcc-11/changes.html
   1124    8. https://gcc.gnu.org/onlinedocs/11.2.0/
   1125    9. https://gcc.gnu.org/gcc-11/changes.html
   1126   10. https://gcc.gnu.org/onlinedocs/11.1.0/
   1127   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
   1128   12. https://gcc.gnu.org/index.html
   1129   13. mailto:gcc (a] gcc.gnu.org
   1130   14. https://gcc.gnu.org/mirrors.html
   1131   15. https://gcc.gnu.org/git.html
   1132   16. https://gcc.gnu.org/onlinedocs/
   1133   17. mailto:gcc-help (a] gcc.gnu.org
   1134   18. mailto:gcc (a] gcc.gnu.org
   1135   19. https://gcc.gnu.org/lists.html
   1136   20. https://www.fsf.org/
   1137   21. https://gcc.gnu.org/about.html
   1138 ======================================================================
   1139 http://gcc.gnu.org/gcc-11/changes.html
   1140 
   1141                              GCC 11 Release Series
   1142                         Changes, New Features, and Fixes
   1143 
   1144    This page is a "brief" summary of some of the huge number of
   1145    improvements in GCC 11. You may also want to check out our [1]Porting
   1146    to GCC 11 page and the [2]full GCC documentation.
   1147 
   1148 Caveats
   1149 
   1150      * The default mode for C++ is now -std=gnu++17 instead of
   1151        -std=gnu++14. Note that [3]C++17 changes to template template
   1152        parameter matching can be disabled independently of other features
   1153        with -fno-new-ttp-matching.
   1154      * When building GCC itself, the host compiler must now support C++11,
   1155        rather than C++98. In particular bootstrapping GCC 11 using an
   1156        older version of GCC requires a binary of GCC 4.8 or later, rather
   1157        than of GCC 3.4 or later as was the case for bootstrapping GCC 10.
   1158      * Naming and location of auxiliary and dump output files changed. If
   1159        you compile multiple input files in a single command, if you enable
   1160        Link Time Optimization, or if you use -dumpbase, -dumpdir,
   1161        -save-temps=*, and you expect any file other than the primary
   1162        output file(s) to be created as a side effect, watch out for
   1163        improvements and a few surprises. See [4]the patch, particularly
   1164        its textual description, for more details about the changes.
   1165      * -gsplit-dwarf no longer enables debug info generation on its own
   1166        but requires a separate -g for this.
   1167      * The libstdc++ configure option --enable-cheaders=c_std is
   1168        deprecated and will be removed in a future release. It should be
   1169        possible to use --enable-cheaders=c_global (the default) with no
   1170        change in behaviour.
   1171      * The front end for compiling BRIG format of Heterogeneous System
   1172        Architecture Intermediate Language (HSAIL) has been deprecated and
   1173        will likely be removed in a future release.
   1174      * Some short options of the gcov tool have been renamed: -i to -j and
   1175        -j to -H.
   1176 
   1177 [5]General Improvements
   1178 
   1179      * [6]ThreadSanitizer improvements to support alternative runtimes and
   1180        environments. The [7]Linux Kernel Concurrency Sanitizer (KCSAN) is
   1181        now supported.
   1182           + Add --param tsan-distinguish-volatile to optionally emit
   1183             instrumentation distinguishing volatile accesses.
   1184           + Add --param tsan-instrument-func-entry-exit to optionally
   1185             control if function entries and exits should be instrumented.
   1186      * In previous releases of GCC, the "column numbers" emitted in
   1187        diagnostics were actually a count of bytes from the start of the
   1188        source line. This could be problematic, both because of:
   1189           + multibyte characters (requiring more than one byte to encode),
   1190             and
   1191           + multicolumn characters (requiring more than one column to
   1192             display in a monospace font)
   1193        For example, the character p ("GREEK SMALL LETTER PI (U+03C0)")
   1194        occupies one column, and its UTF-8 encoding requires two bytes; the
   1195        character &#x1F642; ("SLIGHTLY SMILING FACE (U+1F642)") occupies
   1196        two columns, and its UTF-8 encoding requires four bytes.
   1197        In GCC 11 the column numbers default to being column numbers,
   1198        respecting multi-column characters. The old behavior can be
   1199        restored using a new option [8]-fdiagnostics-column-unit=byte.
   1200        There is also a new option [9]-fdiagnostics-column-origin=,
   1201        allowing the pre-existing default of the left-hand column being
   1202        column 1 to be overridden if desired (e.g. for 0-based columns).
   1203        The output of [10]-fdiagnostics-format=json has been extended to
   1204        supply both byte counts and column numbers for all source
   1205        locations.
   1206        Additionally, in previous releases of GCC, tab characters in the
   1207        source would be emitted verbatim when quoting source code, but be
   1208        prefixed with whitespace or line number information, leading to
   1209        misalignments in the resulting output when compared with the actual
   1210        source. Tab characters are now printed as an appropriate number of
   1211        spaces, using the [11]-ftabstop option (which defaults to 8 spaces
   1212        per tab stop).
   1213      * Introduce [12]Hardware-assisted AddressSanitizer support. This
   1214        sanitizer currently only works for the AArch64 target. It helps
   1215        debug address problems similarly to [13]AddressSanitizer but is
   1216        based on partial hardware assistance and provides probabilistic
   1217        protection to use less RAM at run time. [14]Hardware-assisted
   1218        AddressSanitizer is not production-ready for user space, and is
   1219        provided mainly for use compiling the Linux Kernel.
   1220        To use this sanitizer the command line arguments are:
   1221           + -fsanitize=hwaddress to instrument userspace code.
   1222           + -fsanitize=kernel-hwaddress to instrument kernel code.
   1223      * For targets that produce DWARF debugging information GCC now
   1224        defaults to [15]DWARF version 5 (with the exception of VxWorks and
   1225        Darwin/Mac OS X which default to version 2 and AIX which defaults
   1226        to version 4). This can produce up to 25% more compact debug
   1227        information compared to earlier versions.
   1228        To take full advantage of DWARF version 5 GCC needs to be built
   1229        against binutils version 2.35.2 or higher. When GCC is built
   1230        against earlier versions of binutils GCC will still emit DWARF
   1231        version 5 for most debuginfo data, but will generate version 4
   1232        debug line tables (even when explicitly given -gdwarf-5).
   1233        The following debug information consumers can process DWARF version
   1234        5:
   1235           + GDB 8.0, or higher
   1236           + valgrind 3.17.0
   1237           + elfutils 0.172, or higher (for use with systemtap,
   1238             dwarves/pahole, perf and libabigail)
   1239           + dwz 0.14
   1240        Programs embedding libbacktrace are urged to upgrade to the version
   1241        shipping with GCC 11.
   1242        To make GCC 11 generate an older DWARF version use -g together with
   1243        -gdwarf-2, -gdwarf-3 or -gdwarf-4.
   1244      * Vectorizer improvements:
   1245           + The straight-line code vectorizer now considers the whole
   1246             function when vectorizing and can handle opportunities
   1247             crossing CFG merges and backedges.
   1248      * A series of conditional expressions that compare the same variable
   1249        can be transformed into a switch statement if each of them contains
   1250        a comparison expression. Example:
   1251         int IsHTMLWhitespace(int aChar) {
   1252           return aChar == 0x0009 || aChar == 0x000A ||
   1253                  aChar == 0x000C || aChar == 0x000D ||
   1254                  aChar == 0x0020;
   1255         }
   1256 
   1257        This statement can be transformed into a switch statement and then
   1258        expanded into a bit-test.
   1259      * New command-line options:
   1260           + [16]-fbit-tests, enabled by default, can be used to enable or
   1261             disable switch expansion using bit-tests.
   1262      * Inter-procedural optimization improvements:
   1263           + A new IPA-modref pass was added to track side effects of
   1264             function calls and improve precision of points-to-analysis.
   1265             The pass can be controlled by the [17]-fipa-modref option.
   1266           + The identical code folding pass (controlled by [18]-fipa-icf)
   1267             was significantly improved to increase the number of unified
   1268             functions and to reduce compile-time memory use.
   1269           + IPA-CP (Interprocedural constant propagation) heuristics
   1270             improved its estimation of potential usefulness of known loop
   1271             bounds and strides by taking the estimated frequency of these
   1272             loops into account.
   1273      * Link-time optimization improvements:
   1274           + The LTO bytecode format was optimized for smaller object files
   1275             and faster streaming.
   1276           + Memory allocation of the linking stage was improved to reduce
   1277             peak memory use.
   1278      * Profile driven optimization improvements:
   1279           + Using [19]-fprofile-values, was improved by tracking more
   1280             target values for e.g. indirect calls.
   1281           + GCOV data file format outputs smaller files by representing
   1282             zero counters in a more compact way.
   1283 
   1284 [20]New Languages and Language specific improvements
   1285 
   1286      * GCC 11 adds support for non-rectangular loop nests in OpenMP
   1287        constructs and the allocator routines of [21]OpenMP 5.0, including
   1288        initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
   1289        environment variable and the active-levels routines are now
   1290        supported. For C/C++, the declare variant and map support has been
   1291        extended. For Fortran, OpenMP 4.5 is now fully supported and OpenMP
   1292        5.0 support has been extended, including the following features
   1293        which were before only available in C and C++: order(concurrent),
   1294        device_type, memorder-clauses for flush, lastprivate with
   1295        conditional modifier, atomic construct and reduction clause
   1296        extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
   1297        target data without map clause, and limited support for the
   1298        requires construct.
   1299      * Version 2.6 of the [22]OpenACC specification continues to be
   1300        maintained and improved in the C, C++ and Fortran compilers. See
   1301        the [23]implementation status section on the OpenACC wiki page and
   1302        the [24]run-time library documentation for further information.
   1303 
   1304   [25]C family
   1305 
   1306      * New attributes:
   1307           + The [26]no_stack_protector attribute has been added to mark
   1308             functions which should not be instrumented with stack
   1309             protection (-fstack-protector).
   1310           + The existing [27]malloc attribute has been extended so that it
   1311             can be used to identify allocator/deallocator API pairs. A
   1312             pair of new [28]-Wmismatched-dealloc and
   1313             [29]-Wmismatched-new-delete warnings will complain about
   1314             mismatched calls, and [30]-Wfree-nonheap-object about
   1315             deallocation calls with pointers not obtained from allocation
   1316             functions. Additionally, the static analyzer will use these
   1317             attributes when checking for leaks, double-frees,
   1318             use-after-frees, and similar issues.
   1319      * New warnings:
   1320           + [31]-Wmismatched-dealloc, enabled by default, warns about
   1321             calls to deallocation functions with pointers returned from
   1322             mismatched allocation functions.
   1323           + [32]-Wsizeof-array-div, enabled by -Wall, warns about
   1324             divisions of two sizeof operators when the first one is
   1325             applied to an array and the divisor does not equal the size of
   1326             the array element.
   1327           + [33]-Wstringop-overread, enabled by default, warns about calls
   1328             to string functions reading past the end of the arrays passed
   1329             to them as arguments. In prior GCC releases most instances of
   1330             his warning are diagnosed by -Wstringop-overflow.
   1331           + [34]-Wtsan, enabled by default, warns about unsupported
   1332             features in ThreadSanitizer (currently
   1333             std::atomic_thread_fence).
   1334      * Enhancements to existing warnings:
   1335           + [35]-Wfree-nonheap-object detects many more instances of calls
   1336             to deallocation functions with pointers not returned from a
   1337             dynamic memory allocation function.
   1338           + [36]-Wmaybe-uninitialized diagnoses passing pointers or
   1339             references to uninitialized memory to functions taking
   1340             const-qualified arguments.
   1341           + [37]-Wuninitialized detects reads from uninitialized
   1342             dynamically allocated memory.
   1343      * For ELF targets that support the GNU or FreeBSD OSABIs, the used
   1344        attribute will now save the symbol declaration it is applied to
   1345        from linker garbage collection.
   1346        To support this behavior, used symbols that have not been placed in
   1347        specific sections (e.g. with the section attribute, or the
   1348        -f{function,data}-sections options) will be placed in new, unique
   1349        sections.
   1350        This functionality requires Binutils version 2.36 or later.
   1351 
   1352   [38]C
   1353 
   1354      * Several new features from the upcoming C2X revision of the ISO C
   1355        standard are supported with -std=c2x and -std=gnu2x. Some of these
   1356        features are also supported as extensions when compiling for older
   1357        language versions. In addition to the features listed, some
   1358        features previously supported as extensions and now added to the C
   1359        standard are enabled by default in C2X mode and not diagnosed with
   1360        -std=c2x -Wpedantic.
   1361           + The BOOL_MAX and BOOL_WIDTH macros are provided in <limits.h>.
   1362           + As in C++, function definitions no longer need to give names
   1363             for unused function parameters.
   1364           + The expansions of the true and false macros in <stdbool.h>
   1365             have changed so that they have type bool.
   1366           + The [[nodiscard]] standard attribute is now supported.
   1367           + The __has_c_attribute preprocessor operator is now supported.
   1368           + Macros INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN,
   1369             DEC_INFINITY, DEC_NAN, and corresponding signaling NaN macros
   1370             for _FloatN, _FloatNx and _DecimalN types, are provided in
   1371             <float.h>. There are also corresponding built-in functions
   1372             __builtin_nansdN for decimal signaling NaNs.
   1373           + Macros FLT_IS_IEC_60559, DBL_IS_IEC_60559 and
   1374             LDBL_IS_IEC_60559 are provided in <float.h>.
   1375           + The feature test macro __STDC_WANT_IEC_60559_EXT__ is
   1376             supported by <float.h>.
   1377           + Labels may appear before declarations and at the end of a
   1378             compound statement.
   1379      * New warnings:
   1380           + [39]-Warray-parameter, enabled by -Wall, warns about
   1381             redeclarations of functions with ordinary array arguments
   1382             declared using inconsistent forms. The warning also enables
   1383             the detection of the likely out of bounds accesses in calls to
   1384             such functions with smaller arrays.
   1385           + [40]-Wvla-parameter, enabled by -Wall, warns redeclarations of
   1386             functions with variable length array arguments declared using
   1387             inconsistent forms or with mismatched bounds. The warning also
   1388             enables the detection of the likely out of bounds accesses in
   1389             calls to such functions with smaller arrays.
   1390 
   1391   [41]C++
   1392 
   1393      * The default mode has been changed to -std=gnu++17.
   1394      * Several C++20 features have been implemented:
   1395           + the compiler now supports consteval virtual functions
   1396           + P2082R1, Fixing CTAD for aggregates
   1397           + P0593R6, Pseudo-destructors end object lifetimes
   1398           + P1907R1, Inconsistencies with non-type template parameters
   1399             (complete implementation)
   1400           + P1975R0, Fixing the wording of parenthesized
   1401             aggregate-initialization
   1402           + P1009R2, Array size deduction in new-expressions
   1403           + P1099R5, using enum
   1404           + Modules, Requires -fmodules-ts and some aspects are
   1405             incomplete. Refer to [42]C++ 20 Status
   1406      * The C++ front end has experimental support for some of the upcoming
   1407        C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
   1408        or -std=gnu++2b flags, including
   1409           + P0330R8, Literal Suffix for (signed) size_t.
   1410        For a full list of new features, see [43]the C++ status page.
   1411      * Several C++ Defect Reports have been resolved, e.g.:
   1412           + DR 625, Use of auto as a template-argument
   1413           + DR 1512, Pointer comparison vs qualification conversions
   1414           + DR 1722, Should lambda to function pointer conversion function
   1415             be noexcept?
   1416           + DR 1914, Duplicate standard attributes
   1417           + DR 2032, Default template-arguments of variable templates
   1418           + DR 2289, Uniqueness of decomposition declaration names
   1419           + DR 2237, Can a template-id name a constructor?
   1420           + DR 2303, Partial ordering and recursive variadic inheritance
   1421           + DR 2369, Ordering between constraints and substitution
   1422           + DR 2450, braced-init-list as a template-argument
   1423      * G++ now performs better access checking in templates ([44]PR41437).
   1424      * reinterpret_casts in constexpr evaluation are now checked more
   1425        completely ([45]PR95307).
   1426      * The diagnostic for static_assert has been improved: the compiler
   1427        now shows the expression including its template arguments (if there
   1428        were any), and can point to the failing clause if the condition
   1429        comprised of any logical AND operators ([46]PR97518).
   1430      * New warnings:
   1431           + [47]-Wctad-maybe-unsupported, disabled by default, warns about
   1432             performing class template argument deduction on a type with no
   1433             deduction guides.
   1434           + [48]-Wrange-loop-construct, enabled by -Wall, warns when a
   1435             range-based for-loop is creating unnecessary and expensive
   1436             copies.
   1437           + [49]-Wdeprecated-enum-enum-conversion, enabled by default in
   1438             C++20, warns about deprecated arithmetic conversions on
   1439             operands of enumeration types, as outlined in
   1440             [depr.arith.conv.enum].
   1441           + [50]-Wdeprecated-enum-float-conversion, enabled by default in
   1442             C++20, warns about deprecated arithmetic conversions on
   1443             operands where one is of enumeration type and the other is of
   1444             a floating-point type, as outlined in [depr.arith.conv.enum].
   1445           + [51]-Wmismatched-new-delete, enabled by -Wall, warns about
   1446             calls to C++ operator delete with pointers returned from
   1447             mismatched forms of operator new or from other mismatched
   1448             allocation functions.
   1449           + [52]-Wvexing-parse, enabled by default, warns about the most
   1450             vexing parse rule: the cases when a declaration looks like a
   1451             variable definition, but the C++ language requires it to be
   1452             interpreted as a function declaration.
   1453      * Enhancements to existing warnings:
   1454           + [53]-Wnonnull considers the implicit this argument of every
   1455             C++ nonstatic member function to have been implicitly declared
   1456             with attribute nonnull and triggers warnings for calls where
   1457             the pointer is null.
   1458 
   1459     [54]Runtime Library (libstdc++)
   1460 
   1461      * Improved C++17 support, including:
   1462           + std::from_chars and std::to_chars for floating-point types.
   1463      * Improved experimental C++20 support, including:
   1464           + Calendar additions to <chrono>. Thanks to Cassio Neri for
   1465             optimizations.
   1466           + std::bit_cast
   1467           + std::source_location
   1468           + Atomic wait and notify operations.
   1469           + <barrier>, <latch>, and <semaphore>
   1470           + <syncstream>
   1471           + Efficient access to basic_stringbuf's buffer.
   1472           + Heterogeneous lookup in unordered containers.
   1473      * Experimental C++23 support, including:
   1474           + contains member functions for strings, thanks to Paul Fee.
   1475           + std::to_underlying, std::is_scoped_enum
   1476      * Experimental support for Data-Parallel Types (simd) from the
   1477        Parallelism 2 TS, thanks to Matthias Kretz.
   1478      * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
   1479 
   1480   [55]D
   1481 
   1482      * New features:
   1483           + A new bottom type typeof(*null) has been added to represent
   1484             run-time errors and non-terminating functions. This also
   1485             introduces a new standard alias for the type named noreturn,
   1486             and is implicitly imported into every module.
   1487           + Printf-like and scanf-like functions are now detected by
   1488             prefixing them with pragma(printf) for printf-like functions
   1489             or pragma(scanf) for scanf-like functions.
   1490           + The __traits() expression now supports the extensions
   1491             isDeprecated, isDisabled, isFuture, isModule, isPackage,
   1492             child, isReturnOnStack, isZeroInit, getTargetInfo,
   1493             getLocation, hasPostblit, isCopyable, getVisibility, and
   1494             totype.
   1495           + An expression-based contract syntax has been added to the
   1496             language.
   1497           + Function literals can now return a value by reference with the
   1498             ref keyword.
   1499           + A new syntax is available to declare aliases to function types
   1500             using the alias syntax based on the assignment operator.
   1501           + New types __c_complex_float, __c_complex_double,
   1502             __c_complex_real, and __c_wchar_t have been added for
   1503             interfacing with C and C++ code, and are available from the
   1504             core.stdc.config module.
   1505           + User-defined attributes can now be used to annotate enum
   1506             members, alias declarations, and function parameters.
   1507           + Template alias parameters can now be instantiated with basic
   1508             types such as int or void function().
   1509           + The mixin construct can now be used as types in the form
   1510             mixin(string) var.
   1511           + The mixin construct can now take an argument list, same as
   1512             pragma(msg).
   1513      * New intrinsics:
   1514           + Bitwise rotate intrinsics core.bitop.rol and core.bitop.ror
   1515             have been added.
   1516           + Byte swap intrinsic core.bitop.byteswap for swapping bytes in
   1517             a 2-byte ushort has been added.
   1518           + Math intrinsics available from core.math now have overloads
   1519             for float and double types.
   1520           + Volatile intrinsics core.volatile.volatileLoad and
   1521             core.volatile.volatileStore have been moved from the
   1522             core.bitop module.
   1523      * New attributes:
   1524           + The following GCC attributes are now recognized and available
   1525             from the gcc.attributes module with short-hand aliases for
   1526             convenience:
   1527                o @attribute("alloc_size", arguments) or
   1528                  @alloc_size(arguments).
   1529                o @attribute("always_inline") or @always_inline.
   1530                o @attribute("used") or @used.
   1531                o @attribute("optimize", arguments) or
   1532                  @optimize(arguments).
   1533                o @attribute("cold") or @cold.
   1534                o @attribute("noplt") or @noplt.
   1535                o @attribute("target_clones", arguments) or
   1536                  @target_clones(arguments).
   1537                o @attribute("no_icf") or @no_icf.
   1538                o @attribute("noipa") or @noipa.
   1539                o @attribute("symver", arguments) or @symver(arguments).
   1540           + New aliases have been added to gcc.attributes for
   1541             compatibility with ldc.attributes.
   1542                o The @allocSize(arguments) attribute is the same as
   1543                  @alloc_size(arguments), but uses a 0-based index for
   1544                  function arguments.
   1545                o The @assumeUsed attribute is an alias for
   1546                  @attribute("used").
   1547                o The @fastmath attribute is an alias for
   1548                  @optimize("Ofast").
   1549                o The @naked attribute is an alias for @attribute("naked").
   1550                  This attribute may not be available on all targets.
   1551                o The @restrict attribute has been added to specify that a
   1552                  function parameter is to be restrict-qualified in the C99
   1553                  sense of the term.
   1554                o The @optStrategy(strategy) attribute is an alias for
   1555                  @optimize("O0") when the strategy is "none", otherwise
   1556                  @optimize("Os") for the "optsize" and "minsize"
   1557                  strategies.
   1558                o The @polly attribute is an alias for
   1559                  @optimize("loop-parallelize-all").
   1560                o The @section(name) attribute is an alias for
   1561                  @attribute("section", name).
   1562                o The @target(arguments) attribute is an alias for
   1563                  attribute("target", arguments).
   1564                o The @weak attribute is an alias for @attribute("weak").
   1565      * New language options:
   1566           + -fweak-templates, added to control whether declarations that
   1567             can be defined in multiple objects should be emitted as weak
   1568             symbols. The default is to emit all symbols with extern
   1569             linkage as weak, unless the target lacks support for weak
   1570             symbols.
   1571           + -Wdeprecated, this option is now enabled by default.
   1572           + -Wextra, this option now turns on all warnings that are not
   1573             part of the core D language front-end - -Waddress,
   1574             -Wcast-result, -Wunknown-pragmas.
   1575           + -Wvarargs, added to turn on warnings about questionable usage
   1576             of the va_start intrinsic.
   1577      * Deprecated and removed features:
   1578           + Compiler-recognized attributes are now made available from the
   1579             gcc.attributes module, the former module gcc.attribute has
   1580             been deprecated and will be removed in a future release.
   1581           + The @attribute("alias") attribute has been removed, as it had
   1582             been superseded by pragma(mangle).
   1583           + The @attribute("forceinline") attribute has been removed and
   1584             renamed to @always_inline.
   1585           + __vector types that are not supported in hardware are now
   1586             rejected at compile-time. Previously all vector types were
   1587             accepted by the compiler and emulated when target support was
   1588             absent.
   1589           + The extern(Pascal) linkage attribute has been removed.
   1590           + The deprecation phase for -ftransition=import and
   1591             -ftransition=checkimports is finished. These switches no
   1592             longer have an effect and are now removed. Symbols that are
   1593             not visible in a particular scope will no longer be found by
   1594             the compiler.
   1595           + It is now an error to use private variables selectively
   1596             imported from other modules. Due to a bug, some imported
   1597             private members were visible from other modules, violating the
   1598             specification.
   1599           + The -fweak compiler switch has been removed, as it existed
   1600             only for testing.
   1601 
   1602   [56]Fortran
   1603 
   1604      * Added DEPRECATED to !GCC$'s attributes directive.
   1605 
   1606   [57]Go
   1607 
   1608      * GCC 11 provides a complete implementation of the Go 1.16.3 user
   1609        packages.
   1610 
   1611 [58]libgccjit
   1612 
   1613      * libgccjit was marked as merely "Alpha" quality when [59]originally
   1614        added in GCC 5. Given that we have maintained [60]API and ABI
   1615        compatibility since then and it is in use by various projects, we
   1616        have removed that caveat.
   1617      * libgccjit can now be built for MinGW
   1618      * The libgccjit API gained 10 new entry points:
   1619           + [61]gcc_jit_global_set_initializer
   1620           + 9 entrypoints for [62]directly embedding asm statements into a
   1621             compile, analogous to inline asm in the C front end
   1622 
   1623 [63]New Targets and Target Specific Improvements
   1624 
   1625   [64]AArch64 & arm
   1626 
   1627      * A number of new CPUs are supported through arguments to the -mcpu
   1628        and -mtune options in both the arm and aarch64 back ends (GCC
   1629        identifiers in parentheses):
   1630           + Arm Cortex-A78 (cortex-a78).
   1631           + Arm Cortex-A78AE (cortex-a78ae).
   1632           + Arm Cortex-A78C (cortex-a78c).
   1633           + Arm Cortex-X1 (cortex-x1).
   1634           + Arm Neoverse V1 (neoverse-v1).
   1635           + Arm Neoverse N2 (neoverse-n2).
   1636      * GCC can now auto-vectorize operations performing addition,
   1637        subtraction, multiplication and the accumulate/subtract variants on
   1638        complex numbers, taking advantage of the Advanced SIMD instructions
   1639        in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
   1640        and MVE (AArch32 M-profile) instruction sets.
   1641 
   1642   [65]AArch64
   1643 
   1644      * In addition to the above, the following AArch64-only CPUs are now
   1645        supported:
   1646           + Fujitsu A64FX (a64fx).
   1647           + Arm Cortex-R82 (cortex-r82).
   1648      * The AArch64 Armv8-R architecture is now supported through the
   1649        -march=armv8-r option.
   1650      * Mitigation against the [66]Straight-line Speculation vulnerability
   1651        is supported with the -mharden-sls= option. Please refer to the
   1652        documentation for usage instructions.
   1653      * The availability of Advanced SIMD intrinsics available through the
   1654        arm_neon.h header is improved and GCC 11 supports the full set of
   1655        intrinsics defined by ACLE Q3 2020.
   1656 
   1657   [67]AMD Radeon (GCN)
   1658 
   1659      * Initial support for gfx908 GPUs has been added.
   1660 
   1661   [68]arm
   1662 
   1663      * Initial auto-vectorization is now available when targeting the MVE
   1664        instruction set.
   1665      * GCC can now make use of the Low Overhead Branch instruction in
   1666        Armv8.1-M to optimize loop counters and checks.
   1667      * The -mcpu=cortex-m55 option now supports the extensions +nomve and
   1668        +nomve.fp to control generation of MVE and MVE floating-point
   1669        instructions.
   1670 
   1671   [69]IA-32/x86-64
   1672 
   1673      * New ISA extension support for Intel TSXLDTRK was added to GCC.
   1674        TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
   1675        switch.
   1676      * New ISA extension support for Intel SERIALIZE was added to GCC.
   1677        SERIALIZE intrinsics are available via the -mserialize compiler
   1678        switch.
   1679      * New ISA extension support for Intel HRESET was added to GCC. HRESET
   1680        intrinsics are available via the -mhreset compiler switch.
   1681      * New ISA extension support for Intel UINTR was added to GCC. UINTR
   1682        intrinsics are available via the -muintr compiler switch.
   1683      * New ISA extension support for Intel KEYLOCKER was added to GCC.
   1684        KEYLOCKER intrinsics are available via the -mkeylocker compiler
   1685        switch.
   1686      * New ISA extension support for Intel AMX-TILE, AMX-INT8, AMX-BF16
   1687        was added to GCC. AMX-TILE, AMX-INT8, AMX-BF16 intrinsics are
   1688        available via the -mamx-tile, -mamx-int8, -mamx-bf16 compiler
   1689        switches.
   1690      * New ISA extension support for Intel AVX-VNNI was added to GCC.
   1691        AVX-VNNI intrinsics are available via the -mavxvnni compiler
   1692        switch.
   1693      * GCC now supports the Intel CPU named Sapphire Rapids through
   1694        -march=sapphirerapids. The switch enables the MOVDIRI, MOVDIR64B,
   1695        AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG,
   1696        TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16, and AVX-VNNI ISA
   1697        extensions.
   1698      * GCC now supports the Intel CPU named Alderlake through
   1699        -march=alderlake. The switch enables the CLDEMOTE, PTWRITE,
   1700        WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI, and HRESET ISA extensions.
   1701      * GCC now supports the Intel CPU named Rocketlake through
   1702        -march=rocketlake. Rocket Lake is based on Icelake client and minus
   1703        SGX.
   1704      * GCC now supports AMD CPUs based on the znver3 core via
   1705        -march=znver3.
   1706      * GCC now supports micro-architecture levels defined in the x86-64
   1707        psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
   1708 
   1709   [70]Nios II
   1710 
   1711      * The options -mcustom-insn=N no longer produce compiler warnings if
   1712        the custom instruction is not generated due to missing optimization
   1713        options such as -fno-math-errno, -ffinite-math-only, or
   1714        -funsafe-math-optimizations. These warnings were not consistently
   1715        emitted for all custom instructions.
   1716      * The -mcustom-fpu-cfg=fph2 option has been added to enable the
   1717        custom instructions supported by the Nios II Floating Point
   1718        Hardware 2 Component.
   1719 
   1720   [71]NVPTX
   1721 
   1722      * The -misa default has changed from sm_30 to sm_35.
   1723      * The -m32 compiler switch has been removed.
   1724      * The -msoft-stack-reserve-local format has been fixed. Previously,
   1725        it accepted -msoft-stack-reserve-local<n>. It now accepts
   1726        -msoft-stack-reserve-local=<n>.
   1727 
   1728   [72]S/390, System z, IBM Z Systems
   1729 
   1730      * The behavior when compiling with -fexcess-precision=standard (e.g.,
   1731        implied by -std=c99) on s390(x) targets can now be controlled at
   1732        configure time with the flag --enable-s390-excess-float-precision.
   1733        When enabled, GCC will maintain previous behavior and evaluate
   1734        float expressions in double precision, which aligns with the
   1735        definition of float_t as double. With the flag disabled, GCC will
   1736        always evaluate float expressions in single precision. In native
   1737        builds and cross compiles that have target libc headers, GCC will
   1738        by default match the definition of float_t in the installed glibc.
   1739 
   1740   [73]RISC-V
   1741 
   1742      * Support address sanitizer for RISC-V.
   1743      * Support big-endian for RISC-V, thanks to Marcus Comstedt.
   1744      * Implement new style of architecture extension test macros: each
   1745        architecture extension has a corresponding feature test macro,
   1746        which can be used to test its existence and version information.
   1747      * Legacy architecture extension test macros like __riscv_atomic are
   1748        deprecated, but will still be supported for at least 2 release
   1749        cycles.
   1750      * Support IFUNC for riscv*-*-linux*.
   1751      * Add new option -misa-spec=* to control ISA spec version. This
   1752        controls the default version of each extensions. It defaults to
   1753        2.2.
   1754      * Introduce the --with-multilib-generator configure time option. This
   1755        allows for flexible config multi-lib settings. Its syntax is the
   1756        same as RISC-V's multilib-generator.
   1757      * Extend the sytax for multilib-generator, support expansion operator
   1758        * to reduce the complexity of complicated multi-lib re-use rules.
   1759      * Support -mcpu=* option aligned with RISC-V clang/LLVM. It sets the
   1760        pipeline model and architecture extensions, like -mtune=* plus
   1761        -march=*.
   1762      * Support for TLS stack protector canary access, thanks to Cooper Qu.
   1763      * Support __builtin_thread_pointer for RISC-V.
   1764      * Introduce shorten_memrefs optimization, which reduces the code size
   1765        for memory access, thanks to Craig Blackmore.
   1766 
   1767 [74]Operating Systems
   1768 
   1769   [75]AIX
   1770 
   1771      * GCC for AIX can be built as a 64-bit application and the runtime is
   1772        built as FAT libraries containing both 32-bit and 64-bit objects.
   1773      * Support AIX Vector Extended ABI with -mabi=vec-extabi.
   1774      * Thread-Local uninitiated data placed in local common section.
   1775      * Use thread-safe access in ctype.
   1776      * Link with libc128.a when long-double-128 enabled.
   1777 
   1778 [76]Improvements to Static Analyzer
   1779 
   1780      * The implementation of how program state is tracked within
   1781        [77]-fanalyzer has been completely rewritten for GCC 11, fixing
   1782        numerous bugs, and allowing for the analyzer to scale to larger C
   1783        source files.
   1784      * The analysis of allocations and deallocations has been generalized
   1785        beyond malloc and free.
   1786           + As preliminary work towards eventually supporting C++, the
   1787             malloc/free checking will also check new/delete and
   1788             new[]/delete[]. However, C++ is not yet properly supported by
   1789             [78]-fanalyzer (for example, exception-handling is
   1790             unimplemented).
   1791           + As noted above, the existing [79]malloc attribute has been
   1792             extended so that it can be used to identify
   1793             allocator/deallocator API pairs. The analyzer will use these
   1794             attributes when checking for leaks, double-frees,
   1795             use-after-frees, and similar issues.
   1796           + A new [80]-Wanalyzer-mismatching-deallocation warning has been
   1797             added, covering such mismatches as using scalar delete rather
   1798             vector delete[].
   1799      * The analyzer has gained warnings
   1800        [81]-Wanalyzer-shift-count-negative,
   1801        [82]-Wanalyzer-shift-count-overflow, [83]-Wanalyzer-write-to-const,
   1802        and [84]-Wanalyzer-write-to-string-literal, all enabled by default
   1803        when [85]-fanalyzer is enabled.
   1804      * The analyzer can now be extended by GCC plugins, allowing for
   1805        domain-specific path-sensitive warnings. An example of using a
   1806        [86]GCC plugin to check for misuses of CPython's global interpreter
   1807        lock can be seen in the test suite
   1808      * The analyzer has gained new debugging options
   1809        [87]-fdump-analyzer-json and [88]-fno-analyzer-feasibility.
   1810 
   1811 Other significant improvements
   1812 
   1813      * GCC has gained a new environment variable
   1814        [89]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
   1815        request machine-readable fix-it hints without needing to adjust
   1816        build flags.
   1817 
   1818 [90]GCC 11.1
   1819 
   1820    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   1821    system that are known to be fixed in the 11.1 release. This list might
   1822    not be complete (that is, it is possible that some PRs that have been
   1823    fixed are not listed here).
   1824 
   1825 [92]GCC 11.2
   1826 
   1827    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   1828    system that are known to be fixed in the 11.2 release. This list might
   1829    not be complete (that is, it is possible that some PRs that have been
   1830    fixed are not listed here).
   1831 
   1832 [94]GCC 11.3
   1833 
   1834    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   1835    system that are known to be fixed in the 11.3 release. This list might
   1836    not be complete (that is, it is possible that some PRs that have been
   1837    fixed are not listed here).
   1838 
   1839 [96]GCC 11.4
   1840 
   1841    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   1842    system that are known to be fixed in the 11.4 release. This list might
   1843    not be complete (that is, it is possible that some PRs that have been
   1844    fixed are not listed here).
   1845 
   1846   Target Specific Changes
   1847 
   1848     x86-64
   1849 
   1850      * The x86-64 ABI of passing and returning structure with a 64-bit
   1851        single precision vector changed in GCC 11.1 when 3DNOW is disabled.
   1852        Disabling 3DNOW no longer changes how they are passed nor returned.
   1853        This ABI change is now diagnosed with -Wpsabi.
   1854      * Mitigation against straight line speculation (SLS) for function
   1855        return and indirect jump is supported via
   1856        -mharden-sls=[none|all|return|indirect-jmp].
   1857      * Add CS prefix to call and jmp to indirect thunk with branch target
   1858        in r8-r15 registers via -mindirect-branch-cs-prefix.
   1859 
   1860 [98]GCC 11.5
   1861 
   1862    This is the [99]list of problem reports (PRs) from GCC's bug tracking
   1863    system that are known to be fixed in the 11.5 release. This list might
   1864    not be complete (that is, it is possible that some PRs that have been
   1865    fixed are not listed here).
   1866 
   1867   Caveats
   1868 
   1869     aarch64
   1870 
   1871      * Due to a bug introduced a few weeks before the 11.5.0 release if
   1872        the compiler is configured without explicit --with-arch=,
   1873        --with=cpu= and/or --with-tune= configure options the compiler
   1874        without explicit -march= etc. options might act as if asked for
   1875        cortex-a34. This can be fixed by applying manually the
   1876        [100]r12-8060 commit patch on top of GCC 11.5.0. See [101]PR116029
   1877        for more details. GCC 11.4.0 or earlier releases are not affected.
   1878 
   1879 
   1880     For questions related to the use of GCC, please consult these web
   1881     pages and the [102]GCC manuals. If that fails, the
   1882     [103]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1883     web pages and the development of GCC are welcome on our developer
   1884     list at [104]gcc (a] gcc.gnu.org. All of [105]our lists have public
   1885     archives.
   1886 
   1887    Copyright (C) [106]Free Software Foundation, Inc. Verbatim copying and
   1888    distribution of this entire article is permitted in any medium,
   1889    provided this notice is preserved.
   1890 
   1891    These pages are [107]maintained by the GCC team. Last modified
   1892    2025-01-31.
   1893 
   1894 References
   1895 
   1896    1. https://gcc.gnu.org/gcc-11/porting_to.html
   1897    2. https://gcc.gnu.org/onlinedocs/index.html#current
   1898    3. https://wg21.link/p0522r0
   1899    4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
   1900    5. https://gcc.gnu.org/gcc-11/changes.html#general
   1901    6. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
   1902    7. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
   1903    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
   1904    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
   1905   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1906   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
   1907   12. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   1908   13. https://github.com/google/sanitizers/wiki/AddressSanitizer
   1909   14. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   1910   15. https://dwarfstd.org/doc/DWARF5.pdf
   1911   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
   1912   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
   1913   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
   1914   19. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
   1915   20. https://gcc.gnu.org/gcc-11/changes.html#languages
   1916   21. https://www.openmp.org/specifications/
   1917   22. https://www.openacc.org/
   1918   23. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-11
   1919   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
   1920   25. https://gcc.gnu.org/gcc-11/changes.html#c-family
   1921   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
   1922   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   1923   28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   1924   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   1925   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   1926   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   1927   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
   1928   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
   1929   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
   1930   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   1931   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   1932   37. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
   1933   38. https://gcc.gnu.org/gcc-11/changes.html#c
   1934   39. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
   1935   40. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
   1936   41. https://gcc.gnu.org/gcc-11/changes.html#cxx
   1937   42. https://gcc.gnu.org/projects/cxx-status.html#cxx20
   1938   43. https://gcc.gnu.org/projects/cxx-status.html#cxx23
   1939   44. https://gcc.gnu.org/PR41437
   1940   45. https://gcc.gnu.org/PR95307
   1941   46. https://gcc.gnu.org/PR97518
   1942   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
   1943   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
   1944   49. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
   1945   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
   1946   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   1947   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
   1948   53. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
   1949   54. https://gcc.gnu.org/gcc-11/changes.html#libstdcxx
   1950   55. https://gcc.gnu.org/gcc-11/changes.html#d
   1951   56. https://gcc.gnu.org/gcc-11/changes.html#fortran
   1952   57. https://gcc.gnu.org/gcc-11/changes.html#go
   1953   58. https://gcc.gnu.org/gcc-11/changes.html#jit
   1954   59. https://gcc.gnu.org/gcc-5/changes.html#jit
   1955   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
   1956   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
   1957   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
   1958   63. https://gcc.gnu.org/gcc-11/changes.html#targets
   1959   64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
   1960   65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
   1961   66. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
   1962   67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
   1963   68. https://gcc.gnu.org/gcc-11/changes.html#arm
   1964   69. https://gcc.gnu.org/gcc-11/changes.html#x86
   1965   70. https://gcc.gnu.org/gcc-11/changes.html#nios2
   1966   71. https://gcc.gnu.org/gcc-11/changes.html#nvptx
   1967   72. https://gcc.gnu.org/gcc-11/changes.html#s390
   1968   73. https://gcc.gnu.org/gcc-11/changes.html#riscv
   1969   74. https://gcc.gnu.org/gcc-11/changes.html#os
   1970   75. https://gcc.gnu.org/gcc-11/changes.html#aix
   1971   76. https://gcc.gnu.org/gcc-11/changes.html#analyzer
   1972   77. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1973   78. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1974   79. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   1975   80. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
   1976   81. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
   1977   82. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
   1978   83. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   1979   84. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   1980   85. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1981   86. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
   1982   87. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
   1983   88. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
   1984   89. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
   1985   90. https://gcc.gnu.org/gcc-11/changes.html#11.1
   1986   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
   1987   92. https://gcc.gnu.org/gcc-11/changes.html#11.2
   1988   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
   1989   94. https://gcc.gnu.org/gcc-11/changes.html#11.3
   1990   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
   1991   96. https://gcc.gnu.org/gcc-11/changes.html#11.4
   1992   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
   1993   98. https://gcc.gnu.org/gcc-11/changes.html#11.5
   1994   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.5
   1995  100. https://gcc.gnu.org/r12-8060
   1996  101. https://gcc.gnu.org/PR116029
   1997  102. https://gcc.gnu.org/onlinedocs/
   1998  103. mailto:gcc-help (a] gcc.gnu.org
   1999  104. mailto:gcc (a] gcc.gnu.org
   2000  105. https://gcc.gnu.org/lists.html
   2001  106. https://www.fsf.org/
   2002  107. https://gcc.gnu.org/about.html
   2003 ======================================================================
   2004 http://gcc.gnu.org/gcc-10/index.html
   2005 
   2006                              GCC 10 Release Series
   2007 
   2008    (This release series is no longer supported.)
   2009 
   2010    July, 7, 2023
   2011 
   2012    The [1]GNU project and the GCC developers are pleased to announce the
   2013    release of GCC 10.5.
   2014 
   2015    This release is a bug-fix release, containing fixes for regressions in
   2016    GCC 10.4 relative to previous releases of GCC.
   2017 
   2018 Release History
   2019 
   2020    GCC 10.5
   2021           July 7, 2023 ([2]changes, [3]documentation)
   2022 
   2023    GCC 10.4
   2024           June 28, 2022 ([4]changes, [5]documentation)
   2025 
   2026    GCC 10.3
   2027           April 8, 2021 ([6]changes, [7]documentation)
   2028 
   2029    GCC 10.2
   2030           July 23, 2020 ([8]changes, [9]documentation)
   2031 
   2032    GCC 10.1
   2033           May 7, 2020 ([10]changes, [11]documentation)
   2034 
   2035 References and Acknowledgements
   2036 
   2037    GCC used to stand for the GNU C Compiler, but since the compiler
   2038    supports several other languages aside from C, it now stands for the
   2039    GNU Compiler Collection.
   2040 
   2041    The GCC developers would like to thank the numerous people that have
   2042    contributed new features, improvements, bug fixes, and other changes as
   2043    well as test results to GCC. This [12]amazing group of volunteers is
   2044    what makes GCC successful.
   2045 
   2046    For additional information about GCC please refer to the [13]GCC
   2047    project web site or contact the [14]GCC development mailing list.
   2048 
   2049    To obtain GCC please use [15]our mirror sites or [16]our version
   2050    control system.
   2051 
   2052 
   2053     For questions related to the use of GCC, please consult these web
   2054     pages and the [17]GCC manuals. If that fails, the
   2055     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2056     web pages and the development of GCC are welcome on our developer
   2057     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   2058     archives.
   2059 
   2060    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   2061    distribution of this entire article is permitted in any medium,
   2062    provided this notice is preserved.
   2063 
   2064    These pages are [22]maintained by the GCC team. Last modified
   2065    2024-05-30.
   2066 
   2067 References
   2068 
   2069    1. http://www.gnu.org/
   2070    2. https://gcc.gnu.org/gcc-10/changes.html
   2071    3. https://gcc.gnu.org/onlinedocs/10.5.0/
   2072    4. https://gcc.gnu.org/gcc-10/changes.html
   2073    5. https://gcc.gnu.org/onlinedocs/10.4.0/
   2074    6. https://gcc.gnu.org/gcc-10/changes.html
   2075    7. https://gcc.gnu.org/onlinedocs/10.3.0/
   2076    8. https://gcc.gnu.org/gcc-10/changes.html
   2077    9. https://gcc.gnu.org/onlinedocs/10.2.0/
   2078   10. https://gcc.gnu.org/gcc-10/changes.html
   2079   11. https://gcc.gnu.org/onlinedocs/10.1.0/
   2080   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
   2081   13. https://gcc.gnu.org/index.html
   2082   14. mailto:gcc (a] gcc.gnu.org
   2083   15. https://gcc.gnu.org/mirrors.html
   2084   16. https://gcc.gnu.org/git.html
   2085   17. https://gcc.gnu.org/onlinedocs/
   2086   18. mailto:gcc-help (a] gcc.gnu.org
   2087   19. mailto:gcc (a] gcc.gnu.org
   2088   20. https://gcc.gnu.org/lists.html
   2089   21. https://www.fsf.org/
   2090   22. https://gcc.gnu.org/about.html
   2091 ======================================================================
   2092 http://gcc.gnu.org/gcc-10/changes.html
   2093 
   2094                              GCC 10 Release Series
   2095                         Changes, New Features, and Fixes
   2096 
   2097    This page is a "brief" summary of some of the huge number of
   2098    improvements in GCC 10. You may also want to check out our [1]Porting
   2099    to GCC 10 page and the [2]full GCC documentation.
   2100 
   2101 Caveats
   2102 
   2103      * An ABI incompatibility between C++14 and C++17 has been fixed. On
   2104        some targets a class with a zero-sized subobject would be passed
   2105        incorrectly when compiled as C++17 or C++20. See the [3]C++ notes
   2106        below for more details.
   2107      * The deprecated Profile Mode and array_allocator extensions have
   2108        been removed from libstdc++.
   2109      * The non-standard std::__is_nullptr_t type trait is deprecated and
   2110        will be removed from libstdc++ in a future release. The standard
   2111        trait std::is_null_pointer should be instead.
   2112      * The minimum version of the [4]MPFR library required for building
   2113        GCC has been increased to version 3.1.0 (released 2011-10-03).
   2114      * The automatic template instantiation at link time (-frepo) has been
   2115        removed.
   2116      * The --param allow-store-data-races internal parameter has been
   2117        removed in favor of a new official option -fallow-store-data-races.
   2118        While default behavior is unchanged and the new option allows to
   2119        correctly maintain a per compilation unit setting across link-time
   2120        optimization, alteration of the default via --param
   2121        allow-store-data-races will now be diagnosed and build systems have
   2122        to be adjusted accordingly.
   2123      * Offloading to Heterogeneous System Architecture Intermediate
   2124        Language (HSAIL) has been deprecated and will likely be removed in
   2125        a future release.
   2126      * The type of the std::iterator base class of
   2127        std::istreambuf_iterator was changed in C++98 mode to be consistent
   2128        with C++11 and later standards. See the [5]libstdc++ notes below
   2129        for more details.
   2130      * GCC 10.5 does not bootstrap with a C++98 compiler; if you need to
   2131        start from C++98, you should build 10.4 or 9.5 instead.
   2132 
   2133 [6]General Improvements
   2134 
   2135      * New built-in functions:
   2136           + The [7]__has_builtin built-in preprocessor operator can be
   2137             used to query support for built-in functions provided by GCC
   2138             and other compilers that support it.
   2139           + __builtin_roundeven for the corresponding function from
   2140             ISO/IEC TS 18661.
   2141      * New command-line options:
   2142           + [8]-fallocation-dce removes unneeded pairs of new and delete
   2143             operators.
   2144           + [9]-fprofile-partial-training can now be used to inform the
   2145             compiler that code paths not covered by the training run
   2146             should not be optimized for size.
   2147           + [10]-fprofile-reproducible controls level of reproducibility
   2148             of profile gathered by [11]-fprofile-generate. This makes it
   2149             possible to rebuild program with same outcome which is useful,
   2150             for example, for distribution packages.
   2151           + [12]-fprofile-prefix-path can be used in combination with
   2152             -fprofile-generate=profile_dir and -fprofile-use=profile_dir
   2153             to inform GCC where the base directory of build source tree is
   2154             in case it differs between instrumentation and optimized
   2155             builds.
   2156           + [13]-fanalyzer enables a new static analysis pass and
   2157             associated warnings. This pass performs a time-consuming
   2158             exploration of paths through the code in the hope of detecting
   2159             various common errors, such as double-free bugs. This option
   2160             should be regarded as experimental in this release. In
   2161             particular, analysis of non-C code is unlikely to work.
   2162      * Inter-procedural optimization improvements:
   2163           + The inter-procedural scalar replacement of aggregates
   2164             (IPA-SRA) pass was re-implemented to work at link-time and can
   2165             now also remove computing and returning unused return values.
   2166           + [14]-finline-functions is now enabled at -O2 and was retuned
   2167             for better code size versus runtime performance trade-offs.
   2168             Inliner heuristics was also significantly sped up to avoid
   2169             negative impact to -flto -O2 compile times.
   2170           + Inliner heuristics and function cloning can now use
   2171             value-range information to predict effectivity of individual
   2172             transformations.
   2173           + During link-time optimization the C++ One Definition Rule is
   2174             used to increase precision of type based alias analysis.
   2175      * Link-time optimization improvements:
   2176           + A new binary [15]lto-dump has been added. It dumps various
   2177             information about LTO bytecode object files.
   2178           + The parallel phase of the LTO can automatically detect a
   2179             running make's jobserver or fall back to number of available
   2180             cores.
   2181           + The LTO bytecode can be compressed with the [16]zstd
   2182             algorithm. The configure script automatically detects zstd
   2183             support.
   2184           + Most --param values can now be specified at translation unit
   2185             granularity. This includes all parameters controlling the
   2186             inliner and other inter-procedural optimizations. Unlike
   2187             earlier releases, GCC 10 will ignore parameters controlling
   2188             optimizations specified at link-time and apply parameters
   2189             specified at compile-time in the same manner as done for
   2190             optimization flags.
   2191      * Profile driven optimization improvements:
   2192           + Profile maintenance during compilation and hot/cold code
   2193             partitioning have been improved.
   2194           + Using [17]-fprofile-values, an instrumented binary can track
   2195             multiple values (up to 4) for e.g. indirect calls and provide
   2196             more precise profile information.
   2197 
   2198 [18]New Languages and Language-Specific Improvements
   2199 
   2200      * Version 2.6 of the [19]OpenACC specification is now supported by
   2201        the C, C++ and Fortran compilers. See the [20]implementation status
   2202        section on the OpenACC wiki page and the [21]run-time library
   2203        documentation for further information.
   2204      * GCC 10 adds a number of newly implemented [22]OpenMP 5.0 features
   2205        such as conditional lastprivate clause, scan and loop directives,
   2206        order(concurrent) and use_device_addr clauses support, if clause on
   2207        simd construct, and partial support for the declare variant
   2208        directive, getting closer to full support of the OpenMP 5.0
   2209        standard.
   2210      * OpenMP and OpenACC now support [23]offloading to AMD Radeon (GCN)
   2211        GPUs; supported are the third-generation Fiji (fiji) and the
   2212        fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
   2213 
   2214   [24]C family
   2215 
   2216      * New attributes:
   2217           + The access function and type attribute has been added to
   2218             describe how a function accesses objects passed to it by
   2219             pointer or reference, and to associate such arguments with
   2220             integer arguments denoting the objects' sizes. The attribute
   2221             is used to enable the detection of invalid accesses by
   2222             user-defined functions, such as those diagnosed by
   2223             -Wstringop-overflow.
   2224           + The symver attribute can be used to bind symbols to specific
   2225             version nodes on ELF platforms. This is preferred to using
   2226             inline assembly with GNU as symver directive because the
   2227             latter is not compatible with link-time optimizations.
   2228      * New warnings:
   2229           + [25]-Wstring-compare, enabled by -Wextra, warns about equality
   2230             and inequality expressions between zero and the result of a
   2231             call to either strcmp and strncmp that evaluate to a constant
   2232             as a result of the length of one argument being greater than
   2233             the size of the array pointed to by the other.
   2234           + [26]-Wzero-length-bounds, enabled by -Warray-bounds, warns
   2235             about accesses to elements of zero-length arrays that might
   2236             overlap other members of the same object.
   2237      * Enhancements to existing warnings:
   2238           + [27]-Warray-bounds detects more out-of-bounds accesses to
   2239             member arrays as well as accesses to elements of zero-length
   2240             arrays.
   2241           + [28]-Wformat-overflow makes full use of string length
   2242             information computed by the strlen optimization pass.
   2243           + [29]-Wrestrict detects overlapping accesses to dynamically
   2244             allocated objects.
   2245           + [30]-Wreturn-local-addr diagnoses more instances of return
   2246             statements returning addresses of automatic variables.
   2247           + [31]-Wstringop-overflow detects more out-of-bounds stores to
   2248             member arrays including zero-length arrays, dynamically
   2249             allocated objects and variable length arrays, as well as more
   2250             instances of reads of unterminated character arrays by string
   2251             built-in functions. The warning also detects out-of-bounds
   2252             accesses by calls to user-defined functions declared with the
   2253             new attribute access.
   2254           + [32]-Warith-conversion re-enables warnings from -Wconversion,
   2255             -Wfloat-conversion, and -Wsign-conversion that are now off by
   2256             default for an expression where the result of an arithmetic
   2257             operation will not fit in the target type due to promotion,
   2258             but the operands of the expression do fit in the target type.
   2259      * Extended characters in identifiers may now be specified directly in
   2260        the input encoding (UTF-8, by default), in addition to the UCN
   2261        syntax (\uNNNN or \UNNNNNNNN) that is already supported:
   2262 
   2263 static const int p = 3;
   2264 int get_nave_pi() {
   2265   return p;
   2266 }
   2267 
   2268   [33]C
   2269 
   2270      * Several new features from the upcoming C2X revision of the ISO C
   2271        standard are supported with -std=c2x and -std=gnu2x. Some of these
   2272        features are also supported as extensions when compiling for older
   2273        language versions. In addition to the features listed, some
   2274        features previously supported as extensions and now added to the C
   2275        standard are enabled by default in C2X mode and not diagnosed with
   2276        -std=c2x -Wpedantic.
   2277           + The [[]] attribute syntax is supported, as in C++. Existing
   2278             attributes can be used with this syntax in forms such as
   2279             [[gnu::const]]. The standard attributes [[deprecated]],
   2280             [[fallthrough]] and [[maybe_unused]] are supported.
   2281           + UTF-8 character constants using the u8'' syntax are supported.
   2282           + <float.h> defines macros FLT_NORM_MAX, DBL_NORM_MAX and
   2283             LDBL_NORM_MAX.
   2284           + When decimal floating-point arithmetic is supported, <float.h>
   2285             defines macros DEC32_TRUE_MIN, DEC64_TRUE_MIN and
   2286             DEC128_TRUE_MIN, in addition to the macros that were
   2287             previously only defined if __STDC_WANT_DEC_FP__ was defined
   2288             before including <float.h>.
   2289           + In C2X mode, empty parentheses in a function definition give
   2290             that function a type with a prototype for subsequent calls;
   2291             other old-style function definitions are diagnosed by default
   2292             in C2X mode.
   2293           + The strftime format checking supports the %OB and %Ob formats.
   2294           + In C2X mode, -fno-fp-int-builtin-inexact is enabled by
   2295             default.
   2296      * GCC now defaults to -fno-common. As a result, global variable
   2297        accesses are more efficient on various targets. In C, global
   2298        variables with multiple tentative definitions now result in linker
   2299        errors. With -fcommon such definitions are silently merged during
   2300        linking.
   2301 
   2302   [34]C++
   2303 
   2304      * Several C++20 features have been implemented:
   2305           + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
   2306             P0848R3, P1616R1, P1452R2
   2307           + P1668R1, Permitting Unevaluated inline-assembly in constexpr
   2308             Functions
   2309           + P1161R3, Deprecate a[b,c]
   2310           + P0848R3, Conditionally Trivial Special Member Functions
   2311           + P1091R3, Extending structured bindings
   2312           + P1143R2, Adding the constinit keyword
   2313           + P1152R4, Deprecating volatile
   2314           + P0388R4, Permit conversions to arrays of unknown bound
   2315           + P0784R7, constexpr new
   2316           + P1301R4, [[nodiscard("with reason")]]
   2317           + P1814R0, class template argument deduction for alias templates
   2318           + P1816R0, class template argument deduction for aggregates
   2319           + P0960R3, Parenthesized initialization of aggregates
   2320           + P1331R2, Allow trivial default initialization in constexpr
   2321             contexts
   2322           + P1327R1, Allowing dynamic_cast and polymorphic typeid in
   2323             constexpr contexts
   2324           + P0912R5, Coroutines (requires -fcoroutines)
   2325      * Several C++ Defect Reports have been resolved, e.g.:
   2326           + DR 1560, lvalue-to-rvalue conversion in ?:
   2327           + DR 1813, __is_standard_layout for a class with repeated bases
   2328           + DR 2094, volatile scalars are trivially copyable,
   2329           + DR 2096, constraints on literal unions
   2330           + DR 2413, typename in conversion-function-ids
   2331           + DR 2352, Similar types and reference binding
   2332           + DR 1601, Promotion of enumeration with fixed underlying type
   2333           + DR 330, Qualification conversions and pointers to arrays of
   2334             pointers
   2335           + DR 1307, Overload resolution based on size of array
   2336             initializer-list
   2337           + DR 1710, Missing template keyword in class-or-decltype
   2338      * New warnings:
   2339           + [35]-Wmismatched-tags, disabled by default, warns about
   2340             declarations of structs, classes, and class templates and
   2341             their specializations with a class-key that does not match
   2342             either the definition or the first declaration if no
   2343             definition is provided. The option is provided to ease
   2344             portability to Windows-based compilers.
   2345           + [36]-Wredundant-tags, disabled by default, warns about
   2346             redundant class-key and enum-key in contexts where the key can
   2347             be eliminated without causing an syntactic ambiguity.
   2348      * G++ can now detect modifying constant objects in constexpr
   2349        evaluation (which is undefined behavior).
   2350      * G++ no longer emits bogus -Wsign-conversion warnings with explicit
   2351        casts.
   2352      * Narrowing is now detected in more contexts (e.g., case values).
   2353      * Memory consumption of the compiler has been reduced in constexpr
   2354        evaluation.
   2355      * The noexcept-specifier is now properly treated as a complete-class
   2356        context as per [class.mem].
   2357      * The attribute deprecated can now be used on namespaces too.
   2358      * The ABI of passing and returning certain C++ classes by value
   2359        changed on several targets in GCC 10, including [37]AArch64,
   2360        [38]ARM, [39]PowerPC ELFv2, [40]S/390 and [41]Itanium. These
   2361        changes affect classes with a zero-sized subobject (an empty base
   2362        class, or data member with the [[no_unique_address]] attribute)
   2363        where all other non-static data members have the same type (this is
   2364        called a "homogeneous aggregate" in some ABI specifications, or if
   2365        there is only one such member, a "single element"). In -std=c++17
   2366        and -std=c++20 modes, classes with an empty base class were not
   2367        considered to have a single element or to be a homogeneous
   2368        aggregate, and so could be passed differently (in the wrong
   2369        registers or at the wrong stack address). This could make code
   2370        compiled with -std=c++17 and -std=c++14 ABI incompatible. This has
   2371        been corrected and the empty bases are ignored in those ABI
   2372        decisions, so functions compiled with -std=c++14 and -std=c++17 are
   2373        now ABI compatible again. Example: struct empty {}; struct S :
   2374        empty { float f; }; void f(S);. Similarly, in classes containing
   2375        non-static data members with empty class types using the C++20
   2376        [[no_unique_address]] attribute, those members weren't ignored in
   2377        the ABI argument passing decisions as they should be. Both of these
   2378        ABI changes are now diagnosed with -Wpsabi.
   2379 
   2380     [42]Runtime Library (libstdc++)
   2381 
   2382      * Improved experimental C++2a support, including:
   2383           + Library concepts in <concepts> and <iterator>.
   2384           + Constrained algorithms in <ranges>, <algorithm>, and <memory>
   2385             (thanks to Patrick Palka).
   2386           + New algorithms shift_left and shift_right (thanks to Patrick
   2387             Palka).
   2388           + std::span (thanks to JeanHeyd Meneide).
   2389           + Three-way comparisons in <compare> and throughout the library.
   2390           + Constexpr support in <algorithm> and elsewhere (thanks to
   2391             Edward Smith-Rowland).
   2392           + <stop_token> and std::jthread (thanks to Thomas Rodgers).
   2393           + std::atomic_ref and std::atomic<floating point>.
   2394           + Integer comparison functions (cmp_equal, cmp_less etc.).
   2395           + std::ssize, std::to_array.
   2396           + std::construct_at, std::destroy, constexpr std::allocator.
   2397           + Mathematical constants in <numbers>.
   2398      * Support for RDSEED in std::random_device.
   2399      * Reduced header dependencies, leading to faster compilation for some
   2400        code.
   2401      * The std::iterator base class of std::istreambuf_iterator was
   2402        changed in C++98 mode to be consistent with C++11 and later
   2403        standards. This is expected to have no noticeable effect except in
   2404        the unlikely case of a class which has potentially overlapping
   2405        subobjects of type std::istreambuf_iterator<C> and another iterator
   2406        type with a std::iterator<input_iterator_tag, C, ...> base class.
   2407        The layout of such a type might change when compiled as C++98.
   2408        [43]Bug 92285 has more details and concrete examples.
   2409 
   2410   [44]D
   2411 
   2412      * Support for static foreach has been implemented.
   2413      * Aliases can now be created directly from any __traits that return
   2414        symbols or tuples. Previously, an AliasSeq was necessary in order
   2415        to alias their return.
   2416      * It is now possible to detect the language ABI specified for a
   2417        struct, class, or interface using __traits(getLinkage, ...).
   2418      * Support for core.math.toPrec intrinsics has been added. These
   2419        intrinsics guarantee the rounding to specific floating-point
   2420        precisions at specified points in the code.
   2421      * Support for pragma(inline) has been implemented. Previously the
   2422        pragma was recognized, but had no effect on the compilation.
   2423      * Optional parentheses in asm operands are deprecated and will be
   2424        removed in a future release.
   2425      * All content imported files are now included in the make dependency
   2426        list when compiling with -M.
   2427      * Compiler recognized attributes provided by the gcc.attribute module
   2428        will now take effect when applied to function prototypes as well as
   2429        when applied to full function declarations.
   2430      * Added a --enable-libphobos-checking configure option to control
   2431        whether run-time checks are compiled into the D runtime library.
   2432      * Added a --with-libphobos-druntime-only configure option to indicate
   2433        whether to build only the core D runtime library, or both the core
   2434        and standard libraries into libphobos.
   2435 
   2436   [45]Fortran
   2437 
   2438      * use_device_addr of version 5.0 of the [46]OpenMP specification is
   2439        now supported. Note that otherwise OpenMP 4.5 is partially
   2440        supported in the Fortran compiler; the largest missing item is
   2441        structure element mapping.
   2442      * The default buffer size for I/O using unformatted files has been
   2443        increased to 1048576. The buffer size for can now be set at runtime
   2444        via the environment variables GFORTRAN_FORMATTED_BUFFER_SIZE and
   2445        GFORTRAN_UNFORMATTED_BUFFER_SIZE for formatted and unformatted
   2446        files, respectively.
   2447      * Mismatches between actual and dummy argument lists in a single file
   2448        are now rejected with an error. Use the new option
   2449        -fallow-argument-mismatch to turn these errors into warnings; this
   2450        option is implied with -std=legacy. -Wargument-mismatch has been
   2451        removed.
   2452      * The handling of a BOZ literal constant has been reworked to provide
   2453        better conformance to the Fortran 2008 and 2018 standards. In these
   2454        Fortran standards, a BOZ literal constant is a typeless and
   2455        kindless entity. As a part of the rework, documented and
   2456        undocumented extensions to the Fortran standard now emit errors
   2457        during compilation. Some of these extensions are permitted with the
   2458        -fallow-invalid-boz option, which degrades the error to a warning
   2459        and the code is compiled as with older gfortran.
   2460      * At any optimization level except-Os, gfortran now uses inline
   2461        packing for arguments instead of calling a library routine. If the
   2462        source contains a large number of arguments that need to be
   2463        repacked, code size or time for compilation can become excessive.
   2464        If that is the case, -fno-inline-arg-packing can be used to disable
   2465        inline argument packing.
   2466      * Legacy extensions:
   2467           + For formatted input/output, if the explicit widths after the
   2468             data-edit descriptors I, F and G have been omitted, default
   2469             widths are used.
   2470           + A blank format item at the end of a format specification, i.e.
   2471             nothing following the final comma, is allowed. Use the option
   2472             -fdec-blank-format-item; this option is implied with -fdec.
   2473           + The existing support for AUTOMATIC and STATIC attributes has
   2474             been extended to allow variables with the AUTOMATIC attribute
   2475             to be used in EQUIVALENCE statements. Use -fdec-static; this
   2476             option is implied by -fdec.
   2477           + Allow character literals in assignments and DATA statements
   2478             for numeric (INTEGER, REAL, or COMPLEX) or LOGICAL variables.
   2479             Use the option -fdec-char-conversions; this option is implied
   2480             with -fdec.
   2481           + DEC comparisons, i.e. allow Hollerith constants to be used in
   2482             comparisons with INTEGER, REAL, COMPLEX and CHARACTER
   2483             expressions. Use the option -fdec.
   2484      * Character type names in errors and warnings now include len in
   2485        addition to kind; * is used for assumed length. The kind is omitted
   2486        if it is the default kind. Examples: CHARACTER(12), CHARACTER(6,4).
   2487      * CO_BROADCAST now supports derived type variables including objects
   2488        with allocatable components. In this case, the optional arguments
   2489        STAT= and ERRMSG= are currently ignored.
   2490      * The handling of module and submodule names has been reworked to
   2491        allow the full 63-character length mandated by the standard.
   2492        Previously symbol names were truncated if the combined length of
   2493        module, submodule, and function name exceeded 126 characters. This
   2494        change therefore breaks the ABI, but only for cases where this 126
   2495        character limit was exceeded.
   2496 
   2497   [47]Go
   2498 
   2499      * GCC 10 provides a complete implementation of the Go 1.14.6 user
   2500        packages.
   2501 
   2502 [48]libgccjit
   2503 
   2504      * The libgccjit API gained four new entry points:
   2505           + [49]gcc_jit_version_major, [50]gcc_jit_version_minor, and
   2506             [51]gcc_jit_version_patchlevel for programmatically checking
   2507             the libgccjit version from client code, and
   2508           + [52]gcc_jit_context_new_bitfield
   2509 
   2510 [53]New Targets and Target Specific Improvements
   2511 
   2512   [54]AArch64 & arm
   2513 
   2514      * The AArch64 and arm ports now support condition flag output
   2515        constraints in inline assembly, as indicated by the
   2516        __GCC_ASM_FLAG_OUTPUTS__. On arm this feature is only available for
   2517        A32 and T32 targets. Please refer to the documentation for more
   2518        details.
   2519 
   2520   [55]AArch64
   2521 
   2522      * There have been several improvements related to the Scalable Vector
   2523        Extension (SVE):
   2524           + The SVE ACLE types and intrinsics are now supported. They can
   2525             be accessed using the header file arm_sve.h.
   2526           + It is now possible to create fixed-length SVE types using the
   2527             arm_sve_vector_bits attribute. For example:
   2528 #if __ARM_FEATURE_SVE_BITS==512
   2529 typedef svint32_t vec512 __attribute__((arm_sve_vector_bits(512)));
   2530 typedef svbool_t pred512 __attribute__((arm_sve_vector_bits(512)));
   2531 #endif
   2532           + -mlow-precision-div, -mlow-precision-sqrt and
   2533             -mlow-precision-recip-sqrt now work for SVE.
   2534           + -msve-vector-bits=128 now generates vector-length-specific
   2535             code for little-endian targets. It continues to generate
   2536             vector-length-agnostic code for big-endian targets, just as
   2537             previous releases did for all targets.
   2538           + The vectorizer is now able to use extending loads and
   2539             truncating stores, including gather loads and scatter stores.
   2540           + The vectorizer now compares the cost of vectorizing with SVE
   2541             and vectorizing with Advanced SIMD and tries to pick the best
   2542             one. Previously it would always use SVE if possible.
   2543           + If a vector loop uses Advanced SIMD rather than SVE, the
   2544             vectorizer now considers using SVE to vectorize the left-over
   2545             elements (the "scalar tail" or "epilog").
   2546           + Besides these specific points, there have been many general
   2547             improvements to the way that the vectorizer uses SVE.
   2548      * The -mbranch-protection=pac-ret option now accepts the optional
   2549        argument +b-key extension to perform return address signing with
   2550        the B-key instead of the A-key.
   2551      * The option -moutline-atomics has been added to aid deployment of
   2552        the Large System Extensions (LSE) on GNU/Linux systems built with a
   2553        baseline architecture targeting Armv8-A. When the option is
   2554        specified code is emitted to detect the presence of LSE
   2555        instructions at runtime and use them for standard atomic
   2556        operations. For more information please refer to the documentation.
   2557      * The Transactional Memory Extension is now supported through ACLE
   2558        intrinsics. It can be enabled through the +tme option extension
   2559        (for example, -march=armv8.5-a+tme).
   2560      * A number of features from Armv8.5-A are now supported through ACLE
   2561        intrinsics. These include:
   2562           + The random number instructions that can be enabled through the
   2563             (already present in GCC 9.1) +rng option extension.
   2564           + Floating-point intrinsics to round to integer instructions
   2565             from Armv8.5-A when targeting -march=armv8.5-a or later.
   2566           + Memory Tagging Extension intrinsics enabled through the
   2567             +memtag option extension.
   2568      * Similarly, the following Armv8.6-A features are now supported
   2569        through ACLE intrinsics:
   2570           + The bfloat16 extension. This extension is enabled
   2571             automatically when Armv8.6-A is selected (such as by
   2572             -march=armv8.6-a). It can also be enabled for Armv8.2-A and
   2573             later using the +bf16 option extension.
   2574           + The Matrix Multiply extension. This extension is split into
   2575             three parts, one for each supported data type:
   2576                o Support for 8-bit integer matrix multiply instructions.
   2577                  This extension is enabled automatically when Armv8.6-A is
   2578                  selected. It can also be enabled for Armv8.2-A and later
   2579                  using the +i8mm option extension.
   2580                o Support for 32-bit floating-point matrix multiply
   2581                  instructions. This extension can be enabled using the
   2582                  +f32mm option extension, which also has the effect of
   2583                  enabling SVE.
   2584                o Support for 64-bit floating-point matrix multiply
   2585                  instructions. This extension can be enabled using the
   2586                  +f64mm option extension, which likewise has the effect of
   2587                  enabling SVE.
   2588      * SVE2 is now supported through ACLE intrinsics and (to a limited
   2589        extent) through autovectorization. It can be enabled through the
   2590        +sve2 option extension (for example, -march=armv8.5-a+sve2).
   2591        Additional extensions can be enabled through +sve2-sm4, +sve2-aes,
   2592        +sve2-sha3 and +sve2-bitperm.
   2593      * Support has been added for the following processors (GCC
   2594        identifiers in parentheses):
   2595           + Arm Cortex-A77 (cortex-a77).
   2596           + Arm Cortex-A76AE (cortex-a76ae).
   2597           + Arm Cortex-A65 (cortex-a65).
   2598           + Arm Cortex-A65AE (cortex-a65ae).
   2599           + Arm Cortex-A34 (cortex-a34).
   2600           + Marvell ThunderX3 (thunderx3t110).
   2601        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   2602        options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
   2603        arguments to the equivalent target attributes and pragmas.
   2604 
   2605   [56]arm
   2606 
   2607      * Support for the FDPIC ABI has been added. It uses 64-bit function
   2608        descriptors to represent pointers to functions, and enables code
   2609        sharing on MMU-less systems. The corresponding target triple is
   2610        arm-uclinuxfdpiceabi, and the C library is uclibc-ng.
   2611      * Support has been added for the Arm EABI on NetBSD through the
   2612        arm*-*-netbsdelf-*eabi* triplet.
   2613      * The handling of 64-bit integer operations has been significantly
   2614        reworked and improved leading to improved performance and reduced
   2615        stack usage when using 64-bit integral data types. The option
   2616        -mneon-for-64bits is now deprecated and will be removed in a future
   2617        release.
   2618      * Support has been added for the following processors (GCC
   2619        identifiers in parentheses):
   2620           + Arm Cortex-A77 (cortex-a77).
   2621           + Arm Cortex-A76AE (cortex-a76ae).
   2622           + Arm Cortex-M35P (cortex-m35p).
   2623           + Arm Cortex-M55 (cortex-m55).
   2624        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   2625        options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
   2626      * Support has been extended for the ACLE [57]data-processing
   2627        intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
   2628        multiplication and other related intrinsics aimed at DSP algorithm
   2629        optimization.
   2630      * Support for -mpure-code in Thumb-1 (v6m) has been added: this
   2631        M-profile feature is no longer restricted to targets with MOVT. For
   2632        example, -mcpu=cortex-m0 now supports this option.
   2633      * Support for the [58]Armv8.1-M Mainline Architecture has been added.
   2634           + Armv8.1-M Mainline can be enabled by using the
   2635             -march=armv8.1-m.main command-line option.
   2636      * Support for the [59]MVE beta ACLE intrinsics has been added. These
   2637        intrinsics can be enabled by including the arm_mve.h header file
   2638        and passing the +mve or +mve.fp option extensions (for example:
   2639        -march=armv8.1-m.main+mve).
   2640      * Support for the Custom Datapath Extension beta ACLE [60]intrinsics
   2641        has been added.
   2642      * Support for Armv8.1-M Mainline Security Extensions architecture has
   2643        been added. The -mcmse option, when used in combination with an
   2644        Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
   2645        -mcmse), now leads to the generation of improved code sequences
   2646        when changing security states.
   2647 
   2648   [61]AMD Radeon (GCN)
   2649 
   2650      * Code generation and in particular vectorization support have been
   2651        much improved.
   2652 
   2653   [62]ARC
   2654 
   2655      * The interrupt service routine functions save all used registers,
   2656        including extension registers and auxiliary registers used by Zero
   2657        Overhead Loops.
   2658      * Improve code size by using multiple short instructions instead of a
   2659        single long mov or ior instruction when its long immediate constant
   2660        is known.
   2661      * Fix usage of the accumulator register for ARC600.
   2662      * Fix issues with uncached attribute.
   2663      * Remove -mq-class option.
   2664      * Improve 64-bit integer addition and subtraction operations.
   2665 
   2666   [63]AVR
   2667 
   2668      * Support for the XMEGA-like devices
   2669 
   2670      ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804,
   2671      ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808,
   2672      ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209,
   2673      ATmega4808, ATmega4809
   2674        has been added.
   2675      * A new command-line option -nodevicespecs has been added. It allows
   2676        to provide a custom device-specs file by means of
   2677 
   2678      avr-gcc -nodevicespecs -specs=my-spec-file <options>
   2679        and without the need to provide options -B and -mmcu=. See [64]AVR
   2680        command-line options for details. This feature is also available in
   2681        GCC 9.3+ and GCC 8.4+.
   2682      * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
   2683        have been added. They allow to choose the size (in bits) of the
   2684        double and long double types, respectively. Whether or not the
   2685        mentioned layouts are available, whether the options act as a
   2686        multilib option, and the default for either option are controlled
   2687        by the new [65]AVR configure options --with-double= and
   2688        --with-long-double=.
   2689      * A new configure option --with-libf7= has been added. It controls to
   2690        which level avr-libgcc provides 64-bit floating point support by
   2691        means of [66]Libf7.
   2692      * A new configure option --with-double-comparison= has been added.
   2693        It's unlikely you need to set this option by hand.
   2694 
   2695   [67]IA-32/x86-64
   2696 
   2697      * Support to expand __builtin_roundeven into the appropriate SSE 4.1
   2698        instruction has been added.
   2699      * New ISA extension support for Intel ENQCMD was added to GCC. ENQCMD
   2700        intrinsics are available via the -menqcmd compiler switch.
   2701      * GCC now supports the Intel CPU named Cooperlake through
   2702        -march=cooperlake. The switch enables the AVX512BF16 ISA
   2703        extensions.
   2704      * GCC now supports the Intel CPU named Tigerlake through
   2705        -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
   2706        AVX512VP2INTERSECT ISA extensions.
   2707 
   2708   [68]MIPS
   2709 
   2710      * The mips*-*-linux* targets now mark object files with appropriate
   2711        GNU-stack note, facilitating use of non-executable stack hardening
   2712        on GNU/Linux. The soft-float targets have this feature enabled by
   2713        default, while for hard-float targets it is required for GCC to be
   2714        configured with --with-glibc-version=2.31 against glibc 2.31 or
   2715        later.
   2716 
   2717   [69]PowerPC / PowerPC64 / RS6000
   2718 
   2719      * Many vector builtins have been listed as deprecated in the
   2720        [70]64-Bit ELF V2 ABI Specification for quite a number of years.
   2721        The vector builtins listed in Tables A.8 through A.10 are now
   2722        deprecated for GCC 10, and will likely be removed from support in
   2723        GCC 11. Note that this does not result in any loss of function.
   2724        These deprecated builtins generally provide somewhat nonsensical
   2725        argument lists (for example, mixing signed, unsigned, and bool
   2726        vector arguments arbitrarily), or are duplicate builtins that are
   2727        inconsistent with the expected naming scheme. We expect that this
   2728        will be unlikely to affect much if any code, and any required code
   2729        changes will be trivial.
   2730 
   2731   [71]PRU
   2732 
   2733      * A new back end targeting TI PRU I/O processors has been contributed
   2734        to GCC.
   2735 
   2736   [72]RISC-V
   2737 
   2738      * The riscv*-*-* targets now require GNU binutils version 2.30 or
   2739        later, to support new assembly instructions produced by GCC.
   2740 
   2741   [73]V850
   2742 
   2743      * The ABI for V850 nested functions has been changed. Previously the
   2744        V850 port used %r20 for the static chain pointer, now the port uses
   2745        %r19. This corrects a long standing latent bug in the v850 port
   2746        where a call to a nested function would unexpectedly change the
   2747        value in %r20.
   2748 
   2749 [74]Operating Systems
   2750 
   2751 [75]Improvements for plugin authors
   2752 
   2753      * GCC diagnostics can now have a chain of events associated with
   2754        them, describing a path through the code that triggers the problem.
   2755        These can be printed by the diagnostics subsystem in various ways,
   2756        controlled by the [76]-fdiagnostics-path-format option, or captured
   2757        in JSON form via [77]-fdiagnostics-format=json.
   2758      * GCC diagnostics can now be associated with [78]CWE weakness
   2759        identifiers, which will appear on the standard error stream, and in
   2760        the JSON output from [79]-fdiagnostics-format=json.
   2761 
   2762 Other significant improvements
   2763 
   2764      * To allow inline expansion of both memcpy and memmove, the existing
   2765        movmem instruction patterns used for non-overlapping memory copies
   2766        have been renamed to cpymem. The movmem name is now used for
   2767        overlapping memory moves, consistent with the library functions
   2768        memcpy and memmove.
   2769      * For many releases, when GCC emits a warning it prints the option
   2770        controlling that warning. As of GCC 10, that option text is now a
   2771        clickable hyperlink for the documentation of that option (assuming
   2772        a [80]sufficiently capable terminal). This behavior can be
   2773        controlled via a new [81]-fdiagnostics-urls option (along with
   2774        various environment variables and heuristics documented with that
   2775        option).
   2776 
   2777 GCC 10.1
   2778 
   2779    This is the [82]list of problem reports (PRs) from GCC's bug tracking
   2780    system that are known to be fixed in the 10.1 release. This list might
   2781    not be complete (that is, it is possible that some PRs that have been
   2782    fixed are not listed here).
   2783 
   2784 [83]GCC 10.2
   2785 
   2786    This is the [84]list of problem reports (PRs) from GCC's bug tracking
   2787    system that are known to be fixed in the 10.2 release. This list might
   2788    not be complete (that is, it is possible that some PRs that have been
   2789    fixed are not listed here).
   2790 
   2791 [85]GCC 10.3
   2792 
   2793    This is the [86]list of problem reports (PRs) from GCC's bug tracking
   2794    system that are known to be fixed in the 10.3 release. This list might
   2795    not be complete (that is, it is possible that some PRs that have been
   2796    fixed are not listed here).
   2797 
   2798   Target Specific Changes
   2799 
   2800     AArch64
   2801 
   2802      * A bug with the Random Number intrinsics in the arm_acle.h header
   2803        that resulted in an incorrect status result being returned has been
   2804        fixed.
   2805      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   2806        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   2807        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   2808        tunes the code for the A64FX. This includes tuning the SVE code,
   2809        although by default the code is still length-agnostic and so works
   2810        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   2811        code specific to 512-bit SVE.
   2812 
   2813   x86-64
   2814 
   2815      * GCC 10.3 supports AMD CPUs based on the znver3 core via
   2816        -march=znver3.
   2817 
   2818 [87]GCC 10.4
   2819 
   2820    This is the [88]list of problem reports (PRs) from GCC's bug tracking
   2821    system that are known to be fixed in the 10.4 release. This list might
   2822    not be complete (that is, it is possible that some PRs that have been
   2823    fixed are not listed here).
   2824 
   2825   Target Specific Changes
   2826 
   2827     x86-64
   2828 
   2829      * The x86-64 ABI of passing and returning structures with a 64-bit
   2830        integer vector changed in GCC 10.1 when MMX is disabled. Disabling
   2831        MMX no longer changes how they are passed nor returned. This ABI
   2832        change is now diagnosed with -Wpsabi.
   2833 
   2834 [89]GCC 10.5
   2835 
   2836    This is the [90]list of problem reports (PRs) from GCC's bug tracking
   2837    system that are known to be fixed in the 10.5 release. This list might
   2838    not be complete (that is, it is possible that some PRs that have been
   2839    fixed are not listed here).
   2840 
   2841 
   2842     For questions related to the use of GCC, please consult these web
   2843     pages and the [91]GCC manuals. If that fails, the
   2844     [92]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2845     web pages and the development of GCC are welcome on our developer
   2846     list at [93]gcc (a] gcc.gnu.org. All of [94]our lists have public
   2847     archives.
   2848 
   2849    Copyright (C) [95]Free Software Foundation, Inc. Verbatim copying and
   2850    distribution of this entire article is permitted in any medium,
   2851    provided this notice is preserved.
   2852 
   2853    These pages are [96]maintained by the GCC team. Last modified
   2854    2025-03-21.
   2855 
   2856 References
   2857 
   2858    1. https://gcc.gnu.org/gcc-10/porting_to.html
   2859    2. https://gcc.gnu.org/onlinedocs/index.html#current
   2860    3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
   2861    4. https://www.mpfr.org/
   2862    5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
   2863    6. https://gcc.gnu.org/gcc-10/changes.html#general
   2864    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
   2865    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
   2866    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
   2867   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
   2868   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
   2869   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
   2870   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
   2871   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
   2872   15. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
   2873   16. https://facebook.github.io/zstd/
   2874   17. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
   2875   18. https://gcc.gnu.org/gcc-10/changes.html#languages
   2876   19. https://www.openacc.org/
   2877   20. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-10
   2878   21. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
   2879   22. https://www.openmp.org/specifications/
   2880   23. https://gcc.gnu.org/wiki/Offloading
   2881   24. https://gcc.gnu.org/gcc-10/changes.html#c-family
   2882   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
   2883   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
   2884   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
   2885   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   2886   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
   2887   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
   2888   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
   2889   32. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
   2890   33. https://gcc.gnu.org/gcc-10/changes.html#c
   2891   34. https://gcc.gnu.org/gcc-10/changes.html#cxx
   2892   35. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
   2893   36. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
   2894   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
   2895   38. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
   2896   39. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
   2897   40. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
   2898   41. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
   2899   42. https://gcc.gnu.org/gcc-10/changes.html#libstdcxx
   2900   43. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
   2901   44. https://gcc.gnu.org/gcc-10/changes.html#d
   2902   45. https://gcc.gnu.org/gcc-10/changes.html#fortran
   2903   46. https://www.openmp.org/specifications/
   2904   47. https://gcc.gnu.org/gcc-10/changes.html#go
   2905   48. https://gcc.gnu.org/gcc-10/changes.html#jit
   2906   49. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
   2907   50. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
   2908   51. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
   2909   52. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
   2910   53. https://gcc.gnu.org/gcc-10/changes.html#targets
   2911   54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
   2912   55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
   2913   56. https://gcc.gnu.org/gcc-10/changes.html#arm
   2914   57. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
   2915   58. https://developer.arm.com/Architectures/M-Profile%20Architecture
   2916   59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
   2917   60. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
   2918   61. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
   2919   62. https://gcc.gnu.org/gcc-10/changes.html#arc
   2920   63. https://gcc.gnu.org/gcc-10/changes.html#avr
   2921   64. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
   2922   65. https://gcc.gnu.org/install/configure.html#avr
   2923   66. https://gcc.gnu.org/wiki/avr-gcc#Libf7
   2924   67. https://gcc.gnu.org/gcc-10/changes.html#x86
   2925   68. https://gcc.gnu.org/gcc-10/changes.html#mips
   2926   69. https://gcc.gnu.org/gcc-10/changes.html#powerpc
   2927   70. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
   2928   71. https://gcc.gnu.org/gcc-10/changes.html#pru
   2929   72. https://gcc.gnu.org/gcc-10/changes.html#riscv
   2930   73. https://gcc.gnu.org/gcc-10/changes.html#v850
   2931   74. https://gcc.gnu.org/gcc-10/changes.html#os
   2932   75. https://gcc.gnu.org/gcc-10/changes.html#plugins
   2933   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
   2934   77. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2935   78. https://cwe.mitre.org/
   2936   79. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2937   80. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
   2938   81. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
   2939   82. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
   2940   83. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
   2941   84. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
   2942   85. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
   2943   86. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
   2944   87. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
   2945   88. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
   2946   89. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
   2947   90. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
   2948   91. https://gcc.gnu.org/onlinedocs/
   2949   92. mailto:gcc-help (a] gcc.gnu.org
   2950   93. mailto:gcc (a] gcc.gnu.org
   2951   94. https://gcc.gnu.org/lists.html
   2952   95. https://www.fsf.org/
   2953   96. https://gcc.gnu.org/about.html
   2954 ======================================================================
   2955 http://gcc.gnu.org/gcc-9/index.html
   2956 
   2957                               GCC 9 Release Series
   2958 
   2959    (This release series is no longer supported.)
   2960 
   2961    May 27, 2022
   2962 
   2963    The [1]GNU project and the GCC developers are pleased to announce the
   2964    release of GCC 9.5.
   2965 
   2966    This release is a bug-fix release, containing fixes for regressions in
   2967    GCC 9.4 relative to previous releases of GCC.
   2968 
   2969 Release History
   2970 
   2971    GCC 9.5
   2972           May 27, 2022 ([2]changes, [3]documentation)
   2973 
   2974    GCC 9.4
   2975           June 1, 2021 ([4]changes, [5]documentation)
   2976 
   2977    GCC 9.3
   2978           Mar 12, 2020 ([6]changes, [7]documentation)
   2979 
   2980    GCC 9.2
   2981           Aug 12, 2019 ([8]changes, [9]documentation)
   2982 
   2983    GCC 9.1
   2984           May 3, 2019 ([10]changes, [11]documentation)
   2985 
   2986 References and Acknowledgements
   2987 
   2988    GCC used to stand for the GNU C Compiler, but since the compiler
   2989    supports several other languages aside from C, it now stands for the
   2990    GNU Compiler Collection.
   2991 
   2992    The GCC developers would like to thank the numerous people that have
   2993    contributed new features, improvements, bug fixes, and other changes as
   2994    well as test results to GCC. This [12]amazing group of volunteers is
   2995    what makes GCC successful.
   2996 
   2997    For additional information about GCC please refer to the [13]GCC
   2998    project web site or contact the [14]GCC development mailing list.
   2999 
   3000    To obtain GCC please use [15]our mirror sites or [16]our version
   3001    control system.
   3002 
   3003 
   3004     For questions related to the use of GCC, please consult these web
   3005     pages and the [17]GCC manuals. If that fails, the
   3006     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3007     web pages and the development of GCC are welcome on our developer
   3008     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   3009     archives.
   3010 
   3011    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   3012    distribution of this entire article is permitted in any medium,
   3013    provided this notice is preserved.
   3014 
   3015    These pages are [22]maintained by the GCC team. Last modified
   3016    2024-05-30.
   3017 
   3018 References
   3019 
   3020    1. http://www.gnu.org/
   3021    2. https://gcc.gnu.org/gcc-9/changes.html
   3022    3. https://gcc.gnu.org/onlinedocs/9.5.0/
   3023    4. https://gcc.gnu.org/gcc-9/changes.html
   3024    5. https://gcc.gnu.org/onlinedocs/9.4.0/
   3025    6. https://gcc.gnu.org/gcc-9/changes.html
   3026    7. https://gcc.gnu.org/onlinedocs/9.3.0/
   3027    8. https://gcc.gnu.org/gcc-9/changes.html
   3028    9. https://gcc.gnu.org/onlinedocs/9.2.0/
   3029   10. https://gcc.gnu.org/gcc-9/changes.html
   3030   11. https://gcc.gnu.org/onlinedocs/9.1.0/
   3031   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
   3032   13. https://gcc.gnu.org/index.html
   3033   14. mailto:gcc (a] gcc.gnu.org
   3034   15. https://gcc.gnu.org/mirrors.html
   3035   16. https://gcc.gnu.org/git.html
   3036   17. https://gcc.gnu.org/onlinedocs/
   3037   18. mailto:gcc-help (a] gcc.gnu.org
   3038   19. mailto:gcc (a] gcc.gnu.org
   3039   20. https://gcc.gnu.org/lists.html
   3040   21. https://www.fsf.org/
   3041   22. https://gcc.gnu.org/about.html
   3042 ======================================================================
   3043 http://gcc.gnu.org/gcc-9/changes.html
   3044 
   3045                               GCC 9 Release Series
   3046                         Changes, New Features, and Fixes
   3047 
   3048    This page is a "brief" summary of some of the huge number of
   3049    improvements in GCC 9. You may also want to check out our [1]Porting to
   3050    GCC 9 page and the [2]full GCC documentation.
   3051 
   3052 Caveats
   3053 
   3054      * On Arm targets (arm*-*-*), [3]a bug in the implementation of the
   3055        procedure call standard (AAPCS) in the GCC 6, 7 and 8 releases has
   3056        been fixed: a structure containing a bit-field based on a 64-bit
   3057        integral type and where no other element in a structure required
   3058        64-bit alignment could be passed incorrectly to functions. This is
   3059        an ABI change. If the option -Wpsabi is enabled (on by default) the
   3060        compiler will emit a diagnostic note for code that might be
   3061        affected.
   3062      * Support for a number of older systems and recently unmaintained or
   3063        untested target ports of GCC has been declared obsolete in GCC 9.
   3064        Unless there is activity to revive them, the next release of GCC
   3065        will have their sources permanently removed.
   3066        The following ports for individual systems on particular
   3067        architectures have been obsoleted:
   3068           + Solaris 10 (*-*-solaris2.10). Details can be found in the
   3069             [4]announcement.
   3070           + Cell Broadband Engine SPU (spu*-*-*). Details can be found in
   3071             the [5]announcement.
   3072      * A change to the C++ std::rotate algorithm in GCC 9.1.0 can cause
   3073        ABI incompatibilities with object files compiled with other
   3074        versions of GCC. If the std::rotate algorithm is called with an
   3075        empty range then it might cause a divide-by-zero error (as a SIGFPE
   3076        signal) and crash. The change has been reverted for GCC 9.2.0 and
   3077        future releases. For more details see [6]Bug 90920. The problem can
   3078        be avoided by recompiling any objects that might call std::rotate
   3079        with an empty range, so that the GCC 9.1.0 definition of
   3080        std::rotate is not used.
   3081      * The automatic template instantiation at link time ([7]-frepo) has
   3082        been deprecated and will be removed in a future release.
   3083      * The --with-default-libstdcxx-abi=gcc4-compatible configure option
   3084        is broken in the 9.1 and 9.2 releases, producing a shared library
   3085        with missing symbols (see [8]Bug 90361). As a workaround, configure
   3086        without that option and build GCC as normal, then edit the
   3087        installed <bits/c++config.h> headers to define the
   3088        _GLIBCXX_USE_CXX11_ABI macro to 0.
   3089 
   3090 [9]General Improvements
   3091 
   3092    The following GCC command line options have been introduced or
   3093    improved.
   3094      * All command line options that take a byte-size argument accept
   3095        64-bit integers as well as standard SI and IEC suffixes such as kb
   3096        and KiB, MB and MiB, or GB and GiB denoting the corresponding
   3097        multiples of bytes. See [10]Invoking GCC for more.
   3098      * A new option [11]-flive-patching=[inline-only-static|inline-clone]
   3099        generates code suitable for live patching. At the same time it
   3100        provides multiple-level control over IPA optimizations. See the
   3101        user guide for more details.
   3102      * A new option, --completion, has been added to provide more fine
   3103        option completion in a shell. It is intended to be used by
   3104        Bash-completion.
   3105      * GCC's diagnostics now print source code with a left margin showing
   3106        line numbers, configurable with
   3107        [12]-fno-diagnostics-show-line-numbers.
   3108        GCC's diagnostics can also now label regions of the source code to
   3109        show pertinent information, such as the types within an expression.
   3110 $ g++ t.cc
   3111 t.cc: In function 'int test(const shape&, const shape&)':
   3112 t.cc:15:4: error: no match for 'operator+' (operand types are 'boxed_value<doubl
   3113 e>' and 'boxed_value<double>')
   3114    14 |   return (width(s1) * height(s1)
   3115       |           ~~~~~~~~~~~~~~~~~~~~~~
   3116       |                     |
   3117       |                     boxed_value<[...]>
   3118    15 |    + width(s2) * height(s2));
   3119       |    ^ ~~~~~~~~~~~~~~~~~~~~~~
   3120       |                |
   3121       |                boxed_value<[...]>
   3122 
   3123        These labels can be disabled via [13]-fno-diagnostics-show-labels.
   3124      * A new option [14]-fdiagnostics-format=json has been introduced for
   3125        emitting diagnostics in a machine-readable format.
   3126      * The alignment-related options [15]-falign-functions,
   3127        [16]-falign-labels, [17]-falign-loops, and [18]-falign-jumps
   3128        received support for a secondary alignment (e.g.
   3129        -falign-loops=n:m:n2:m2).
   3130      * New pair of profiling options ([19]-fprofile-filter-files and
   3131        [20]-fprofile-exclude-files) has been added. The options help to
   3132        filter which source files are instrumented.
   3133      * AddressSanitizer generates more compact redzones for automatic
   3134        variables. That helps to reduce memory footprint of a sanitized
   3135        binary.
   3136      * Numerous improvements have been made to the output of
   3137        [21]-fopt-info.
   3138        Messages are now prefixed with optimized, missed, or note, rather
   3139        than the old behavior of all being prefixed with note.
   3140        The output from -fopt-info can now contain information on inlining
   3141        decisions:
   3142 $ g++ -c inline.cc -O2 -fopt-info-inline-all
   3143 inline.cc:24:11: note: Considering inline candidate void foreach(T, T, void (*)(
   3144 E)) [with T = char**; E = char*]/2.
   3145 inline.cc:24:11: optimized:  Inlining void foreach(T, T, void (*)(E)) [with T =
   3146 char**; E = char*]/2 into int main(int, char**)/1.
   3147 inline.cc:19:12: missed:   not inlinable: void inline_me(char*)/0 -> int std::pu
   3148 ts(const char*)/3, function body not available
   3149 inline.cc:13:8: optimized:  Inlined void inline_me(char*)/4 into int main(int, c
   3150 har**)/1 which now has time 127.363637 and size 11, net change of +0.
   3151 Unit growth for small function inlining: 16->16 (0%)
   3152 
   3153 Inlined 2 calls, eliminated 1 functions
   3154 
   3155 
   3156        The output from the vectorizer has been rationalized so that failed
   3157        attempts to vectorize a loop are displayed in the form
   3158     [LOOP-LOCATION]: couldn't vectorize this loop
   3159     [PROBLEM-LOCATION]: because of [REASON]
   3160 
   3161        rather than an exhaustive log of all decisions made by the
   3162        vectorizer. For example:
   3163 $ gcc -c v.c -O3 -fopt-info-all-vec
   3164 v.c:7:3: missed: couldn't vectorize loop
   3165 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   3166 mory");
   3167 v.c:3:6: note: vectorized 0 loops in function.
   3168 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   3169 mory");
   3170 
   3171        The old behavior can be obtained via a new -internals suboption of
   3172        -fopt-info.
   3173      * A new option, [22]-fsave-optimization-record has been added, which
   3174        writes a SRCFILE.opt-record.json.gz file describing the
   3175        optimization decisions made by GCC. This is similar to the output
   3176        of -fopt-info, but with additional metadata such as the inlining
   3177        chain, and profile information (if available).
   3178      * Inter-procedural propagation of stack alignment can now be
   3179        controlled by [23]-fipa-stack-alignment.
   3180      * Propagation of addressability, readonly, and writeonly flags on
   3181        static variables can now be controlled by
   3182        [24]-fipa-reference-addressable.
   3183 
   3184    The following built-in functions have been introduced.
   3185      * [25]__builtin_expect_with_probability to provide branch prediction
   3186        probability hints to the optimizer.
   3187      * [26]__builtin_has_attribute determines whether a function, type, or
   3188        variable has been declared with some attribute.
   3189      * [27]__builtin_speculation_safe_value can be used to help mitigate
   3190        against unsafe speculative execution.
   3191 
   3192    The following attributes have been introduced.
   3193      * The [28]copy function attribute has been added. The attribute can
   3194        also be applied to type definitions and to variable declarations.
   3195 
   3196    A large number of improvements to code generation have been made,
   3197    including but not limited to the following.
   3198      * Switch expansion has been improved by using a different strategy
   3199        (jump table, bit test, decision tree) for a subset of switch cases.
   3200      * A linear function expression defined as a switch statement can be
   3201        transformed by [29]-ftree-switch-conversion. For example:
   3202 
   3203 int
   3204 foo (int how)
   3205 {
   3206   switch (how) {
   3207     case 2: how = 205; break;
   3208     case 3: how = 305; break;
   3209     case 4: how = 405; break;
   3210     case 5: how = 505; break;
   3211     case 6: how = 605; break;
   3212   }
   3213   return how;
   3214 }
   3215 
   3216        can be transformed into 100 * how + 5 (for values defined in the
   3217        switch statement).
   3218      * Inter-procedural optimization improvements:
   3219           + Inliner defaults were tuned to better suit modern C++
   3220             codebases, especially when built with link time-optimizations.
   3221             New parameters max-inline-insns-small, max-inline-insns-size,
   3222             uninlined-function-insns, uninlined-function-time,
   3223             uninlined-thunk-insns, and uninlined-thunk-time were added.
   3224           + Hot/cold partitioning is now more precise and aggressive.
   3225           + Improved scalability for very large translation units
   3226             (especially when link-time optimizing large programs).
   3227      * Profile driven optimization improvements:
   3228           + [30]-fprofile-use now enables [31]-fversion-loops-for-strides,
   3229             [32]-floop-interchange, [33]-floop-unroll-and-jam,
   3230             [34]-ftree-loop-distribution.
   3231           + Streaming of counter histograms was removed, which reduces the
   3232             size of profile files. Histograms are computed on the fly with
   3233             link-time optimization.
   3234           + The parameter hot-bb-count-ws-permille was reduced from 999 to
   3235             990 to account for more precise histograms.
   3236      * Link-time optimization improvements:
   3237           + Types are now simplified prior to streaming resulting in
   3238             significant reductions of LTO object file sizes and link-time
   3239             memory use as well as improvements of link-time parallelism.
   3240           + The default number of partitions (--param lto-partitions) was
   3241             increased from 32 to 128 enabling effective use of CPUs with
   3242             more than 32 hyperthreads. --param
   3243             lto-max-streaming-parallelism can now be used to control the
   3244             number of streaming processes.
   3245           + Warnings on C++ One Decl Rule violations (-Wodr) are now more
   3246             informative and produce fewer redundant results.
   3247        Overall compile time of Firefox 66 and LibreOffice 6.2.3 on an
   3248        8-core machine was reduced by about 5% compared to GCC 8.3, and the
   3249        size of LTO object files by 7%. LTO link time improves by 11% on an
   3250        8-core machine and scales significantly better for more parallel
   3251        build environments. The serial stage of the link-time optimization
   3252        is 28% faster consuming 20% less memory. The parallel stage now
   3253        scales to up to 128 partitions rather than 32 and reduces memory
   3254        use for every worker by 30%.
   3255 
   3256    The following improvements to the gcov command-line utility have been
   3257    made.
   3258      * The gcov tool received a new option [35]--use-hotness-colors (-q)
   3259        that can provide perf-like coloring of hot functions.
   3260      * The gcov tool has changed its intermediate format to a new JSON
   3261        format.
   3262 
   3263 [36]New Languages and Language specific improvements
   3264 
   3265    [37]OpenACC support in C, C++, and Fortran continues to be maintained
   3266    and improved. Most of the OpenACC 2.5 specification is implemented. See
   3267    the [38]implementation status section on the OpenACC wiki page for
   3268    further information.
   3269 
   3270   [39]C family
   3271 
   3272      * Version 5.0 of the [40]OpenMP specification is now partially
   3273        supported in the C and C++ compilers. For details which features of
   3274        OpenMP 5.0 are and which are not supported in the GCC 9 release see
   3275        [41]this mail.
   3276      * New extensions:
   3277           + [42]__builtin_convertvector built-in for vector conversions
   3278             has been added.
   3279      * New warnings:
   3280           + [43]-Waddress-of-packed-member, enabled by default, warns
   3281             about an unaligned pointer value from the address of a packed
   3282             member of a struct or union.
   3283      * Enhancements to existing warnings:
   3284           + [44]-Warray-bounds detects more instances of out-of-bounds
   3285             indices.
   3286           + [45]-Wattribute-alias also detects attribute mismatches
   3287             between alias declarations and their targets, in addition to
   3288             mismatches between their types.
   3289           + [46]-Wformat-overflow and [47]-Wformat-truncation have been
   3290             extended to all formatted input/output functions (where
   3291             applicable) and enhanced to detect a subset of instances of
   3292             reading past the end of unterminated constant character arrays
   3293             in %s directives.
   3294           + [48]-Wmissing-attributes detects instances of missing function
   3295             attributes on declarations of aliases and weak references.
   3296           + [49]-Wstringop-truncation also detects a subset of instances
   3297             of reading past the end of unterminated constant character
   3298             arrays,
   3299      * If a macro is used with the wrong argument count, the C and C++
   3300        front ends now show the definition of that macro via a note.
   3301      * The spelling corrector now considers transposed letters, and the
   3302        threshold for similarity has been tightened, to avoid nonsensical
   3303        suggestions.
   3304 
   3305   [50]C
   3306 
   3307      * There is now experimental support for -std=c2x, to select support
   3308        for the upcoming C2X revision of the ISO C standard. This standard
   3309        is in the early stages of development and the only feature
   3310        supported in GCC 9 is _Static_assert with a single argument
   3311        (support for _Static_assert with two arguments was added in C11 and
   3312        GCC 4.6). There are also new options -std=gnu2x, for C2X with GNU
   3313        extensions, and -Wc11-c2x-compat, to warn for uses of features
   3314        added in C2X (such warnings are also enabled by use of -Wpedantic
   3315        if not using -std=c2x or -std=gnu2x).
   3316      * New warnings:
   3317           + [51]-Wabsolute-value warns for calls to standard functions
   3318             that compute the absolute value of an argument when a more
   3319             appropriate standard function is available. For example,
   3320             calling abs(3.14) triggers the warning because the appropriate
   3321             function to call to compute the absolute value of a double
   3322             argument is fabs. The option also triggers warnings when the
   3323             argument in a call to such a function has an unsigned type.
   3324             This warning can be suppressed with an explicit type cast and
   3325             it is also enabled by -Wextra.
   3326 
   3327   [52]C++
   3328 
   3329      * New warnings:
   3330           + [53]-Wdeprecated-copy, implied by -Wextra, warns about the
   3331             C++11 deprecation of implicitly declared copy constructor and
   3332             assignment operator if one of them is user-provided.
   3333             -Wdeprecated-copy-dtor also warns if the destructor is
   3334             user-provided, as specified in C++11.
   3335           + [54]-Winit-list-lifetime, on by default, warns about uses of
   3336             std::initializer_list that are likely to result in a dangling
   3337             pointer, such as returning or assigning from a temporary list.
   3338           + [55]-Wredundant-move, implied by -Wextra, warns about
   3339             redundant calls to std::move.
   3340           + [56]-Wpessimizing-move, implied by -Wall, warns when a call to
   3341             std::move prevents copy elision.
   3342           + [57]-Wclass-conversion, on by default, warns when a conversion
   3343             function will never be called due to the type it converts to.
   3344      * The C++ front end has experimental support for some of the upcoming
   3345        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   3346        including range-based for statements with initializer, default
   3347        constructible and assignable stateless lambdas, lambdas in
   3348        unevaluated contexts, language support for empty data members,
   3349        allowing pack expansion in lambda init-capture, likely and unlikely
   3350        attributes, class types in non-type template parameters, allowing
   3351        virtual function calls in constant expressions, explicit(bool),
   3352        std::is_constant_evaluated, nested inline namespaces, etc. For a
   3353        full list of new features, see [58]the C++ status page.
   3354      * The C++ front end now preserves source locations for literals,
   3355        id-expression, and mem-initializer for longer. For example it is
   3356        now able to pin-point the pertinent locations for bad
   3357        initializations such as these
   3358 $ g++ -c bad-inits.cc
   3359 bad-inits.cc:10:14: error: cannot convert 'json' to 'int' in initialization
   3360    10 |   { 3, json::object },
   3361       |        ~~~~~~^~~~~~
   3362       |              |
   3363       |              json
   3364 bad-inits.cc:14:31: error: initializer-string for array of chars is too long [-f
   3365 permissive]
   3366    14 | char buffers[3][5] = { "red", "green", "blue" };
   3367       |                               ^~~~~~~
   3368 bad-inits.cc: In constructor 'X::X()':
   3369 bad-inits.cc:17:13: error: invalid conversion from 'int' to 'void*' [-fpermissiv
   3370 e]
   3371    17 |   X() : one(42), two(42), three(42)
   3372       |             ^~
   3373       |             |
   3374       |             int
   3375 
   3376        rather than emitting the error at the final closing parenthesis or
   3377        brace.
   3378      * Error-reporting of overload resolution has been special-cased to
   3379        make the case of a single failed candidate easier to read. For
   3380        example:
   3381 $ g++ param-type-mismatch.cc
   3382 param-type-mismatch.cc: In function 'int test(int, const char*, float)':
   3383 param-type-mismatch.cc:8:32: error: cannot convert 'const char*' to 'const char*
   3384 *'
   3385     8 |   return foo::member_1 (first, second, third);
   3386       |                                ^~~~~~
   3387       |                                |
   3388       |                                const char*
   3389 param-type-mismatch.cc:3:46: note:   initializing argument 2 of 'static int foo:
   3390 :member_1(int, const char**, float)'
   3391     3 |   static int member_1 (int one, const char **two, float three);
   3392       |                                 ~~~~~~~~~~~~~^~~
   3393 
   3394        highlights both the problematic argument, and the parameter that it
   3395        can't be converted to.
   3396      * Diagnostics involving binary operators now use color to distinguish
   3397        the two operands, and label them separately (as per the example of
   3398        source labelling above).
   3399      * Diagnostics involving function calls now highlight the pertinent
   3400        parameter of the declaration in more places.
   3401 $ g++ bad-conversion.cc
   3402 bad-conversion.cc: In function 'void caller()':
   3403 bad-conversion.cc:9:14: error: cannot convert 'bool' to 'void*'
   3404     9 |   callee (0, false, 2);
   3405       |              ^~~~~
   3406       |              |
   3407       |              bool
   3408 bad-conversion.cc:3:19: note:   initializing argument 2 of 'void callee(int, voi
   3409 d*, int)'
   3410     3 | void callee (int, void *, int)
   3411       |                   ^~~~~~
   3412 
   3413      * The C++ front end's implementation of [59]-Wformat now shows
   3414        precise locations within string literals, and underlines the
   3415        pertinent arguments at bogus call sites (the C front end has been
   3416        doing this since GCC 7). For example:
   3417 $ g++ -c bad-printf.cc -Wall
   3418 bad-printf.cc: In function 'void print_field(const char*, float, long int, long
   3419 int)':
   3420 bad-printf.cc:6:17: warning: field width specifier '*' expects argument of type
   3421 'int', but argument 3 has type 'long int' [-Wformat=]
   3422     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   3423       |                ~^~~               ~~~~~~~~~~~~~~
   3424       |                 |                        |
   3425       |                 int                      long int
   3426 bad-printf.cc:6:19: warning: format '%ld' expects argument of type 'long int', b
   3427 ut argument 4 has type 'double' [-Wformat=]
   3428     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   3429       |                ~~~^                               ~~~~~
   3430       |                   |                               |
   3431       |                   long int                        double
   3432       |                %*f
   3433 
   3434      * The C++ front end has gained new fix-it hints for forgetting the
   3435        return *this; needed by various C++ operators:
   3436 $ g++ -c operator.cc
   3437 operator.cc: In member function 'boxed_ptr& boxed_ptr::operator=(const boxed_ptr
   3438 &)':
   3439 operator.cc:7:3: warning: no return statement in function returning non-void [-W
   3440 return-type]
   3441     6 |     m_ptr = other.m_ptr;
   3442   +++ |+    return *this;
   3443     7 |   }
   3444       |   ^
   3445 
   3446        for when the compiler needs a typename:
   3447 $ g++ -c template.cc
   3448 template.cc:3:3: error: need 'typename' before 'Traits::type' because 'Traits' i
   3449 s a dependent scope
   3450     3 |   Traits::type type;
   3451       |   ^~~~~~
   3452       |   typename
   3453 
   3454        when trying to use an accessor member as if it were a data member:
   3455 $ g++ -c fncall.cc
   3456 fncall.cc: In function 'void hangman(const mystring&)':
   3457 fncall.cc:12:11: error: invalid use of member function 'int mystring::get_length
   3458 () const' (did you forget the '()' ?)
   3459    12 |   if (str.get_length > 0)
   3460       |       ~~~~^~~~~~~~~~
   3461       |                     ()
   3462 
   3463        for C++11's scoped enums:
   3464 $ g++ -c enums.cc
   3465 enums.cc: In function 'void json::test(const json::value&)':
   3466 enums.cc:12:26: error: 'STRING' was not declared in this scope; did you mean 'js
   3467 on::kind::STRING'?
   3468    12 |     if (v.get_kind () == STRING)
   3469       |                          ^~~~~~
   3470       |                          json::kind::STRING
   3471 enums.cc:3:44: note: 'json::kind::STRING' declared here
   3472     3 |   enum class kind { OBJECT, ARRAY, NUMBER, STRING, TRUE, FALSE, NULL_ };
   3473       |                                            ^~~~~~
   3474 
   3475        and a tweak to integrate the suggestions about misspelled members
   3476        with that for accessors:
   3477 $ g++ -c accessor-fixit.cc
   3478 accessor-fixit.cc: In function 'int test(t*)':
   3479 accessor-fixit.cc:17:15: error: 'class t' has no member named 'ratio'; did you m
   3480 ean 'int t::m_ratio'? (accessible via 'int t::get_ratio() const')
   3481    17 |   return ptr->ratio;
   3482       |               ^~~~~
   3483       |               get_ratio()
   3484 
   3485        In addition, various diagnostics in the C++ front-end have been
   3486        streamlined by consolidating the suggestion into the initial error,
   3487        rather than emitting a follow-up note:
   3488 $ g++ typo.cc
   3489 typo.cc:5:13: error: 'BUFSIZE' was not declared in this scope; did you mean 'BUF
   3490 _SIZE'?
   3491     5 | uint8_t buf[BUFSIZE];
   3492       |             ^~~~~~~
   3493       |             BUF_SIZE
   3494 
   3495     [60]Runtime Library (libstdc++)
   3496 
   3497      * Improved support for C++17, including:
   3498           + The C++17 implementation is no longer experimental.
   3499           + Parallel algorithms and <execution> (requires [61]Thread
   3500             Building Blocks 2018 or newer).
   3501           + <memory_resource>.
   3502           + Using the types and functions in <filesystem> does not require
   3503             linking with -lstdc++fs now.
   3504      * Improved experimental support for C++2a, including:
   3505           + Type traits std::remove_cvref, std::unwrap_reference,
   3506             std::unwrap_decay_ref, std::is_nothrow_convertible, and
   3507             std::type_identity.
   3508           + Headers <bit> and <version>.
   3509           + Uniform container erasure (std::erase_if).
   3510           + contains member of maps and sets.
   3511           + String prefix and suffix checking (starts_with, ends_with).
   3512           + Functions std::midpoint and std::lerp for interpolation.
   3513           + std::bind_front.
   3514           + std::visit<R>.
   3515           + std::assume_aligned.
   3516           + Uses-allocator construction utilities.
   3517           + std::pmr::polymorphic_allocator<std::byte>.
   3518           + Library support for char8_t type.
   3519           + Destroying delete.
   3520           + std::is_constant_evaluated() function.
   3521      * Support for opening file streams with wide character paths on
   3522        Windows
   3523      * Incomplete support for the C++17 Filesystem library and the
   3524        Filesystem TS on Windows.
   3525      * Incomplete, experimental support for the Networking TS.
   3526 
   3527   [62]D
   3528 
   3529      * Support for the D programming language has been added to GCC,
   3530        implementing version 2.076 of the language and run-time library.
   3531 
   3532   [63]Fortran
   3533 
   3534      * Asynchronous I/O is now fully supported. The program needs to be
   3535        linked against the pthreads library to use it, otherwise the I/O is
   3536        done synchronously. For systems which do not support POSIX
   3537        condition variables, such as AIX, all I/O is still done
   3538        synchronously.
   3539      * The BACK argument for MINLOC and MAXLOC has been implemented.
   3540      * The FINDLOC intrinsic function has been implemented.
   3541      * The IS_CONTIGUOUS intrinsic function has been implemented.
   3542      * Direct access to the real and imaginary parts of a complex variable
   3543        via c%re and c%im has been implemented.
   3544      * Type parameter inquiry via str%len and a%kind has been implemented.
   3545      * C descriptors and the ISO_Fortran_binding.h source file have been
   3546        implemented.
   3547      * The MAX and MIN intrinsics are no longer guaranteed to return any
   3548        particular value in case one of the arguments is a NaN. Note that
   3549        this conforms to the Fortran standard and to what other Fortran
   3550        compilers do. If there is a need to handle that case in some
   3551        specific way, one needs to explicitly check for NaN's before
   3552        calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
   3553        intrinsic module IEEE_ARITHMETIC.
   3554      * A new command-line option [64]-fdec-include, set also by the
   3555        [65]-fdec option, has been added to increase compatibility with
   3556        legacy code. With this option, an INCLUDE directive is also parsed
   3557        as a statement, which allows the directive to be spread across
   3558        multiple source lines with line continuations.
   3559      * A new [66]BUILTIN directive, has been added. The purpose of the
   3560        directive is to provide an API between the GCC compiler and the GNU
   3561        C Library which would define vector implementations of math
   3562        routines.
   3563 
   3564   [67]Go
   3565 
   3566      * GCC 9 provides a complete implementation of the Go 1.12.2 user
   3567        packages.
   3568 
   3569 [68]libgccjit
   3570 
   3571      * The libgccjit API gained a new entry point:
   3572        [69]gcc_jit_context_add_driver_option.
   3573 
   3574 [70]New Targets and Target Specific Improvements
   3575 
   3576   [71]AArch64 & Arm
   3577 
   3578      * Support has been added for the following processors (GCC
   3579        identifiers in parentheses):
   3580           + Arm Cortex-A76 (cortex-a76).
   3581           + Arm Cortex-A55/Cortex-A76 DynamIQ big.LITTLE
   3582             (cortex-a76.cortex-a55).
   3583           + Arm Neoverse N1 (neoverse-n1).
   3584        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   3585        options, for example: -mcpu=cortex-a76 or
   3586        -mtune=cortex-a76.cortex-a55 or as arguments to the equivalent
   3587        target attributes and pragmas.
   3588      * The Armv8.3-A complex number instructions are now supported via
   3589        intrinsics when the option -march=armv8.3-a or equivalent is
   3590        specified. For the half-precision floating-point variants of these
   3591        instructions use the architecture extension flag +fp16, e.g.
   3592        -march=armv8.3-a+fp16.
   3593        The intrinsics are defined by the ACLE specification.
   3594      * The Armv8.5-A architecture is now supported through the
   3595        -march=armv8.5-a option.
   3596      * The Armv8.5-A architecture also adds some security features that
   3597        are optional to all older architecture versions. These are now
   3598        supported and only affect the assembler.
   3599           + Speculation Barrier instruction through the -march=armv8-a+sb
   3600             option.
   3601           + Execution and Data Prediction Restriction instructions through
   3602             the -march=armv8-a+predres option.
   3603           + Speculative Store Bypass Safe instruction through the
   3604             -march=armv8-a+ssbs option. This does not require a compiler
   3605             option for Arm and thus -march=armv8-a+ssbs is an
   3606             AArch64-specific option.
   3607 
   3608       AArch64 specific
   3609 
   3610      * Support has been added for the Arm Neoverse E1 processor
   3611        (-mcpu=neoverse-e1).
   3612      * The AArch64 port now has support for stack clash protection using
   3613        the [72]-fstack-clash-protection option. The probing interval/guard
   3614        size can be set by using --param
   3615        stack-clash-protection-guard-size=12|16. The value of this
   3616        parameter must be in bytes represented as a power of two. The two
   3617        supported values for this parameter are 12 (for a 4KiB size, 2^12)
   3618        and 16 (for a 64KiB size, 2^16). The default value is 16 (64Kb) and
   3619        can be changed at configure time using the flag
   3620        --with-stack-clash-protection-guard-size=12|16.
   3621      * The option -msign-return-address= has been deprecated. This has
   3622        been replaced by the new -mbranch-protection= option. This new
   3623        option can now be used to enable the return address signing as well
   3624        as the new Branch Target Identification feature of Armv8.5-A
   3625        architecture. For more information on the arguments accepted by
   3626        this option, please refer to [73]AArch64-Options.
   3627      * The following optional extensions to Armv8.5-A architecture are now
   3628        supported and only affect the assembler.
   3629           + Random Number Generation instructions through the
   3630             -march=armv8.5-a+rng option.
   3631           + Memory Tagging Extension through the -march=armv8.5-a+memtag
   3632             option.
   3633 
   3634       Arm specific
   3635 
   3636      * Support for the deprecated Armv2 and Armv3 architectures and their
   3637        variants has been removed. Their corresponding -march values and
   3638        the -mcpu options that used these architectures have been removed.
   3639      * Support for the Armv5 and Armv5E architectures (which have no known
   3640        implementations) has been removed. Note that Armv5T, Armv5TE and
   3641        Armv5TEJ architectures remain supported.
   3642      * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
   3643        their respective -mcpu options.
   3644 
   3645   [74]AMD GCN
   3646 
   3647      * A new back end targeting AMD GCN GPUs has been contributed to GCC.
   3648        The implementation is currently limited to compiling
   3649        single-threaded, stand-alone programs. Future versions will add
   3650        support for offloading multi-threaded kernels via OpenMP and
   3651        OpenACC. The following devices are supported (GCC identifiers in
   3652        parentheses):
   3653           + Fiji (fiji).
   3654           + Vega 10 (gfx900).
   3655 
   3656   [75]ARC
   3657 
   3658      * LRA is now on by default for the ARC target. This can be controlled
   3659        by -mlra.
   3660      * Add support for frame code-density and branch-and-index
   3661        instructions.
   3662 
   3663   [76]C-SKY
   3664 
   3665      * A new back end targeting C-SKY V2 processors has been contributed
   3666        to GCC.
   3667 
   3668   [77]IA-32/x86-64
   3669 
   3670      * Support of Intel MPX (Memory Protection Extensions) has been
   3671        removed.
   3672      * New ISA extension support for Intel PTWRITE was added to GCC.
   3673        PTWRITE intrinsics are available via the -mptwrite compiler switch.
   3674      * GCC now supports the Intel CPU named Cascade Lake with AVX512
   3675        extensions through -march=cascadelake. The switch enables the
   3676        following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
   3677        AVX512DQ, AVX512VNNI.
   3678 
   3679   [78]MIPS
   3680 
   3681      * The Loongson loongson-mmi and loongson-ext extensions have been
   3682        split from loongson3a:
   3683           + loongson-mmi contains the Loongson MMI (MultiMedia extensions
   3684             Instructions).
   3685           + loongson-ext contains the Loongson EXT (EXTensions
   3686             instructions).
   3687      * The Loongson EXT2 (EXTensions R2 instructions) are now supported.
   3688           + loongson-ext2 contains the Loongson EXT2 instructions.
   3689        Command-line options-m[no-]loongson-mmi, -m[no-]loongson-ext, and
   3690        -m[no-]loongson-ext2 enable or disable those extensions.
   3691      * Support has been added for the following processors (GCC
   3692        identifiers in parentheses):
   3693           + Loongson 3A1000 (gs464) which enables loongson-mmi,
   3694             loongson-ext by default.
   3695           + Loongson 3A2000/3A3000 (gs464e) which enables loongson-mmi,
   3696             loongson-ext, loongson-ext2 by default.
   3697           + Loongson 2K1000 (gs264e) which enables loongson-ext,
   3698             loongson-ext2, msa by default.
   3699        The GCC identifiers can be used as arguments to the -mcpu and
   3700        -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
   3701        to the equivalent target attributes and pragmas.
   3702 
   3703   [79]OpenRISC
   3704 
   3705      * A new back end targeting OpenRISC processors has been contributed
   3706        to GCC.
   3707 
   3708   [80]S/390, System z, IBM z Systems
   3709 
   3710      * Support for the arch13 architecture has been added. When using the
   3711        -march=arch13 option, the compiler will generate code making use of
   3712        the new instructions introduced with the vector enhancement
   3713        facility 2 and the miscellaneous instruction extension facility 2.
   3714        The -mtune=arch13 option enables arch13 specific instruction
   3715        scheduling without making use of new instructions.
   3716      * Builtins for the new vector instructions have been added and can be
   3717        enabled using the -mzvector option.
   3718      * Support for ESA architecture machines g5 and g6 is deprecated since
   3719        GCC 6.1.0 and has been removed now.
   3720      * When compiling with -march=z14 or higher GCC emits alignments hints
   3721        on the vector load/store instructions (8 or 16 byte).
   3722      * Functions now have a default alignment of 16 bytes. This helps with
   3723        branch prediction effects.
   3724      * -mfentry is now supported. As well as the mcount mechanism the
   3725        __fentry__ is called before the function prologue. However, since
   3726        just a single instruction is required to call __fentry__ the call
   3727        sequence imposes a smaller overhead than mcount (4 instructions).
   3728        The produced code is compatible only with newer glibc versions,
   3729        which provide the __fentry__ symbol and do not clobber r0 when
   3730        resolving lazily bound functions. -mfentry is only supported when
   3731        generating 64-bit code and does not work with nested C functions.
   3732      * The -mnop-mcount option can be used to emit NOP instructions
   3733        instead of an mcount or fentry call stub.
   3734      * With the -mrecord-mcount option a __mcount_loc section is generated
   3735        containing pointers to each profiling call stub. This is useful for
   3736        automatically patching in and out calls.
   3737 
   3738 [81]Operating Systems
   3739 
   3740   [82]Solaris
   3741 
   3742      * g++ now unconditionally enables large file support when compiling
   3743        32-bit code.
   3744      * Support for the AddressSanitizer and UndefinedBehaviorSanitizer has
   3745        been merged from LLVM. For the moment, this only works for 32-bit
   3746        code on both SPARC and x86.
   3747      * An initial port of the D runtime library has been completed on
   3748        Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
   3749        support is still work-in-progress.
   3750 
   3751   [83]Windows
   3752 
   3753      * A C++ Microsoft ABI bitfield layout bug, [84]PR87137 has been
   3754        fixed. A non-field declaration could cause the current bitfield
   3755        allocation unit to be completed, incorrectly placing a following
   3756        bitfield into a new allocation unit. The Microsoft ABI is selected
   3757        for:
   3758           + Mingw targets
   3759           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   3760             option is specified, or __attribute__((ms_struct)) is used
   3761           + SuperH targets when the -mhitachi option is specified, or
   3762             __attribute__((renesas)) is used
   3763 
   3764 [85]Improvements for plugin authors
   3765 
   3766      * GCC's diagnostic subsystem now has a way to logically group
   3767        together related diagnostics, auto_diagnostic_group. Such
   3768        diagnostics will be nested by the output of
   3769        [86]-fdiagnostics-format=json.
   3770      * GCC now has a set of [87]user experience guidelines for GCC, with
   3771        information and advice on implementing new diagnostics.
   3772 
   3773 Other significant improvements
   3774 
   3775      * GCC's internal "selftest" suite now runs for C++ as well as C (in
   3776        debug builds of the compiler).
   3777 
   3778 [88]GCC 9.1
   3779 
   3780    This is the [89]list of problem reports (PRs) from GCC's bug tracking
   3781    system that are known to be fixed in the 9.1 release. This list might
   3782    not be complete (that is, it is possible that some PRs that have been
   3783    fixed are not listed here).
   3784 
   3785 [90]GCC 9.2
   3786 
   3787    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   3788    system that are known to be fixed in the 9.2 release. This list might
   3789    not be complete (that is, it is possible that some PRs that have been
   3790    fixed are not listed here).
   3791 
   3792 [92]GCC 9.3
   3793 
   3794    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   3795    system that are known to be fixed in the 9.3 release. This list might
   3796    not be complete (that is, it is possible that some PRs that have been
   3797    fixed are not listed here).
   3798 
   3799 [94]GCC 9.4
   3800 
   3801    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   3802    system that are known to be fixed in the 9.4 release. This list might
   3803    not be complete (that is, it is possible that some PRs that have been
   3804    fixed are not listed here).
   3805 
   3806   Target Specific Changes
   3807 
   3808     AArch64
   3809 
   3810      * The option -moutline-atomics has been added to aid deployment of
   3811        the Large System Extensions (LSE) on GNU/Linux systems built with a
   3812        baseline architecture targeting Armv8-A. When the option is
   3813        specified code is emitted to detect the presence of LSE
   3814        instructions at run time and use them for standard atomic
   3815        operations. For more information please refer to the documentation.
   3816      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   3817        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   3818        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   3819        tunes the code for the A64FX. This includes tuning the SVE code,
   3820        although by default the code is still length-agnostic and so works
   3821        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   3822        code specific to 512-bit SVE.
   3823 
   3824 [96]GCC 9.5
   3825 
   3826    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   3827    system that are known to be fixed in the 9.5 release. This list might
   3828    not be complete (that is, it is possible that some PRs that have been
   3829    fixed are not listed here).
   3830 
   3831 
   3832     For questions related to the use of GCC, please consult these web
   3833     pages and the [98]GCC manuals. If that fails, the
   3834     [99]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3835     web pages and the development of GCC are welcome on our developer
   3836     list at [100]gcc (a] gcc.gnu.org. All of [101]our lists have public
   3837     archives.
   3838 
   3839    Copyright (C) [102]Free Software Foundation, Inc. Verbatim copying and
   3840    distribution of this entire article is permitted in any medium,
   3841    provided this notice is preserved.
   3842 
   3843    These pages are [103]maintained by the GCC team. Last modified
   3844    2025-01-31.
   3845 
   3846 References
   3847 
   3848    1. https://gcc.gnu.org/gcc-9/porting_to.html
   3849    2. https://gcc.gnu.org/onlinedocs/index.html#current
   3850    3. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
   3851    4. https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html
   3852    5. https://gcc.gnu.org/ml/gcc/2019-04/msg00023.html
   3853    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
   3854    7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
   3855    8. https://gcc.gnu.org/PR90361
   3856    9. https://gcc.gnu.org/gcc-9/changes.html#general
   3857   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
   3858   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
   3859   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
   3860   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
   3861   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   3862   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
   3863   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
   3864   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
   3865   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
   3866   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
   3867   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
   3868   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
   3869   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
   3870   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
   3871   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
   3872   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
   3873   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
   3874   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
   3875   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
   3876   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
   3877   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
   3878   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
   3879   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
   3880   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
   3881   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
   3882   35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
   3883   36. https://gcc.gnu.org/gcc-9/changes.html#languages
   3884   37. https://www.openacc.org/
   3885   38. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-9
   3886   39. https://gcc.gnu.org/gcc-9/changes.html#c-family
   3887   40. https://www.openmp.org/specifications/
   3888   41. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
   3889   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
   3890   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
   3891   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
   3892   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
   3893   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   3894   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   3895   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   3896   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   3897   50. https://gcc.gnu.org/gcc-9/changes.html#c
   3898   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
   3899   52. https://gcc.gnu.org/gcc-9/changes.html#cxx
   3900   53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
   3901   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
   3902   55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   3903   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   3904   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
   3905   58. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   3906   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
   3907   60. https://gcc.gnu.org/gcc-9/changes.html#libstdcxx
   3908   61. https://github.com/uxlfoundation/oneTBB
   3909   62. https://gcc.gnu.org/gcc-9/changes.html#d
   3910   63. https://gcc.gnu.org/gcc-9/changes.html#fortran
   3911   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
   3912   65. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
   3913   66. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
   3914   67. https://gcc.gnu.org/gcc-9/changes.html#go
   3915   68. https://gcc.gnu.org/gcc-9/changes.html#jit
   3916   69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
   3917   70. https://gcc.gnu.org/gcc-9/changes.html#targets
   3918   71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
   3919   72. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
   3920   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
   3921   74. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
   3922   75. https://gcc.gnu.org/gcc-9/changes.html#arc
   3923   76. https://gcc.gnu.org/gcc-9/changes.html#csky
   3924   77. https://gcc.gnu.org/gcc-9/changes.html#x86
   3925   78. https://gcc.gnu.org/gcc-9/changes.html#mips
   3926   79. https://gcc.gnu.org/gcc-9/changes.html#or1k
   3927   80. https://gcc.gnu.org/gcc-9/changes.html#s390
   3928   81. https://gcc.gnu.org/gcc-9/changes.html#os
   3929   82. https://gcc.gnu.org/gcc-9/changes.html#solaris
   3930   83. https://gcc.gnu.org/gcc-9/changes.html#windows
   3931   84. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   3932   85. https://gcc.gnu.org/gcc-9/changes.html#plugins
   3933   86. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   3934   87. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
   3935   88. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
   3936   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
   3937   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
   3938   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
   3939   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
   3940   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
   3941   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
   3942   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
   3943   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
   3944   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
   3945   98. https://gcc.gnu.org/onlinedocs/
   3946   99. mailto:gcc-help (a] gcc.gnu.org
   3947  100. mailto:gcc (a] gcc.gnu.org
   3948  101. https://gcc.gnu.org/lists.html
   3949  102. https://www.fsf.org/
   3950  103. https://gcc.gnu.org/about.html
   3951 ======================================================================
   3952 http://gcc.gnu.org/gcc-8/index.html
   3953 
   3954                               GCC 8 Release Series
   3955 
   3956    (This release series is no longer supported.)
   3957 
   3958    May 14, 2021
   3959 
   3960    The [1]GNU project and the GCC developers are pleased to announce the
   3961    release of GCC 8.5.
   3962 
   3963    This release is a bug-fix release, containing fixes for regressions in
   3964    GCC 8.4 relative to previous releases of GCC.
   3965 
   3966 Release History
   3967 
   3968    GCC 8.5
   3969           May 14, 2021 ([2]changes, [3]documentation)
   3970 
   3971    GCC 8.4
   3972           Mar 4, 2020 ([4]changes, [5]documentation)
   3973 
   3974    GCC 8.3
   3975           Feb 22, 2019 ([6]changes, [7]documentation)
   3976 
   3977    GCC 8.2
   3978           Jul 26, 2018 ([8]changes, [9]documentation)
   3979 
   3980    GCC 8.1
   3981           May 2, 2018 ([10]changes, [11]documentation)
   3982 
   3983 References and Acknowledgements
   3984 
   3985    GCC used to stand for the GNU C Compiler, but since the compiler
   3986    supports several other languages aside from C, it now stands for the
   3987    GNU Compiler Collection.
   3988 
   3989    A list of [12]successful builds is updated as new information becomes
   3990    available.
   3991 
   3992    The GCC developers would like to thank the numerous people that have
   3993    contributed new features, improvements, bug fixes, and other changes as
   3994    well as test results to GCC. This [13]amazing group of volunteers is
   3995    what makes GCC successful.
   3996 
   3997    For additional information about GCC please refer to the [14]GCC
   3998    project web site or contact the [15]GCC development mailing list.
   3999 
   4000    To obtain GCC please use [16]our mirror sites or [17]our version
   4001    control system.
   4002 
   4003 
   4004     For questions related to the use of GCC, please consult these web
   4005     pages and the [18]GCC manuals. If that fails, the
   4006     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4007     web pages and the development of GCC are welcome on our developer
   4008     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   4009     archives.
   4010 
   4011    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   4012    distribution of this entire article is permitted in any medium,
   4013    provided this notice is preserved.
   4014 
   4015    These pages are [23]maintained by the GCC team. Last modified
   4016    2024-05-30.
   4017 
   4018 References
   4019 
   4020    1. http://www.gnu.org/
   4021    2. https://gcc.gnu.org/gcc-8/changes.html
   4022    3. https://gcc.gnu.org/onlinedocs/8.5.0/
   4023    4. https://gcc.gnu.org/gcc-8/changes.html
   4024    5. https://gcc.gnu.org/onlinedocs/8.4.0/
   4025    6. https://gcc.gnu.org/gcc-8/changes.html
   4026    7. https://gcc.gnu.org/onlinedocs/8.3.0/
   4027    8. https://gcc.gnu.org/gcc-8/changes.html
   4028    9. https://gcc.gnu.org/onlinedocs/8.2.0/
   4029   10. https://gcc.gnu.org/gcc-8/changes.html
   4030   11. https://gcc.gnu.org/onlinedocs/8.1.0/
   4031   12. https://gcc.gnu.org/gcc-8/buildstat.html
   4032   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
   4033   14. https://gcc.gnu.org/index.html
   4034   15. mailto:gcc (a] gcc.gnu.org
   4035   16. https://gcc.gnu.org/mirrors.html
   4036   17. https://gcc.gnu.org/git.html
   4037   18. https://gcc.gnu.org/onlinedocs/
   4038   19. mailto:gcc-help (a] gcc.gnu.org
   4039   20. mailto:gcc (a] gcc.gnu.org
   4040   21. https://gcc.gnu.org/lists.html
   4041   22. https://www.fsf.org/
   4042   23. https://gcc.gnu.org/about.html
   4043 ======================================================================
   4044 http://gcc.gnu.org/gcc-8/changes.html
   4045 
   4046                               GCC 8 Release Series
   4047                         Changes, New Features, and Fixes
   4048 
   4049    This page is a "brief" summary of some of the huge number of
   4050    improvements in GCC 8. You may also want to check out our [1]Porting to
   4051    GCC 8 page and the [2]full GCC documentation.
   4052 
   4053 Caveats
   4054 
   4055      * The default mode for C is now -std=gnu17 instead of -std=gnu11.
   4056      * Support for the obsolete SDB/coff debug info format has been
   4057        removed. The option -gcoff no longer does anything.
   4058      * The Cilk+ extensions to the C and C++ languages have been removed.
   4059      * The MPX extensions to the C and C++ languages have been deprecated
   4060        and will be removed in a future release.
   4061      * The extension allowing arithmetic on std::atomic<void*> and types
   4062        like std::atomic<R(*)()> has been deprecated.
   4063      * The non-standard C++0x std::copy_exception function was removed.
   4064        std::make_exception_ptr should be used instead.
   4065      * Support for the powerpc*-*-*spe* target ports which have been
   4066        recently unmaintained and untested in GCC has been declared
   4067        obsolete in GCC 8 as [3]announced. Unless there is activity to
   4068        revive them, the next release of GCC will have their sources
   4069        permanently removed.
   4070 
   4071 [4]General Improvements
   4072 
   4073      * Inter-procedural optimization improvements:
   4074           + Reworked run-time estimation metrics leading to more realistic
   4075             guesses driving inliner and cloning heuristics.
   4076           + The ipa-pure-const pass is extended to propagate the malloc
   4077             attribute, and the corresponding warning option
   4078             -Wsuggest-attribute=malloc emits a diagnostic for functions
   4079             which can be annotated with the malloc attribute.
   4080      * Profile driven optimization improvements:
   4081           + New infrastructure for representing profiles (both statically
   4082             guessed and profile feedback) which allows propagation of
   4083             additional information about the reliability of the profile.
   4084           + A number of improvements in the profile updating code solving
   4085             problems found by new verification code.
   4086           + Static detection of code which is not executed in a valid run
   4087             of the program. This includes paths which trigger undefined
   4088             behavior as well as calls to functions declared with the cold
   4089             attribute. Newly the noreturn attribute does not imply all
   4090             effects of cold to differentiate between exit (which is
   4091             noreturn) and abort (which is in addition not executed in
   4092             valid runs).
   4093           + -freorder-blocks-and-partition, a pass splitting function
   4094             bodies into hot and cold regions, is now enabled by default at
   4095             -O2 and higher for x86 and x86-64.
   4096      * Link-time optimization improvements:
   4097           + We have significantly improved debug information on ELF
   4098             targets using DWARF by properly preserving language-specific
   4099             information. This allows for example the libstdc++
   4100             pretty-printers to work with LTO optimized executables.
   4101      * A new option -fcf-protection=[full|branch|return|none] is
   4102        introduced to perform code instrumentation to increase program
   4103        security by checking that target addresses of control-flow transfer
   4104        instructions (such as indirect function call, function return,
   4105        indirect jump) are valid. Currently the instrumentation is
   4106        supported on x86 GNU/Linux targets only. See the user guide for
   4107        further information about the option syntax and section "New
   4108        Targets and Target Specific Improvements" for IA-32/x86-64 for more
   4109        details.
   4110      * The -gcolumn-info option is now enabled by default. It includes
   4111        column information in addition to just filenames and line numbers
   4112        in DWARF debugging information.
   4113      * The polyhedral-based loop nest optimization pass
   4114        -floop-nest-optimize has been overhauled. It's still considered
   4115        experimental and may not result in any runtime improvements.
   4116      * Two new classical loop nest optimization passes have been added.
   4117        -floop-unroll-and-jam performs outer loop unrolling and fusing of
   4118        the inner loop copies. -floop-interchange exchanges loops in a loop
   4119        nest to improve data locality. Both passes are enabled by default
   4120        at -O3 and above.
   4121      * The classic loop nest optimization pass -ftree-loop-distribution
   4122        has been improved and enabled by default at -O3 and above. It
   4123        supports loop nest distribution in some restricted scenarios; it
   4124        also supports cancellable innermost loop distribution with loop
   4125        versioning under run-time alias checks.
   4126      * The new option -fstack-clash-protection causes the compiler to
   4127        insert probes whenever stack space is allocated statically or
   4128        dynamically to reliably detect stack overflows and thus mitigate
   4129        the attack vector that relies on jumping over a stack guard page as
   4130        provided by the operating system.
   4131      * A new pragma GCC unroll has been implemented in the C family of
   4132        languages, as well as Fortran and Ada, so as to make it possible
   4133        for the user to have a finer-grained control over the loop
   4134        unrolling optimization.
   4135      * GCC has been enhanced to detect more instances of meaningless or
   4136        mutually exclusive attribute specifications and handle such
   4137        conflicts more consistently. Mutually exclusive attribute
   4138        specifications are ignored with a warning regardless of whether
   4139        they appear on the same declaration or on distinct declarations of
   4140        the same entity. For example, because the noreturn attribute on the
   4141        second declaration below is mutually exclusive with the malloc
   4142        attribute on the first, it is ignored and a warning is issued.
   4143 >
   4144       void* __attribute__ ((malloc)) f (unsigned);
   4145       void* __attribute__ ((noreturn)) f (unsigned);
   4146 
   4147       warning: ignoring attribute 'noreturn' because it conflicts with attribute
   4148  'malloc' [-Wattributes]
   4149      * The gcov tool can distinguish functions that begin on a same line
   4150        in a source file. This can be a different template instantiation or
   4151        a class constructor:
   4152 
   4153 File 'ins.C'
   4154 Lines executed:100.00% of 8
   4155 Creating 'ins.C.gcov'
   4156 
   4157         -:    0:Source:ins.C
   4158         -:    0:Graph:ins.gcno
   4159         -:    0:Data:ins.gcda
   4160         -:    0:Runs:1
   4161         -:    0:Programs:1
   4162         -:    1:template<class T>
   4163         -:    2:class Foo
   4164         -:    3:{
   4165         -:    4: public:
   4166         2:    5:   Foo(): b (1000) {}
   4167 ------------------
   4168 Foo<char>::Foo():
   4169         1:    5:   Foo(): b (1000) {}
   4170 ------------------
   4171 Foo<int>::Foo():
   4172         1:    5:   Foo(): b (1000) {}
   4173 ------------------
   4174         2:    6:   void inc () { b++; }
   4175 ------------------
   4176 Foo<char>::inc():
   4177         1:    6:   void inc () { b++; }
   4178 ------------------
   4179 Foo<int>::inc():
   4180         1:    6:   void inc () { b++; }
   4181 ------------------
   4182         -:    7:
   4183         -:    8:  private:
   4184         -:    9:   int b;
   4185         -:   10:};
   4186         -:   11:
   4187         1:   12:int main(int argc, char **argv)
   4188         -:   13:{
   4189         1:   14:  Foo<int> a;
   4190         1:   15:  Foo<char> b;
   4191         -:   16:
   4192         1:   17:  a.inc ();
   4193         1:   18:  b.inc ();
   4194         1:   19:}
   4195 
   4196      * The gcov tool has more accurate numbers for execution of lines in a
   4197        source file.
   4198      * The gcov tool can use TERM colors to provide more readable output.
   4199      * AddressSanitizer gained a new pair of sanitization options,
   4200        -fsanitize=pointer-compare and -fsanitize=pointer-subtract, which
   4201        warn about subtraction (or comparison) of pointers that point to a
   4202        different memory object:
   4203 
   4204 int
   4205 main ()
   4206 {
   4207   /* Heap allocated memory.  */
   4208   char *heap1 = (char *)__builtin_malloc (42);
   4209   char *heap2 = (char *)__builtin_malloc (42);
   4210   if (heap1 > heap2)
   4211       return 1;
   4212 
   4213   return 0;
   4214 }
   4215 
   4216 ==17465==ERROR: AddressSanitizer: invalid-pointer-pair: 0x604000000010 0x6040000
   4217 00050
   4218     #0 0x40070f in main /tmp/pointer-compare.c:7
   4219     #1 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4220     #2 0x400629 in _start (/tmp/a.out+0x400629)
   4221 
   4222 0x604000000010 is located 0 bytes inside of 42-byte region [0x604000000010,0x604
   4223 00000003a)
   4224 allocated by thread T0 here:
   4225     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   4226 _malloc_linux.cc:86
   4227     #1 0x4006ea in main /tmp/pointer-compare.c:5
   4228     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4229 
   4230 0x604000000050 is located 0 bytes inside of 42-byte region [0x604000000050,0x604
   4231 00000007a)
   4232 allocated by thread T0 here:
   4233     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   4234 _malloc_linux.cc:86
   4235     #1 0x4006f8 in main /tmp/pointer-compare.c:6
   4236     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4237 
   4238 SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-compare.c:7 in main
   4239 
   4240      * The store merging pass has been enhanced to handle bit-fields and
   4241        not just constant stores, but also data copying from adjacent
   4242        memory locations into other adjacent memory locations, including
   4243        bitwise logical operations on the data. The pass can also handle
   4244        byte swapping into memory locations.
   4245      * The undefined behavior sanitizer gained two new options included in
   4246        -fsanitize=undefined: -fsanitize=builtin which diagnoses at run
   4247        time invalid arguments to __builtin_clz or __builtin_ctz prefixed
   4248        builtins, and -fsanitize=pointer-overflow which performs cheap run
   4249        time tests for pointer wrapping.
   4250      * A new attribute no_sanitize can be applied to functions to instruct
   4251        the compiler not to do sanitization of the options provided as
   4252        arguments to the attribute. Acceptable values for no_sanitize match
   4253        those acceptable by the -fsanitize command-line option.
   4254 
   4255 void __attribute__ ((no_sanitize ("alignment", "object-size")))
   4256 f () { /* Do something. */; }
   4257 
   4258 [5]New Languages and Language specific improvements
   4259 
   4260   [6]Ada
   4261 
   4262      * For its internal exception handling used on the host for error
   4263        recovery in the front-end, the compiler now relies on the native
   4264        exception handling mechanism of the host platform, which should be
   4265        more efficient than the former mechanism.
   4266 
   4267   [7]BRIG (HSAIL)
   4268 
   4269    In this release cycle, the focus for the BRIGFE was on stabilization
   4270    and performance improvements. Also a couple of completely new features
   4271    were added.
   4272      * Improved support for function and module scope group segment
   4273        variables. PRM specs define function and module scope group segment
   4274        variables as an experimental feature. However, PRM test suite uses
   4275        them. Now group segment is handled by separate book keeping of
   4276        module scope and function (kernel) offsets. Each function has a
   4277        "frame" in the group segment offset to which is given as an
   4278        argument, similar to traditional call stack frame handling.
   4279      * Reduce the number of type conversions due to the untyped HSAIL
   4280        registers. Instead of always representing the HSAIL's untyped
   4281        registers as unsigned int, the gccbrig now pre-analyzes the BRIG
   4282        code and builds the register variables as a type used the most when
   4283        storing or reading data to/from each register. This reduces the
   4284        number of total casts which cannot be always optimized away.
   4285      * Support for BRIG_KIND_NONE directives.
   4286      * Made -O3 the default optimization level for BRIGFE.
   4287      * Fixed illegal addresses generated from address expressions which
   4288        refer only to offset 0.
   4289      * Fixed a bug with reg+offset addressing on 32b segments. In 'large'
   4290        mode, the offset is treated as 32-bit unless it's in global,
   4291        read-only or kernarg address space.
   4292      * Fixed a crash caused sometimes by calls with more than 4 arguments.
   4293      * Fixed a mis-execution issue with kernels that have both unexpanded
   4294        ID functions and calls to subfunctions.
   4295      * Treat HSAIL barrier builtins as setjmp/longjump style functions to
   4296        avoid illegal optimizations.
   4297      * Ensure per WI copies of private variables are aligned correctly.
   4298      * libhsail-rt: Assume the host runtime allocates the work group
   4299        memory.
   4300 
   4301   [8]C family
   4302 
   4303      * New command-line options have been added for the C and C++
   4304        compilers:
   4305           + [9]-Wmultistatement-macros warns about unsafe macros expanding
   4306             to multiple statements used as a body of a statement such as
   4307             if, else, while, switch, or for.
   4308           + [10]-Wstringop-truncation warns for calls to bounded string
   4309             manipulation functions such as strncat, strncpy, and stpncpy
   4310             that might either truncate the copied string or leave the
   4311             destination unchanged. For example, the following call to
   4312             strncat is diagnosed because it appends just three of the four
   4313             characters from the source string.
   4314 void append (char *buf, size_t bufsize)
   4315 {
   4316     strncat (buf, ".txt", 3);
   4317 }
   4318 warning: 'strncat' output truncated copying 3 bytes from a string of length 4 [-
   4319 Wstringop-truncation]
   4320             Similarly, in the following example, the call to strncpy
   4321             specifies the size of the destination buffer as the bound. If
   4322             the length of the source string is equal to or greater than
   4323             this size the result of the copy will not be NUL-terminated.
   4324             Therefore, the call is also diagnosed. To avoid the warning,
   4325             specify sizeof buf - 1 as the bound and set the last element
   4326             of the buffer to NUL.
   4327 void copy (const char *s)
   4328 {
   4329     char buf[80];
   4330     strncpy (buf, s, sizeof buf);
   4331     ...
   4332 }
   4333 warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
   4334 tion]
   4335             The -Wstringop-truncation option is included in -Wall.
   4336             Note that due to GCC bug [11]82944, defining strncat, strncpy,
   4337             or stpncpy as a macro in a system header as some
   4338             implementations do, suppresses the warning.
   4339           + [12]-Wif-not-aligned controls warnings issued in response to
   4340             invalid uses of objects declared with attribute
   4341             [13]warn_if_not_aligned.
   4342             The -Wif-not-aligned option is included in -Wall.
   4343           + [14]-Wmissing-attributes warns when a declaration of a
   4344             function is missing one or more attributes that a related
   4345             function is declared with and whose absence may adversely
   4346             affect the correctness or efficiency of generated code. For
   4347             example, in C++, the warning is issued when an explicit
   4348             specialization of a primary template declared with attribute
   4349             alloc_align, alloc_size, assume_aligned, format, format_arg,
   4350             malloc, or nonnull is declared without it. Attributes
   4351             deprecated, error, and warning suppress the warning.
   4352             The -Wmissing-attributes option is included in -Wall.
   4353           + [15]-Wpacked-not-aligned warns when a struct or union declared
   4354             with attribute packed defines a member with an explicitly
   4355             specified alignment greater than 1. Such a member will wind up
   4356             under-aligned. For example, a warning will be issued for the
   4357             definition of struct A in the following:
   4358 struct __attribute__ ((aligned (8)))
   4359 S8 { char a[8]; };
   4360 
   4361 struct __attribute__ ((packed)) A
   4362 {
   4363     struct S8 s8;
   4364 };
   4365 warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-not-aligned]
   4366             The -Wpacked-not-aligned option is included in -Wall.
   4367           + -Wcast-function-type warns when a function pointer is cast to
   4368             an incompatible function pointer. This warning is enabled by
   4369             -Wextra.
   4370           + -Wsizeof-pointer-div warns for suspicious divisions of the
   4371             size of a pointer by the size of the elements it points to,
   4372             which looks like the usual way to compute the array size but
   4373             won't work out correctly with pointers. This warning is
   4374             enabled by -Wall.
   4375           + -Wcast-align=strict warns whenever a pointer is cast such that
   4376             the required alignment of the target is increased. For
   4377             example, warn if a char * is cast to an int * regardless of
   4378             the target machine.
   4379           + -fprofile-abs-path creates absolute path names in the .gcno
   4380             files. This allows gcov to find the correct sources in
   4381             projects where compilations occur with different working
   4382             directories.
   4383      * -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and
   4384        signed integer overflow is now undefined by default at all
   4385        optimization levels. Using -fsanitize=signed-integer-overflow is
   4386        now the preferred way to audit code, -Wstrict-overflow is
   4387        deprecated.
   4388      * The [16]-Warray-bounds option has been improved to detect more
   4389        instances of out-of-bounds array indices and pointer offsets. For
   4390        example, negative or excessive indices into flexible array members
   4391        and string literals are detected.
   4392      * The [17]-Wrestrict option introduced in GCC 7 has been enhanced to
   4393        detect many more instances of overlapping accesses to objects via
   4394        restrict-qualified arguments to standard memory and string
   4395        manipulation functions such as memcpy and strcpy. For example, the
   4396        strcpy call in the function below attempts to truncate the string
   4397        by replacing its initial characters with the last four. However,
   4398        because the function writes the terminating NUL into a[4], the
   4399        copies overlap and the call is diagnosed.
   4400 void f (void)
   4401 {
   4402     char a[] = "abcd1234";
   4403     strcpy (a, a + 4);
   4404     ...
   4405 }
   4406 warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   4407  4 [-Wrestrict]
   4408        The -Wrestrict option is included in -Wall.
   4409      * Several optimizer enhancements have enabled improvements to the
   4410        [18]-Wformat-overflow and [19]-Wformat-truncation options. The
   4411        warnings detect more instances of buffer overflow and truncation
   4412        than in GCC 7 and are better at avoiding certain kinds of false
   4413        positives.
   4414      * When reporting mismatching argument types at a function call, the C
   4415        and C++ compilers now underline both the argument and the pertinent
   4416        parameter in the declaration.
   4417 $ gcc arg-type-mismatch.cc
   4418 arg-type-mismatch.cc: In function 'int caller(int, int, float)':
   4419 arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' to 'const char*'
   4420  [-fpermissive]
   4421    return callee(first, second, third);
   4422                         ^~~~~~
   4423 arg-type-mismatch.cc:1:40: note:   initializing argument 2 of 'int callee(int, c
   4424 onst char*, float)'
   4425  extern int callee(int one, const char *two, float three);
   4426                             ~~~~~~~~~~~~^~~
   4427 
   4428      * When reporting on unrecognized identifiers, the C and C++ compilers
   4429        will now emit fix-it hints suggesting #include directives for
   4430        various headers in the C and C++ standard libraries.
   4431 $ gcc incomplete.c
   4432 incomplete.c: In function 'test':
   4433 incomplete.c:3:10: error: 'NULL' undeclared (first use in this function)
   4434    return NULL;
   4435           ^~~~
   4436 incomplete.c:3:10: note: 'NULL' is defined in header '<stddef.h>'; did you forge
   4437 t to '#include <stddef.h>'?
   4438 incomplete.c:1:1:
   4439 +#include <stddef.h>
   4440  const char *test(void)
   4441 incomplete.c:3:10:
   4442    return NULL;
   4443           ^~~~
   4444 incomplete.c:3:10: note: each undeclared identifier is reported only once for ea
   4445 ch function it appears in
   4446 
   4447 $ gcc incomplete.cc
   4448 incomplete.cc:1:6: error: 'string' in namespace 'std' does not name a type
   4449  std::string s("hello world");
   4450       ^~~~~~
   4451 incomplete.cc:1:1: note: 'std::string' is defined in header '<string>'; did you
   4452 forget to '#include <string>'?
   4453 +#include <string>
   4454  std::string s("hello world");
   4455  ^~~
   4456 
   4457      * The C and C++ compilers now use more intuitive locations when
   4458        reporting on missing semicolons, and offer fix-it hints:
   4459 $ gcc t.c
   4460 t.c: In function 'test':
   4461 t.c:3:12: error: expected ';' before '}' token
   4462    return 42
   4463             ^
   4464             ;
   4465  }
   4466  ~
   4467 
   4468      * When reporting on missing '}' and ')' tokens, the C and C++
   4469        compilers will now highlight the corresponding '{' and '(' token,
   4470        issuing a 'note' if it's on a separate line:
   4471 $ gcc unclosed.c
   4472 unclosed.c: In function 'log_when_out_of_range':
   4473 unclosed.c:12:50: error: expected ')' before '{' token
   4474        && (temperature < MIN || temperature > MAX) {
   4475                                                   ^~
   4476                                                   )
   4477 unclosed.c:11:6: note: to match this '('
   4478    if (logging_enabled && check_range ()
   4479       ^
   4480 
   4481        or highlighting it directly if it's on the same line:
   4482 $ gcc unclosed-2.c
   4483 unclosed-2.c: In function 'test':
   4484 unclosed-2.c:8:45: error: expected ')' before '{' token
   4485    if (temperature < MIN || temperature > MAX {
   4486       ~                                      ^~
   4487                                              )
   4488 
   4489        They will also emit fix-it hints.
   4490 
   4491   [20]C
   4492 
   4493      * New options -std=c17, to select support for the 2018 edition of the
   4494        ISO C standard (__STDC_VERSION__ == 201710L), and -std=gnu17, for
   4495        C17 with GNU extensions.
   4496      * The default mode has been changed to -std=gnu17.
   4497 
   4498   [21]C++
   4499 
   4500      * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
   4501        convention, which changes the ABI for some uncommon code:
   4502           + Passing an empty class as an argument now takes up no space on
   4503             x86_64, as required by the psABI.
   4504           + Passing or returning a class with only deleted copy and move
   4505             constructors now uses the same calling convention as a class
   4506             with a non-trivial copy or move constructor. This only affects
   4507             C++17 mode, as in earlier standards passing or returning such
   4508             a class was impossible.
   4509           + WARNING: In GCC 8.1 the second change mistakenly also affects
   4510             classes with a deleted copy constructor and defaulted trivial
   4511             move constructor (bug [22]c++/86094). This issue is fixed in
   4512             GCC 8.2 (-fabi-version=13).
   4513        You can test whether these changes affect your code with -Wabi=11
   4514        (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
   4515        problematic for your project, the GCC 7 ABI can be selected with
   4516        -fabi-version=11.
   4517      * The value of the C++11 alignof operator has been corrected to match
   4518        C _Alignof (minimum alignment) rather than GNU __alignof__
   4519        (preferred alignment); on ia32 targets this means that
   4520        alignof(double) is now 4 rather than 8. Code that wants the
   4521        preferred alignment should use __alignof__ instead.
   4522      * New command-line options have been added for the C++ compiler to
   4523        control warnings:
   4524           + [23]-Wclass-memaccess warns when objects of non-trivial class
   4525             types are manipulated in potentially unsafe ways by raw memory
   4526             functions such as memcpy, or realloc. The warning helps detect
   4527             calls that bypass user-defined constructors or copy-assignment
   4528             operators, corrupt virtual table pointers, data members of
   4529             const-qualified types or references, or member pointers. The
   4530             warning also detects calls that would bypass access controls
   4531             to data members. For example, a call such as:
   4532         memcpy (&std::cout, &std::cerr, sizeof std::cout);
   4533             results in
   4534         warning: 'void* memcpy(void*, const void*, long unsigned int)' writing t
   4535 o an object of type 'std::ostream' {aka 'class std::basic_ostream<char>'} with n
   4536 o trivial copy-assignment [-Wclass-memaccess]
   4537             The -Wclass-memaccess option is included in -Wall.
   4538      * The C++ front end has experimental support for some of the upcoming
   4539        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   4540        including designated initializers, default member initializers for
   4541        bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
   4542        lambda [=, this] captures, etc. For a full list of new features,
   4543        see [24]the C++ status page.
   4544      * When reporting on attempts to access private fields of a class or
   4545        struct, the C++ compiler will now offer fix-it hints showing how to
   4546        use an accessor function to get at the field in question, if one
   4547        exists.
   4548 $ gcc accessor.cc
   4549 accessor.cc: In function 'void test(foo*)':
   4550 accessor.cc:12:12: error: 'double foo::m_ratio' is private within this context
   4551    if (ptr->m_ratio >= 0.5)
   4552             ^~~~~~~
   4553 accessor.cc:7:10: note: declared private here
   4554    double m_ratio;
   4555           ^~~~~~~
   4556 accessor.cc:12:12: note: field 'double foo::m_ratio' can be accessed via 'double
   4557  foo::get_ratio() const'
   4558    if (ptr->m_ratio >= 0.5)
   4559             ^~~~~~~
   4560             get_ratio()
   4561 
   4562      * The C++ compiler can now give you a hint if you use a macro before
   4563        it was defined (e.g. if you mess up the order of your #include
   4564        directives):
   4565 $ gcc ordering.cc
   4566 ordering.cc:2:24: error: expected ';' at end of member declaration
   4567    virtual void clone() const OVERRIDE { }
   4568                         ^~~~~
   4569                              ;
   4570 ordering.cc:2:30: error: 'OVERRIDE' does not name a type
   4571    virtual void clone() const OVERRIDE { }
   4572                               ^~~~~~~~
   4573 ordering.cc:2:30: note: the macro 'OVERRIDE' had not yet been defined
   4574 In file included from ordering.cc:5:
   4575 c++11-compat.h:2: note: it was later defined here
   4576  #define OVERRIDE override
   4577 
   4578 
   4579      * The -Wold-style-cast diagnostic can now emit fix-it hints telling
   4580        you when you can use a static_cast, const_cast, or
   4581        reinterpret_cast.
   4582 $ gcc -c old-style-cast-fixits.cc -Wold-style-cast
   4583 old-style-cast-fixits.cc: In function 'void test(void*)':
   4584 old-style-cast-fixits.cc:5:19: warning: use of old-style cast to 'struct foo*' [
   4585 -Wold-style-cast]
   4586    foo *f = (foo *)ptr;
   4587                    ^~~
   4588             ----------
   4589             static_cast<foo *> (ptr)
   4590 
   4591      * When reporting on problems within extern "C" linkage
   4592        specifications, the C++ compiler will now display the location of
   4593        the start of the extern "C".
   4594 $ gcc -c extern-c.cc
   4595 extern-c.cc:3:1: error: template with C linkage
   4596  template <typename T> void test (void);
   4597  ^~~~~~~~
   4598 In file included from extern-c.cc:1:
   4599 unclosed.h:1:1: note: 'extern "C"' linkage started here
   4600  extern "C" {
   4601  ^~~~~~~~~~
   4602 extern-c.cc:3:39: error: expected '}' at end of input
   4603  template <typename T> void test (void);
   4604                                        ^
   4605 In file included from extern-c.cc:1:
   4606 unclosed.h:1:12: note: to match this '{'
   4607  extern "C" {
   4608             ^
   4609 
   4610      * When reporting on mismatching template types, the C++ compiler will
   4611        now use color to highlight the mismatching parts of the template,
   4612        and will elide the parameters that are common between two
   4613        mismatching templates, printing [...] instead:
   4614 $ gcc templates.cc
   4615 templates.cc: In function 'void test()':
   4616 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   4617 e>' to 'vector<int>'
   4618    fn_1(vector<double> ());
   4619         ^~~~~~~~~~~~~~~~~
   4620 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<[...]
   4621 ,double>' to 'map<[...],int>'
   4622    fn_2(map<int, double>());
   4623         ^~~~~~~~~~~~~~~~~~
   4624 
   4625        Those [...] elided parameters can be seen using -fno-elide-type:
   4626 $ gcc templates.cc -fno-elide-type
   4627 templates.cc: In function 'void test()':
   4628 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   4629 e>' to 'vector<int>'
   4630    fn_1(vector<double> ());
   4631         ^~~~~~~~~~~~~~~~~
   4632 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<int,d
   4633 ouble>' to 'map<int,int>'
   4634    fn_2(map<int, double>());
   4635         ^~~~~~~~~~~~~~~~~~
   4636 
   4637        The C++ compiler has also gained an option
   4638        -fdiagnostics-show-template-tree which visualizes such mismatching
   4639        templates in a hierarchical form:
   4640 $ gcc templates-2.cc -fdiagnostics-show-template-tree
   4641 templates-2.cc: In function 'void test()':
   4642 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   4643 ble>' to 'vector<int>'
   4644   vector<
   4645     [double != int]>
   4646    fn_1(vector<double> ());
   4647         ^~~~~~~~~~~~~~~~~
   4648 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   4649 ctor<double> >()' from 'map<map<[...],vector<double>>,vector<double>>' to 'map<m
   4650 ap<[...],vector<float>>,vector<float>>'
   4651   map<
   4652     map<
   4653       [...],
   4654       vector<
   4655         [double != float]>>,
   4656     vector<
   4657       [double != float]>>
   4658    fn_2(map<map<int, vector<double>>, vector<double>> ());
   4659         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   4660 
   4661        which again works with -fno-elide-type:
   4662 $ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
   4663 templates-2.cc: In function 'void test()':
   4664 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   4665 ble>' to 'vector<int>'
   4666   vector<
   4667     [double != int]>
   4668    fn_1(vector<double> ());
   4669         ^~~~~~~~~~~~~~~~~
   4670 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   4671 ctor<double> >()' from 'map<map<int,vector<double>>,vector<double>>' to 'map<map
   4672 <int,vector<float>>,vector<float>>'
   4673   map<
   4674     map<
   4675       int,
   4676       vector<
   4677         [double != float]>>,
   4678     vector<
   4679       [double != float]>>
   4680    fn_2(map<map<int, vector<double>>, vector<double>> ());
   4681         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   4682 
   4683      * Flowing off the end of a non-void function is considered
   4684        unreachable and may be subject to optimization on that basis. As a
   4685        result of this change, -Wreturn-type warnings are enabled by
   4686        default for C++.
   4687 
   4688     [25]Runtime Library (libstdc++)
   4689 
   4690      * Improved experimental support for C++17, including the following
   4691        features:
   4692           + Deduction guides to support class template argument deduction.
   4693           + std::filesystem implementation.
   4694           + std::char_traits<char> and std::char_traits<wchar_t> are
   4695             usable in constant expressions.
   4696           + std::to_chars and std::from_chars (for integers only, not for
   4697             floating point types).
   4698      * Experimental support for C++2a: std::to_address (thanks to Glen
   4699        Fernandes) and std::endian.
   4700      * On GNU/Linux, std::random_device::entropy() accesses the kernel's
   4701        entropy count for the random device, if known (thanks to Xi
   4702        Ruoyao).
   4703      * Support for std::experimental::source_location.
   4704      * AddressSanitizer integration for std::vector, detecting
   4705        out-of-range accesses to the unused capacity of a vector.
   4706      * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
   4707        Mathematical Special Functions.
   4708 
   4709   [26]Fortran
   4710 
   4711      * The main version of libfortran has been changed to 5.
   4712      * Parameterized derived types, a major feature of Fortran 2003, have
   4713        been implemented.
   4714      * Partial support is provided for Fortran 2018 teams, which are
   4715        hierarchical subsets of images that execute independently of other
   4716        image subsets.
   4717      * The maximum rank for arrays has been increased to 15, conforming to
   4718        the Fortran 2008 standard.
   4719      * Transformational intrinsics are now fully supported in
   4720        initialization expressions.
   4721      * New flag -fc-prototypes to write C prototypes for BIND(C)
   4722        procedures and variables.
   4723      * If -fmax-stack-var-size is honored if given together with -Ofast,
   4724        -fstack-arrays is no longer set in that case.
   4725      * New options -fdefault-real-16 and -fdefault-real-10 to control the
   4726        default kind of REAL variables.
   4727      * A warning is now issued if an array subscript inside a DO loop
   4728        could lead to an out-of-bounds-access. The new option
   4729        -Wdo-subscript, enabled by -Wextra, warns about this even if the
   4730        compiler can not prove that the code will be executed.
   4731      * The Fortran front end now attempts to interchange loops if it is
   4732        deemed profitable. So far, this is restricted to FORALL and DO
   4733        CONCURRENT statements with multiple indices. This behavior be
   4734        controlled with the new flag -ffrontend-loop-interchange, which is
   4735        enabled with optimization by default. The
   4736        -Wfrontend-loop-interchange option warns about such occurrences.
   4737      * When an actual argument contains too few elements for a dummy
   4738        argument, an error is now issued. The -std=legacy option can be
   4739        used to still compile such code.
   4740      * The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
   4741        integers, making records larger than 2GiB possible.
   4742      * The GFORTRAN_DEFAULT_RECL environment variable no longer has any
   4743        effect. The record length for preconnected units is now larger than
   4744        any practical limit, same as for sequential access units opened
   4745        without an explicit RECL= specifier.
   4746      * Character variables longer than HUGE(0) elements are now possible
   4747        on 64-bit targets. Note that this changes the procedure call ABI
   4748        for all procedures with character arguments on 64-bit targets, as
   4749        the type of the hidden character length argument has changed. The
   4750        hidden character length argument is now of type INTEGER(C_SIZE_T).
   4751      * Partial support is provided for Fortran 2018 teams, which are
   4752        hierarchical subsets of images that execute independently of other
   4753        image subsets.
   4754 
   4755   [27]Go
   4756 
   4757      * GCC 8 provides a complete implementation of the Go 1.10.1 user
   4758        packages.
   4759      * The garbage collector is now fully concurrent. As before, values
   4760        stored on the stack are scanned conservatively, but value stored in
   4761        the heap are scanned precisely.
   4762      * Escape analysis is fully implemented and enabled by default in the
   4763        Go front end. This significantly reduces the number of heap
   4764        allocations by allocating values on the stack instead.
   4765 
   4766 [28]libgccjit
   4767 
   4768    The libgccjit API gained four new entry points:
   4769      * [29]gcc_jit_type_get_vector and
   4770      * [30]gcc_jit_context_new_rvalue_from_vector for working with
   4771        vectors,
   4772      * [31]gcc_jit_type_get_aligned
   4773      * [32]gcc_jit_function_get_address
   4774 
   4775    The C code generated by [33]gcc_jit_context_dump_reproducer_to_file is
   4776    now easier-to-read.
   4777 
   4778 [34]New Targets and Target Specific Improvements
   4779 
   4780   [35]AArch64
   4781 
   4782      * The Armv8.4-A architecture is now supported. It can be used by
   4783        specifying the -march=armv8.4-a option.
   4784      * The Dot Product instructions are now supported as an optional
   4785        extension to the Armv8.2-A architecture and newer and are mandatory
   4786        on Armv8.4-A. The extension can be used by specifying the +dotprod
   4787        architecture extension. E.g. -march=armv8.2-a+dotprod.
   4788      * The Armv8-A +crypto extension has now been split into two
   4789        extensions for finer grained control:
   4790           + +aes which contains the Armv8-A AES crytographic instructions.
   4791           + +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
   4792             instructions.
   4793        Using +crypto will now enable these two extensions.
   4794      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   4795        instructions have been added. These instructions are mandatory in
   4796        Armv8.4-A but available as an optional extension to Armv8.2-A and
   4797        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   4798        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   4799        the instructions can be enabled by specifying +fp16.
   4800      * New cryptographic instructions have been added as optional
   4801        extensions to Armv8.2-A and newer. These instructions can be
   4802        enabled with:
   4803           + +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This
   4804             implies +sha2.
   4805           + +sm4 New SM3 and SM4 instructions from Armv8.4-A.
   4806      * The Scalable Vector Extension (SVE) is now supported as an optional
   4807        extension to the Armv8.2-A architecture and newer. This support
   4808        includes automatic vectorization with SVE instructions, but it does
   4809        not yet include the SVE Arm C Language Extensions (ACLE). It can be
   4810        enabled by specifying the +sve architecture extension (for example,
   4811        -march=armv8.2-a+sve). By default, the generated code works with
   4812        all vector lengths, but it can be made specific to N-bit vectors
   4813        using -msve-vector-bits=N.
   4814      * Support has been added for the following processors (GCC
   4815        identifiers in parentheses):
   4816           + Arm Cortex-A75 (cortex-a75).
   4817           + Arm Cortex-A55 (cortex-a55).
   4818           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   4819             (cortex-a75.cortex-a55).
   4820        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4821        options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
   4822        arguments to the equivalent target attributes and pragmas.
   4823 
   4824   [36]ARC
   4825 
   4826      * Added support for:
   4827           + Fast interrupts.
   4828           + Naked functions.
   4829           + aux variable attributes.
   4830           + uncached type qualifier.
   4831           + Secure functions via sjli instruction.
   4832      * New exception handling implementation.
   4833      * Revamped trampoline implementation.
   4834      * Refactored small data feature implementation, controlled via the -G
   4835        command-line option.
   4836      * New support for reduced register set ARC architecture
   4837        configurations, controlled via the -mrf16 command-line option.
   4838      * Refurbished and improved support for zero overhead loops.
   4839        Introduced -mlpc-width command-line option to control the width of
   4840        the lp_count register.
   4841 
   4842   [37]ARM
   4843 
   4844      * The -mfpu option now takes a new option setting of -mfpu=auto. When
   4845        set to this the floating-point and SIMD settings are derived from
   4846        the settings of the -mcpu or -march options. The internal CPU
   4847        configurations have been updated with information about the
   4848        permitted floating-point configurations supported. See the user
   4849        guide for further information about the extended option syntax for
   4850        controlling architectural extensions via the -march option.
   4851        -mfpu=auto is now the default setting unless the compiler has been
   4852        configured with an explicit --with-fpu option.
   4853      * The -march and -mcpu options now accept optional extensions to the
   4854        architecture or CPU option, allowing the user to enable or disable
   4855        any such extensions supported by that architecture or CPU such as
   4856        (but not limited to) floating-point and AdvancedSIMD. For example:
   4857        the option -mcpu=cortex-a53+nofp will generate code for the
   4858        Cortex-A53 processor with no floating-point support. This, in
   4859        combination with the new -mfpu=auto option, provides a
   4860        straightforward way of specifying a valid build target through a
   4861        single -mcpu or -march option. The -mtune option accepts the same
   4862        arguments as -mcpu but only the CPU name has an effect on tuning.
   4863        The architecture extensions do not have any effect. For details of
   4864        what extensions a particular architecture or CPU option supports
   4865        please refer to the [38]documentation.
   4866      * The -mstructure-size-boundary option has been deprecated and will
   4867        be removed in a future release.
   4868      * The default link behavior for Armv6 and Armv7-R targets has been
   4869        changed to produce BE8 format when generating big-endian images. A
   4870        new flag -mbe32 can be used to force the linker to produce legacy
   4871        BE32 format images. There is no change of behavior for Armv6-M and
   4872        other Armv7 or later targets: these already defaulted to BE8
   4873        format. This change brings GCC into alignment with other compilers
   4874        for the ARM architecture.
   4875      * The Armv8-R architecture is now supported. It can be used by
   4876        specifying the -march=armv8-r option.
   4877      * The Armv8.3-A architecture is now supported. It can be used by
   4878        specifying the -march=armv8.3-a option.
   4879      * The Armv8.4-A architecture is now supported. It can be used by
   4880        specifying the -march=armv8.4-a option.
   4881      * The Dot Product instructions are now supported as an optional
   4882        extension to the Armv8.2-A architecture and newer and are mandatory
   4883        on Armv8.4-A. The extension can be used by specifying the +dotprod
   4884        architecture extension. E.g. -march=armv8.2-a+dotprod.
   4885      * Support for setting extensions and architectures using the GCC
   4886        target pragma and attribute has been added. It can be used by
   4887        specifying #pragma GCC target ("arch=..."), #pragma GCC target
   4888        ("+extension"), __attribute__((target("arch=..."))) or
   4889        __attribute__((target("+extension"))).
   4890      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   4891        instructions have been added. These instructions are mandatory in
   4892        Armv8.4-A but available as an optional extension to Armv8.2-A and
   4893        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   4894        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   4895        the instructions can be enabled by specifying +fp16.
   4896      * Support has been added for the following processors (GCC
   4897        identifiers in parentheses):
   4898           + Arm Cortex-A75 (cortex-a75).
   4899           + Arm Cortex-A55 (cortex-a55).
   4900           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   4901             (cortex-a75.cortex-a55).
   4902           + Arm Cortex-R52 for Armv8-R (cortex-r52).
   4903        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4904        options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
   4905        arguments to the equivalent target attributes and pragmas.
   4906 
   4907   [39]AVR
   4908 
   4909      * The AVR port now supports the following XMEGA-like devices:
   4910 
   4911      ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
   4912      ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
   4913      ATtiny3214, ATtiny3216, ATtiny3217
   4914        The new devices are listed under [40]-mmcu=avrxmega3.
   4915           + These devices see flash memory in the RAM address space, so
   4916             that features like PROGMEM and __flash are not needed any more
   4917             (as opposed to other AVR families for which read-only data
   4918             will be located in RAM except special, non-standard features
   4919             are used to locate and access such data). This requires that
   4920             the compiler is used with Binutils 2.29 or newer so that
   4921             [41]read-only data will be located in flash memory.
   4922           + A new command-line option -mshort-calls is supported. This
   4923             option is used internally for multilib selection of the
   4924             avrxmega3 variants. It is not an optimization option. Do not
   4925             set it by hand.
   4926      * The compiler now generates [42]efficient interrupt service routine
   4927        (ISR) prologues and epilogues. This is achieved by using the new
   4928        [43]AVR pseudo instruction __gcc_isr which is supported and
   4929        resolved by the GNU assembler.
   4930           + As the __gcc_isr pseudo-instruction will be resolved by the
   4931             assembler, inline assembly is transparent to the process. This
   4932             means that when inline assembly uses an instruction like INC
   4933             that clobbers the condition code, then the assembler will
   4934             detect this and generate an appropriate ISR prologue /
   4935             epilogue chunk to save / restore SREG as needed.
   4936           + A new command-line option -mno-gas-isr-prologues disables the
   4937             generation of the __gcc_isr pseudo instruction. Any non-naked
   4938             ISR will save and restore SREG, tmp_reg and zero_reg, no
   4939             matter whether the respective register is clobbered or used.
   4940           + The feature is turned on per default for all optimization
   4941             levels except for -O0 and -Og. It is explicitly enabled by
   4942             means of option -mgas-isr-prologues.
   4943           + Support has been added for a new [44]AVR function attribute
   4944             no_gccisr. It can be used to disable __gcc_isr pseudo
   4945             instruction generation for individual ISRs.
   4946           + This optimization is only available if GCC is configured with
   4947             GNU Binutils 2.29 or newer; or at least with a version of
   4948             Binutils that implements feature [45]PR21683.
   4949      * The compiler no more saves / restores registers in main; the effect
   4950        is the same as if attribute OS_task was specified for main. This
   4951        optimization can be switched off by the new command-line option
   4952        -mno-main-is-OS_task.
   4953 
   4954   [46]IA-32/x86-64
   4955 
   4956      * The x86 port now supports the naked function attribute.
   4957      * Better tuning for znver1 and Intel Core based CPUs.
   4958      * Vectorization cost metrics has been reworked leading to significant
   4959        improvements on some benchmarks.
   4960      * GCC now supports the Intel CPU named Cannonlake through
   4961        -march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA
   4962        and SHA ISA extensions.
   4963      * GCC now supports the Intel CPU named Icelake through
   4964        -march=icelake. The switch enables the AVX512VNNI, GFNI, VAES,
   4965        AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ
   4966        ISA extensions.
   4967      * GCC now supports the Intel Control-flow Enforcement Technology
   4968        (CET) extension through -fcf-protection option.
   4969 
   4970   [47]NDS32
   4971 
   4972      * New command-line options -mext-perf, -mext-perf2, and -mext-string
   4973        have been added for performance extension instructions.
   4974 
   4975   [48]Nios II
   4976 
   4977      * The Nios II back end has been improved to generate better-optimized
   4978        code. Changes include switching to LRA, more accurate cost models,
   4979        and more compact code for addressing static variables.
   4980      * New command-line options -mgprel-sec= and -mr0rel-sec= have been
   4981        added.
   4982      * The stack-smashing protection options are now enabled on Nios II.
   4983 
   4984   [49]PA-RISC
   4985 
   4986      * The default call ABI on 32-bit linux has been changed from callee
   4987        copies to caller copies. This affects objects larger than eight
   4988        bytes passed by value. The goal is to improve compatibility with
   4989        x86 and resolve issues with OpenMP.
   4990      * Other PA-RISC targets are unchanged.
   4991 
   4992   [50]PowerPC / PowerPC64 / RS6000
   4993 
   4994      * The PowerPC SPE support is split off to a separate powerpcspe port.
   4995        The separate port is deprecated and might be removed in a future
   4996        release.
   4997      * The Paired Single support (as used on some PPC750 CPUs, -mpaired,
   4998        powerpc*-*-linux*paired*) is deprecated and will be removed in a
   4999        future release.
   5000      * The Xilinx floating point support (-mxilinx-fpu,
   5001        powerpc-xilinx-eabi*) is deprecated and will be removed in a future
   5002        release.
   5003      * Support for using big-endian AltiVec intrinsics on a little-endian
   5004        target (-maltivec=be) is deprecated and will be removed in a future
   5005        release.
   5006 
   5007   [51]Tile
   5008 
   5009      * The TILE-Gx port is deprecated and will be removed in a future
   5010        release.
   5011 
   5012 [52]Operating Systems
   5013 
   5014   [53]Windows
   5015 
   5016      * GCC on Microsoft Windows can now be configured via
   5017        --enable-mingw-wildcard or --disable-mingw-wildcard to force a
   5018        specific behavior for GCC itself with regards to supporting the
   5019        wildcard character. Prior versions of GCC would follow the
   5020        configuration of the MinGW runtime. This behavior can still be
   5021        obtained by not using the above options or by using
   5022        --enable-mingw-wildcard=platform.
   5023 
   5024 [54]Improvements for plugin authors
   5025 
   5026      * Plugins can now register a callback hook for when comments are
   5027        encountered by the C and C++ compilers, e.g. allowing for plugins
   5028        to handle documentation markup in code comments.
   5029      * The gdbinit support script for debugging GCC now has a
   5030        break-on-diagnostic command, providing an easy way to trigger a
   5031        breakpoint whenever a diagnostic is emitted.
   5032      * The API for creating fix-it hints now supports newlines, and for
   5033        emitting mutually incompatible fix-it hints for one diagnostic.
   5034 
   5035 [55]GCC 8.1
   5036 
   5037    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   5038    system that are known to be fixed in the 8.1 release. This list might
   5039    not be complete (that is, it is possible that some PRs that have been
   5040    fixed are not listed here).
   5041 
   5042 [57]GCC 8.2
   5043 
   5044    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   5045    system that are known to be fixed in the 8.2 release. This list might
   5046    not be complete (that is, it is possible that some PRs that have been
   5047    fixed are not listed here).
   5048 
   5049   General Improvements
   5050 
   5051      * Fixed LTO link-time performance problems caused by an overflow in
   5052        the partitioning algorithm while building large binaries.
   5053 
   5054   Language Specific Changes
   5055 
   5056     C++
   5057 
   5058    GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
   5059    returning of classes with a deleted copy constructor and defaulted
   5060    trivial move constructor (bug [59]c++/86094). GCC 8.2 introduces
   5061    -fabi-version=13 and makes it the default, ABI incompatibilities
   5062    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [60]C++
   5063    changes for more details.
   5064 
   5065   Target Specific Changes
   5066 
   5067     IA-32/x86-64
   5068 
   5069      * -mtune=native performance regression [61]PR84413 on Intel Skylake
   5070        processors has been fixed.
   5071 
   5072 [62]GCC 8.3
   5073 
   5074    This is the [63]list of problem reports (PRs) from GCC's bug tracking
   5075    system that are known to be fixed in the 8.3 release. This list might
   5076    not be complete (that is, it is possible that some PRs that have been
   5077    fixed are not listed here).
   5078 
   5079   Windows
   5080 
   5081      * A C++ Microsoft ABI bitfield layout bug, [64]PR87137 has been
   5082        fixed. A non-field declaration could cause the current bitfield
   5083        allocation unit to be completed, incorrectly placing a following
   5084        bitfield into a new allocation unit. The Microsoft ABI is selected
   5085        for:
   5086           + Mingw targets
   5087           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   5088             option is specified, or __attribute__((ms_struct)) is used
   5089           + SuperH targets when the -mhitachi option is specified, or
   5090             __attribute__((renesas)) is used
   5091        GCC 8 introduced additional cases of this defect, but rather than
   5092        resolve only those regressions, we decided to resolve all the cases
   5093        of this defect in single change.
   5094 
   5095 [65]GCC 8.4
   5096 
   5097    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   5098    system that are known to be fixed in the 8.4 release. This list might
   5099    not be complete (that is, it is possible that some PRs that have been
   5100    fixed are not listed here).
   5101 
   5102 [67]GCC 8.5
   5103 
   5104    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   5105    system that are known to be fixed in the 8.5 release. This list might
   5106    not be complete (that is, it is possible that some PRs that have been
   5107    fixed are not listed here).
   5108 
   5109   Target Specific Changes
   5110 
   5111     AArch64
   5112 
   5113      * The option -moutline-atomics has been added to aid deployment of
   5114        the Large System Extensions (LSE) on GNU/Linux systems built with a
   5115        baseline architecture targeting Armv8-A. When the option is
   5116        specified code is emitted to detect the presence of LSE
   5117        instructions at run time and use them for standard atomic
   5118        operations. For more information please refer to the documentation.
   5119 
   5120 
   5121     For questions related to the use of GCC, please consult these web
   5122     pages and the [69]GCC manuals. If that fails, the
   5123     [70]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5124     web pages and the development of GCC are welcome on our developer
   5125     list at [71]gcc (a] gcc.gnu.org. All of [72]our lists have public
   5126     archives.
   5127 
   5128    Copyright (C) [73]Free Software Foundation, Inc. Verbatim copying and
   5129    distribution of this entire article is permitted in any medium,
   5130    provided this notice is preserved.
   5131 
   5132    These pages are [74]maintained by the GCC team. Last modified
   5133    2025-01-31.
   5134 
   5135 References
   5136 
   5137    1. https://gcc.gnu.org/gcc-8/porting_to.html
   5138    2. https://gcc.gnu.org/onlinedocs/index.html#current
   5139    3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
   5140    4. https://gcc.gnu.org/gcc-8/changes.html#general
   5141    5. https://gcc.gnu.org/gcc-8/changes.html#languages
   5142    6. https://gcc.gnu.org/gcc-8/changes.html#ada
   5143    7. https://gcc.gnu.org/gcc-8/changes.html#brig
   5144    8. https://gcc.gnu.org/gcc-8/changes.html#c-family
   5145    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
   5146   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   5147   11. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
   5148   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
   5149   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
   5150   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   5151   15. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
   5152   16. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
   5153   17. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
   5154   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   5155   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   5156   20. https://gcc.gnu.org/gcc-8/changes.html#c
   5157   21. https://gcc.gnu.org/gcc-8/changes.html#cxx
   5158   22. https://gcc.gnu.org/PR86094
   5159   23. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
   5160   24. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   5161   25. https://gcc.gnu.org/gcc-8/changes.html#libstdcxx
   5162   26. https://gcc.gnu.org/gcc-8/changes.html#fortran
   5163   27. https://gcc.gnu.org/gcc-8/changes.html#go
   5164   28. https://gcc.gnu.org/gcc-8/changes.html#jit
   5165   29. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
   5166   30. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
   5167   31. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
   5168   32. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
   5169   33. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
   5170   34. https://gcc.gnu.org/gcc-8/changes.html#targets
   5171   35. https://gcc.gnu.org/gcc-8/changes.html#aarch64
   5172   36. https://gcc.gnu.org/gcc-8/changes.html#arc
   5173   37. https://gcc.gnu.org/gcc-8/changes.html#arm
   5174   38. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
   5175   39. https://gcc.gnu.org/gcc-8/changes.html#avr
   5176   40. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
   5177   41. https://sourceware.org/PR21472
   5178   42. https://gcc.gnu.org/PR20296
   5179   43. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
   5180   44. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
   5181   45. https://sourceware.org/PR21683
   5182   46. https://gcc.gnu.org/gcc-8/changes.html#x86
   5183   47. https://gcc.gnu.org/gcc-8/changes.html#nds32
   5184   48. https://gcc.gnu.org/gcc-8/changes.html#nios2
   5185   49. https://gcc.gnu.org/gcc-8/changes.html#hppa
   5186   50. https://gcc.gnu.org/gcc-8/changes.html#powerpc
   5187   51. https://gcc.gnu.org/gcc-8/changes.html#Tile
   5188   52. https://gcc.gnu.org/gcc-8/changes.html#os
   5189   53. https://gcc.gnu.org/gcc-8/changes.html#windows
   5190   54. https://gcc.gnu.org/gcc-8/changes.html#plugins
   5191   55. https://gcc.gnu.org/gcc-8/changes.html#GCC8.1
   5192   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
   5193   57. https://gcc.gnu.org/gcc-8/changes.html#GCC8.2
   5194   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
   5195   59. https://gcc.gnu.org/PR86094
   5196   60. https://gcc.gnu.org/gcc-8/changes.html#cxx
   5197   61. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
   5198   62. https://gcc.gnu.org/gcc-8/changes.html#GCC8.3
   5199   63. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
   5200   64. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   5201   65. https://gcc.gnu.org/gcc-8/changes.html#GCC8.4
   5202   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
   5203   67. https://gcc.gnu.org/gcc-8/changes.html#GCC8.5
   5204   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
   5205   69. https://gcc.gnu.org/onlinedocs/
   5206   70. mailto:gcc-help (a] gcc.gnu.org
   5207   71. mailto:gcc (a] gcc.gnu.org
   5208   72. https://gcc.gnu.org/lists.html
   5209   73. https://www.fsf.org/
   5210   74. https://gcc.gnu.org/about.html
   5211 ======================================================================
   5212 http://gcc.gnu.org/gcc-7/index.html
   5213 
   5214                               GCC 7 Release Series
   5215 
   5216    (This release series is no longer supported.)
   5217 
   5218    Nov 14, 2019
   5219 
   5220    The [1]GNU project and the GCC developers are pleased to announce the
   5221    release of GCC 7.5.
   5222 
   5223    This release is a bug-fix release, containing fixes for regressions in
   5224    GCC 7.4 relative to previous releases of GCC.
   5225 
   5226 Release History
   5227 
   5228    GCC 7.5
   5229           Nov 14, 2019 ([2]changes, [3]documentation)
   5230 
   5231    GCC 7.4
   5232           Dec 6, 2018 ([4]changes, [5]documentation)
   5233 
   5234    GCC 7.3
   5235           Jan 25, 2018 ([6]changes, [7]documentation)
   5236 
   5237    GCC 7.2
   5238           Aug 14, 2017 ([8]changes, [9]documentation)
   5239 
   5240    GCC 7.1
   5241           May 2, 2017 ([10]changes, [11]documentation)
   5242 
   5243 References and Acknowledgements
   5244 
   5245    GCC used to stand for the GNU C Compiler, but since the compiler
   5246    supports several other languages aside from C, it now stands for the
   5247    GNU Compiler Collection.
   5248 
   5249    A list of [12]successful builds is updated as new information becomes
   5250    available.
   5251 
   5252    The GCC developers would like to thank the numerous people that have
   5253    contributed new features, improvements, bug fixes, and other changes as
   5254    well as test results to GCC. This [13]amazing group of volunteers is
   5255    what makes GCC successful.
   5256 
   5257    For additional information about GCC please refer to the [14]GCC
   5258    project web site or contact the [15]GCC development mailing list.
   5259 
   5260    To obtain GCC please use [16]our mirror sites or [17]our version
   5261    control system.
   5262 
   5263 
   5264     For questions related to the use of GCC, please consult these web
   5265     pages and the [18]GCC manuals. If that fails, the
   5266     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5267     web pages and the development of GCC are welcome on our developer
   5268     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   5269     archives.
   5270 
   5271    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   5272    distribution of this entire article is permitted in any medium,
   5273    provided this notice is preserved.
   5274 
   5275    These pages are [23]maintained by the GCC team. Last modified
   5276    2024-05-30.
   5277 
   5278 References
   5279 
   5280    1. http://www.gnu.org/
   5281    2. https://gcc.gnu.org/gcc-7/changes.html
   5282    3. https://gcc.gnu.org/onlinedocs/7.5.0/
   5283    4. https://gcc.gnu.org/gcc-7/changes.html
   5284    5. https://gcc.gnu.org/onlinedocs/7.4.0/
   5285    6. https://gcc.gnu.org/gcc-7/changes.html
   5286    7. https://gcc.gnu.org/onlinedocs/7.3.0/
   5287    8. https://gcc.gnu.org/gcc-7/changes.html
   5288    9. https://gcc.gnu.org/onlinedocs/7.2.0/
   5289   10. https://gcc.gnu.org/gcc-7/changes.html
   5290   11. https://gcc.gnu.org/onlinedocs/7.1.0/
   5291   12. https://gcc.gnu.org/gcc-7/buildstat.html
   5292   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   5293   14. https://gcc.gnu.org/index.html
   5294   15. mailto:gcc (a] gcc.gnu.org
   5295   16. https://gcc.gnu.org/mirrors.html
   5296   17. https://gcc.gnu.org/git.html
   5297   18. https://gcc.gnu.org/onlinedocs/
   5298   19. mailto:gcc-help (a] gcc.gnu.org
   5299   20. mailto:gcc (a] gcc.gnu.org
   5300   21. https://gcc.gnu.org/lists.html
   5301   22. https://www.fsf.org/
   5302   23. https://gcc.gnu.org/about.html
   5303 ======================================================================
   5304 http://gcc.gnu.org/gcc-7/changes.html
   5305 
   5306                               GCC 7 Release Series
   5307                         Changes, New Features, and Fixes
   5308 
   5309    This page is a brief summary of some of the huge number of improvements
   5310    in GCC 7. For more information, see the [1]Porting to GCC 7 page and
   5311    the [2]full GCC documentation.
   5312 
   5313 Caveats
   5314 
   5315      * GCC now uses [3]LRA (a new local register allocator) by default for
   5316        new targets.
   5317      * The non-standard C++0x type traits has_trivial_default_constructor,
   5318        has_trivial_copy_constructor and has_trivial_copy_assign have been
   5319        removed.
   5320      * The libstdc++ [4]Profile Mode has been deprecated and will be
   5321        removed in a future version.
   5322      * The Cilk+ extensions to the C and C++ languages have been
   5323        deprecated.
   5324      * On ARM targets (arm*-*-*), [5]a bug introduced in GCC 5 that
   5325        affects conformance to the procedure call standard (AAPCS) has been
   5326        fixed. The bug affects some C++ code where class objects are passed
   5327        by value to functions and could result in incorrect or inconsistent
   5328        code being generated. This is an ABI change. If the option -Wpsabi
   5329        is enabled (on by default) the compiler will emit a diagnostic note
   5330        for code that might be affected.
   5331 
   5332 [6]General Optimizer Improvements
   5333 
   5334      * GCC 7 can determine the return value or range of return values of
   5335        some calls to the sprintf family of functions and make it available
   5336        to other optimization passes. Some calls to the snprintf function
   5337        with a zero size argument can be folded into constants. This
   5338        optimization is included in -O1 and can be selectively controlled
   5339        by the -fprintf-return-value option.
   5340      * A new store merging pass has been added. It merges constant stores
   5341        to adjacent memory locations into fewer, wider, stores. It is
   5342        enabled by the -fstore-merging option and at the -O2 optimization
   5343        level or higher (and -Os).
   5344      * A new code hoisting optimization has been added to the partial
   5345        redundancy elimination pass. It attempts to move evaluation of
   5346        expressions executed on all paths to the function exit as early as
   5347        possible. This primarily helps improve code size, but can improve
   5348        the speed of the generated code as well. It is enabled by the
   5349        -fcode-hoisting option and at the -O2 optimization level or higher
   5350        (and -Os).
   5351      * A new interprocedural bitwise constant propagation optimization has
   5352        been added, which propagates knowledge about which bits of
   5353        variables are known to be zero (including pointer alignment
   5354        information) across the call graph. It is enabled by the
   5355        -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled
   5356        at the -O2 optimization level and higher (and -Os). This
   5357        optimization supersedes interprocedural alignment propagation of
   5358        GCC 6, and therefore the option -fipa-cp-alignment is now
   5359        deprecated and ignored.
   5360      * A new interprocedural value range propagation optimization has been
   5361        added, which propagates integral range information across the call
   5362        graph when variable values can be proven to be within those ranges.
   5363        It is enabled by the -fipa-vrp option and at the -O2 optimization
   5364        level and higher (and -Os).
   5365      * A new loop splitting optimization pass has been added. Certain
   5366        loops which contain a condition that is always true on one side of
   5367        the iteration space and always false on the other are split into
   5368        two loops, such that each of the two new loops iterates on just one
   5369        side of the iteration space and the condition does not need to be
   5370        checked inside of the loop. It is enabled by the -fsplit-loops
   5371        option and at the -O3 optimization level or higher.
   5372      * The shrink-wrapping optimization can now separate portions of
   5373        prologues and epilogues to improve performance if some of the work
   5374        done traditionally by prologues and epilogues is not needed on
   5375        certain paths. This is controlled by the -fshrink-wrap-separate
   5376        option, enabled by default. It requires target support, which is
   5377        currently only implemented in the PowerPC and AArch64 ports.
   5378      * AddressSanitizer gained a new sanitization option,
   5379        -fsanitize-address-use-after-scope, which enables sanitization of
   5380        variables whose address is taken and used after a scope where the
   5381        variable is defined:
   5382 
   5383 int
   5384 main (int argc, char **argv)
   5385 {
   5386   char *ptr;
   5387     {
   5388       char my_char;
   5389       ptr = &my_char;
   5390     }
   5391 
   5392   *ptr = 123;
   5393   return *ptr;
   5394 }
   5395 
   5396 ==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba99
   5397 0 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
   5398 WRITE of size 1 at 0x7fffb8dba990 thread T0
   5399     #0 0x4006d4 in main /tmp/use-after-scope-1.c:10
   5400     #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
   5401     #2 0x400739 in _start (/tmp/a.out+0x400739)
   5402 
   5403 Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
   5404     #0 0x40067f in main /tmp/use-after-scope-1.c:3
   5405 
   5406   This frame has 1 object(s):
   5407     [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
   5408 
   5409        The option is enabled by default with -fsanitize=address and
   5410        disabled by default with -fsanitize=kernel-address. Compared to the
   5411        LLVM compiler, where the option already exists, the implementation
   5412        in the GCC compiler has some improvements and advantages:
   5413           + Complex uses of gotos and case labels are properly handled and
   5414             should not report any false positive or false negatives.
   5415           + C++ temporaries are sanitized.
   5416           + Sanitization can handle invalid memory stores that are
   5417             optimized out by the LLVM compiler when optimization is
   5418             enabled.
   5419      * The -fsanitize=signed-integer-overflow suboption of the
   5420        UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even
   5421        on arithmetic operations with generic vectors.
   5422      * Version 5 of the DWARF debugging information standard is supported
   5423        through the -gdwarf-5 option. The DWARF version 4 debugging
   5424        information remains the default until consumers of debugging
   5425        information are adjusted.
   5426 
   5427 [7]New Languages and Language specific improvements
   5428 
   5429    OpenACC support in C, C++, and Fortran continues to be maintained and
   5430    improved. See the [8]OpenACC and [9]Offloading wiki pages for further
   5431    information.
   5432 
   5433   [10]Ada
   5434 
   5435      * On mainstream native platforms, Ada programs no longer require the
   5436        stack to be made executable in order to run properly.
   5437 
   5438   [11]BRIG (HSAIL)
   5439 
   5440    Support for processing BRIG 1.0 files was added in this release. BRIG
   5441    is a binary format for HSAIL (Heterogeneous System Architecture
   5442    Intermediate Language). The BRIG front end can be used for implementing
   5443    HSAIL "finalizers" (compilation of HSAIL to a native ISA) for
   5444    GCC-supported targets. An implementation of an HSAIL runtime library,
   5445    libhsail-rt is also included.
   5446 
   5447   [12]C family
   5448 
   5449      * New command-line options have been added for the C and C++
   5450        compilers:
   5451           + -Wimplicit-fallthrough warns when a switch case falls through.
   5452             This warning has five different levels. The compiler is able
   5453             to parse a wide range of fallthrough comments, depending on
   5454             the level. It also handles control-flow statements, such as
   5455             ifs. It's possible to suppress the warning by either adding a
   5456             fallthrough comment, or by using a null statement:
   5457             __attribute__ ((fallthrough)); (C, C++), or [[fallthrough]];
   5458             (C++17), or [[gnu::fallthrough]]; (C++11/C++14). This warning
   5459             is enabled by -Wextra.
   5460           + -Wpointer-compare warns when a pointer is compared with a zero
   5461             character constant. Such code is now invalid in C++11 and GCC
   5462             rejects it. This warning is enabled by default.
   5463           + -Wduplicated-branches warns when an if-else has identical
   5464             branches.
   5465           + -Wrestrict warns when an argument passed to a
   5466             restrict-qualified parameter aliases with another argument.
   5467           + -Wmemset-elt-size warns for memset calls, when the first
   5468             argument references an array, and the third argument is a
   5469             number equal to the number of elements of the array, but not
   5470             the size of the array. This warning is enabled by -Wall.
   5471           + -Wint-in-bool-context warns about suspicious uses of integer
   5472             values where boolean values are expected. This warning is
   5473             enabled by -Wall.
   5474           + -Wswitch-unreachable warns when a switch statement has
   5475             statements between the controlling expression and the first
   5476             case label which will never be executed. This warning is
   5477             enabled by default.
   5478           + -Wexpansion-to-defined warns when defined is used outside #if.
   5479             This warning is enabled by -Wextra or -Wpedantic.
   5480           + -Wregister warns about uses of the register storage specifier.
   5481             In C++17 this keyword has been removed and for C++17 this is a
   5482             pedantic warning enabled by default. The warning is not
   5483             emitted for the GNU Explicit Register Variables extension.
   5484           + -Wvla-larger-than=N warns about unbounded uses of
   5485             variable-length arrays, and about bounded uses of
   5486             variable-length arrays whose bound can be larger than N bytes.
   5487           + -Wduplicate-decl-specifier warns when a declaration has
   5488             duplicate const, volatile, restrict or _Atomic specifier. This
   5489             warning is enabled by -Wall.
   5490      * GCC 6's C and C++ front ends were able to offer suggestions for
   5491        misspelled field names:
   5492 
   5493 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   5494 you mean 'color'?
   5495    return ptr->colour;
   5496                ^~~~~~
   5497 
   5498        GCC 7 greatly expands the scope of these suggestions. Firstly, it
   5499        adds fix-it hints to such suggestions:
   5500 
   5501 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   5502 you mean 'color'?
   5503    return ptr->colour;
   5504                ^~~~~~
   5505                color
   5506 
   5507        The suggestions now cover many other things, such as misspelled
   5508        function names:
   5509 
   5510 spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_wi
   5511 dget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declarat
   5512 ion]
   5513    gtk_widget_showall (w);
   5514    ^~~~~~~~~~~~~~~~~~
   5515    gtk_widget_show_all
   5516 
   5517        misspelled macro names and enum values:
   5518 
   5519 spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a fun
   5520 ction); did you mean 'MAX_ITEMS'?
   5521  int array[MAX_ITEM];
   5522            ^~~~~~~~
   5523            MAX_ITEMS
   5524 
   5525        misspelled type names:
   5526 
   5527 spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'si
   5528 gned'?
   5529  void test (singed char e);
   5530             ^~~~~~
   5531             signed
   5532 
   5533        and, in the C front end, named initializers:
   5534 
   5535 test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color
   5536 '?
   5537  struct s test = { .colour = 3 };
   5538                     ^~~~~~
   5539                     color
   5540 
   5541      * The preprocessor can now offer suggestions for misspelled
   5542        directives, e.g.:
   5543 
   5544 test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
   5545  #endfi
   5546   ^~~~~
   5547   endif
   5548 
   5549      * Warnings about format strings now underline the pertinent part of
   5550        the string, and can offer suggested fixes. In some cases, the
   5551        pertinent argument is underlined.
   5552 
   5553 test.c:51:29: warning: format '%s' expects argument of type 'char *', but argume
   5554 nt 3 has type 'int' [-Wformat=]
   5555    printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
   5556                           ~^                ~~~~~
   5557                           %d
   5558 
   5559      * The new -Wdangling-else command-line option has been split out of
   5560        -Wparentheses and warns about dangling else.
   5561      * The -Wshadow warning has been split into three variants.
   5562        -Wshadow=global warns for any shadowing. This is the default when
   5563        using -Wshadow without any argument. -Wshadow=local only warns for
   5564        a local variable shadowing another local variable or parameter.
   5565        -Wshadow=compatible-local only warns for a local variable shadowing
   5566        another local variable or parameter whose type is compatible (in
   5567        C++ compatible means that the type of the shadowing variable can be
   5568        converted to that of the shadowed variable).
   5569        The following example shows the different kinds of shadow warnings:
   5570 
   5571 enum operation { add, count };
   5572 struct container { int nr; };
   5573 
   5574 int
   5575 container_count (struct container c, int count)
   5576 {
   5577   int r = 0;
   5578   for (int count = 0; count > 0; count--)
   5579     {
   5580       struct container count = c;
   5581       r += count.nr;
   5582     }
   5583   return r;
   5584 }
   5585 
   5586        -Wshadow=compatible-local will warn for the parameter being
   5587        shadowed with the same type:
   5588 
   5589 warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=
   5590 compatible-local]
   5591    for (int count = 0; count > 0; count--)
   5592             ^~~~~
   5593 warn-test.c:5:42: note: shadowed declaration is here
   5594  container_count (struct container c, int count)
   5595                                           ^~~~~
   5596 
   5597        -Wshadow=local will warn for the above and for the shadowed
   5598        declaration with incompatible type:
   5599 
   5600 warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Ws
   5601 hadow=local]
   5602        struct container count = c;
   5603                         ^~~~~
   5604 warn-test.c:8:12: note: shadowed declaration is here
   5605    for (int count = 0; count > 0; count--)
   5606             ^~~~~
   5607 
   5608        -Wshadow=global will warn for all of the above and the shadowing of
   5609        the global declaration:
   5610 
   5611 warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [
   5612 -Wshadow]
   5613  container_count (struct container c, int count)
   5614                                           ^~~~~
   5615 warn-test.c:1:23: note: shadowed declaration is here
   5616  enum operation { add, count };
   5617                        ^~~~~
   5618 
   5619      * GCC 7 contains a number of enhancements that help detect buffer
   5620        overflow and other forms of invalid memory accesses.
   5621           + The -Walloc-size-larger-than=size option detects calls to
   5622             standard and user-defined memory allocation functions
   5623             decorated with attribute alloc_size whose argument exceeds the
   5624             specified size (PTRDIFF_MAX by default). The option also
   5625             detects arithmetic overflow in the computation of the size in
   5626             two-argument allocation functions like calloc where the total
   5627             size is the product of the two arguments. Since calls with an
   5628             excessive size cannot succeed they are typically the result of
   5629             programming errors. Such bugs have been known to be the source
   5630             of security vulnerabilities and a target of exploits.
   5631             -Walloc-size-larger-than=PTRDIFF_MAX is included in -Wall.
   5632             For example, the following call to malloc incorrectly tries to
   5633             avoid passing a negative argument to the function and instead
   5634             ends up unconditionally invoking it with an argument less than
   5635             or equal to zero. Since after conversion to the type of the
   5636             argument of the function (size_t) a negative argument results
   5637             in a value in excess of the maximum PTRDIFF_MAX the call is
   5638             diagnosed.
   5639 
   5640 void* f (int n)
   5641 {
   5642   return malloc (n > 0 ? 0 : n);
   5643 }
   5644 
   5645 warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2
   5646 147483647 [-Walloc-size-larger-than=]
   5647 
   5648           + The -Walloc-zero option detects calls to standard and
   5649             user-defined memory allocation functions decorated with
   5650             attribute alloc_size with a zero argument. -Walloc-zero is not
   5651             included in either -Wall or -Wextra and must be explicitly
   5652             enabled.
   5653           + The -Walloca option detects all calls to the alloca function
   5654             in the program. -Walloca is not included in either -Wall or
   5655             -Wextra and must be explicitly enabled.
   5656           + The -Walloca-larger-than=size option detects calls to the
   5657             alloca function whose argument either may exceed the specified
   5658             size, or that is not known to be sufficiently constrained to
   5659             avoid exceeding it. -Walloca-larger-than is not included in
   5660             either -Wall or -Wextra and must be explicitly enabled.
   5661             For example, compiling the following snippet with
   5662             -Walloca-larger-than=1024 results in a warning because even
   5663             though the code appears to call alloca only with sizes of 1kb
   5664             and less, since n is signed, a negative value would result in
   5665             a call to the function well in excess of the limit.
   5666 
   5667 void f (int n)
   5668 {
   5669   char *d;
   5670   if (n < 1025)
   5671     d = alloca (n);
   5672   else
   5673     d = malloc (n);
   5674   ...
   5675 }
   5676 
   5677 warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
   5678 ong unsigned int' [-Walloca-larger-than=]
   5679 
   5680             In contrast, a call to alloca that isn't bounded at all such
   5681             as in the following function will elicit the warning below
   5682             regardless of the size argument to the option.
   5683 
   5684 void f (size_t n)
   5685 {
   5686   char *d = alloca (n);
   5687   ...
   5688 }
   5689 
   5690 warning: unbounded use of 'alloca' [-Walloca-larger-than=]
   5691 
   5692           + The -Wformat-overflow=level option detects certain and likely
   5693             buffer overflow in calls to the sprintf family of formatted
   5694             output functions. Although the option is enabled even without
   5695             optimization it works best with -O2 and higher.
   5696             For example, in the following snippet the call to sprintf is
   5697             diagnosed because even though its output has been constrained
   5698             using the modulo operation it could result in as many as three
   5699             bytes if mday were negative. The solution is to either
   5700             allocate a larger buffer or make sure the argument is not
   5701             negative, for example by changing mday's type to unsigned or
   5702             by making the type of the second operand of the modulo
   5703             expression unsigned: 100U.
   5704 
   5705 void* f (int mday)
   5706 {
   5707   char *buf = malloc (3);
   5708   sprintf (buf, "%02i", mday % 100);
   5709   return buf;
   5710 }
   5711 
   5712 warning: 'sprintf may write a terminating nul past the end of the destination [-
   5713 Wformat-overflow=]
   5714 note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
   5715 
   5716           + The -Wformat-truncation=level option detects certain and
   5717             likely output truncation in calls to the snprintf family of
   5718             formatted output functions. -Wformat-truncation=1 is included
   5719             in -Wall and enabled without optimization but works best with
   5720             -O2 and higher.
   5721             For example, the following function attempts to format an
   5722             integer between 0 and 255 in hexadecimal, including the 0x
   5723             prefix, into a buffer of four characters. But since the
   5724             function must always terminate output by the null character
   5725             ('\0') such a buffer is only big enough to fit just one digit
   5726             plus the prefix. Therefore the snprintf call is diagnosed. To
   5727             avoid the warning either use a bigger buffer or handle the
   5728             function's return value which indicates whether or not its
   5729             output has been truncated.
   5730 
   5731 void f (unsigned x)
   5732 {
   5733   char d[4];
   5734   snprintf (d, sizeof d, "%#02x", x & 0xff);
   5735   ...
   5736 }
   5737 
   5738 warning: 'snprintf' output may be truncated before the last format character [-W
   5739 format-truncation=]
   5740 note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
   5741 
   5742           + The -Wnonnull option has been enhanced to detect a broader set
   5743             of cases of passing null pointers to functions that expect a
   5744             non-null argument (those decorated with attribute nonnull). By
   5745             taking advantage of optimizations the option can detect many
   5746             more cases of the problem than in prior GCC versions.
   5747           + The -Wstringop-overflow=type option detects buffer overflow in
   5748             calls to string handling functions like memcpy and strcpy. The
   5749             option relies on [13]Object Size Checking and has an effect
   5750             similar to defining the _FORTIFY_SOURCE macro.
   5751             -Wstringop-overflow=2 is enabled by default.
   5752             For example, in the following snippet, because the call to
   5753             strncat specifies a maximum that allows the function to write
   5754             past the end of the destination, it is diagnosed. To correct
   5755             the problem and avoid the overflow the function should be
   5756             called with a size of at most sizeof d - strlen(d) - 1.
   5757 
   5758 void f (const char *fname)
   5759 {
   5760   char d[8];
   5761   strncpy (d, "/tmp/", sizeof d);
   5762   strncat (d, fname, sizeof d);
   5763   ...
   5764 }
   5765 
   5766 warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
   5767 ow=]
   5768 
   5769      * The <limits.h> header provided by GCC defines macros such as
   5770        INT_WIDTH for the width in bits of integer types, if
   5771        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   5772        included. The <stdint.h> header defines such macros as SIZE_WIDTH
   5773        and INTMAX_WIDTH for the width of some standard typedef names for
   5774        integer types, again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined
   5775        before the header is included; note that GCC's implementation of
   5776        this header is only used for freestanding compilations, not hosted
   5777        compilations, on most systems. These macros come from ISO/IEC TS
   5778        18661-1:2014.
   5779      * The <float.h> header provided by GCC defines the macro
   5780        CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, if
   5781        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   5782        included. This represents the number of decimal digits for which
   5783        conversions between decimal character strings and binary formats,
   5784        in both directions, are correctly rounded, and currently has the
   5785        value of UINTMAX_MAX on all systems, reflecting that GCC's
   5786        compile-time conversions are correctly rounded for any number of
   5787        digits.
   5788      * New __builtin_add_overflow_p, __builtin_sub_overflow_p,
   5789        __builtin_mul_overflow_p built-in functions have been added. These
   5790        work similarly to their siblings without the _p suffix, but do not
   5791        actually store the result of the arithmetics anywhere, just return
   5792        whether the operation would overflow. Calls to these built-ins with
   5793        integer constant arguments evaluate to integer constants
   5794        expressions.
   5795        For example, in the following, c is assigned the result of a * b
   5796        only if the multiplication does not overflow, otherwise it is
   5797        assigned the value zero. The multiplication is performed at
   5798        compile-time and without triggering a -Woverflow warning.
   5799 
   5800 enum {
   5801   a = 12345678,
   5802   b = 87654321,
   5803   c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
   5804 };
   5805 
   5806   [14]C
   5807 
   5808      * The C front end now supports type names _FloatN for floating-point
   5809        types with IEEE interchange formats and _FloatNx for floating-point
   5810        types with IEEE extended formats. These type names come from
   5811        ISO/IEC TS 18661-3:2015.
   5812        The set of types supported depends on the target for which GCC is
   5813        configured. Most targets support _Float32, _Float32x and _Float64.
   5814        _Float128 is supported on targets where IEEE binary128 encoding was
   5815        already supported as long double or __float128. _Float64x is
   5816        supported on targets where a type with either binary128 or Intel
   5817        extended precision format is available.
   5818        Constants with these types are supported using suffixes fN, FN, fNx
   5819        and FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are
   5820        defined in <float.h> if __STDC_WANT_IEC_60559_TYPES_EXT__ is
   5821        defined before it is included.
   5822        These new types are always distinct from each other and from float,
   5823        double and long double, even if they have the same encoding.
   5824        Complex types such as _Complex _Float128 are also supported.
   5825        Type-generic built-in functions such as __builtin_isinf support the
   5826        new types, and the following type-specific built-in functions have
   5827        versions (suffixed fN or fNx) for the new types:
   5828        __builtin_copysign, __builtin_fabs, __builtin_huge_val,
   5829        __builtin_inf, __builtin_nan, __builtin_nans.
   5830      * Compilation with -fopenmp is now compatible with the C11 _Atomic
   5831        keyword.
   5832 
   5833   [15]C++
   5834 
   5835      * The C++ front end has experimental support for all of the current
   5836        C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
   5837        constexpr, class template argument deduction, auto template
   5838        parameters, and structured bindings. For a full list of new
   5839        features, see [16]the C++ status page.
   5840      * C++17 support for new of over-aligned types can be enabled in other
   5841        modes with the -faligned-new flag.
   5842      * The C++17 evaluation order requirements can be selected in other
   5843        modes with the -fstrong-eval-order flag, or disabled in C++17 mode
   5844        with -fno-strong-eval-order.
   5845      * The default semantics of inherited constructors has changed in all
   5846        modes, following [17]P0136. Essentially, overload resolution
   5847        happens as if calling the inherited constructor directly, and the
   5848        compiler fills in construction of the other bases and members as
   5849        needed. Most uses should not need any changes. The old behavior can
   5850        be restored with -fno-new-inheriting-ctors, or -fabi-version less
   5851        than 11.
   5852      * The resolution of DR 150 on matching of template template
   5853        parameters, allowing default template arguments to make a template
   5854        match a parameter, is currently enabled by default in C++17 mode
   5855        only. The default can be overridden with -f{no-,}new-ttp-matching.
   5856      * The C++ front end will now provide fix-it hints for some missing
   5857        semicolons, allowing for automatic fixes by IDEs:
   5858 
   5859 test.cc:4:11: error: expected ';' after class definition
   5860  class a {}
   5861            ^
   5862            ;
   5863 
   5864      * -Waligned-new has been added to the C++ front end. It warns about
   5865        new of type with extended alignment without -faligned-new.
   5866 
   5867     [18]Runtime Library (libstdc++)
   5868 
   5869      * The type of exception thrown by iostreams, std::ios_base::failure,
   5870        now uses the [19]cxx11 ABI.
   5871      * Experimental support for C++17, including the following new
   5872        features:
   5873           + std::string_view;
   5874           + std::any, std::optional, and std::variant;
   5875           + std::invoke, std::is_invocable, std::is_nothrow_invocable, and
   5876             invoke_result;
   5877           + std::is_swappable, and std::is_nothrow_swappable;
   5878           + std::apply, and std::make_from_tuple;
   5879           + std::void_t, std::bool_constant, std::conjunction,
   5880             std::disjunction, and std::negation;
   5881           + Variable templates for type traits;
   5882           + Mathematical Special Functions;
   5883           + std::chrono::floor, std::chrono::ceil, std::chrono::round, and
   5884             std::chrono::abs;
   5885           + std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot;
   5886           + std::scoped_lock, std::shared_mutex,
   5887             std::atomic<T>::is_always_lock_free;
   5888           + std::sample, std::default_searcher, std::boyer_moore_searcher
   5889             and std::boyer_moore_horspool_searcher;
   5890           + Extraction and re-insertion of map and set nodes, try_emplace
   5891             members for maps, and functions for accessing containers
   5892             std::size, std::empty, and std::data;
   5893           + std::shared_ptr support for arrays,
   5894             std::shared_ptr<T>::weak_type,
   5895             std::enable_shared_from_this<T>::weak_from_this(), and
   5896             std::owner_less<void>;
   5897           + std::byte;
   5898           + std::as_const, std::not_fn,
   5899             std::has_unique_object_representations, constexpr
   5900             std::addressof.
   5901        Thanks to Daniel Krgler, Tim Shen, Edward Smith-Rowland, and Ville
   5902        Voutilainen for work on the C++17 support.
   5903      * A new power-of-two rehashing policy for use with the _Hashtable
   5904        internals, thanks to Franois Dumont.
   5905 
   5906   [20]Fortran
   5907 
   5908      * Support for a number of extensions for compatibility with legacy
   5909        code with new flags:
   5910           + -fdec-structure Support for DEC STRUCTURE and UNION
   5911           + -fdec-intrinsic-ints Support for new integer intrinsics with
   5912             B/I/J/K prefixes such as BABS, JIAND...
   5913           + -fdec-math Support for additional math intrinsics, including
   5914             COTAN and degree-valued trigonometric functions such as TAND,
   5915             ASIND...
   5916           + -fdec Enable the -fdec-* family of extensions.
   5917      * New flag -finit-derived to allow default initialization of
   5918        derived-type variables.
   5919      * Improved DO loops with step equal to 1 or -1, generates faster code
   5920        without a loop preheader. A new warning, -Wundefined-do-loop, warns
   5921        when a loop iterates either to HUGE(i) (with step equal to 1), or
   5922        to -HUGE(i) (with step equal to -1). Invalid behavior can be caught
   5923        at run time with -fcheck=do enabled:
   5924 
   5925 program test
   5926   implicit none
   5927   integer(1) :: i
   5928   do i = -HUGE(i)+10, -HUGE(i)-1, -1
   5929     print *, i
   5930   end do
   5931 end program test
   5932 
   5933 At line 8 of file do_check_12.f90
   5934 Fortran runtime error: Loop iterates infinitely
   5935 
   5936      * Version 4.5 of the [21]OpenMP specification is now partially
   5937        supported in the Fortran compiler; the largest missing item is
   5938        structure element mapping.
   5939      * User-defined derived-type input/output (UDTIO) is added.
   5940      * Derived type coarrays with allocatable and pointer components are
   5941        partially supported.
   5942      * Non-constant stop codes and error stop codes (Fortran 2015
   5943        feature).
   5944      * Derived types with allocatable components of recursive type.
   5945      * Intrinsic assignment to polymorphic variables.
   5946      * Improved submodule support.
   5947      * Improved diagnostics (polymorphic results in pure functions).
   5948      * Coarray: Support for failed images (Fortan 2015 feature).
   5949 
   5950   [22]Go
   5951 
   5952      * GCC 7 provides a complete implementation of the Go 1.8.1 user
   5953        packages.
   5954      * Compared to the Go 1.8.1 toolchain, the garbage collector is more
   5955        conservative and less concurrent.
   5956      * Escape analysis is available for experimental use via the
   5957        -fgo-optimize-allocs option. The -fgo-debug-escape prints
   5958        information useful for debugging escape analysis choices.
   5959 
   5960   [23]Java (GCJ)
   5961 
   5962    The GCC Java front end and associated libjava runtime library have been
   5963    removed from GCC.
   5964 
   5965 [24]libgccjit
   5966 
   5967    The libgccjit API gained support for marking calls as requiring
   5968    tail-call optimization via a new entry point:
   5969    [25]gcc_jit_rvalue_set_bool_require_tail_call.
   5970 
   5971    libgccjit performs numerous checks at the API boundary, but if these
   5972    succeed, it previously ignored errors and other diagnostics emitted
   5973    within the core of GCC, and treated the compile of a gcc_jit_context as
   5974    having succeeded. As of GCC 7 it now ensures that if any diagnostics
   5975    are emitted, they are visible from the libgccjit API, and that the the
   5976    context is flagged as having failed.
   5977 
   5978 [26]New Targets and Target Specific Improvements
   5979 
   5980   [27]AArch64
   5981 
   5982      * GCC has been updated to the latest revision of the procedure call
   5983        standard (AAPCS64) to provide support for parameter passing when
   5984        data types have been over-aligned.
   5985      * The ARMv8.3-A architecture is now supported. It can be used by
   5986        specifying the -march=armv8.3-a option.
   5987      * The option -msign-return-address= is supported to enable return
   5988        address protection using ARMv8.3-A Pointer Authentication
   5989        Extensions. For more information on the arguments accepted by this
   5990        option, please refer to [28]AArch64-Options.
   5991      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   5992        Extensions are now supported. They can be used by specifying the
   5993        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   5994        Floating-Point Extensions introduce new half-precision data
   5995        processing floating-point instructions.
   5996      * Support has been added for the following processors (GCC
   5997        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), Broadcom
   5998        Vulcan (vulcan), Cavium ThunderX CN81xx (thunderxt81), Cavium
   5999        ThunderX CN83xx (thunderxt83), Cavium ThunderX CN88xx
   6000        (thunderxt88), Cavium ThunderX CN88xx pass 1.x (thunderxt88p1),
   6001        Cavium ThunderX 2 CN99xx (thunderx2t99), Qualcomm Falkor (falkor).
   6002        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   6003        options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
   6004        arguments to the equivalent target attributes and pragmas.
   6005 
   6006   [29]ARC
   6007 
   6008      * Added support for ARC HS and ARC EM processors.
   6009      * Added support for ARC EM variation found in Intel QuarkSE SoCs.
   6010      * Added support for NPS400 ARC700 based CPUs.
   6011      * Thread Local Storage is now supported by ARC CPUs.
   6012      * Fixed errors for ARC600 when using 32x16 multiplier option.
   6013      * Fixed PIE for ARC CPUs.
   6014      * New CPU templates are supported via multilib.
   6015 
   6016   [30]ARM
   6017 
   6018      * Support for the ARMv5 and ARMv5E architectures has been deprecated
   6019        (which have no known implementations) and will be removed in a
   6020        future GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ
   6021        architectures remain supported. The values armv5 and armv5e of
   6022        -march are thus deprecated.
   6023      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   6024        Extensions are now supported. They can be used by specifying the
   6025        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   6026        Floating-Point Extensions introduce new half-precision data
   6027        processing floating-point instructions.
   6028      * The ARMv8-M architecture is now supported in its two architecture
   6029        profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and
   6030        Floating-Point Extensions. They can be used by specifying the
   6031        -march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options.
   6032      * Support has been added for the following processors (GCC
   6033        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), ARM
   6034        Cortex-M23 (cortex-m23) and ARM Cortex-M33 (cortex-m33). The GCC
   6035        identifiers can be used as arguments to the -mcpu or -mtune
   6036        options, for example: -mcpu=cortex-a73 or -mtune=cortex-m33.
   6037      * A new command-line option -mpure-code has been added. It does not
   6038        allow constant data to be placed in code sections. This option is
   6039        only available when generating non-PIC code for ARMv7-M targets.
   6040      * Support for the ACLE Coprocessor Intrinsics has been added. This
   6041        enables the generation of coprocessor instructions through the use
   6042        of intrinsics such as cdp, ldc, and others.
   6043      * The configure option --with-multilib-list now accepts the value
   6044        rmprofile to build multilib libraries for a range of embedded
   6045        targets. See our [31]installation instructions for details.
   6046 
   6047   [32]AVR
   6048 
   6049      * On the reduced Tiny cores, the progmem [33]variable attribute is
   6050        now properly supported. Respective read-only variables are located
   6051        in flash memory in section .progmem.data. No special code is needed
   6052        to access such variables; the compiler automatically adds an offset
   6053        of 0x4000 to all addresses, which is needed to access variables in
   6054        flash memory. As opposed to ordinary cores where it is sufficient
   6055        to specify the progmem attribute with definitions, on the reduced
   6056        Tiny cores the attribute also has to be specified with (external)
   6057        declarations:
   6058 
   6059 extern const int array[] __attribute__((__progmem__));
   6060 
   6061 int get_value2 (void)
   6062 {
   6063   /* Access via addresses array + 0x4004 and array + 0x4005. */
   6064   return array[2];
   6065 }
   6066 
   6067 const int* get_address (unsigned idx)
   6068 {
   6069   /* Returns array + 0x4000 + 2 * idx. */
   6070   return &array[idx];
   6071 }
   6072 
   6073      * A new command-line option -Wmisspelled-isr has been added. It turns
   6074        off -- or turns into errors -- warnings that are reported for
   6075        interrupt service routines (ISRs) which don't follow AVR-LibC's
   6076        naming convention of prefixing ISR names with __vector.
   6077      * __builtin_avr_nops(n) is a new [34]built-in function that inserts n
   6078        NOP instructions into the instruction stream. n must be a value
   6079        known at compile time.
   6080 
   6081   [35]IA-32/x86-64
   6082 
   6083      * Support for the AVX-512 Fused Multiply Accumulation Packed Single
   6084        precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
   6085        variable precision (4VNNIW), AVX-512 Vector Population Count
   6086        (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
   6087        been added.
   6088 
   6089   [36]NVPTX
   6090 
   6091      * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
   6092        See the [37]Offloading Wiki on how to configure it.
   6093 
   6094   [38]PowerPC / PowerPC64 / RS6000
   6095 
   6096      * The PowerPC port now uses LRA by default.
   6097      * GCC now diagnoses inline assembly that clobbers register r2. This
   6098        has always been invalid code, and is no longer quietly tolerated.
   6099      * The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been
   6100        enhanced to generate more of the new instructions by default, and
   6101        to provide more built-in functions to generate code for other new
   6102        instructions.
   6103      * The configuration option --enable-gnu-indirect-function is now
   6104        enabled by default on PowerPC GNU/Linux builds.
   6105      * The PowerPC port will now allow 64-bit and 32-bit integer types to
   6106        be allocated to the VSX vector registers (ISA 2.06 and above). In
   6107        addition, on ISA 3.0, 16-bit and 8-bit integer types can be
   6108        allocated in the vector registers. Previously, only 64-bit integer
   6109        types were allowed in the traditional floating point registers.
   6110      * New options -mstack-protector-guard=global,
   6111        -mstack-protector-guard=tls, -mstack-protector-guard-reg=, and
   6112        -mstack-protector-guard-offset= change how the stack protector gets
   6113        the value to use as canary.
   6114 
   6115   [39]S/390, System z, IBM z Systems, IBM Z
   6116 
   6117      * Support for the IBM z14 processor has been added. When using the
   6118        -march=z14 option, the compiler will generate code making use of
   6119        the new instructions introduced with the vector enhancement
   6120        facility and the miscellaneous instruction extension facility 2.
   6121        The -mtune=z14 option enables z14 specific instruction scheduling
   6122        without making use of new instructions.
   6123      * Builtins for the new vector instructions have been added and can be
   6124        enabled using the -mzvector option.
   6125 
   6126   [40]RISC-V
   6127 
   6128      * Support for the RISC-V instruction set has been added.
   6129 
   6130   [41]RX
   6131 
   6132    Basic support for atomic built-in function has been added. It is
   6133    currently implemented by flipping interrupts off and on as needed.
   6134 
   6135   [42]SH
   6136 
   6137      * Support for SH5/SH64 has been removed.
   6138      * Improved utilization of delay slots on SH2A.
   6139      * Improved utilization of zero-displacement conditional branches.
   6140      * The following deprecated options have been removed
   6141           + -mcbranchdi
   6142           + -mcmpeqdi
   6143           + -minvalid-symbols
   6144           + -msoft-atomic
   6145           + -mspace
   6146           + -madjust-unroll
   6147      * Support for the following SH2A instructions has been added
   6148           + mov.b @-Rm,R0
   6149           + mov.w @-Rm,R0
   6150           + mov.l @-Rm,R0
   6151           + mov.b R0,@Rn+
   6152           + mov.w R0,@Rn+
   6153           + mov.l R0,@Rn+
   6154 
   6155   [43]SPARC
   6156 
   6157      * The SPARC port now uses LRA by default.
   6158      * Support for the new Subtract-Extended-with-Carry instruction
   6159        available in SPARC M7 (Niagara 7) has been added.
   6160 
   6161 [44]Operating Systems
   6162 
   6163   [45]AIX
   6164 
   6165      * Visibility support has been enabled for AIX 7.1 and above.
   6166 
   6167   [46]Fuchsia
   6168 
   6169      * Support has been added for the [47]Fuchsia OS.
   6170 
   6171   [48]RTEMS
   6172 
   6173      * The ABI changes on ARM so that no short enums are used by default.
   6174 
   6175 Other significant improvements
   6176 
   6177      * -fverbose-asm previously emitted information on the meanings of
   6178        assembly expressions. This has been extended so that it now also
   6179        prints comments showing the source lines that correspond to the
   6180        assembly, making it easier to read the generated assembly
   6181        (especially with larger functions). For example, given this C
   6182        source file:
   6183 
   6184 int test (int n)
   6185 {
   6186   int i;
   6187   int total = 0;
   6188 
   6189   for (i = 0; i < n; i++)
   6190     total += i * i;
   6191   return total;
   6192 }
   6193 
   6194        -fverbose-asm now gives output similar to this for the function
   6195        body (when compiling for x86_64, with -Os):
   6196 
   6197        .text
   6198        .globl  test
   6199        .type   test, @@function
   6200 test:
   6201 .LFB0:
   6202        .cfi_startproc
   6203 # example.c:4:   int total = 0;
   6204        xorl    %eax, %eax      # <retval>
   6205 # example.c:6:   for (i = 0; i < n; i++)
   6206        xorl    %edx, %edx      # i
   6207 .L2:
   6208 # example.c:6:   for (i = 0; i < n; i++)
   6209        cmpl    %edi, %edx      # n, i
   6210        jge     .L5     #,
   6211 # example.c:7:     total += i * i;
   6212        movl    %edx, %ecx      # i, tmp92
   6213        imull   %edx, %ecx      # i, tmp92
   6214 # example.c:6:   for (i = 0; i < n; i++)
   6215        incl    %edx    # i
   6216 # example.c:7:     total += i * i;
   6217        addl    %ecx, %eax      # tmp92, <retval>
   6218        jmp     .L2     #
   6219 .L5:
   6220 # example.c:10: }
   6221        ret
   6222        .cfi_endproc
   6223 
   6224      * Two new options have been added for printing fix-it hints:
   6225           + -fdiagnostics-parseable-fixits allows for fix-it hints to be
   6226             emitted in a machine-readable form, suitable for consumption
   6227             by IDEs. For example, given:
   6228 
   6229 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   6230 you mean 'color'?
   6231    return ptr->colour;
   6232                ^~~~~~
   6233                color
   6234 
   6235             it will emit:
   6236 
   6237 fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
   6238 
   6239           + -fdiagnostics-generate-patch will print a patch in "unified"
   6240             format after any diagnostics are printed, showing the result
   6241             of applying all fix-it hints. For the above example it would
   6242             emit:
   6243 
   6244 --- spellcheck-fields.cc
   6245 +++ spellcheck-fields.cc
   6246 @@ -49,5 +49,5 @@
   6247 
   6248  color get_color(struct s *ptr)
   6249  {
   6250 -  return ptr->colour;
   6251 +  return ptr->color;
   6252  }
   6253 
   6254      * The gcc and g++ driver programs will now provide suggestions for
   6255        misspelled arguments to command-line options.
   6256 
   6257 $ gcc -c test.c -ftls-model=global-dinamic
   6258 gcc: error: unknown TLS model 'global-dinamic'
   6259 gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec lo
   6260 cal-dynamic local-exec; did you mean 'global-dynamic'?
   6261 
   6262      * The compiler will now provide suggestions for misspelled
   6263        parameters.
   6264 
   6265 $ gcc -c test.c --param max-early-inliner-iteration=3
   6266 cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'ma
   6267 x-early-inliner-iterations'?
   6268 
   6269      * Profile-guided optimization (PGO) instrumentation, as well as test
   6270        coverage (GCOV), can newly instrument constructors (functions marks
   6271        with __attribute__((constructor))), destructors and C++
   6272        constructors (and destructors) of classes that are used as the type
   6273        of a global variable.
   6274      * A new option -fprofile-update=atomic prevents creation of corrupted
   6275        profiles created during an instrumentation run (-fprofile=generate)
   6276        of an application. The downside of the option is a speed penalty.
   6277        Providing -pthread on the command line selects atomic profile
   6278        updating (when supported by the target).
   6279      * GCC's already extensive testsuite has gained some new capabilities,
   6280        to further improve the reliability of the compiler:
   6281           + GCC now has an internal unit-testing API and a suite of tests
   6282             for programmatic self-testing of subsystems.
   6283           + GCC's C front end has been extended so that it can parse dumps
   6284             of GCC's internal representations, allowing for DejaGnu tests
   6285             that more directly exercise specific optimization passes. This
   6286             covers both the [49]GIMPLE representation (for testing
   6287             higher-level optimizations) and the [50]RTL representation,
   6288             allowing for more direct testing of lower-level details, such
   6289             as register allocation and instruction selection.
   6290 
   6291 [51]GCC 7.1
   6292 
   6293    This is the [52]list of problem reports (PRs) from GCC's bug tracking
   6294    system that are known to be fixed in the 7.1 release. This list might
   6295    not be complete (that is, it is possible that some PRs that have been
   6296    fixed are not listed here).
   6297 
   6298 [53]GCC 7.2
   6299 
   6300    This is the [54]list of problem reports (PRs) from GCC's bug tracking
   6301    system that are known to be fixed in the 7.2 release. This list might
   6302    not be complete (that is, it is possible that some PRs that have been
   6303    fixed are not listed here).
   6304 
   6305   Target Specific Changes
   6306 
   6307     SPARC
   6308 
   6309      * Support for the SPARC M8 processor has been added.
   6310      * The switches -mfix-ut700 and -mfix-gr712rc have been added to work
   6311        around an erratum in LEON3FT processors.
   6312      * Use of the Floating-point Multiply Single to Double (FsMULd)
   6313        instruction can now be controlled by the -mfsmuld and -fno-fsmuld
   6314        options.
   6315 
   6316   Operating Systems
   6317 
   6318     RTEMS
   6319 
   6320      * The Ada run-time support uses now thread-local storage (TLS).
   6321      * Support for RISC-V has been added.
   6322      * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
   6323        double has been added.
   6324 
   6325 [55]GCC 7.3
   6326 
   6327    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   6328    system that are known to be fixed in the 7.3 release. This list might
   6329    not be complete (that is, it is possible that some PRs that have been
   6330    fixed are not listed here).
   6331 
   6332   Target Specific Changes
   6333 
   6334     SPARC
   6335 
   6336      * Workarounds for the four [57]LEON3FT errata GRLIB-TN-0010..0013
   6337        have been added. Relevant errata are activated by the target
   6338        specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
   6339 
   6340   Operating Systems
   6341 
   6342     RTEMS
   6343 
   6344      * Support has been added for Epiphany target.
   6345 
   6346 [58]GCC 7.4
   6347 
   6348    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   6349    system that are known to be fixed in the 7.4 release. This list might
   6350    not be complete (that is, it is possible that some PRs that have been
   6351    fixed are not listed here).
   6352 
   6353 [60]GCC 7.5
   6354 
   6355    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   6356    system that are known to be fixed in the 7.5 release. This list might
   6357    not be complete (that is, it is possible that some PRs that have been
   6358    fixed are not listed here).
   6359 
   6360 
   6361     For questions related to the use of GCC, please consult these web
   6362     pages and the [62]GCC manuals. If that fails, the
   6363     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6364     web pages and the development of GCC are welcome on our developer
   6365     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   6366     archives.
   6367 
   6368    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   6369    distribution of this entire article is permitted in any medium,
   6370    provided this notice is preserved.
   6371 
   6372    These pages are [67]maintained by the GCC team. Last modified
   6373    2025-01-31.
   6374 
   6375 References
   6376 
   6377    1. https://gcc.gnu.org/gcc-7/porting_to.html
   6378    2. https://gcc.gnu.org/onlinedocs/index.html#current
   6379    3. https://gcc.gnu.org/wiki/LRAIsDefault
   6380    4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
   6381    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
   6382    6. https://gcc.gnu.org/gcc-7/changes.html#general
   6383    7. https://gcc.gnu.org/gcc-7/changes.html#languages
   6384    8. https://gcc.gnu.org/wiki/OpenACC
   6385    9. https://gcc.gnu.org/wiki/Offloading
   6386   10. https://gcc.gnu.org/gcc-7/changes.html#ada
   6387   11. https://gcc.gnu.org/gcc-7/changes.html#brig
   6388   12. https://gcc.gnu.org/gcc-7/changes.html#c-family
   6389   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
   6390   14. https://gcc.gnu.org/gcc-7/changes.html#c
   6391   15. https://gcc.gnu.org/gcc-7/changes.html#cxx
   6392   16. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   6393   17. https://wg21.link/p0136
   6394   18. https://gcc.gnu.org/gcc-7/changes.html#libstdcxx
   6395   19. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
   6396   20. https://gcc.gnu.org/gcc-7/changes.html#fortran
   6397   21. https://www.openmp.org/specifications/
   6398   22. https://gcc.gnu.org/gcc-7/changes.html#go
   6399   23. https://gcc.gnu.org/gcc-7/changes.html#java
   6400   24. https://gcc.gnu.org/gcc-7/changes.html#jit
   6401   25. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
   6402   26. https://gcc.gnu.org/gcc-7/changes.html#targets
   6403   27. https://gcc.gnu.org/gcc-7/changes.html#aarch64
   6404   28. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
   6405   29. https://gcc.gnu.org/gcc-7/changes.html#arc
   6406   30. https://gcc.gnu.org/gcc-7/changes.html#arm
   6407   31. https://gcc.gnu.org/install/configure.html
   6408   32. https://gcc.gnu.org/gcc-7/changes.html#avr
   6409   33. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
   6410   34. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
   6411   35. https://gcc.gnu.org/gcc-7/changes.html#x86
   6412   36. https://gcc.gnu.org/gcc-7/changes.html#nvptx
   6413   37. https://gcc.gnu.org/wiki/Offloading
   6414   38. https://gcc.gnu.org/gcc-7/changes.html#powerpc
   6415   39. https://gcc.gnu.org/gcc-7/changes.html#s390
   6416   40. https://gcc.gnu.org/gcc-7/changes.html#riscv
   6417   41. https://gcc.gnu.org/gcc-7/changes.html#rx
   6418   42. https://gcc.gnu.org/gcc-7/changes.html#sh
   6419   43. https://gcc.gnu.org/gcc-7/changes.html#sparc
   6420   44. https://gcc.gnu.org/gcc-7/changes.html#os
   6421   45. https://gcc.gnu.org/gcc-7/changes.html#aix
   6422   46. https://gcc.gnu.org/gcc-7/changes.html#fuchsia
   6423   47. https://fuchsia.googlesource.com/
   6424   48. https://gcc.gnu.org/gcc-7/changes.html#rtems
   6425   49. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
   6426   50. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
   6427   51. https://gcc.gnu.org/gcc-7/changes.html#GCC7.1
   6428   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
   6429   53. https://gcc.gnu.org/gcc-7/changes.html#GCC7.2
   6430   54. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
   6431   55. https://gcc.gnu.org/gcc-7/changes.html#GCC7.3
   6432   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
   6433   57. https://www.gaisler.com/app-notes-tech-notes-and-white-papers
   6434   58. https://gcc.gnu.org/gcc-7/changes.html#GCC7.4
   6435   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
   6436   60. https://gcc.gnu.org/gcc-7/changes.html#GCC7.5
   6437   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
   6438   62. https://gcc.gnu.org/onlinedocs/
   6439   63. mailto:gcc-help (a] gcc.gnu.org
   6440   64. mailto:gcc (a] gcc.gnu.org
   6441   65. https://gcc.gnu.org/lists.html
   6442   66. https://www.fsf.org/
   6443   67. https://gcc.gnu.org/about.html
   6444 ======================================================================
   6445 http://gcc.gnu.org/gcc-6/index.html
   6446 
   6447                               GCC 6 Release Series
   6448 
   6449    (This release series is no longer supported.)
   6450 
   6451    October 26, 2018
   6452 
   6453    The [1]GNU project and the GCC developers are pleased to announce the
   6454    release of GCC 6.5.
   6455 
   6456    This release is a bug-fix release, containing fixes for regressions in
   6457    GCC 6.4 relative to previous releases of GCC.
   6458 
   6459 Release History
   6460 
   6461    GCC 6.5
   6462           October 26, 2018 ([2]changes, [3]documentation)
   6463 
   6464    GCC 6.4
   6465           July 4, 2017 ([4]changes, [5]documentation)
   6466 
   6467    GCC 6.3
   6468           December 21, 2016 ([6]changes, [7]documentation)
   6469 
   6470    GCC 6.2
   6471           August 22, 2016 ([8]changes, [9]documentation)
   6472 
   6473    GCC 6.1
   6474           April 27, 2016 ([10]changes, [11]documentation)
   6475 
   6476 References and Acknowledgements
   6477 
   6478    GCC used to stand for the GNU C Compiler, but since the compiler
   6479    supports several other languages aside from C, it now stands for the
   6480    GNU Compiler Collection.
   6481 
   6482    A list of [12]successful builds is updated as new information becomes
   6483    available.
   6484 
   6485    The GCC developers would like to thank the numerous people that have
   6486    contributed new features, improvements, bug fixes, and other changes as
   6487    well as test results to GCC. This [13]amazing group of volunteers is
   6488    what makes GCC successful.
   6489 
   6490    For additional information about GCC please refer to the [14]GCC
   6491    project web site or contact the [15]GCC development mailing list.
   6492 
   6493    To obtain GCC please use [16]our mirror sites or [17]our version
   6494    control system.
   6495 
   6496 
   6497     For questions related to the use of GCC, please consult these web
   6498     pages and the [18]GCC manuals. If that fails, the
   6499     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6500     web pages and the development of GCC are welcome on our developer
   6501     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   6502     archives.
   6503 
   6504    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   6505    distribution of this entire article is permitted in any medium,
   6506    provided this notice is preserved.
   6507 
   6508    These pages are [23]maintained by the GCC team. Last modified
   6509    2024-05-30.
   6510 
   6511 References
   6512 
   6513    1. http://www.gnu.org/
   6514    2. https://gcc.gnu.org/gcc-6/changes.html
   6515    3. https://gcc.gnu.org/onlinedocs/6.5.0/
   6516    4. https://gcc.gnu.org/gcc-6/changes.html
   6517    5. https://gcc.gnu.org/onlinedocs/6.4.0/
   6518    6. https://gcc.gnu.org/gcc-6/changes.html
   6519    7. https://gcc.gnu.org/onlinedocs/6.3.0/
   6520    8. https://gcc.gnu.org/gcc-6/changes.html
   6521    9. https://gcc.gnu.org/onlinedocs/6.2.0/
   6522   10. https://gcc.gnu.org/gcc-6/changes.html
   6523   11. https://gcc.gnu.org/onlinedocs/6.1.0/
   6524   12. https://gcc.gnu.org/gcc-6/buildstat.html
   6525   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   6526   14. https://gcc.gnu.org/index.html
   6527   15. mailto:gcc (a] gcc.gnu.org
   6528   16. https://gcc.gnu.org/mirrors.html
   6529   17. https://gcc.gnu.org/git.html
   6530   18. https://gcc.gnu.org/onlinedocs/
   6531   19. mailto:gcc-help (a] gcc.gnu.org
   6532   20. mailto:gcc (a] gcc.gnu.org
   6533   21. https://gcc.gnu.org/lists.html
   6534   22. https://www.fsf.org/
   6535   23. https://gcc.gnu.org/about.html
   6536 ======================================================================
   6537 http://gcc.gnu.org/gcc-6/changes.html
   6538 
   6539                               GCC 6 Release Series
   6540                         Changes, New Features, and Fixes
   6541 
   6542    This page is a brief summary of some of the huge number of improvements
   6543    in GCC 6. For more information, see the [1]Porting to GCC 6 page and
   6544    the [2]full GCC documentation.
   6545 
   6546 Caveats
   6547 
   6548      * The default mode for C++ is now -std=gnu++14 instead of
   6549        -std=gnu++98.
   6550      * Support for a number of older systems and recently unmaintained or
   6551        untested target ports of GCC has been declared obsolete in GCC 6.
   6552        Unless there is activity to revive them, the next release of GCC
   6553        will have their sources permanently removed.
   6554        The following ports for individual systems on particular
   6555        architectures have been obsoleted:
   6556           + SH5 / SH64 (sh64-*-*) as announced [3]here.
   6557      * The AVR port requires binutils version 2.26.1 or later for the fix
   6558        for [4]PR71151 to work.
   6559      * The GCC 6.5 release has an accidental ABI incompatibility for
   6560        nested std::pair objects, for more details see [5]PR 87822. The bug
   6561        causes a layout change for pairs where the first member is also a
   6562        pair, e.g. std::pair<std::pair<X, Y>, Z>. The GCC 6 release series
   6563        is closed so the bug in GCC 6.5 will not be fixed upstream, but
   6564        there is a patch in the bug report to allow it to be fixed by
   6565        anybody packaging GCC 6.5 or installing it themselves.
   6566 
   6567 [6]General Optimizer Improvements
   6568 
   6569      * UndefinedBehaviorSanitizer gained a new sanitization option,
   6570        -fsanitize=bounds-strict, which enables strict checking of array
   6571        bounds. In particular, it enables -fsanitize=bounds as well as
   6572        instrumentation of flexible array member-like arrays.
   6573      * Type-based alias analysis now disambiguates accesses to different
   6574        pointers. This improves precision of the alias oracle by about
   6575        20-30% on higher-level C++ programs. Programs doing invalid type
   6576        punning of pointer types may now need -fno-strict-aliasing to work
   6577        correctly.
   6578      * Alias analysis now correctly supports the weakref and alias
   6579        attributes. This allows accessing both a variable and its alias in
   6580        one translation unit which is common with link-time optimization.
   6581      * Value range propagation now assumes that the this pointer in C++
   6582        member functions is non-null. This eliminates common null pointer
   6583        checks but also breaks some non-conforming code-bases (such as
   6584        Qt-5, Chromium, KDevelop). As a temporary work-around
   6585        -fno-delete-null-pointer-checks can be used. Wrong code can be
   6586        identified by using -fsanitize=undefined.
   6587      * Link-time optimization improvements:
   6588           + warning and error attributes are now correctly preserved by
   6589             declaration linking and thus -D_FORTIFY_SOURCE=2 is now
   6590             supported with -flto.
   6591           + Type merging was fixed to handle C and Fortran
   6592             interoperability rules as defined by the Fortran 2008 language
   6593             standard.
   6594             As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
   6595             with char in all cases because it is an array while char is
   6596             scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
   6597             general, this inter-operability cannot be implemented, for
   6598             example on targets where the argument passing convention for
   6599             arrays differs from scalars.
   6600           + More type information is now preserved at link time, reducing
   6601             the loss of accuracy of the type-based alias analysis compared
   6602             to builds without link-time optimization.
   6603           + Invalid type punning on global variables and declarations is
   6604             now reported with -Wodr-type-mismatch.
   6605           + The size of LTO object files was reduced by about 11%
   6606             (measured by compiling Firefox 46.0).
   6607           + Link-time parallelization (enabled using -flto=n) was
   6608             significantly improved by decreasing the size of streamed data
   6609             when partitioning programs. The size of streamed IL while
   6610             compiling Firefox 46.0 was reduced by 66%.
   6611           + The linker plugin was extended to pass information about the
   6612             type of binary produced to the GCC back end. (That can also be
   6613             controlled manually by -flinker-output.) This makes it
   6614             possible to properly configure the code generator and support
   6615             incremental linking. Incremental linking of LTO objects by gcc
   6616             -r is now supported for plugin-enabled setups.
   6617             There are two ways to perform incremental linking:
   6618               1. Linking by ld -r will result in an object file with all
   6619                  sections from individual object files mechanically
   6620                  merged. This delays the actual link-time optimization to
   6621                  the final linking step and thus permits whole program
   6622                  optimization. Linking the final binary with such object
   6623                  files is however slower.
   6624               2. Linking by gcc -r will lead to link-time optimization and
   6625                  emit the final binary into the object file. Linking such
   6626                  an object file is fast but avoids any benefits from whole
   6627                  program optimization.
   6628             GCC 7 will support incremental link-time optimization with gcc
   6629             -r.
   6630      * Inter-procedural optimization improvements:
   6631           + Basic jump threading is now performed before profile
   6632             construction and inline analysis, resulting in more realistic
   6633             size and time estimates that drive the heuristics of the
   6634             inliner and function cloning passes.
   6635           + Function cloning now more aggressively eliminates unused
   6636             function parameters.
   6637 
   6638 [7]New Languages and Language specific improvements
   6639 
   6640    Compared to GCC 5, the GCC 6 release series includes a much improved
   6641    implementation of the [8]OpenACC 2.0a specification. Highlights are:
   6642      * In addition to single-threaded host-fallback execution, offloading
   6643        is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
   6644        little-endian GNU/Linux host systems. For nvptx offloading, with
   6645        the OpenACC parallel construct, the execution model allows for an
   6646        arbitrary number of gangs, up to 32 workers, and 32 vectors.
   6647      * Initial support for parallelized execution of OpenACC kernels
   6648        constructs:
   6649           + Parallelization of a kernels region is switched on by
   6650             -fopenacc combined with -O2 or higher.
   6651           + Code is offloaded onto multiple gangs, but executes with just
   6652             one worker, and a vector length of 1.
   6653           + Directives inside a kernels region are not supported.
   6654           + Loops with reductions can be parallelized.
   6655           + Only kernels regions with one loop nest are parallelized.
   6656           + Only the outer-most loop of a loop nest can be parallelized.
   6657           + Loop nests containing sibling loops are not parallelized.
   6658        Typically, using the OpenACC parallel construct gives much better
   6659        performance, compared to the initial support of the OpenACC kernels
   6660        construct.
   6661      * The device_type clause is not supported. The bind and nohost
   6662        clauses are not supported. The host_data directive is not supported
   6663        in Fortran.
   6664      * Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
   6665      * Usage of OpenACC constructs inside multithreaded contexts (such as
   6666        created by OpenMP, or pthread programming) is not supported.
   6667      * If a call to the acc_on_device function has a compile-time constant
   6668        argument, the function call evaluates to a compile-time constant
   6669        value only for C and C++ but not for Fortran.
   6670 
   6671    See the [9]OpenACC and [10]Offloading wiki pages for further
   6672    information.
   6673 
   6674   [11]C family
   6675 
   6676      * Version 4.5 of the [12]OpenMP specification is now supported in the
   6677        C and C++ compilers.
   6678      * The C and C++ compilers now support attributes on enumerators. For
   6679        instance, it is now possible to mark enumerators as deprecated:
   6680 
   6681 enum {
   6682   newval,
   6683   oldval __attribute__ ((deprecated ("too old")))
   6684 };
   6685 
   6686      * Source locations for the C and C++ compilers are now tracked as
   6687        ranges, rather than just points, making it easier to identify the
   6688        subexpression of interest within a complicated expression. For
   6689        example:
   6690 
   6691 test.cc: In function 'int test(int, int, foo, int, int)':
   6692 test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
   6693 )
   6694    return p + q * r * s + t;
   6695               ~~^~~
   6696 
   6697        In addition, there is now initial support for precise diagnostic
   6698        locations within strings:
   6699 
   6700 format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
   6701 t' argument [-Wformat=]
   6702    printf("%*d");
   6703             ^
   6704 
   6705      * Diagnostics can now contain "fix-it hints", which are displayed in
   6706        context underneath the relevant source code. For example:
   6707 
   6708 fixits.c: In function 'bad_deref':
   6709 fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
   6710    return ptr.x;
   6711              ^
   6712              ->
   6713 
   6714      * The C and C++ compilers now offer suggestions for misspelled field
   6715        names:
   6716 
   6717 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   6718 you mean 'color'?
   6719    return ptr->colour;
   6720                ^~~~~~
   6721 
   6722      * New command-line options have been added for the C and C++
   6723        compilers:
   6724           + -Wshift-negative-value warns about left shifting a negative
   6725             value.
   6726           + -Wshift-overflow warns about left shift overflows. This
   6727             warning is enabled by default. -Wshift-overflow=2 also warns
   6728             about left-shifting 1 into the sign bit.
   6729           + -Wtautological-compare warns if a self-comparison always
   6730             evaluates to true or false. This warning is enabled by -Wall.
   6731           + -Wnull-dereference warns if the compiler detects paths that
   6732             trigger erroneous or undefined behavior due to dereferencing a
   6733             null pointer. This option is only active when
   6734             -fdelete-null-pointer-checks is active, which is enabled by
   6735             optimizations in most targets. The precision of the warnings
   6736             depends on the optimization options used.
   6737           + -Wduplicated-cond warns about duplicated conditions in an
   6738             if-else-if chain.
   6739           + -Wmisleading-indentation warns about places where the
   6740             indentation of the code gives a misleading idea of the block
   6741             structure of the code to a human reader. For example, given
   6742             [13]CVE-2014-1266:
   6743 
   6744 sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
   6745 sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
   6746 g-indentation]
   6747     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
   6748     ^~
   6749 sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
   6750 indented as if it is guarded by the 'if'
   6751         goto fail;
   6752         ^~~~
   6753 
   6754             This warning is enabled by -Wall.
   6755      * The C and C++ compilers now emit saner error messages if
   6756        merge-conflict markers are present in a source file.
   6757 
   6758 test.c:3:1: error: version control conflict marker in file
   6759  <<<<<<< HEAD
   6760  ^~~~~~~
   6761 
   6762   [14]C
   6763 
   6764      * It is possible to disable warnings when an initialized field of a
   6765        structure or a union with side effects is being overridden when
   6766        using designated initializers via a new warning option
   6767        -Woverride-init-side-effects.
   6768      * A new type attribute scalar_storage_order applying to structures
   6769        and unions has been introduced. It specifies the storage order (aka
   6770        endianness) in memory of scalar fields in structures or unions.
   6771 
   6772   [15]C++
   6773 
   6774      * The default mode has been changed to -std=gnu++14.
   6775      * [16]C++ Concepts are now supported when compiling with -fconcepts.
   6776      * -flifetime-dse is more aggressive in dead-store elimination in
   6777        situations where a memory store to a location precedes a
   6778        constructor to that memory location.
   6779      * G++ now supports [17]C++17 fold expressions, u8 character literals,
   6780        extended static_assert, and nested namespace definitions.
   6781      * G++ now allows constant evaluation for all non-type template
   6782        arguments.
   6783      * G++ now supports C++ Transactional Memory when compiling with
   6784        -fgnu-tm.
   6785 
   6786     [18]Runtime Library (libstdc++)
   6787 
   6788      * Extensions to the C++ Library to support mathematical special
   6789        functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
   6790      * Experimental support for C++17, including the following new
   6791        features:
   6792           + std::uncaught_exceptions function (this is also available for
   6793             -std=gnu++NN modes);
   6794           + new member functions try_emplace and insert_or_assign for
   6795             unique_key maps;
   6796           + non-member functions std::size, std::empty, and std::data for
   6797             accessing containers and arrays;
   6798           + std::invoke;
   6799           + std::shared_mutex;
   6800           + std::void_t and std::bool_constant metaprogramming utilities.
   6801        Thanks to Ville Voutilainen for contributing many of the C++17
   6802        features.
   6803      * An experimental implementation of the File System TS.
   6804      * Experimental support for most features of the second version of the
   6805        Library Fundamentals TS. This includes polymorphic memory resources
   6806        and array support in shared_ptr, thanks to Fan You.
   6807      * Some assertions checked by Debug Mode can now also be enabled by
   6808        _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
   6809        have less run-time overhead than the full _GLIBCXX_DEBUG checks and
   6810        don't affect the library ABI, so can be enabled per-translation
   6811        unit.
   6812      * Timed mutex types are supported on more targets, including Darwin.
   6813      * Improved std::locale support for DragonFly and FreeBSD, thanks to
   6814        John Marino and Andreas Tobler.
   6815 
   6816   [19]Fortran
   6817 
   6818      * Fortran 2008 SUBMODULE support.
   6819      * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
   6820        support.
   6821      * Improved support for Fortran 2003 deferred-length character
   6822        variables.
   6823      * Improved support for OpenMP and OpenACC.
   6824      * The MATMUL intrinsic is now inlined for straightforward cases if
   6825        front-end optimization is active. The maximum size for inlining can
   6826        be set to n with the -finline-matmul-limit=n option and turned off
   6827        with -finline-matmul-limit=0.
   6828      * The -Wconversion-extra option will warn about REAL constants which
   6829        have excess precision for their kind.
   6830      * The -Winteger-division option has been added, which warns about
   6831        divisions of integer constants which are truncated. This option is
   6832        included in -Wall by default.
   6833 
   6834 [20]libgccjit
   6835 
   6836      * The driver code is now run in-process within libgccjit, providing a
   6837        small speed-up of the compilation process.
   6838      * The API has gained entrypoints for
   6839           + [21]timing how long was spent in different parts of code,
   6840           + [22]creating switch statements,
   6841           + [23]allowing unreachable basic blocks in a function, and
   6842           + [24]adding arbitrary command-line options to a compilation.
   6843 
   6844 [25]New Targets and Target Specific Improvements
   6845 
   6846   [26]AArch64
   6847 
   6848      * A number of AArch64-specific options have been added. The most
   6849        important ones are summarised in this section; for more detailed
   6850        information please refer to the documentation.
   6851      * The command-line options -march=native, -mcpu=native and
   6852        -mtune=native are now available on native AArch64 GNU/Linux
   6853        systems. Specifying these options causes GCC to auto-detect the
   6854        host CPU and choose the optimal setting for that system.
   6855      * -fpic is now supported when generating code for the small code
   6856        model (-mcmodel=small). The size of the global offset table (GOT)
   6857        is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
   6858        ILP32 SysV ABI.
   6859      * The AArch64 port now supports target attributes and pragmas. Please
   6860        refer to the [27]documentation for details of available attributes
   6861        and pragmas as well as usage instructions.
   6862      * Link-time optimization across translation units with different
   6863        target-specific options is now supported.
   6864      * The option -mtls-size= is now supported. It can be used to specify
   6865        the bit size of TLS offsets, allowing GCC to generate better TLS
   6866        instruction sequences.
   6867      * The option -fno-plt is now fully functional.
   6868      * The ARMv8.1-A architecture and the Large System Extensions are now
   6869        supported. They can be used by specifying the -march=armv8.1-a
   6870        option. Additionally, the +lse option extension can be used in a
   6871        similar fashion to other option extensions. The Large System
   6872        Extensions introduce new instructions that are used in the
   6873        implementation of atomic operations.
   6874      * The ACLE half-precision floating-point type __fp16 is now supported
   6875        in the C and C++ languages.
   6876      * The ARM Cortex-A35 processor is now supported via the
   6877        -mcpu=cortex-a35 and -mtune=cortex-a35 options as well as the
   6878        equivalent target attributes and pragmas.
   6879      * The Qualcomm QDF24xx processor is now supported via the
   6880        -mcpu=qdf24xx and -mtune=qdf24xx options as well as the equivalent
   6881        target attributes and pragmas.
   6882      * Code generation for the ARM Cortex-A57 processor is improved. Among
   6883        general code generation improvements, a better algorithm is added
   6884        for allocating registers to floating-point multiply-accumulate
   6885        instructions offering increased performance when compiling with
   6886        -mcpu=cortex-a57 or -mtune=cortex-a57.
   6887      * Code generation for the ARM Cortex-A53 processor is improved. A
   6888        more accurate instruction scheduling model for the processor is now
   6889        used, and a number of compiler tuning parameters have been set to
   6890        offer increased performance when compiling with -mcpu=cortex-a53 or
   6891        -mtune=cortex-a53.
   6892      * Code generation for the Samsung Exynos M1 processor is improved. A
   6893        more accurate instruction scheduling model for the processor is now
   6894        used, and a number of compiler tuning parameters have been set to
   6895        offer increased performance when compiling with -mcpu=exynos-m1 or
   6896        -mtune=exynos-m1.
   6897      * Improvements in the generation of conditional branches and literal
   6898        pools allow the compiler to compile functions of a large size.
   6899        Constant pools are now placed into separate rodata sections. The
   6900        new option -mpc-relative-literal-loads generates per-function
   6901        literal pools, limiting the maximum size of functions to 1MiB.
   6902      * Several correctness issues generating Advanced SIMD instructions
   6903        for big-endian targets have been fixed resulting in improved code
   6904        generation for ACLE intrinsics with -mbig-endian.
   6905 
   6906   [28]ARM
   6907 
   6908      * Support for revisions of the ARM architecture prior to ARMv4t has
   6909        been deprecated and will be removed in a future GCC release. The
   6910        -mcpu and -mtune values that are deprecated are: arm2, arm250,
   6911        arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
   6912        arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
   6913        arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
   6914        strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
   6915        arm7tdmi is still supported. The values of -march that are
   6916        deprecated are: armv2,armv2a,armv3,armv3m,armv4.
   6917      * The ARM port now supports target attributes and pragmas. Please
   6918        refer to the [29]documentation for details of available attributes
   6919        and pragmas as well as usage instructions.
   6920      * Support has been added for the following processors (GCC
   6921        identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
   6922        Cortex-A35 (cortex-a35) and ARM Cortex-R8 (cortex-r8). The GCC
   6923        identifiers can be used as arguments to the -mcpu or -mtune
   6924        options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
   6925 
   6926   [30]Heterogeneous Systems Architecture
   6927 
   6928      * GCC can now generate HSAIL (Heterogeneous System Architecture
   6929        Intermediate Language) for simple OpenMP device constructs if
   6930        configured with --enable-offload-targets=hsa. A new libgomp plugin
   6931        then runs the HSA GPU kernels implementing these constructs on HSA
   6932        capable GPUs via a standard HSA run time.
   6933        If the HSA compilation back end determines it cannot output HSAIL
   6934        for a particular input, it gives a warning by default. These
   6935        warnings can be suppressed with -Wno-hsa. To give a few examples,
   6936        the HSA back end does not implement compilation of code using
   6937        function pointers, automatic allocation of variable sized arrays,
   6938        functions with variadic arguments as well as a number of other less
   6939        common programming constructs.
   6940        When compilation for HSA is enabled, the compiler attempts to
   6941        compile composite OpenMP constructs
   6942 
   6943 #pragma omp target teams distribute parallel for
   6944 
   6945        into parallel HSA GPU kernels.
   6946 
   6947   [31]IA-32/x86-64
   6948 
   6949      * GCC now supports the Intel CPU named Skylake with AVX-512
   6950        extensions through -march=skylake-avx512. The switch enables the
   6951        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   6952        AVX-512DQ.
   6953      * Support for new AMD instructions monitorx and mwaitx has been
   6954        added. This includes new intrinsic and built-in support. It is
   6955        enabled through option -mmwaitx. The instructions monitorx and
   6956        mwaitx implement the same functionality as the old monitor and
   6957        mwait instructions. In addition, mwaitx adds a configurable timer.
   6958        The timer value is received as third argument and stored in
   6959        register %ebx.
   6960      * x86-64 targets now allow stack realignment from a word-aligned
   6961        stack pointer using the command-line option -mstackrealign or
   6962        __attribute__ ((force_align_arg_pointer)). This allows functions
   6963        compiled with a vector-aligned stack to be invoked from objects
   6964        that keep only word-alignment.
   6965      * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
   6966        can be used to access data via the %fs and %gs segments without
   6967        having to resort to inline assembly. Please refer to the
   6968        [32]documentation for usage instructions.
   6969      * Support for AMD Zen (family 17h) processors is now available
   6970        through the -march=znver1 and -mtune=znver1 options.
   6971 
   6972   [33]MeP
   6973 
   6974      * Support for the MeP (mep-elf) architecture has been deprecated and
   6975        will be removed in a future GCC release.
   6976 
   6977   [34]MSP430
   6978 
   6979      * The MSP430 compiler now has the ability to automatically distribute
   6980        code and data between low memory (addresses below 64K) and high
   6981        memory. This only applies to parts that actually have both memory
   6982        regions and only if the linker script for the part has been
   6983        specifically set up to support this feature.
   6984        A new attribute of either can be applied to both functions and
   6985        data, and this tells the compiler to place the object into low
   6986        memory if there is room and into high memory otherwise. Two other
   6987        new attributes - lower and upper - can be used to explicitly state
   6988        that an object should be placed in the specified memory region. If
   6989        there is not enough left in that region the compilation will fail.
   6990        Two new command-line options - -mcode-region=[lower|upper|either]
   6991        and -mdata-region=[lower|upper|either] - can be used to tell the
   6992        compiler what to do with objects that do not have one of these new
   6993        attributes.
   6994 
   6995   [35]PowerPC / PowerPC64 / RS6000
   6996 
   6997      * PowerPC64 now supports IEEE 128-bit floating-point using the
   6998        __float128 data type. In GCC 6, this is not enabled by default, but
   6999        you can enable it with -mfloat128. The IEEE 128-bit floating-point
   7000        support requires the use of the VSX instruction set. IEEE 128-bit
   7001        floating-point values are passed and returned as a single vector
   7002        value. The software emulator for IEEE 128-bit floating-point
   7003        support is only built on PowerPC GNU/Linux systems where the
   7004        default CPU is at least power7. On future ISA 3.0 systems (POWER 9
   7005        and later), you will be able to use the -mfloat128-hardware option
   7006        to use the ISA 3.0 instructions that support IEEE 128-bit
   7007        floating-point. An additional type (__ibm128) has been added to
   7008        refer to the IBM extended double type that normally implements long
   7009        double. This will allow for a future transition to implementing
   7010        long double with IEEE 128-bit floating-point.
   7011      * Basic support has been added for POWER9 hardware that will use the
   7012        recently published OpenPOWER ISA 3.0 instructions. The following
   7013        new switches are available:
   7014           + -mcpu=power9: Implement all of the ISA 3.0 instructions
   7015             supported by the compiler.
   7016           + -mtune=power9: In the future, apply tuning for POWER9 systems.
   7017             Currently, POWER8 tunings are used.
   7018           + -mmodulo: Generate code using the ISA 3.0 integer instructions
   7019             (modulus, count trailing zeros, array index support, integer
   7020             multiply/add).
   7021           + -mpower9-fusion: Generate code to suitably fuse instruction
   7022             sequences for a POWER9 system.
   7023           + -mpower9-dform: Generate code to use the new D-form
   7024             (register+offset) memory instructions for the vector
   7025             registers.
   7026           + -mpower9-vector: Generate code using the new ISA 3.0 vector
   7027             (VSX or Altivec) instructions.
   7028           + -mpower9-minmax: Reserved for future development.
   7029           + -mtoc-fusion: Keep TOC entries together to provide more fusion
   7030             opportunities.
   7031      * New constraints have been added to support IEEE 128-bit
   7032        floating-point and ISA 3.0 instructions:
   7033           + wb: Altivec register if -mpower9-dform is enabled.
   7034           + we: VSX register if -mpower9-vector is enabled for 64-bit code
   7035             generation.
   7036           + wo: VSX register if -mpower9-vector is enabled.
   7037           + wp: Reserved for future use if long double is implemented with
   7038             IEEE 128-bit floating-point instead of IBM extended double.
   7039           + wq: VSX register if -mfloat128 is enabled.
   7040           + wF: Memory operand suitable for POWER9 fusion load/store.
   7041           + wG: Memory operand suitable for TOC fusion memory references.
   7042           + wL: Integer constant identifying the element number mfvsrld
   7043             accesses within a vector.
   7044      * Support has been added for __builtin_cpu_is() and
   7045        __builtin_cpu_supports(), allowing for very fast access to
   7046        AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
   7047        glibc 2.23 or later.
   7048      * All hardware transactional memory builtins now correctly behave as
   7049        memory barriers. Programmers can use #ifdef __TM_FENCE__ to
   7050        determine whether their "old" compiler treats the builtins as
   7051        barriers.
   7052      * Split-stack support has been added for gccgo on PowerPC64 for both
   7053        big- and little-endian (but not for 32-bit). The gold linker from
   7054        at least binutils 2.25.1 must be available in the PATH when
   7055        configuring and building gccgo to enable split stack. (The
   7056        requirement for binutils 2.25.1 applies to PowerPC64 only.) The
   7057        split-stack feature allows a small initial stack size to be
   7058        allocated for each goroutine, which increases as needed.
   7059      * GCC on PowerPC now supports the standard lround function.
   7060      * A new configuration option ---with-advance-toolchain=at was added
   7061        for PowerPC 64-bit GNU/Linux systems to use the header files,
   7062        library files, and the dynamic linker from a specific Advance
   7063        Toolchain release instead of the default versions that are provided
   7064        by the GNU/Linux distribution. In general, this option is intended
   7065        for the developers of GCC, and it is not intended for general use.
   7066      * The "q", "S", "T", and "t" asm-constraints have been removed.
   7067      * The "b", "B", "m", "M", and "W" format modifiers have been removed.
   7068 
   7069   [36]S/390, System z, IBM z Systems
   7070 
   7071      * Support for the IBM z13 processor has been added. When using the
   7072        -march=z13 option, the compiler will generate code making use of
   7073        the new instructions and registers introduced with the vector
   7074        extension facility. The -mtune=z13 option enables z13 specific
   7075        instruction scheduling without making use of new instructions.
   7076        Compiling code with -march=z13 reduces the default alignment of
   7077        vector types bigger than 8 bytes to 8. This is an ABI change and
   7078        care must be taken when linking modules compiled with different
   7079        arch levels which interchange variables containing vector type
   7080        values. For newly compiled code the GNU linker will emit a warning.
   7081      * The -mzvector option enables a C/C++ language extension. This
   7082        extension provides a new keyword vector which can be used to define
   7083        vector type variables. (Note: This is not available when enforcing
   7084        strict standard compliance e.g. with -std=c99. Either enable GNU
   7085        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   7086        Additionally a set of overloaded builtins is provided which is
   7087        partially compatible to the PowerPC Altivec builtins. In order to
   7088        make use of these builtins the vecintrin.h header file needs to be
   7089        included.
   7090      * The new command-line options -march=native, and -mtune=native are
   7091        now available on native IBM z Systems. Specifying these options
   7092        causes GCC to auto-detect the host CPU and choose the optimal
   7093        setting for that system. If GCC is unable to detect the host CPU
   7094        these options have no effect.
   7095      * The IBM z Systems port now supports target attributes and pragmas.
   7096        Please refer to the [37]documentation for details of available
   7097        attributes and pragmas as well as usage instructions.
   7098      * -fsplit-stack is now supported as part of the IBM z Systems port.
   7099        This feature requires a recent gold linker to be used.
   7100      * Support for the g5 and g6 -march=/-mtune= CPU level switches has
   7101        been deprecated and will be removed in a future GCC release. -m31
   7102        from now on defaults to -march=z900 if not specified otherwise.
   7103        -march=native on a g5/g6 machine will default to -march=z900.
   7104 
   7105   [38]SH
   7106 
   7107      * Support for SH5 / SH64 has been declared obsolete and will be
   7108        removed in future releases.
   7109      * Support for the FDPIC ABI has been added. It can be enabled using
   7110        the new -mfdpic target option and --enable-fdpic configure option.
   7111 
   7112   [39]SPARC
   7113 
   7114      * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
   7115        change will break binary compatibility with earlier releases for
   7116        code it affects, but this should be pretty rare in practice. The
   7117        conditions are: a 16-byte structure containing a double or a 8-byte
   7118        vector in the second half is passed to a subprogram in slot #15,
   7119        for example as 16th parameter if the first 15 ones have at most 8
   7120        bytes. The double or vector was wrongly passed in floating-point
   7121        register %d32 in lieu of on the stack as per the SPARC calling
   7122        conventions.
   7123 
   7124 [40]Operating Systems
   7125 
   7126   [41]AIX
   7127 
   7128      * DWARF debugging support for AIX 7.1 has been enabled as an optional
   7129        debugging format. A more recent Technology Level (TL) and GCC built
   7130        with that level are required for full exploitation of DWARF
   7131        debugging capabilities.
   7132 
   7133   [42]Linux
   7134 
   7135      * Support for the [43]musl C library was added for the AArch64, ARM,
   7136        MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
   7137        x86_64 targets. It can be selected using the new -mmusl option in
   7138        case musl is not the default libc. GCC defaults to musl libc if it
   7139        is built with a target triplet matching the *-linux-musl* pattern.
   7140 
   7141   [44]RTEMS
   7142 
   7143      * The RTEMS thread model implementation changed. Mutexes now use
   7144        self-contained objects defined in newlib <sys/lock.h> instead of
   7145        Classic API semaphores. The keys for thread specific data and the
   7146        once function are directly defined via <pthread.h>. Self-contained
   7147        condition variables are provided via newlib <sys/lock.h>. The RTEMS
   7148        thread model also supports C++11 threads.
   7149      * OpenMP support now uses self-contained objects provided by newlib
   7150        <sys/lock.h> and offers a significantly better performance compared
   7151        to the POSIX configuration of libgomp. It is possible to configure
   7152        thread pools for each scheduler instance via the environment
   7153        variable GOMP_RTEMS_THREAD_POOLS.
   7154 
   7155   [45]Solaris
   7156 
   7157      * Solaris 12 is now fully supported. Minimal support had already been
   7158        present in GCC 5.3.
   7159      * Solaris 12 provides a full set of startup files (crt1.o, crti.o,
   7160        crtn.o), which GCC now prefers over its own ones.
   7161      * Position independent executables (PIE) are now supported on Solaris
   7162        12.
   7163      * Constructor priority is now supported on Solaris 12 with the system
   7164        linker.
   7165      * libvtv has been ported to Solaris 11 and up.
   7166 
   7167   [46]Windows
   7168 
   7169      * The option -mstackrealign is now automatically activated in 32-bit
   7170        mode whenever the use of SSE instructions is requested.
   7171 
   7172 Other significant improvements
   7173 
   7174      * The gcc and g++ driver programs will now provide suggestions for
   7175        misspelled command-line options.
   7176 
   7177 $ gcc -static-libfortran test.f95
   7178 gcc: error: unrecognized command line option '-static-libfortran'; did you mean
   7179 '-static-libgfortran'?
   7180 
   7181      * The --enable-default-pie configure option enables generation of PIE
   7182        by default.
   7183 
   7184                                   [47]GCC 6.2
   7185 
   7186    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   7187    system that are known to be fixed in the 6.2 release. This list might
   7188    not be complete (that is, it is possible that some PRs that have been
   7189    fixed are not listed here).
   7190 
   7191 Target Specific Changes
   7192 
   7193   SPARC
   7194 
   7195      * Support for --with-cpu-32 and --with-cpu-64 configure options has
   7196        been added on bi-architecture platforms.
   7197      * Support for the SPARC M7 (Niagara 7) processor has been added.
   7198      * Support for the VIS 4.0 instruction set has been added.
   7199 
   7200                                   [49]GCC 6.3
   7201 
   7202    This is the [50]list of problem reports (PRs) from GCC's bug tracking
   7203    system that are known to be fixed in the 6.3 release. This list might
   7204    not be complete (that is, it is possible that some PRs that have been
   7205    fixed are not listed here).
   7206 
   7207 Target Specific Changes
   7208 
   7209   IA-32/x86-64
   7210 
   7211      * Support for the [51]deprecated pcommit instruction has been
   7212        removed.
   7213 
   7214                                   [52]GCC 6.4
   7215 
   7216    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   7217    system that are known to be fixed in the 6.4 release. This list might
   7218    not be complete (that is, it is possible that some PRs that have been
   7219    fixed are not listed here).
   7220 
   7221 [54]Operating Systems
   7222 
   7223   [55]RTEMS
   7224 
   7225      * The ABI changes on ARM so that no short enums are used by default.
   7226 
   7227                                   [56]GCC 6.5
   7228 
   7229    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   7230    system that are known to be fixed in the 6.5 release. This list might
   7231    not be complete (that is, it is possible that some PRs that have been
   7232    fixed are not listed here).
   7233 
   7234 
   7235     For questions related to the use of GCC, please consult these web
   7236     pages and the [58]GCC manuals. If that fails, the
   7237     [59]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7238     web pages and the development of GCC are welcome on our developer
   7239     list at [60]gcc (a] gcc.gnu.org. All of [61]our lists have public
   7240     archives.
   7241 
   7242    Copyright (C) [62]Free Software Foundation, Inc. Verbatim copying and
   7243    distribution of this entire article is permitted in any medium,
   7244    provided this notice is preserved.
   7245 
   7246    These pages are [63]maintained by the GCC team. Last modified
   7247    2025-01-31.
   7248 
   7249 References
   7250 
   7251    1. https://gcc.gnu.org/gcc-6/porting_to.html
   7252    2. https://gcc.gnu.org/onlinedocs/index.html#current
   7253    3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
   7254    4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
   7255    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
   7256    6. https://gcc.gnu.org/gcc-6/changes.html#general
   7257    7. https://gcc.gnu.org/gcc-6/changes.html#languages
   7258    8. https://www.openacc.org/
   7259    9. https://gcc.gnu.org/wiki/OpenACC
   7260   10. https://gcc.gnu.org/wiki/Offloading
   7261   11. https://gcc.gnu.org/gcc-6/changes.html#c-family
   7262   12. https://www.openmp.org/specifications/
   7263   13. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
   7264   14. https://gcc.gnu.org/gcc-6/changes.html#c
   7265   15. https://gcc.gnu.org/gcc-6/changes.html#cxx
   7266   16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
   7267   17. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   7268   18. https://gcc.gnu.org/gcc-6/changes.html#libstdcxx
   7269   19. https://gcc.gnu.org/gcc-6/changes.html#fortran
   7270   20. https://gcc.gnu.org/gcc-6/changes.html#jit
   7271   21. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
   7272   22. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
   7273   23. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
   7274   24. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
   7275   25. https://gcc.gnu.org/gcc-6/changes.html#targets
   7276   26. https://gcc.gnu.org/gcc-6/changes.html#aarch64
   7277   27. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
   7278   28. https://gcc.gnu.org/gcc-6/changes.html#arm
   7279   29. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
   7280   30. https://gcc.gnu.org/gcc-6/changes.html#hsa
   7281   31. https://gcc.gnu.org/gcc-6/changes.html#x86
   7282   32. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
   7283   33. https://gcc.gnu.org/gcc-6/changes.html#mep
   7284   34. https://gcc.gnu.org/gcc-6/changes.html#msp430
   7285   35. https://gcc.gnu.org/gcc-6/changes.html#powerpc
   7286   36. https://gcc.gnu.org/gcc-6/changes.html#s390
   7287   37. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
   7288   38. https://gcc.gnu.org/gcc-6/changes.html#sh
   7289   39. https://gcc.gnu.org/gcc-6/changes.html#sparc
   7290   40. https://gcc.gnu.org/gcc-6/changes.html#os
   7291   41. https://gcc.gnu.org/gcc-6/changes.html#aix
   7292   42. https://gcc.gnu.org/gcc-6/changes.html#linux
   7293   43. http://www.musl-libc.org/
   7294   44. https://gcc.gnu.org/gcc-6/changes.html#rtems
   7295   45. https://gcc.gnu.org/gcc-6/changes.html#solaris
   7296   46. https://gcc.gnu.org/gcc-6/changes.html#windows
   7297   47. https://gcc.gnu.org/gcc-6/changes.html#GCC6.2
   7298   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
   7299   49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
   7300   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
   7301   51. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   7302   52. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
   7303   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
   7304   54. https://gcc.gnu.org/gcc-6/changes.html#os64
   7305   55. https://gcc.gnu.org/gcc-6/changes.html#rtems64
   7306   56. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
   7307   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
   7308   58. https://gcc.gnu.org/onlinedocs/
   7309   59. mailto:gcc-help (a] gcc.gnu.org
   7310   60. mailto:gcc (a] gcc.gnu.org
   7311   61. https://gcc.gnu.org/lists.html
   7312   62. https://www.fsf.org/
   7313   63. https://gcc.gnu.org/about.html
   7314 ======================================================================
   7315 http://gcc.gnu.org/gcc-5/index.html
   7316 
   7317                               GCC 5 Release Series
   7318 
   7319    (This release series is no longer supported.)
   7320 
   7321    October 10, 2017
   7322 
   7323    The [1]GNU project and the GCC developers are pleased to announce the
   7324    release of GCC 5.5.
   7325 
   7326    This release is a bug-fix release, containing fixes for regressions in
   7327    GCC 5.4 relative to previous releases of GCC.
   7328 
   7329 Release History
   7330 
   7331    GCC 5.5
   7332           October 10, 2017 ([2]changes, [3]documentation)
   7333 
   7334    GCC 5.4
   7335           June 3, 2016 ([4]changes, [5]documentation)
   7336 
   7337    GCC 5.3
   7338           December 4, 2015 ([6]changes, [7]documentation)
   7339 
   7340    GCC 5.2
   7341           July 16, 2015 ([8]changes, [9]documentation)
   7342 
   7343    GCC 5.1
   7344           April 22, 2015 ([10]changes, [11]documentation)
   7345 
   7346 References and Acknowledgements
   7347 
   7348    GCC used to stand for the GNU C Compiler, but since the compiler
   7349    supports several other languages aside from C, it now stands for the
   7350    GNU Compiler Collection.
   7351 
   7352    A list of [12]successful builds is updated as new information becomes
   7353    available.
   7354 
   7355    The GCC developers would like to thank the numerous people that have
   7356    contributed new features, improvements, bug fixes, and other changes as
   7357    well as test results to GCC. This [13]amazing group of volunteers is
   7358    what makes GCC successful.
   7359 
   7360    For additional information about GCC please refer to the [14]GCC
   7361    project web site or contact the [15]GCC development mailing list.
   7362 
   7363    To obtain GCC please use [16]our mirror sites or [17]our version
   7364    control system.
   7365 
   7366 
   7367     For questions related to the use of GCC, please consult these web
   7368     pages and the [18]GCC manuals. If that fails, the
   7369     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7370     web pages and the development of GCC are welcome on our developer
   7371     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   7372     archives.
   7373 
   7374    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   7375    distribution of this entire article is permitted in any medium,
   7376    provided this notice is preserved.
   7377 
   7378    These pages are [23]maintained by the GCC team. Last modified
   7379    2024-05-30.
   7380 
   7381 References
   7382 
   7383    1. http://www.gnu.org/
   7384    2. https://gcc.gnu.org/gcc-5/changes.html
   7385    3. https://gcc.gnu.org/onlinedocs/5.5.0/
   7386    4. https://gcc.gnu.org/gcc-5/changes.html
   7387    5. https://gcc.gnu.org/onlinedocs/5.4.0/
   7388    6. https://gcc.gnu.org/gcc-5/changes.html
   7389    7. https://gcc.gnu.org/onlinedocs/5.3.0/
   7390    8. https://gcc.gnu.org/gcc-5/changes.html
   7391    9. https://gcc.gnu.org/onlinedocs/5.2.0/
   7392   10. https://gcc.gnu.org/gcc-5/changes.html
   7393   11. https://gcc.gnu.org/onlinedocs/5.1.0/
   7394   12. https://gcc.gnu.org/gcc-5/buildstat.html
   7395   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   7396   14. https://gcc.gnu.org/index.html
   7397   15. mailto:gcc (a] gcc.gnu.org
   7398   16. https://gcc.gnu.org/mirrors.html
   7399   17. https://gcc.gnu.org/git.html
   7400   18. https://gcc.gnu.org/onlinedocs/
   7401   19. mailto:gcc-help (a] gcc.gnu.org
   7402   20. mailto:gcc (a] gcc.gnu.org
   7403   21. https://gcc.gnu.org/lists.html
   7404   22. https://www.fsf.org/
   7405   23. https://gcc.gnu.org/about.html
   7406 ======================================================================
   7407 http://gcc.gnu.org/gcc-5/changes.html
   7408 
   7409                               GCC 5 Release Series
   7410                         Changes, New Features, and Fixes
   7411 
   7412 Caveats
   7413 
   7414      * The default mode for C is now -std=gnu11 instead of -std=gnu89.
   7415      * The C++ runtime library (libstdc++) uses a new ABI by default (see
   7416        [1]below).
   7417      * The Graphite framework for loop optimizations no longer requires
   7418        the CLooG library, only ISL version 0.14 (recommended) or 0.12.2.
   7419        The installation manual contains more information about
   7420        requirements to build GCC.
   7421      * The non-standard C++0x type traits has_trivial_default_constructor,
   7422        has_trivial_copy_constructor and has_trivial_copy_assign have been
   7423        deprecated and will be removed in a future version. The standard
   7424        C++11 traits is_trivially_default_constructible,
   7425        is_trivially_copy_constructible and is_trivially_copy_assignable
   7426        should be used instead.
   7427 
   7428 [2]General Optimizer Improvements
   7429 
   7430      * Inter-procedural optimization improvements:
   7431           + An Identical Code Folding (ICF) pass (controlled via
   7432             -fipa-icf) has been added. Compared to the identical code
   7433             folding performed by the Gold linker this pass does not
   7434             require function sections. It also performs merging before
   7435             inlining, so inter-procedural optimizations are aware of the
   7436             code re-use. On the other hand not all unifications performed
   7437             by a linker are doable by GCC which must honor aliasing
   7438             information. During link-time optimization of Firefox, this
   7439             pass unifies about 31000 functions, that is 14% overall.
   7440           + The devirtualization pass was significantly improved by adding
   7441             better support for speculative devirtualization and dynamic
   7442             type detection. About 50% of virtual calls in Firefox are now
   7443             speculatively devirtualized during link-time optimization.
   7444           + A new comdat localization pass allows the linker to eliminate
   7445             more dead code in presence of C++ inline functions.
   7446           + Virtual tables are now optimized. Local aliases are used to
   7447             reduce dynamic linking time of C++ virtual tables on ELF
   7448             targets and data alignment has been reduced to limit data
   7449             segment bloat.
   7450           + A new -fno-semantic-interposition option can be used to
   7451             improve code quality of shared libraries where interposition
   7452             of exported symbols is not allowed.
   7453           + Write-only variables are now detected and optimized out.
   7454           + With profile feedback the function inliner can now bypass
   7455             --param inline-insns-auto and --param inline-insns-single
   7456             limits for hot calls.
   7457           + The IPA reference pass was significantly sped up making it
   7458             feasible to enable -fipa-reference with -fprofile-generate.
   7459             This also solves a bottleneck seen when building Chromium with
   7460             link-time optimization.
   7461           + The symbol table and call-graph API was reworked to C++ and
   7462             simplified.
   7463           + The interprocedural propagation of constants now also
   7464             propagates alignments of pointer parameters. This for example
   7465             means that the vectorizer often does not need to generate loop
   7466             prologues and epilogues to make up for potential
   7467             misalignments.
   7468      * Link-time optimization improvements:
   7469           + One Definition Rule based merging of C++ types has been
   7470             implemented. Type merging enables better devirtualization and
   7471             alias analysis. Streaming extra information needed to merge
   7472             types adds about 2-6% of memory size and object size increase.
   7473             This can be controlled by -flto-odr-type-merging.
   7474           + Command-line optimization and target options are now streamed
   7475             on a per-function basis and honored by the link-time
   7476             optimizer. This change makes link-time optimization a more
   7477             transparent replacement of per-file optimizations. It is now
   7478             possible to build projects that require different optimization
   7479             settings for different translation units (such as -ffast-math,
   7480             -mavx, or -finline). Contrary to earlier GCC releases, the
   7481             optimization and target options passed on the link command
   7482             line are ignored.
   7483             Note that this applies only to those command-line options that
   7484             can be passed to optimize and target attributes. Command-line
   7485             options affecting global code generation (such as -fpic),
   7486             warnings (such as -Wodr), optimizations affecting the way
   7487             static variables are optimized (such as -fcommon), debug
   7488             output (such as -g), and --param parameters can be applied
   7489             only to the whole link-time optimization unit. In these cases,
   7490             it is recommended to consistently use the same options at both
   7491             compile time and link time.
   7492           + GCC bootstrap now uses slim LTO object files.
   7493           + Memory usage and link times were improved. Tree merging was
   7494             sped up, memory usage of GIMPLE declarations and types was
   7495             reduced, and, support for on-demand streaming of variable
   7496             constructors was added.
   7497      * Feedback directed optimization improvements:
   7498           + A new auto-FDO mode uses profiles collected by low overhead
   7499             profiling tools (perf) instead of more expensive program
   7500             instrumentation (via -fprofile-generate). SPEC2006 benchmarks
   7501             on x86-64 improve by 4.7% with auto-FDO and by 7.3% with
   7502             traditional feedback directed optimization.
   7503           + Profile precision was improved in presence of C++ inline and
   7504             extern inline functions.
   7505           + The new gcov-tool utility allows manipulating profiles.
   7506           + Profiles are now more tolerant to source file changes (this
   7507             can be controlled by --param profile-func-internal-id).
   7508      * Register allocation improvements:
   7509           + A new local register allocator (LRA) sub-pass, controlled by
   7510             -flra-remat, implements control-flow sensitive global register
   7511             rematerialization. Instead of spilling and restoring a
   7512             register value, it is recalculated if it is profitable. The
   7513             sub-pass improved SPEC2000 generated code by 1% and 0.5%
   7514             correspondingly on ARM and x86-64.
   7515           + Reuse of the PIC hard register, instead of using a fixed
   7516             register, was implemented on x86/x86-64 targets. This improves
   7517             generated PIC code performance as more hard registers can be
   7518             used. Shared libraries can significantly benefit from this
   7519             optimization. Currently it is switched on only for x86/x86-64
   7520             targets. As RA infrastructure is already implemented for PIC
   7521             register reuse, other targets might follow this in the future.
   7522           + A simple form of inter-procedural RA was implemented. When it
   7523             is known that a called function does not use caller-saved
   7524             registers, save/restore code is not generated around the call
   7525             for such registers. This optimization can be controlled by
   7526             -fipa-ra
   7527           + LRA is now much more effective at generating spills of general
   7528             registers into vector registers instead of memory on
   7529             architectures (e.g., modern Intel processors) where this is
   7530             profitable.
   7531      * UndefinedBehaviorSanitizer gained a few new sanitization options:
   7532           + -fsanitize=float-divide-by-zero: detect floating-point
   7533             division by zero;
   7534           + -fsanitize=float-cast-overflow: check that the result of
   7535             floating-point type to integer conversions do not overflow;
   7536           + -fsanitize=bounds: enable instrumentation of array bounds and
   7537             detect out-of-bounds accesses;
   7538           + -fsanitize=alignment: enable alignment checking, detect
   7539             various misaligned objects;
   7540           + -fsanitize=object-size: enable object size checking, detect
   7541             various out-of-bounds accesses.
   7542           + -fsanitize=vptr: enable checking of C++ member function calls,
   7543             member accesses and some conversions between pointers to base
   7544             and derived classes, detect if the referenced object does not
   7545             have the correct dynamic type.
   7546      * Pointer Bounds Checker, a bounds violation detector, has been added
   7547        and can be enabled via -fcheck-pointer-bounds. Memory accesses are
   7548        instrumented with run-time checks of used pointers against their
   7549        bounds to detect pointer bounds violations (overflows). The Pointer
   7550        Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
   7551        new ISA extension Intel MPX support. See the Pointer Bounds Checker
   7552        [3]Wiki page for more details.
   7553 
   7554 [4]New Languages and Language specific improvements
   7555 
   7556      * [5]OpenMP 4.0 specification offloading features are now supported
   7557        by the C, C++, and Fortran compilers. Generic changes:
   7558           + Infrastructure (suitable for any vendor).
   7559           + Testsuite which covers offloading from the [6]OpenMP 4.0
   7560             Examples document.
   7561        Specific for upcoming Intel Xeon Phi products:
   7562           + Run-time library.
   7563           + Card emulator.
   7564      * GCC 5 includes a preliminary implementation of the OpenACC 2.0a
   7565        specification. OpenACC is intended for programming accelerator
   7566        devices such as GPUs. See [7]the OpenACC wiki page for more
   7567        information.
   7568 
   7569   [8]C family
   7570 
   7571      * The default setting of the -fdiagnostics-color= command-line option
   7572        is now [9]configurable when building GCC using configuration option
   7573        --with-diagnostics-color=. The possible values are: never, always,
   7574        auto and auto-if-env. The new default auto uses color only when the
   7575        standard error is a terminal. The default in GCC 4.9 was
   7576        auto-if-env, which is equivalent to auto if there is a non-empty
   7577        GCC_COLORS environment variable, and never otherwise. As in GCC
   7578        4.9, an empty GCC_COLORS variable in the environment will always
   7579        disable colors, no matter what the default is or what command-line
   7580        options are used.
   7581      * A new command-line option -Wswitch-bool has been added for the C
   7582        and C++ compilers, which warns whenever a switch statement has an
   7583        index of boolean type.
   7584      * A new command-line option -Wlogical-not-parentheses has been added
   7585        for the C and C++ compilers, which warns about "logical not" used
   7586        on the left hand side operand of a comparison.
   7587      * A new command-line option -Wsizeof-array-argument has been added
   7588        for the C and C++ compilers, which warns when the sizeof operator
   7589        is applied to a parameter that has been declared as an array in a
   7590        function definition.
   7591      * A new command-line option -Wbool-compare has been added for the C
   7592        and C++ compilers, which warns about boolean expressions compared
   7593        with an integer value different from true/false.
   7594      * Full support for Cilk Plus has been added to the GCC compiler. Cilk
   7595        Plus is an extension to the C and C++ languages to support data and
   7596        task parallelism.
   7597      * A new attribute no_reorder prevents reordering of selected symbols
   7598        against other such symbols or inline assembler. This enables to
   7599        link-time optimize the Linux kernel without having to resort to
   7600        -fno-toplevel-reorder that disables several optimizations.
   7601      * New preprocessor constructs, __has_include and __has_include_next,
   7602        to test the availability of headers have been added.
   7603        This demonstrates a way to include the header <optional> only if it
   7604        is available:
   7605 
   7606 #ifdef __has_include
   7607 #  if __has_include(<optional>)
   7608 #    include <optional>
   7609 #    define have_optional 1
   7610 #  elif __has_include(<experimental/optional>)
   7611 #    include <experimental/optional>
   7612 #    define have_optional 1
   7613 #    define experimental_optional
   7614 #  else
   7615 #    define have_optional 0
   7616 #  endif
   7617 #endif
   7618 
   7619        The header search paths for __has_include and __has_include_next
   7620        are equivalent to those of the standard directive #include and the
   7621        extension #include_next respectively.
   7622      * A new built-in function-like macro to determine the existence of an
   7623        attribute, __has_attribute, has been added. The equivalent built-in
   7624        macro __has_cpp_attribute was added to C++ to support
   7625        [10]Feature-testing recommendations for C++. The macro
   7626        __has_attribute is added to all C-like languages as an extension:
   7627 
   7628 int
   7629 #ifdef __has_attribute
   7630 #  if __has_attribute(__noinline__)
   7631   __attribute__((__noinline__))
   7632 #  endif
   7633 #endif
   7634 foo(int x);
   7635 
   7636        If an attribute exists, a nonzero constant integer is returned. For
   7637        standardized C++ attributes a date is returned, otherwise the
   7638        constant returned is 1. Both __has_attribute and
   7639        __has_cpp_attribute will add underscores to an attribute name if
   7640        necessary to resolve the name. For C++11 and onwards the attribute
   7641        may be scoped.
   7642      * A new set of built-in functions for arithmetics with overflow
   7643        checking has been added: __builtin_add_overflow,
   7644        __builtin_sub_overflow and __builtin_mul_overflow and for
   7645        compatibility with clang also other variants. These builtins have
   7646        two integral arguments (which don't need to have the same type),
   7647        the arguments are extended to infinite precision signed type, +, -
   7648        or * is performed on those, and the result is stored in an integer
   7649        variable pointed to by the last argument. If the stored value is
   7650        equal to the infinite precision result, the built-in functions
   7651        return false, otherwise true. The type of the integer variable that
   7652        will hold the result can be different from the types of the first
   7653        two arguments. The following snippet demonstrates how this can be
   7654        used in computing the size for the calloc function:
   7655 
   7656 void *
   7657 calloc (size_t x, size_t y)
   7658 {
   7659   size_t sz;
   7660   if (__builtin_mul_overflow (x, y, &sz))
   7661     return NULL;
   7662   void *ret = malloc (sz);
   7663   if (ret) memset (res, 0, sz);
   7664   return ret;
   7665 }
   7666 
   7667        On e.g. i?86 or x86-64 the above will result in a mul instruction
   7668        followed by a jump on overflow.
   7669      * The option -fextended-identifiers is now enabled by default for
   7670        C++, and for C99 and later C versions. Various bugs in the
   7671        implementation of extended identifiers have been fixed.
   7672 
   7673   [11]C
   7674 
   7675      * The default mode has been changed to -std=gnu11.
   7676      * A new command-line option -Wc90-c99-compat has been added to warn
   7677        about features not present in ISO C90, but present in ISO C99.
   7678      * A new command-line option -Wc99-c11-compat has been added to warn
   7679        about features not present in ISO C99, but present in ISO C11.
   7680      * It is possible to disable warnings about conversions between
   7681        pointers that have incompatible types via a new warning option
   7682        -Wno-incompatible-pointer-types; warnings about implicit
   7683        incompatible integer to pointer and pointer to integer conversions
   7684        via a new warning option -Wno-int-conversion; and warnings about
   7685        qualifiers on pointers being discarded via a new warning option
   7686        -Wno-discarded-qualifiers.
   7687      * To allow proper use of const qualifiers with multidimensional
   7688        arrays, GCC will not warn about incompatible pointer types anymore
   7689        for conversions between pointers to arrays with and without const
   7690        qualifier (except when using -pedantic). Instead, a new warning is
   7691        emitted only if the const qualifier is lost. This can be controlled
   7692        with a new warning option -Wno-discarded-array-qualifiers.
   7693      * The C front end now generates more precise caret diagnostics.
   7694      * The -pg command-line option now only affects the current file in an
   7695        LTO build.
   7696 
   7697   [12]C++
   7698 
   7699      * G++ now supports [13]C++14 variable templates.
   7700      * -Wnon-virtual-dtor doesn't warn anymore for final classes.
   7701      * Excessive template instantiation depth is now a fatal error. This
   7702        prevents excessive diagnostics that usually do not help to identify
   7703        the problem.
   7704      * G++ and libstdc++ now implement the feature-testing macros from
   7705        [14]Feature-testing recommendations for C++.
   7706      * G++ now allows typename in a template template parameter.
   7707 
   7708 template<template<typename> typename X> struct D; // OK
   7709 
   7710      * G++ now supports [15]C++14 aggregates with non-static data member
   7711        initializers.
   7712 
   7713 struct A { int i, j = i; };
   7714 A a = { 42 }; // a.j is also 42
   7715 
   7716      * G++ now supports [16]C++14 extended constexpr.
   7717 
   7718 constexpr int f (int i)
   7719 {
   7720   int j = 0;
   7721   for (; i > 0; --i)
   7722     ++j;
   7723   return j;
   7724 }
   7725 
   7726 constexpr int i = f(42); // i is 42
   7727 
   7728      * G++ now supports the [17]C++14 sized deallocation functions.
   7729 
   7730 void operator delete (void *, std::size_t) noexcept;
   7731 void operator delete[] (void *, std::size_t) noexcept;
   7732 
   7733      * A new One Definition Rule violation warning (controlled by -Wodr)
   7734        detects mismatches in type definitions and virtual table contents
   7735        during link-time optimization.
   7736      * New warnings -Wsuggest-final-types and -Wsuggest-final-methods help
   7737        developers to annotate programs with final specifiers (or anonymous
   7738        namespaces) to improve code generation. These warnings can be used
   7739        at compile time, but they are more useful in combination with
   7740        link-time optimization.
   7741      * G++ no longer supports [18]N3639 variable length arrays, as they
   7742        were removed from the C++14 working paper prior to ratification.
   7743        GNU VLAs are still supported, so VLA support is now the same in
   7744        C++14 mode as in C++98 and C++11 modes.
   7745      * G++ now allows passing a non-trivially-copyable class via C
   7746        varargs, which is conditionally-supported with
   7747        implementation-defined semantics in the standard. This uses the
   7748        same calling convention as a normal value parameter.
   7749      * G++ now defaults to -fabi-version=9 and -fabi-compat-version=2. So
   7750        various mangling bugs are fixed, but G++ will still emit aliases
   7751        with the old, wrong mangling where feasible. -Wabi=2 will warn
   7752        about differences between ABI version 2 and the current setting.
   7753      * G++ 5.2 fixes the alignment of std::nullptr_t. Most code is likely
   7754        to be unaffected, but -Wabi=8 will warn about a non-static data
   7755        member with type std::nullptr_t which changes position due to this
   7756        change.
   7757 
   7758     [19]Runtime Library (libstdc++)
   7759 
   7760      * A [20]Dual ABI is provided by the library. A new ABI is enabled by
   7761        default. The old ABI is still supported and can be used by defining
   7762        the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
   7763        standard library headers.
   7764      * A new implementation of std::string is enabled by default, using
   7765        the small string optimization instead of copy-on-write reference
   7766        counting.
   7767      * A new implementation of std::list is enabled by default, with an
   7768        O(1) size() function;
   7769      * [21]Full support for C++11, including the following new features:
   7770           + std::deque and std::vector<bool> meet the allocator-aware
   7771             container requirements;
   7772           + movable and swappable iostream classes;
   7773           + support for std::align and std::aligned_union;
   7774           + type traits std::is_trivially_copyable,
   7775             std::is_trivially_constructible, std::is_trivially_assignable
   7776             etc.;
   7777           + I/O manipulators std::put_time, std::get_time, std::hexfloat
   7778             and std::defaultfloat;
   7779           + generic locale-aware std::isblank;
   7780           + locale facets for Unicode conversion;
   7781           + atomic operations for std::shared_ptr;
   7782           + std::notify_all_at_thread_exit() and functions for making
   7783             futures ready at thread exit.
   7784      * Support for the C++11 hexfloat manipulator changes how the num_put
   7785        facet formats floating point types when
   7786        ios_base::fixed|ios_base::scientific is set in a stream's fmtflags.
   7787        This change affects all language modes, even though the C++98
   7788        standard gave no special meaning to that combination of flags. To
   7789        prevent the use of hexadecimal notation for floating point types
   7790        use str.unsetf(std::ios_base::floatfield) to clear the relevant
   7791        bits in str.flags().
   7792      * [22]Full experimental support for C++14, including the following
   7793        new features:
   7794           + std::is_final type trait;
   7795           + heterogeneous comparison lookup in associative containers.
   7796           + global functions cbegin, cend, rbegin, rend, crbegin, and
   7797             crend for range access to containers, arrays and initializer
   7798             lists.
   7799      * [23]Improved experimental support for the Library Fundamentals TS,
   7800        including:
   7801           + class std::experimental::any;
   7802           + function template std::experimental::apply;
   7803           + function template std::experimental::sample;
   7804           + function template std::experimental::search and related
   7805             searcher types;
   7806           + variable templates for type traits;
   7807           + function template std::experimental::not_fn.
   7808      * New random number distributions logistic_distribution and
   7809        uniform_on_sphere_distribution as extensions.
   7810      * [24]GDB Xmethods for containers and std::unique_ptr.
   7811 
   7812   [25]Fortran
   7813 
   7814      * Compatibility notice:
   7815           + The version of the module files (.mod) has been incremented.
   7816           + For free-form source files [26]-Werror=line-truncation is now
   7817             enabled by default. Note that comments exceeding the line
   7818             length are not diagnosed. (For fixed-form source code, the
   7819             same warning is available but turned off by default, such that
   7820             excess characters are ignored. -ffree-line-length-n and
   7821             -ffixed-line-length-n can be used to modify the default line
   7822             lengths of 132 and 72 columns, respectively.)
   7823           + The -Wtabs option is now more sensible: with -Wtabs the
   7824             compiler warns if it encounters tabs and with -Wno-tabs this
   7825             warning is turned off. Before, -Wno-tabs warned and -Wtabs
   7826             disabled the warning. As before, this warning is also enabled
   7827             by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
   7828             options of -std=.
   7829      * Incomplete support for colorizing diagnostics emitted by gfortran
   7830        has been added. The option [27]-fdiagnostics-color controls when
   7831        color is used in diagnostics. The default value of this option can
   7832        be [28]configured when building GCC. The GCC_COLORS environment
   7833        variable can be used to customize the colors or disable coloring
   7834        completely. Sample diagnostics output:
   7835       $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
   7836       test.f90:6:1:
   7837 
   7838        0 continue
   7839        1
   7840       Error: Zero is not a valid statement label at (1)
   7841       test.f90:9:6:
   7842 
   7843          USE foo
   7844             1
   7845       Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
   7846 
   7847      * The -Wuse-without-only option has been added to warn when a USE
   7848        statement has no ONLY qualifier and thus implicitly imports all
   7849        public entities of the used module.
   7850      * Formatted READ and WRITE statements now work correctly in
   7851        locale-aware programs. For more information and potential caveats,
   7852        see [29]Section 5.3 Thread-safety of the runtime library in the
   7853        manual.
   7854      * [30]Fortran 2003:
   7855           + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
   7856             IEEE_ARITHMETIC) are now supported.
   7857      * [31]Fortran 2008:
   7858           + [32]Coarrays: Full experimental support of Fortran 2008's
   7859             coarrays with -fcoarray=lib except for allocatable/pointer
   7860             components of derived-type coarrays. GCC currently only ships
   7861             with a single-image library (libcaf_single), but multi-image
   7862             support based on MPI and GASNet is provided by the libraries
   7863             of the [33]OpenCoarrays project.
   7864      * TS18508 Additional Parallel Features in Fortran:
   7865           + Support for the collective intrinsic subroutines CO_MAX,
   7866             CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
   7867             including -fcoarray=lib support.
   7868           + Support for the new atomic intrinsics has been added,
   7869             including -fcoarray=lib support.
   7870      * Fortran 2015:
   7871           + Support for IMPLICIT NONE (external, type).
   7872           + ERROR STOP is now permitted in pure procedures.
   7873 
   7874   [34]Go
   7875 
   7876      * GCC 5 provides a complete implementation of the Go 1.4.2 release.
   7877      * Building GCC 5 with Go enabled will install two new programs:
   7878        [35]go and [36]gofmt.
   7879 
   7880 [37]libgccjit
   7881 
   7882    New in GCC 5 is the ability to build GCC as a shared library for
   7883    embedding in other processes (such as interpreters), suitable for
   7884    Just-In-Time compilation to machine code.
   7885 
   7886    The shared library has a [38]C API and a [39]C++ wrapper API providing
   7887    some "syntactic sugar". There are also bindings available from 3rd
   7888    parties for [40]Python and for [41]D.
   7889 
   7890    For example, this library can be used by interpreters for [42]compiling
   7891    functions from bytecode to machine code.
   7892 
   7893    The library can also be used for ahead-of-time compilation, enabling
   7894    GCC to be plugged into a pre-existing front end. An example of using
   7895    this to build a compiler for an esoteric language we'll refer to as
   7896    "brainf" can be seen [43]here.
   7897 
   7898    libgccjit is licensed under the GPLv3 (or at your option, any later
   7899    version)
   7900 
   7901    It should be regarded as experimental at this time.
   7902 
   7903 [44]New Targets and Target Specific Improvements
   7904 
   7905   [45]Reporting stack usage
   7906 
   7907      * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
   7908        -fstack-usage option.
   7909 
   7910   [46]AArch64
   7911 
   7912      * Code generation for the ARM Cortex-A57 processor has been improved.
   7913        A more accurate instruction scheduling model for the processor is
   7914        now used, and a number of compiler tuning parameters have been set
   7915        to offer increased performance when compiling with -mcpu=cortex-a57
   7916        or -mtune=cortex-a57.
   7917      * A workaround for the ARM Cortex-A53 erratum 835769 has been added
   7918        and can be enabled by giving the -mfix-cortex-a53-835769 option.
   7919        Alternatively it can be enabled by default by configuring GCC with
   7920        the --enable-fix-cortex-a53-835769 option.
   7921      * The optional cryptographic extensions to the ARMv8-A architecture
   7922        are no longer enabled by default when specifying the
   7923        -mcpu=cortex-a53, -mcpu=cortex-a57 or -mcpu=cortex-a57.cortex-a53
   7924        options. To enable these extensions add +crypto to the value of
   7925        -mcpu or -march e.g. -mcpu=cortex-a53+crypto.
   7926      * Support has been added for the following processors (GCC
   7927        identifiers in parentheses): ARM Cortex-A72 (cortex-a72) and
   7928        initial support for its big.LITTLE combination with the ARM
   7929        Cortex-A53 (cortex-a72.cortex-a53), Cavium ThunderX (thunderx),
   7930        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   7931        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7932        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   7933        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   7934        support for the Cortex-A72.
   7935      * The transitional options -mlra and -mno-lra have been removed. The
   7936        AArch64 back end now uses the local register allocator (LRA) only.
   7937 
   7938   [47]ARM
   7939 
   7940      * Thumb-1 assembly code is now generated in unified syntax. The new
   7941        option -masm-syntax-unified specifies whether inline assembly code
   7942        is using unified syntax. By default the option is off which means
   7943        non-unified syntax is used. However this is subject to change in
   7944        future releases. Eventually the non-unified syntax will be
   7945        deprecated.
   7946      * It is now a configure-time error to use the --with-cpu configure
   7947        option with either of --with-tune or --with-arch.
   7948      * Code generation for the ARM Cortex-A57 processor has been improved.
   7949        A more accurate instruction scheduling model for the processor is
   7950        now used, and a number of compiler tuning parameters have been set
   7951        to offer increased performance when compiling with -mcpu=cortex-a57
   7952        or -mtune=cortex-a57.
   7953      * Support has been added for the following processors (GCC
   7954        identifiers in parentheses): ARM Cortex-A17 (cortex-a17) and
   7955        initial support for its big.LITTLE combination with the ARM
   7956        Cortex-A7 (cortex-a17.cortex-a7), ARM Cortex-A72 (cortex-a72) and
   7957        initial support for its big.LITTLE combination with the ARM
   7958        Cortex-A53 (cortex-a72.cortex-a53), ARM Cortex-M7 (cortex-m7),
   7959        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   7960        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7961        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   7962        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   7963        support for the Cortex-A72.
   7964      * The deprecated option -mwords-little-endian has been removed.
   7965      * The options -mapcs, -mapcs-frame, -mtpcs-frame and
   7966        -mtpcs-leaf-frame which are only applicable to the old ABI have
   7967        been deprecated.
   7968      * The transitional options -mlra and -mno-lra have been removed. The
   7969        ARM back end now uses the local register allocator (LRA) only.
   7970 
   7971   [48]AVR
   7972 
   7973      * Support has been added for the devices ATtiny4/5/9/10/20/40. This
   7974        requires Binutils 2.25 or newer.
   7975      * The port uses a new scheme to describe supported devices: For each
   7976        supported device, the compiler provides a device-specific [49]spec
   7977        file. If the compiler is used together with AVR-LibC, this requires
   7978        at least GCC 5.2 and a version of AVR-LibC which implements
   7979        [50]feature #44574.
   7980        As a consequence, the compiler no more supports individual devices
   7981        like ATmega8. Specifying, say, -mmcu=atmega8 triggers the usage of
   7982        the device-specific [51]spec file specs-atmega8 which is part of
   7983        the installation and describes options for the sub-processes like
   7984        compiler proper, assembler and linker. You can add support for a
   7985        new device -mmcu=mydevice as follows:
   7986          1. In an empty directory /someplace, create a new directory
   7987             device-specs.
   7988          2. Copy a device spec file from the installed device-specs
   7989             folder, follow the comments in that file and then save it as
   7990             /someplace/device-specs/specs-mydevice.
   7991          3. Add -B /someplace -mmcu=mydevice to the compiler's
   7992             command-line options. Notice that /someplace must specify an
   7993             absolute path and that mydevice must not start with "avr".
   7994          4. Provided you have a device-specific library libmydevice.a
   7995             available, you can put it at /someplace, dito for a
   7996             device-specific startup file crtmydevice.o.
   7997        The contents of the device spec files depend on the compiler's
   7998        configuration, in particular on --with-avrlibc=no and whether or
   7999        not it is configured for RTEMS.
   8000      * A new command-line option -nodevicelib has been added. It prevents
   8001        the compiler from linking against AVR-LibC's device-specific
   8002        library libdevice.a.
   8003      * The following three command-line options have been added:
   8004 
   8005         -mrmw
   8006                 Set if the device supports the read-modify-write
   8007                 instructions LAC, LAS, LAT and XCH.
   8008 
   8009         -mn-flash=size
   8010                 Specify the flash size of the device in units of 64 KiB,
   8011                 rounded up to the next integer as needed. This option
   8012                 affects the availability of the [52]AVR address-spaces.
   8013 
   8014         -mskip-bug
   8015                 Set if the device is affected by the respective silicon
   8016                 bug.
   8017 
   8018        These options are used internally in order to communicate between
   8019        the compiler and the device-spces file. They are set in the
   8020        device-specs file as needed. Don't set them by hand.
   8021 
   8022   [53]IA-32/x86-64
   8023 
   8024      * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
   8025        CPU codenamed Skylake Server was added to GCC. That includes inline
   8026        assembly support, new intrinsics, and basic autovectorization.
   8027        These new AVX-512 extensions are available via the following GCC
   8028        switches: AVX-512 Vector Length EVEX feature: -mavx512vl, AVX-512
   8029        Byte and Word instructions: -mavx512bw, AVX-512 Dword and Qword
   8030        instructions: -mavx512dq, AVX-512 FMA-52 instructions: -mavx512ifma
   8031        and for AVX-512 Vector Bit Manipulation Instructions: -mavx512vbmi.
   8032      * New ISA extensions support Intel MPX was added to GCC. This new
   8033        extension is available via the -mmpx compiler switch. Intel MPX is
   8034        a set of processor features which, with compiler, run-time library
   8035        and OS support, brings increased robustness to software by run-time
   8036        checking pointer references against their bounds. In GCC Intel MPX
   8037        is supported by Pointer Bounds Checker and libmpx run-time
   8038        libraries.
   8039      * The new -mrecord-mcount option for -pg generates a Linux kernel
   8040        style table of pointers to mcount or __fentry__ calls at the
   8041        beginning of functions. The new -mnop-mcount option in addition
   8042        also generates nops in place of the __fentry__ or mcount call, so
   8043        that a call per function can be later patched in. This can be used
   8044        for low overhead tracing or hot code patching.
   8045      * The new -malign-data option controls how GCC aligns variables.
   8046        -malign-data=compat uses increased alignment compatible with GCC
   8047        4.8 and earlier, -malign-data=abi uses alignment as specified by
   8048        the psABI, and -malign-data=cacheline uses increased alignment to
   8049        match the cache line size. -malign-data=compat is the default.
   8050      * The new -mskip-rax-setup option skips setting up the RAX register
   8051        when SSE is disabled and there are no variable arguments passed in
   8052        vector registers. This can be used to optimize the Linux kernel.
   8053 
   8054   [54]MIPS
   8055 
   8056      * MIPS Releases 3 and 5 are now directly supported. Use the
   8057        command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
   8058        to enable code-generation for these processors.
   8059      * The Imagination P5600 processor is now supported using the
   8060        -march=p5600 command-line option.
   8061      * The Cavium Octeon3 processor is now supported using the
   8062        -march=octeon3 command-line option.
   8063      * MIPS Release 6 is now supported using the -mips32r6 and -mips64r6
   8064        command-line options.
   8065      * The o32 ABI has been modified and extended. The o32 64-bit
   8066        floating-point register support is now obsolete and has been
   8067        removed. It has been replaced by three ABI extensions FPXX, FP64A,
   8068        and FP64. The meaning of the -mfp64 command-line option has
   8069        changed. It is now used to enable the FP64A and FP64 ABI
   8070        extensions.
   8071           + The FPXX extension requires that code generated to access
   8072             double-precision values use even-numbered registers. Code that
   8073             adheres to this extension is link-compatible with all other
   8074             o32 double-precision ABI variants and will execute correctly
   8075             in all hardware FPU modes. The command-line options -mabi=32
   8076             -mfpxx can be used to enable this extension. MIPS II is the
   8077             minimum processor required.
   8078           + The o32 FP64A extension requires that floating-point registers
   8079             be 64-bit and odd-numbered single-precision registers are not
   8080             allowed. Code that adheres to the o32 FP64A variant is
   8081             link-compatible with all other o32 double-precision ABI
   8082             variants. The command-line options -mabi=32 -mfp64
   8083             -mno-odd-spreg can be used to enable this extension. MIPS32R2
   8084             is the minimum processor required.
   8085           + The o32 FP64 extension also requires that floating-point
   8086             registers be 64-bit, but permits the use of single-precision
   8087             registers. Code that adheres to the o32 FP64 variant is
   8088             link-compatible with o32 FPXX and o32 FP64A variants only,
   8089             i.e. it is not compatible with the original o32
   8090             double-precision ABI. The command-line options -mabi=32 -mfp64
   8091             -modd-spreg can be used to enable this extension. MIPS32R2 is
   8092             the minimum processor required.
   8093        The new ABI variants can be enabled by default using the configure
   8094        time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32.
   8095        It is strongly recommended that all vendors begin to set o32 FPXX
   8096        as the default ABI. This will be required to run the generated code
   8097        on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and
   8098        MIPSR6 cores.
   8099      * GCC will now pass all floating-point options to the assembler if
   8100        GNU binutils 2.25 is used. As a result, any inline assembly code
   8101        that uses hard-float instructions should be amended to include a
   8102        .set directive to override the global assembler options when
   8103        compiling for soft-float targets.
   8104 
   8105   [55]NDS32
   8106 
   8107      * The variadic function ABI implementation is now compatible with
   8108        past Andes toolchains where the caller uses registers to pass
   8109        arguments and the callee is in charge of pushing them on stack.
   8110      * The options -mforce-fp-as-gp, -mforbid-fp-as-gp, and -mex9 have
   8111        been removed since they are not yet available in the nds32 port of
   8112        GNU binutils.
   8113      * A new option -mcmodel=[small|medium|large] supports varied code
   8114        models on code generation. The -mgp-direct option became
   8115        meaningless and can be discarded.
   8116 
   8117   [56]RX
   8118 
   8119      * A new command line option -mno-allow-string-insns can be used to
   8120        disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
   8121        SWHILE and RMPA instructions. An erratum released by Renesas shows
   8122        that it is unsafe to use these instructions on addresses within the
   8123        I/O space of the processor. The new option can be used when the
   8124        programmer is concerned that the I/O space might be accessed. The
   8125        default is still to enable these instructions.
   8126 
   8127   [57]SH
   8128 
   8129      * The compiler will now pass the appropriate --isa= option to the
   8130        assembler.
   8131      * The default handling for the GBR has been changed from call
   8132        clobbered to call preserved. The old behavior can be reinstated by
   8133        specifying the option -fcall-used-gbr.
   8134      * Support for the SH4A fpchg instruction has been added which will be
   8135        utilized when switching between single and double precision FPU
   8136        modes.
   8137      * The compiler no longer uses the __fpscr_values array for switching
   8138        between single and double FPU precision modes on non-SH4A targets.
   8139        Instead mode switching will now be performed by storing, modifying
   8140        and reloading the FPSCR, so that other FPSCR bits are preserved
   8141        across mode switches. The __fpscr_values array that is defined in
   8142        libgcc is still present for backwards compatibility, but it will
   8143        not be referenced by compiler generated code anymore.
   8144      * New builtin functions __builtin_sh_get_fpscr and
   8145        __builtin_sh_set_fpscr have been added. The __builtin_sh_set_fpscr
   8146        function will mask the specified bits in such a way that the SZ, PR
   8147        and FR mode bits will be preserved, while changing the other bits.
   8148        These new functions do not reference the __fpscr_values array. The
   8149        old functions __set_fpscr and __get_fpscr in libgcc which access
   8150        the __fpscr_values array are still present for backwards
   8151        compatibility, but their usage is highly discouraged.
   8152      * Some improvements to code generated for __atomic built-in
   8153        functions.
   8154      * When compiling for SH2E the compiler will no longer force the usage
   8155        of delay slots for conditional branch instructions bt and bf. The
   8156        old behavior can be reinstated (e.g. to work around a hardware bug
   8157        in the original SH7055) by specifying the new option
   8158        -mcbranch-force-delay-slot.
   8159 
   8160 [58]Operating Systems
   8161 
   8162   [59]AIX
   8163 
   8164      * GCC now supports stabs debugging continuation lines to allow long
   8165        stabs debug information without overflow that generates AIX linker
   8166        errors.
   8167 
   8168   [60]DragonFly BSD
   8169 
   8170      * GCC now supports the DragonFly BSD operating system.
   8171 
   8172   [61]FreeBSD
   8173 
   8174      * GCC now supports the FreeBSD operating system for the arm port
   8175        through the arm*-*-freebsd* target triplets.
   8176 
   8177   [62]VxWorks MILS
   8178 
   8179      * GCC now supports the MILS (Multiple Independent Levels of Security)
   8180        variant of WindRiver's VxWorks operating system for PowerPC
   8181        targets.
   8182 
   8183 Other significant improvements
   8184 
   8185      * The gcc-ar, gcc-nm, gcc-ranlib wrappers now understand a -B option
   8186        to set the compiler to use.
   8187 
   8188      * When the new command-line option -freport-bug is used, GCC
   8189        automatically generates a developer-friendly reproducer whenever an
   8190        internal compiler error is encountered.
   8191 
   8192                                   [63]GCC 5.2
   8193 
   8194    This is the [64]list of problem reports (PRs) from GCC's bug tracking
   8195    system that are known to be fixed in the 5.2 release. This list might
   8196    not be complete (that is, it is possible that some PRs that have been
   8197    fixed are not listed here).
   8198 
   8199 Target Specific Changes
   8200 
   8201   IA-32/x86-64
   8202 
   8203      * Support for new AMD instructions monitorx and mwaitx has been
   8204        added. This includes new intrinsic and built-in support. It is
   8205        enabled through option -mmwaitx. The instructions monitorx and
   8206        mwaitx implement the same functionality as the old monitor and
   8207        mwait instructions. In addition, mwaitx adds a configurable timer.
   8208        The timer value is received as third argument and stored in
   8209        register %ebx.
   8210 
   8211   S/390, System z, IBM z Systems
   8212 
   8213      * Support for the IBM z13 processor has been added. When using the
   8214        -march=z13 option, the compiler will generate code making use of
   8215        the new instructions and registers introduced with the vector
   8216        extension facility. The -mtune=z13 option enables z13 specific
   8217        instruction scheduling without making use of new instructions.
   8218        Compiling code with -march=z13 reduces the default alignment of
   8219        vector types bigger than 8 bytes to 8. This is an ABI change and
   8220        care must be taken when linking modules compiled with different
   8221        arch levels which interchange variables containing vector type
   8222        values. For newly compiled code the GNU linker will emit a warning.
   8223      * The -mzvector option enables a C/C++ language extension. This
   8224        extension provides a new keyword vector which can be used to define
   8225        vector type variables. (Note: This is not available when enforcing
   8226        strict standard compliance e.g. with -std=c99. Either enable GNU
   8227        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   8228        Additionally a set of overloaded builtins is provided which is
   8229        partially compatible to the PowerPC Altivec builtins. In order to
   8230        make use of these builtins the vecintrin.h header file needs to be
   8231        included.
   8232 
   8233                                   [65]GCC 5.3
   8234 
   8235    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   8236    system that are known to be fixed in the 5.3 release. This list might
   8237    not be complete (that is, it is possible that some PRs that have been
   8238    fixed are not listed here).
   8239 
   8240 Target Specific Changes
   8241 
   8242   IA-32/x86-64
   8243 
   8244      * GCC now supports the Intel CPU named Skylake with AVX-512
   8245        extensions through -march=skylake-avx512. The switch enables the
   8246        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   8247        AVX-512DQ.
   8248 
   8249   S/390, System z, IBM z Systems
   8250 
   8251      * With this version of GCC IBM z Systems support has been added to
   8252        the GO runtime environment. GCC 5.3 has proven to be able to
   8253        compile larger GO applications on IBM z Systems.
   8254 
   8255                                   [67]GCC 5.4
   8256 
   8257    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   8258    system that are known to be fixed in the 5.4 release. This list might
   8259    not be complete (that is, it is possible that some PRs that have been
   8260    fixed are not listed here).
   8261 
   8262                                   [69]GCC 5.5
   8263 
   8264    This is the [70]list of problem reports (PRs) from GCC's bug tracking
   8265    system that are known to be fixed in the 5.5 release. This list might
   8266    not be complete (that is, it is possible that some PRs that have been
   8267    fixed are not listed here).
   8268 
   8269 Target Specific Changes
   8270 
   8271   IA-32/x86-64
   8272 
   8273      * Support for the [71]deprecated pcommit instruction has been
   8274        removed.
   8275 
   8276 
   8277     For questions related to the use of GCC, please consult these web
   8278     pages and the [72]GCC manuals. If that fails, the
   8279     [73]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8280     web pages and the development of GCC are welcome on our developer
   8281     list at [74]gcc (a] gcc.gnu.org. All of [75]our lists have public
   8282     archives.
   8283 
   8284    Copyright (C) [76]Free Software Foundation, Inc. Verbatim copying and
   8285    distribution of this entire article is permitted in any medium,
   8286    provided this notice is preserved.
   8287 
   8288    These pages are [77]maintained by the GCC team. Last modified
   8289    2025-02-28.
   8290 
   8291 References
   8292 
   8293    1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   8294    2. https://gcc.gnu.org/gcc-5/changes.html#general
   8295    3. https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler
   8296    4. https://gcc.gnu.org/gcc-5/changes.html#languages
   8297    5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
   8298    6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
   8299    7. https://gcc.gnu.org/wiki/OpenACC
   8300    8. https://gcc.gnu.org/gcc-5/changes.html#c-family
   8301    9. https://gcc.gnu.org/install/configure.html
   8302   10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   8303   11. https://gcc.gnu.org/gcc-5/changes.html#c
   8304   12. https://gcc.gnu.org/gcc-5/changes.html#cxx
   8305   13. https://gcc.gnu.org/projects/cxx1y.html
   8306   14. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   8307   15. https://gcc.gnu.org/projects/cxx1y.html
   8308   16. https://gcc.gnu.org/projects/cxx1y.html
   8309   17. https://gcc.gnu.org/projects/cxx1y.html
   8310   18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
   8311   19. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   8312   20. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
   8313   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
   8314   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   8315   23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   8316   24. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
   8317   25. https://gcc.gnu.org/gcc-5/changes.html#fortran
   8318   26. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
   8319   27. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
   8320   28. https://gcc.gnu.org/install/configure.html
   8321   29. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
   8322   30. https://gcc.gnu.org/wiki/Fortran2003Status
   8323   31. https://gcc.gnu.org/wiki/Fortran2008Status
   8324   32. https://gcc.gnu.org/wiki/Coarray
   8325   33. http://www.opencoarrays.org/
   8326   34. https://gcc.gnu.org/gcc-5/changes.html#go
   8327   35. https://pkg.go.dev/cmd/go
   8328   36. https://pkg.go.dev/cmd/gofmt
   8329   37. https://gcc.gnu.org/gcc-5/changes.html#jit
   8330   38. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
   8331   39. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
   8332   40. https://github.com/davidmalcolm/pygccjit
   8333   41. https://github.com/ibuclaw/gccjitd
   8334   42. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
   8335   43. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
   8336   44. https://gcc.gnu.org/gcc-5/changes.html#targets
   8337   45. https://gcc.gnu.org/gcc-5/changes.html#stack-usage
   8338   46. https://gcc.gnu.org/gcc-5/changes.html#aarch64
   8339   47. https://gcc.gnu.org/gcc-5/changes.html#arm
   8340   48. https://gcc.gnu.org/gcc-5/changes.html#avr
   8341   49. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   8342   50. https://savannah.nongnu.org/bugs/?44574
   8343   51. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   8344   52. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
   8345   53. https://gcc.gnu.org/gcc-5/changes.html#x86
   8346   54. https://gcc.gnu.org/gcc-5/changes.html#mips
   8347   55. https://gcc.gnu.org/gcc-5/changes.html#nds32
   8348   56. https://gcc.gnu.org/gcc-5/changes.html#rx
   8349   57. https://gcc.gnu.org/gcc-5/changes.html#sh
   8350   58. https://gcc.gnu.org/gcc-5/changes.html#os
   8351   59. https://gcc.gnu.org/gcc-5/changes.html#aix
   8352   60. https://gcc.gnu.org/gcc-5/changes.html#dragonfly
   8353   61. https://gcc.gnu.org/gcc-5/changes.html#freebsd
   8354   62. https://gcc.gnu.org/gcc-5/changes.html#vxmils
   8355   63. https://gcc.gnu.org/gcc-5/changes.html#GCC5.2
   8356   64. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
   8357   65. https://gcc.gnu.org/gcc-5/changes.html#GCC5.3
   8358   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
   8359   67. https://gcc.gnu.org/gcc-5/changes.html#GCC5.4
   8360   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
   8361   69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
   8362   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
   8363   71. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   8364   72. https://gcc.gnu.org/onlinedocs/
   8365   73. mailto:gcc-help (a] gcc.gnu.org
   8366   74. mailto:gcc (a] gcc.gnu.org
   8367   75. https://gcc.gnu.org/lists.html
   8368   76. https://www.fsf.org/
   8369   77. https://gcc.gnu.org/about.html
   8370 ======================================================================
   8371 http://gcc.gnu.org/gcc-4.9/index.html
   8372 
   8373                              GCC 4.9 Release Series
   8374 
   8375    (This release series is no longer supported.)
   8376 
   8377    Aug 3, 2016
   8378 
   8379    The [1]GNU project and the GCC developers are pleased to announce the
   8380    release of GCC 4.9.4.
   8381 
   8382    This release is a bug-fix release, containing fixes for regressions in
   8383    GCC 4.9.3 relative to previous releases of GCC.
   8384 
   8385 Release History
   8386 
   8387    GCC 4.9.4
   8388           Aug 3, 2016 ([2]changes, [3]documentation)
   8389 
   8390    GCC 4.9.3
   8391           June 26, 2015 ([4]changes, [5]documentation)
   8392 
   8393    GCC 4.9.2
   8394           October 30, 2014 ([6]changes, [7]documentation)
   8395 
   8396    GCC 4.9.1
   8397           July 16, 2014 ([8]changes, [9]documentation)
   8398 
   8399    GCC 4.9.0
   8400           April 22, 2014 ([10]changes, [11]documentation)
   8401 
   8402 References and Acknowledgements
   8403 
   8404    GCC used to stand for the GNU C Compiler, but since the compiler
   8405    supports several other languages aside from C, it now stands for the
   8406    GNU Compiler Collection.
   8407 
   8408    A list of [12]successful builds is updated as new information becomes
   8409    available.
   8410 
   8411    The GCC developers would like to thank the numerous people that have
   8412    contributed new features, improvements, bug fixes, and other changes as
   8413    well as test results to GCC. This [13]amazing group of volunteers is
   8414    what makes GCC successful.
   8415 
   8416    For additional information about GCC please refer to the [14]GCC
   8417    project web site or contact the [15]GCC development mailing list.
   8418 
   8419    To obtain GCC please use [16]our mirror sites or [17]our version
   8420    control system.
   8421 
   8422 
   8423     For questions related to the use of GCC, please consult these web
   8424     pages and the [18]GCC manuals. If that fails, the
   8425     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8426     web pages and the development of GCC are welcome on our developer
   8427     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   8428     archives.
   8429 
   8430    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   8431    distribution of this entire article is permitted in any medium,
   8432    provided this notice is preserved.
   8433 
   8434    These pages are [23]maintained by the GCC team. Last modified
   8435    2024-05-30.
   8436 
   8437 References
   8438 
   8439    1. http://www.gnu.org/
   8440    2. https://gcc.gnu.org/gcc-4.9/changes.html
   8441    3. https://gcc.gnu.org/onlinedocs/4.9.4/
   8442    4. https://gcc.gnu.org/gcc-4.9/changes.html
   8443    5. https://gcc.gnu.org/onlinedocs/4.9.3/
   8444    6. https://gcc.gnu.org/gcc-4.9/changes.html
   8445    7. https://gcc.gnu.org/onlinedocs/4.9.2/
   8446    8. https://gcc.gnu.org/gcc-4.9/changes.html
   8447    9. https://gcc.gnu.org/onlinedocs/4.9.1/
   8448   10. https://gcc.gnu.org/gcc-4.9/changes.html
   8449   11. https://gcc.gnu.org/onlinedocs/4.9.0/
   8450   12. https://gcc.gnu.org/gcc-4.9/buildstat.html
   8451   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   8452   14. https://gcc.gnu.org/index.html
   8453   15. mailto:gcc (a] gcc.gnu.org
   8454   16. https://gcc.gnu.org/mirrors.html
   8455   17. https://gcc.gnu.org/git.html
   8456   18. https://gcc.gnu.org/onlinedocs/
   8457   19. mailto:gcc-help (a] gcc.gnu.org
   8458   20. mailto:gcc (a] gcc.gnu.org
   8459   21. https://gcc.gnu.org/lists.html
   8460   22. https://www.fsf.org/
   8461   23. https://gcc.gnu.org/about.html
   8462 ======================================================================
   8463 http://gcc.gnu.org/gcc-4.9/changes.html
   8464 
   8465                              GCC 4.9 Release Series
   8466                         Changes, New Features, and Fixes
   8467 
   8468 Caveats
   8469 
   8470      * The mudflap run time checker has been removed. The mudflap options
   8471        remain, but do nothing.
   8472      * Support for a number of older systems and recently unmaintained or
   8473        untested target ports of GCC has been declared obsolete in GCC 4.9.
   8474        Unless there is activity to revive them, the next release of GCC
   8475        will have their sources permanently removed.
   8476        The following ports for individual systems on particular
   8477        architectures have been obsoleted:
   8478           + Solaris 9 (*-*-solaris2.9). Details can be found in the
   8479             [1]announcement.
   8480      * On AArch64, the singleton vector types int64x1_t, uint64x1_t and
   8481        float64x1_t exported by arm_neon.h are defined to be the same as
   8482        their base types. This results in incorrect application of
   8483        parameter passing rules to arguments of types int64x1_t and
   8484        uint64x1_t, with respect to the AAPCS64 ABI specification. In
   8485        addition, names of C++ functions with parameters of these types
   8486        (including float64x1_t) are not mangled correctly. The current
   8487        typedef declarations also unintentionally allow implicit casting
   8488        between singleton vector types and their base types. These issues
   8489        will be resolved in a near future release. See [2]PR60825 for more
   8490        information.
   8491 
   8492    More information on porting to GCC 4.9 from previous versions of GCC
   8493    can be found in the [3]porting guide for this release.
   8494 
   8495 General Optimizer Improvements
   8496 
   8497      * AddressSanitizer, a fast memory error detector, is now available on
   8498        ARM.
   8499      * UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior
   8500        detector, has been added and can be enabled via
   8501        -fsanitize=undefined. Various computations will be instrumented to
   8502        detect undefined behavior at runtime. UndefinedBehaviorSanitizer is
   8503        currently available for the C and C++ languages.
   8504      * Link-time optimization (LTO) improvements:
   8505           + Type merging was rewritten. The new implementation is
   8506             significantly faster and uses less memory.
   8507           + Better partitioning algorithm resulting in less streaming
   8508             during link time.
   8509           + Early removal of virtual methods reduces the size of object
   8510             files and improves link-time memory usage and compile time.
   8511           + Function bodies are now loaded on-demand and released early
   8512             improving overall memory usage at link time.
   8513           + C++ hidden keyed methods can now be optimized out.
   8514           + When using a linker plugin, compiling with the -flto option
   8515             now generates slim object files (.o) which only contain
   8516             intermediate language representation for LTO. Use
   8517             -ffat-lto-objects to create files which contain additionally
   8518             the object code. To generate static libraries suitable for LTO
   8519             processing, use gcc-ar and gcc-ranlib; to list symbols from a
   8520             slim object file use gcc-nm. (This requires that ar, ranlib
   8521             and nm have been compiled with plugin support.)
   8522        Memory usage building Firefox with debug enabled was reduced from
   8523        15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
   8524      * Inter-procedural optimization improvements:
   8525           + New type inheritance analysis module improving
   8526             devirtualization. Devirtualization now takes into account
   8527             anonymous name-spaces and the C++11 final keyword.
   8528           + New speculative devirtualization pass (controlled by
   8529             -fdevirtualize-speculatively.
   8530           + Calls that were speculatively made direct are turned back to
   8531             indirect where direct call is not cheaper.
   8532           + Local aliases are introduced for symbols that are known to be
   8533             semantically equivalent across shared libraries improving
   8534             dynamic linking times.
   8535      * Feedback directed optimization improvements:
   8536           + Profiling of programs using C++ inline functions is now more
   8537             reliable.
   8538           + New time profiling determines typical order in which functions
   8539             are executed.
   8540           + A new function reordering pass (controlled by
   8541             -freorder-functions) significantly reduces startup time of
   8542             large applications. Until binutils support is completed, it is
   8543             effective only with link-time optimization.
   8544           + Feedback driven indirect call removal and devirtualization now
   8545             handle cross-module calls when link-time optimization is
   8546             enabled.
   8547 
   8548 [4]New Languages and Language specific improvements
   8549 
   8550      * Version 4.0 of the [5]OpenMP specification is now supported in the
   8551        C and C++ compilers and starting with the 4.9.1 release also in the
   8552        Fortran compiler. The new -fopenmp-simd option can be used to
   8553        enable OpenMP's SIMD directives while ignoring other OpenMP
   8554        directives. The new [6]-fsimd-cost-model= option permits to tune
   8555        the vectorization cost model for loops annotated with OpenMP and
   8556        Cilk Plus simd directives. -Wopenmp-simd warns when the current
   8557        cost model overrides simd directives set by the user.
   8558      * The -Wdate-time option has been added for the C, C++ and Fortran
   8559        compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__
   8560        macros are used. Those macros might prevent bit-wise-identical
   8561        reproducible compilations.
   8562 
   8563   [7]Ada
   8564 
   8565      * GNAT switched to Ada 2012 instead of Ada 2005 by default.
   8566 
   8567   [8]C family
   8568 
   8569      * Support for colorizing diagnostics emitted by GCC has been added.
   8570        The [9]-fdiagnostics-color=auto will enable it when outputting to
   8571        terminals, -fdiagnostics-color=always unconditionally. The
   8572        GCC_COLORS environment variable can be used to customize the colors
   8573        or disable coloring. If GCC_COLORS variable is present in the
   8574        environment, the default is -fdiagnostics-color=auto, otherwise
   8575        -fdiagnostics-color=never.
   8576        Sample diagnostics output:
   8577     $ g++ -fdiagnostics-color=always -S -Wall test.C
   8578     test.C: In function `int foo()':
   8579     test.C:1:14: warning: no return statement in function returning non-void [-W
   8580 return-type]
   8581      int foo () { }
   8582                   ^
   8583     test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
   8584  -ftemplate-depth= to increase the maximum) instantiating `struct X<100>'
   8585      template <int N> struct X { static const int value = X<N-1>::value; }; temp
   8586 late struct X<1000>;
   8587                                                   ^
   8588     test.C:2:46:   recursively required from `const int X<999>::value'
   8589     test.C:2:46:   required from `const int X<1000>::value'
   8590     test.C:2:88:   required from here
   8591 
   8592     test.C:2:46: error: incomplete type `X<100>' used in nested name specifier
   8593 
   8594      * With the new [10]#pragma GCC ivdep, the user can assert that there
   8595        are no loop-carried dependencies which would prevent concurrent
   8596        execution of consecutive iterations using SIMD (single instruction
   8597        multiple data) instructions.
   8598      * Support for Cilk Plus has been added and can be enabled with the
   8599        -fcilkplus option. Cilk Plus is an extension to the C and C++
   8600        languages to support data and task parallelism. The present
   8601        implementation follows ABI version 1.2; all features but _Cilk_for
   8602        have been implemented.
   8603 
   8604   [11]C
   8605 
   8606      * ISO C11 atomics (the _Atomic type specifier and qualifier and the
   8607        <stdatomic.h> header) are now supported.
   8608      * ISO C11 generic selections (_Generic keyword) are now supported.
   8609      * ISO C11 thread-local storage (_Thread_local, similar to GNU C
   8610        __thread) is now supported.
   8611      * ISO C11 support is now at a similar level of completeness to ISO
   8612        C99 support: substantially complete modulo bugs, extended
   8613        identifiers (supported except for corner cases when
   8614        -fextended-identifiers is used), floating-point issues (mainly but
   8615        not entirely relating to optional C99 features from Annexes F and
   8616        G) and the optional Annexes K (Bounds-checking interfaces) and L
   8617        (Analyzability).
   8618      * A new C extension __auto_type provides a subset of the
   8619        functionality of C++11 auto in GNU C.
   8620 
   8621   [12]C++
   8622 
   8623      * The G++ implementation of [13]C++1y return type deduction for
   8624        normal functions has been updated to conform to [14]N3638, the
   8625        proposal accepted into the working paper. Most notably, it adds
   8626        decltype(auto) for getting decltype semantics rather than the
   8627        template argument deduction semantics of plain auto:
   8628 
   8629 int& f();
   8630          auto  i1 = f(); // int
   8631 decltype(auto) i2 = f(); // int&
   8632 
   8633      * G++ supports [15]C++1y lambda capture initializers:
   8634 
   8635 [x = 42]{ ... };
   8636 
   8637        Actually, they have been accepted since GCC 4.5, but now the
   8638        compiler doesn't warn about them with -std=c++1y, and supports
   8639        parenthesized and brace-enclosed initializers as well.
   8640      * G++ supports [16]C++1y variable length arrays. G++ has supported
   8641        GNU/C99-style VLAs for a long time, but now additionally supports
   8642        initializers and lambda capture by reference. In C++1y mode G++
   8643        will complain about VLA uses that are not permitted by the draft
   8644        standard, such as forming a pointer to VLA type or applying sizeof
   8645        to a VLA variable. Note that it now appears that VLAs will not be
   8646        part of C++14, but will be part of a separate document and then
   8647        perhaps C++17.
   8648 
   8649 void f(int n) {
   8650   int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
   8651   [&a]{ for (int i : a) { cout << i << endl; } }();
   8652   &a; // error, taking address of VLA
   8653 }
   8654 
   8655      * G++ supports the [17]C++1y [[deprecated]] attribute modulo bugs in
   8656        the underlying [[gnu::deprecated]] attribute. Classes and functions
   8657        can be marked deprecated and a diagnostic message added:
   8658 
   8659 class A;
   8660 int bar(int n);
   8661 #if __cplusplus > 201103
   8662 class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
   8663 [[deprecated("bar is unsafe; use foo() instead")]]
   8664 int bar(int n);
   8665 
   8666 int foo(int n);
   8667 class B;
   8668 #endif
   8669 A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
   8670 int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
   8671 o() instead
   8672 
   8673      * G++ supports [18]C++1y digit separators. Long numeric literals can
   8674        be subdivided with a single quote ' to enhance readability:
   8675 
   8676 int i = 1048576;
   8677 int j = 1'048'576;
   8678 int k = 0x10'0000;
   8679 int m = 0'004'000'000;
   8680 int n = 0b0001'0000'0000'0000'0000'0000;
   8681 
   8682 double x = 1.602'176'565e-19;
   8683 double y = 1.602'176'565e-1'9;
   8684 
   8685      * G++ supports [19]C++1y generic (polymorphic) lambdas.
   8686 
   8687 // a functional object that will increment any type
   8688 auto incr = [](auto x) { return x++; };
   8689 
   8690      * As a GNU extension, G++ supports explicit template parameter syntax
   8691        for generic lambdas. This can be combined in the expected way with
   8692        the standard auto syntax.
   8693 
   8694 // a functional object that will add two like-type objects
   8695 auto add = [] <typename T> (T a, T b) { return a + b; };
   8696 
   8697      * G++ supports unconstrained generic functions as specified by 4.1.2
   8698        and 5.1.1 of [20]N3889: Concepts Lite Specification. Briefly, auto
   8699        may be used as a type-specifier in a parameter declaration of any
   8700        function declarator in order to introduce an implicit function
   8701        template parameter, akin to generic lambdas.
   8702 
   8703 // the following two function declarations are equivalent
   8704 auto incr(auto x) { return x++; }
   8705 template <typename T>
   8706 auto incr(T x) { return x++; }
   8707 
   8708     Runtime Library (libstdc++)
   8709 
   8710      * [21]Improved support for C++11, including:
   8711           + support for <regex>;
   8712           + The associative containers in <map> and <set> and the
   8713             unordered associative containers in <unordered_map> and
   8714             <unordered_set> meet the allocator-aware container
   8715             requirements;
   8716      * [22]Improved experimental support for the upcoming ISO C++
   8717        standard, C++14, including:
   8718           + fixing constexpr member functions without const;
   8719           + implementation of the std::exchange() utility function;
   8720           + addressing tuples by type;
   8721           + implemention of std::make_unique;
   8722           + implemention of std::shared_lock;
   8723           + making std::result_of SFINAE-friendly;
   8724           + adding operator() to std::integral_constant;
   8725           + adding user-defined literals for standard library types
   8726             std::basic_string, std::chrono::duration, and std::complex;
   8727           + adding two range overloads to non-modifying sequence oprations
   8728             std::equal and std::mismatch;
   8729           + adding IO manipulators for quoted strings;
   8730           + adding constexpr members to <utility>, <complex>, <chrono>,
   8731             and some containers;
   8732           + adding compile-time std::integer_sequence;
   8733           + adding cleaner transformation traits;
   8734           + making <functional>s operator functors easier to use and more
   8735             generic;
   8736      * An implementation of std::experimental::optional.
   8737      * An implementation of std::experimental::string_view.
   8738      * The non-standard function std::copy_exception has been deprecated
   8739        and will be removed in a future version. std::make_exception_ptr
   8740        should be used instead.
   8741 
   8742   [23]Fortran
   8743 
   8744      * Compatibility notice:
   8745           + Module files: The version of the module files (.mod) has been
   8746             incremented; additionally, module files are now compressed.
   8747             Fortran MODULEs compiled by earlier GCC versions have to be
   8748             recompiled, when they are USEd by files compiled with GCC 4.9.
   8749             GCC 4.9 is not able to read .mod files of earlier GCC
   8750             versions; attempting to do so gives an error message. Note:
   8751             The ABI of the produced assembler data itself has not changed:
   8752             object files and libraries are fully compatible with older
   8753             versions (except as stated below).
   8754           + ABI changes:
   8755                o The [24]argument passing ABI has changed for scalar dummy
   8756                  arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
   8757                  which have both the VALUE and the OPTIONAL attributes.
   8758                o To support finalization the virtual table associated with
   8759                  polymorphic variables has changed. Code containing CLASS
   8760                  should be recompiled, including all files which define
   8761                  derived types involved in the type definition used by
   8762                  polymorphic variables. (Note: Due to the incremented
   8763                  module version, trying to mix old code with new code will
   8764                  usually give an error message.)
   8765           + GNU Fortran no longer deallocates allocatable variables or
   8766             allocatable components of variables declared in the main
   8767             program. Since Fortran 2008, the standard explicitly states
   8768             that variables declared in the Fortran main program
   8769             automatically have the SAVE attribute.
   8770           + When opening files, the close-on-exec flag is set if the
   8771             system supports such a feature. This is generally considered
   8772             good practice these days, but if there is a need to pass file
   8773             descriptors to child processes the parent process must now
   8774             remember to clear the close-on-exec flag by calling fcntl(),
   8775             e.g. via ISO_C_BINDING, before executing the child process.
   8776      * The deprecated command-line option -fno-whole-file has been
   8777        removed. (-fwhole-file is the default since GCC 4.6.)
   8778        -fwhole-file/-fno-whole-file continue to be accepted but do not
   8779        influence the code generation.
   8780      * The compiler no longer unconditionally warns about DO loops with
   8781        zero iterations. This warning is now controlled by the -Wzerotrip
   8782        option, which is implied by -Wall.
   8783      * The new NO_ARG_CHECK attribute of the [25]!GCC$ directive can be
   8784        used to disable the type-kind-rank (TKR) argument check for a dummy
   8785        argument. The feature is similar to ISO/IEC TS 29133:2012's
   8786        TYPE(*), except that it additionally also disables the rank check.
   8787        Variables with NO_ARG_CHECK have to be dummy arguments and may only
   8788        be used as argument to ISO_C_BINDING's C_LOC and as actual argument
   8789        to another NO_ARG_CHECK dummy argument; also the other constraints
   8790        of TYPE(*) apply. The dummy arguments should be declared as scalar
   8791        or assumed-size variable of type type(*) (recommended) - or of type
   8792        integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
   8793        the data without further type or shape information is passed,
   8794        similar to C's void*. Note that also TS 29113's
   8795        type(*),dimension(..) accepts arguments of any type and rank;
   8796        contrary to NO_ARG_CHECK assumed-rank arguments pass an array
   8797        descriptor which contains the array shape and stride of the
   8798        argument.
   8799      * [26]Fortran 2003:
   8800           + Finalization is now supported. It is currently only done for a
   8801             subset of those situations in which it should occur.
   8802           + Experimental support for scalar character components with
   8803             deferred length (i.e. allocatable string length) in derived
   8804             types has been added. (Deferred-length character variables are
   8805             supported since GCC 4.6.)
   8806      * [27]Fortran 2008:
   8807           + When STOP or ERROR STOP are used to terminate the execution
   8808             and any exception (but inexact) is signaling, a warning is
   8809             printed to ERROR_UNIT, indicating which exceptions are
   8810             signaling. The [28]-ffpe-summary= command-line option can be
   8811             used to fine-tune for which exceptions the warning should be
   8812             shown.
   8813           + Rounding on input (READ) is now handled on systems where
   8814             strtod honours the rounding mode. (For output, rounding is
   8815             supported since GCC 4.5.) Note that for input, the compatible
   8816             rounding mode is handled as nearest (i.e., rounding to an even
   8817             least significant [cf. IEC 60559:1989] for a tie, while
   8818             compatible rounds away from zero in that case).
   8819 
   8820   [29]Go
   8821 
   8822      * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
   8823 
   8824 [30]New Targets and Target Specific Improvements
   8825 
   8826   [31]AArch64
   8827 
   8828      * The ARMv8-A crypto and CRC instructions are now supported through
   8829        intrinsics. These are enabled when the architecture supports these
   8830        and are available through the -march=armv8-a+crc and
   8831        -march=armv8-a+crypto options.
   8832      * Initial support for ILP32 has now been added to the compiler. This
   8833        is now available through the command-line option -mabi=ilp32.
   8834        Support for ILP32 is considered experimental as the ABI
   8835        specification is still beta.
   8836      * Coverage of more of the ISA including the SIMD extensions has been
   8837        added. The Advanced SIMD intrinsics have also been improved.
   8838      * The new local register allocator (LRA) is now on by default for the
   8839        AArch64 back end.
   8840      * The REE (Redundant extension elimination) pass has now been enabled
   8841        by default for the AArch64 back end.
   8842      * Tuning for the Cortex-A53 and Cortex-A57 has been improved.
   8843      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   8844        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   8845        option.
   8846      * A number of structural changes have been made to both the ARM and
   8847        AArch64 back ends to facilitate improved code-generation.
   8848      * As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
   8849        has been added and can be enabled by giving the
   8850        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   8851        default by configuring GCC with the --enable-fix-cortex-a53-835769
   8852        option.
   8853 
   8854   [32]ARC
   8855 
   8856      * A port for Synopsys Designware ARC has been contributed by Embecosm
   8857        and Synopsys Inc.
   8858 
   8859   [33]ARM
   8860 
   8861      * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
   8862        disabled by default. This was found to generate better code in only
   8863        a small number of cases. It can be turned back on with the
   8864        -mneon-for-64bits option.
   8865      * Further support for the ARMv8-A architecture, notably implementing
   8866        the restriction around IT blocks in the Thumb32 instruction set has
   8867        been added. The -mrestrict-it option can be used with
   8868        -march=armv7-a or the -march=armv7ve options to make code
   8869        generation fully compatible with the deprecated instructions in
   8870        ARMv8-A.
   8871      * Support has now been added for the ARMv7ve variant of the
   8872        architecture. This can be used by the -march=armv7ve option.
   8873      * The ARMv8-A crypto and CRC instructions are now supported through
   8874        intrinsics and are available through the -march=armv8-a+crc and
   8875        mfpu=crypto-neon-fp-armv8 options.
   8876      * LRA is now on by default for the ARM target. This can be turned off
   8877        using the -mno-lra option. This option is a purely transitionary
   8878        command-line option and will be removed in a future release. We are
   8879        interested in any bug reports regarding functional and performance
   8880        regressions with LRA.
   8881      * A new option -mslow-flash-data to improve performance of programs
   8882        fetching data on slow flash memory has now been introduced for the
   8883        ARMv7-M profile cores.
   8884      * A new option -mpic-data-is-text-relative for targets that allows
   8885        data segments to be relative to text segments has been added. This
   8886        is on by default for all targets except VxWorks RTP.
   8887      * A number of infrastructural changes have been made to both the ARM
   8888        and AArch64 back ends to facilitate improved code-generation.
   8889      * GCC now supports Cortex-A12 and the Cortex-R7 through the
   8890        -mcpu=cortex-a12 and -mcpu=cortex-r7 options.
   8891      * GCC now has tuning for the Cortex-A57 and Cortex-A53 through the
   8892        -mcpu=cortex-a57 and -mcpu=cortex-a53 options.
   8893      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   8894        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   8895        option. Similar support was added for the combination of Cortex-A15
   8896        and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7 option.
   8897      * Further performance optimizations for the Cortex-A15 and the
   8898        Cortex-M4 have been added.
   8899      * A number of code generation improvements for Thumb2 to reduce code
   8900        size when compiling for the M-profile processors.
   8901 
   8902   [34]AVR
   8903 
   8904      * A new command-line option -mfract-convert-truncate has been added.
   8905        It allows compiler to use truncation instead of rounding towards
   8906        zero for fractional fixed-point types.
   8907 
   8908   [35]IA-32/x86-64
   8909 
   8910      * -mfpmath=sse is now implied by -ffast-math on all targets where
   8911        SSE2 is supported.
   8912      * Intel AVX-512 support was added to GCC. That includes inline
   8913        assembly support, new registers and extending existing ones, new
   8914        intrinsics (covered by corresponding testsuite), and basic
   8915        autovectorization. AVX-512 instructions are available via the
   8916        following GCC switches: AVX-512 foundation instructions: -mavx512f,
   8917        AVX-512 prefetch instructions: -mavx512pf, AVX-512 exponential and
   8918        reciprocal instructions: -mavx512er, AVX-512 conflict detection
   8919        instructions: -mavx512cd.
   8920      * It is now possible to call x86 intrinsics from select functions in
   8921        a file that are tagged with the corresponding target attribute
   8922        without having to compile the entire file with the -mxxx option.
   8923        This improves the usability of x86 intrinsics and is particularly
   8924        useful when doing [36]Function Multiversioning.
   8925      * GCC now supports the new Intel microarchitecture named Silvermont
   8926        through -march=silvermont.
   8927      * GCC now supports the new Intel microarchitecture named Broadwell
   8928        through -march=broadwell.
   8929      * Optimizing for other Intel microarchitectures have been renamed to
   8930        -march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
   8931      * -march=generic has been retuned for better support of Intel core
   8932        and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel
   8933        Pentium-M, and Pentium4 based CPUs is no longer considered
   8934        important for generic.
   8935      * -mtune=intel can now be used to generate code running well on the
   8936        most current Intel processors, which are Haswell and Silvermont for
   8937        GCC 4.9.
   8938      * Support to encode 32-bit assembly instructions in 16-bit format is
   8939        now available through the -m16 command-line option.
   8940      * Better inlining of memcpy and memset that is aware of value ranges
   8941        and produces shorter alignment prologues.
   8942      * -mno-accumulate-outgoing-args is now honored when unwind
   8943        information is output. Argument accumulation is also now turned off
   8944        for portions of programs optimized for size.
   8945      * Support for new AMD family 15h processors (Excavator core) is now
   8946        available through the -march=bdver4 and -mtune=bdver4 options.
   8947 
   8948   [37]MSP430
   8949 
   8950      * A new command-line option -mcpu= has been added to the MSP430 back
   8951        end. This option is used to specify the ISA to be used. Accepted
   8952        values are msp430 (the default), msp430x and msp430xv2. The ISA is
   8953        no longer deduced from the -mmcu= option as there are far too many
   8954        different MCU names. The -mmcu= option is still supported, and this
   8955        is still used to select linker scripts and generate a C
   8956        preprocessor symbol that will be recognised by the msp430.h header
   8957        file.
   8958 
   8959   [38]NDS32
   8960 
   8961      * A new nds32 port supports the 32-bit architecture from Andes
   8962        Technology Corporation.
   8963      * The port provides initial support for the V2, V3, V3m instruction
   8964        set architectures.
   8965 
   8966   [39]Nios II
   8967 
   8968      * A port for the Altera Nios II has been contributed by Mentor
   8969        Graphics.
   8970 
   8971   [40]PowerPC / PowerPC64 / RS6000
   8972 
   8973      * GCC now supports Power ISA 2.07, which includes support for
   8974        Hardware Transactional Memory (HTM), Quadword atomics and several
   8975        VMX and VSX additions, including Crypto, 64-bit integer, 128-bit
   8976        integer and decimal integer operations.
   8977      * Support for the POWER8 processor is now available through the
   8978        -mcpu=power8 and -mtune=power8 options.
   8979      * The libitm library has been modified to add a HTM fastpath that
   8980        automatically uses POWER's HTM hardware instructions when it is
   8981        executing on a HTM enabled processor.
   8982      * Support for the new powerpc64le-linux platform has been added. It
   8983        defaults to generating code that conforms to the ELFV2 ABI.
   8984 
   8985   S/390, System z
   8986 
   8987      * Support for the Transactional Execution Facility included with the
   8988        IBM zEnterprise zEC12 processor has been added. A set of GCC style
   8989        builtins as well as XLC style builtins are provided. The builtins
   8990        are enabled by default when using the -march=zEC12 option but can
   8991        explicitly be disabled with -mno-htm. Using the GCC builtins also
   8992        libitm supports hardware transactions on S/390.
   8993      * The hotpatch features allows to prepare functions for hotpatching.
   8994        A certain amount of bytes is reserved before the function entry
   8995        label plus a NOP is inserted at its very beginning to implement a
   8996        backward jump when applying a patch. The feature can either be
   8997        enabled per compilation unit via the command-line option -mhotpatch
   8998        or per function using the hotpatch attribute.
   8999      * The shrink wrap optimization is now supported on S/390 and enabled
   9000        by default.
   9001      * A major rework of the routines to determine which registers need to
   9002        be saved and restored in function prologue/epilogue now allow to
   9003        use floating point registers as save slots. This will happen for
   9004        certain leaf function with -march=z10 or higher.
   9005      * The LRA rtl pass replaces reload by default on S/390.
   9006 
   9007   [41]RX
   9008 
   9009      * The port now allows to specify the RX100, RX200, and RX600
   9010        processors with the command-line options -mcpu=rx100, -mcpu=rx200
   9011        and -mcpu=rx600.
   9012 
   9013   [42]SH
   9014 
   9015      * Minor improvements to code generated for integer arithmetic and
   9016        code that involves the T bit.
   9017      * Added support for the SH2A clips and clipu instructions. The
   9018        compiler will now try to utilize them for min/max expressions such
   9019        as max (-128, min (127, x)).
   9020      * Added support for the cmp/str instruction through built-in
   9021        functions such as __builtin_strlen. When not optimizing for size,
   9022        the compiler will now expand calls to e.g. strlen as an inlined
   9023        sequences which utilize the cmp/str instruction.
   9024      * Improved code generated around volatile memory loads and stores.
   9025      * The option -mcbranchdi has been deprecated. Specifying it will
   9026        result in a warning and will not influence code generation.
   9027      * The option -mcmpeqdi has been deprecated. Specifying it will result
   9028        in a warning and will not influence code generation.
   9029 
   9030 [43]GCC 4.9.1
   9031 
   9032    This is the [44]list of problem reports (PRs) from GCC's bug tracking
   9033    system that are known to be fixed in the 4.9.1 release. This list might
   9034    not be complete (that is, it is possible that some PRs that have been
   9035    fixed are not listed here).
   9036 
   9037    Version 4.0 of the OpenMP specification is supported even in Fortran,
   9038    not just C and C++.
   9039 
   9040 [45]GCC 4.9.2
   9041 
   9042    This is the [46]list of problem reports (PRs) from GCC's bug tracking
   9043    system that are known to be fixed in the 4.9.2 release. This list might
   9044    not be complete (that is, it is possible that some PRs that have been
   9045    fixed are not listed here).
   9046 
   9047 [47]GCC 4.9.3
   9048 
   9049    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   9050    system that are known to be fixed in the 4.9.3 release. This list might
   9051    not be complete (that is, it is possible that some PRs that have been
   9052    fixed are not listed here).
   9053 
   9054 [49]GCC 4.9.4
   9055 
   9056    This is the [50]list of problem reports (PRs) from GCC's bug tracking
   9057    system that are known to be fixed in the 4.9.4 release. This list might
   9058    not be complete (that is, it is possible that some PRs that have been
   9059    fixed are not listed here).
   9060 
   9061 
   9062     For questions related to the use of GCC, please consult these web
   9063     pages and the [51]GCC manuals. If that fails, the
   9064     [52]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9065     web pages and the development of GCC are welcome on our developer
   9066     list at [53]gcc (a] gcc.gnu.org. All of [54]our lists have public
   9067     archives.
   9068 
   9069    Copyright (C) [55]Free Software Foundation, Inc. Verbatim copying and
   9070    distribution of this entire article is permitted in any medium,
   9071    provided this notice is preserved.
   9072 
   9073    These pages are [56]maintained by the GCC team. Last modified
   9074    2025-06-10.
   9075 
   9076 References
   9077 
   9078    1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
   9079    2. https://gcc.gnu.org/PR60825
   9080    3. https://gcc.gnu.org/gcc-4.9/porting_to.html
   9081    4. https://gcc.gnu.org/gcc-4.9/changes.html#languages
   9082    5. https://www.openmp.org/specifications/
   9083    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
   9084    7. https://gcc.gnu.org/gcc-4.9/changes.html#ada
   9085    8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
   9086    9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
   9087   10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
   9088   11. https://gcc.gnu.org/gcc-4.9/changes.html#c
   9089   12. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
   9090   13. https://gcc.gnu.org/projects/cxx1y.html
   9091   14. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
   9092   15. https://gcc.gnu.org/projects/cxx1y.html
   9093   16. https://gcc.gnu.org/projects/cxx1y.html
   9094   17. https://gcc.gnu.org/projects/cxx1y.html
   9095   18. https://gcc.gnu.org/projects/cxx1y.html
   9096   19. https://gcc.gnu.org/projects/cxx1y.html
   9097   20. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
   9098   21. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
   9099   22. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
   9100   23. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
   9101   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
   9102   25. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
   9103   26. https://gcc.gnu.org/wiki/Fortran2003Status
   9104   27. https://gcc.gnu.org/wiki/Fortran2008Status
   9105   28. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
   9106   29. https://gcc.gnu.org/gcc-4.9/changes.html#go
   9107   30. https://gcc.gnu.org/gcc-4.9/changes.html#targets
   9108   31. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
   9109   32. https://gcc.gnu.org/gcc-4.9/changes.html#arc
   9110   33. https://gcc.gnu.org/gcc-4.9/changes.html#arm
   9111   34. https://gcc.gnu.org/gcc-4.9/changes.html#avr
   9112   35. https://gcc.gnu.org/gcc-4.9/changes.html#x86
   9113   36. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
   9114   37. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
   9115   38. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
   9116   39. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
   9117   40. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
   9118   41. https://gcc.gnu.org/gcc-4.9/changes.html#rx
   9119   42. https://gcc.gnu.org/gcc-4.9/changes.html#sh
   9120   43. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
   9121   44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
   9122   45. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
   9123   46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
   9124   47. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
   9125   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
   9126   49. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
   9127   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
   9128   51. https://gcc.gnu.org/onlinedocs/
   9129   52. mailto:gcc-help (a] gcc.gnu.org
   9130   53. mailto:gcc (a] gcc.gnu.org
   9131   54. https://gcc.gnu.org/lists.html
   9132   55. https://www.fsf.org/
   9133   56. https://gcc.gnu.org/about.html
   9134 ======================================================================
   9135 http://gcc.gnu.org/gcc-4.8/index.html
   9136 
   9137                              GCC 4.8 Release Series
   9138 
   9139    (This release series is no longer supported.)
   9140 
   9141    June 23, 2015
   9142 
   9143    The [1]GNU project and the GCC developers are pleased to announce the
   9144    release of GCC 4.8.5.
   9145 
   9146    This release is a bug-fix release, containing fixes for regressions in
   9147    GCC 4.8.4 relative to previous releases of GCC.
   9148 
   9149 Release History
   9150 
   9151    GCC 4.8.5
   9152           June 23, 2015 ([2]changes, [3]documentation)
   9153 
   9154    GCC 4.8.4
   9155           December 19, 2014 ([4]changes, [5]documentation)
   9156 
   9157    GCC 4.8.3
   9158           May 22, 2014 ([6]changes, [7]documentation)
   9159 
   9160    GCC 4.8.2
   9161           October 16, 2013 ([8]changes, [9]documentation)
   9162 
   9163    GCC 4.8.1
   9164           May 31, 2013 ([10]changes, [11]documentation)
   9165 
   9166    GCC 4.8.0
   9167           March 22, 2013 ([12]changes, [13]documentation)
   9168 
   9169 References and Acknowledgements
   9170 
   9171    GCC used to stand for the GNU C Compiler, but since the compiler
   9172    supports several other languages aside from C, it now stands for the
   9173    GNU Compiler Collection.
   9174 
   9175    A list of [14]successful builds is updated as new information becomes
   9176    available.
   9177 
   9178    The GCC developers would like to thank the numerous people that have
   9179    contributed new features, improvements, bug fixes, and other changes as
   9180    well as test results to GCC. This [15]amazing group of volunteers is
   9181    what makes GCC successful.
   9182 
   9183    For additional information about GCC please refer to the [16]GCC
   9184    project web site or contact the [17]GCC development mailing list.
   9185 
   9186    To obtain GCC please use [18]our mirror sites or [19]our version
   9187    control system.
   9188 
   9189 
   9190     For questions related to the use of GCC, please consult these web
   9191     pages and the [20]GCC manuals. If that fails, the
   9192     [21]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9193     web pages and the development of GCC are welcome on our developer
   9194     list at [22]gcc (a] gcc.gnu.org. All of [23]our lists have public
   9195     archives.
   9196 
   9197    Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
   9198    distribution of this entire article is permitted in any medium,
   9199    provided this notice is preserved.
   9200 
   9201    These pages are [25]maintained by the GCC team. Last modified
   9202    2022-10-26.
   9203 
   9204 References
   9205 
   9206    1. http://www.gnu.org/
   9207    2. https://gcc.gnu.org/gcc-4.8/changes.html
   9208    3. https://gcc.gnu.org/onlinedocs/4.8.5/
   9209    4. https://gcc.gnu.org/gcc-4.8/changes.html
   9210    5. https://gcc.gnu.org/onlinedocs/4.8.4/
   9211    6. https://gcc.gnu.org/gcc-4.8/changes.html
   9212    7. https://gcc.gnu.org/onlinedocs/4.8.3/
   9213    8. https://gcc.gnu.org/gcc-4.8/changes.html
   9214    9. https://gcc.gnu.org/onlinedocs/4.8.2/
   9215   10. https://gcc.gnu.org/gcc-4.8/changes.html
   9216   11. https://gcc.gnu.org/onlinedocs/4.8.1/
   9217   12. https://gcc.gnu.org/gcc-4.8/changes.html
   9218   13. https://gcc.gnu.org/onlinedocs/4.8.0/
   9219   14. https://gcc.gnu.org/gcc-4.8/buildstat.html
   9220   15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   9221   16. https://gcc.gnu.org/index.html
   9222   17. mailto:gcc (a] gcc.gnu.org
   9223   18. https://gcc.gnu.org/mirrors.html
   9224   19. https://gcc.gnu.org/git.html
   9225   20. https://gcc.gnu.org/onlinedocs/
   9226   21. mailto:gcc-help (a] gcc.gnu.org
   9227   22. mailto:gcc (a] gcc.gnu.org
   9228   23. https://gcc.gnu.org/lists.html
   9229   24. https://www.fsf.org/
   9230   25. https://gcc.gnu.org/about.html
   9231 ======================================================================
   9232 http://gcc.gnu.org/gcc-4.8/changes.html
   9233 
   9234                              GCC 4.8 Release Series
   9235                         Changes, New Features, and Fixes
   9236 
   9237 Caveats
   9238 
   9239    GCC now uses C++ as its implementation language. This means that to
   9240    build GCC from sources, you will need a C++ compiler that understands
   9241    C++ 2003. For more details on the rationale and specific changes,
   9242    please refer to the [1]C++ conversion page.
   9243 
   9244    To enable the Graphite framework for loop optimizations you now need
   9245    CLooG version 0.18.0 and ISL version 0.11.1. Both can be obtained from
   9246    the [2]GCC infrastructure directory. The installation manual contains
   9247    more information about requirements to build GCC.
   9248 
   9249    GCC now uses a more aggressive analysis to derive an upper bound for
   9250    the number of iterations of loops using constraints imposed by language
   9251    standards. This may cause non-conforming programs to no longer work as
   9252    expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new
   9253    option, -fno-aggressive-loop-optimizations, was added to disable this
   9254    aggressive analysis. In some loops that have known constant number of
   9255    iterations, but undefined behavior is known to occur in the loop before
   9256    reaching or during the last iteration, GCC will warn about the
   9257    undefined behavior in the loop instead of deriving lower upper bound of
   9258    the number of iterations for the loop. The warning can be disabled with
   9259    -Wno-aggressive-loop-optimizations.
   9260 
   9261    On ARM, a bug has been fixed in GCC's implementation of the AAPCS rules
   9262    for the layout of vectors that could lead to wrong code being
   9263    generated. Vectors larger than 8 bytes in size are now by default
   9264    aligned to an 8-byte boundary. This is an ABI change: code that makes
   9265    explicit use of vector types may be incompatible with binary objects
   9266    built with older versions of GCC. Auto-vectorized code is not affected
   9267    by this change.
   9268 
   9269    More information on porting to GCC 4.8 from previous versions of GCC
   9270    can be found in the [3]porting guide for this release.
   9271 
   9272 General Optimizer Improvements (and Changes)
   9273 
   9274      * DWARF4 is now the default when generating DWARF debug information.
   9275        When -g is used on a platform that uses DWARF debugging
   9276        information, GCC will now default to -gdwarf-4
   9277        -fno-debug-types-section.
   9278        GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information
   9279        consumers support DWARF4 by default. Before GCC 4.8 the default
   9280        version used was DWARF2. To make GCC 4.8 generate an older DWARF
   9281        version use -g together with -gdwarf-2 or -gdwarf-3. The default
   9282        for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.
   9283      * A new general optimization level, -Og, has been introduced. It
   9284        addresses the need for fast compilation and a superior debugging
   9285        experience while providing a reasonable level of run-time
   9286        performance. Overall experience for development should be better
   9287        than the default optimization level -O0.
   9288      * A new option -ftree-partial-pre was added to control the partial
   9289        redundancy elimination (PRE) optimization. This option is enabled
   9290        by default at the -O3 optimization level, and it makes PRE more
   9291        aggressive.
   9292      * The option -fconserve-space has been removed; it was no longer
   9293        useful on most targets since GCC supports putting variables into
   9294        BSS without making them common.
   9295      * The struct reorg and matrix reorg optimizations (command-line
   9296        options -fipa-struct-reorg and -fipa-matrix-reorg) have been
   9297        removed. They did not always work correctly, nor did they work with
   9298        link-time optimization (LTO), hence were only applicable to
   9299        programs consisting of a single translation unit.
   9300      * Several scalability bottle-necks have been removed from GCC's
   9301        optimization passes. Compilation of extremely large functions, e.g.
   9302        due to the use of the flatten attribute in the "Eigen" C++ linear
   9303        algebra templates library, is significantly faster than previous
   9304        releases of GCC.
   9305      * Link-time optimization (LTO) improvements:
   9306           + LTO partitioning has been rewritten for better reliability and
   9307             maintanibility. Several important bugs leading to link
   9308             failures have been fixed.
   9309      * Interprocedural optimization improvements:
   9310           + A new symbol table has been implemented. It builds on existing
   9311             callgraph and varpool modules and provide a new API. Unusual
   9312             symbol visibilities and aliases are handled more consistently
   9313             leading to, for example, more aggressive unreachable code
   9314             removal with LTO.
   9315           + The inline heuristic can now bypass limits on the size of of
   9316             inlined functions when the inlining is particularly
   9317             profitable. This happens, for example, when loop bounds or
   9318             array strides get propagated.
   9319           + Values passed through aggregates (either by value or
   9320             reference) are now propagated at the inter-procedural level
   9321             leading to better inlining decisions (for example in the case
   9322             of Fortran array descriptors) and devirtualization.
   9323      * [4]AddressSanitizer , a fast memory error detector, has been added
   9324        and can be enabled via -fsanitize=address. Memory access
   9325        instructions will be instrumented to detect heap-, stack-, and
   9326        global-buffer overflow as well as use-after-free bugs. To get nicer
   9327        stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
   9328        available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
   9329        x86-64 Darwin.
   9330      * [5]ThreadSanitizer has been added and can be enabled via
   9331        -fsanitize=thread. Instructions will be instrumented to detect data
   9332        races. The ThreadSanitizer is available on x86-64 GNU/Linux.
   9333      * A new local register allocator (LRA) has been implemented, which
   9334        replaces the 26 year old reload pass and improves generated code
   9335        quality. For now it is active on the IA-32 and x86-64 targets.
   9336      * Support for transactional memory has been implemented on the
   9337        following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
   9338        Alpha.
   9339 
   9340 New Languages and Language specific improvements
   9341 
   9342   C family
   9343 
   9344      * Each diagnostic emitted now includes the original source line and a
   9345        caret '^' indicating the column. The option
   9346        -fno-diagnostics-show-caret suppresses this information.
   9347      * The option -ftrack-macro-expansion=2 is now enabled by default.
   9348        This allows the compiler to display the macro expansion stack in
   9349        diagnostics. Combined with the caret information, an example
   9350        diagnostic showing these two features is:
   9351 
   9352 t.c:1:94: error: invalid operands to binary < (have `struct mystruct' and `float
   9353 ')
   9354  #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
   9355 _b = (B); __a < __b ? __b : __a; })
   9356 
   9357               ^
   9358 t.c:7:7: note: in expansion of macro 'MYMAX'
   9359    X = MYMAX(P, F);
   9360        ^
   9361 
   9362      * A new -Wsizeof-pointer-memaccess warning has been added (also
   9363        enabled by -Wall) to warn about suspicious length parameters to
   9364        certain string and memory built-in functions if the argument uses
   9365        sizeof. This warning warns e.g. about memset (ptr, 0, sizeof
   9366        (ptr)); if ptr is not an array, but a pointer, and suggests a
   9367        possible fix, or about memcpy (&foo, ptr, sizeof (&foo));.
   9368      * The new option -Wpedantic is an alias for -pedantic, which is now
   9369        deprecated. The forms -Wno-pedantic, -Werror=pedantic, and
   9370        -Wno-error=pedantic work in the same way as for any other -W
   9371        option. One caveat is that -Werror=pedantic is not equivalent to
   9372        -pedantic-errors, since the latter makes into errors some warnings
   9373        that are not controlled by -Wpedantic, and the former only affects
   9374        diagnostics that are disabled when using -Wno-pedantic.
   9375      * The option -Wshadow no longer warns if a declaration shadows a
   9376        function declaration, unless the former declares a function or
   9377        pointer to function, because this is [6]a common and valid case in
   9378        real-world code.
   9379 
   9380   [7]C++
   9381 
   9382      * G++ now implements the [8]C++11 thread_local keyword; this differs
   9383        from the GNU __thread keyword primarily in that it allows dynamic
   9384        initialization and destruction semantics. Unfortunately, this
   9385        support requires a run-time penalty for references to
   9386        non-function-local thread_local variables defined in a different
   9387        translation unit even if they don't need dynamic initialization, so
   9388        users may want to continue to use __thread for TLS variables with
   9389        static initialization semantics.
   9390        If the programmer can be sure that no use of the variable in a
   9391        non-defining TU needs to trigger dynamic initialization (either
   9392        because the variable is statically initialized, or a use of the
   9393        variable in the defining TU will be executed before any uses in
   9394        another TU), they can avoid this overhead with the
   9395        -fno-extern-tls-init option.
   9396        OpenMP threadprivate variables now also support dynamic
   9397        initialization and destruction by the same mechanism.
   9398      * G++ now implements the [9]C++11 attribute syntax, e.g.
   9399 
   9400 [[noreturn]] void f();
   9401 
   9402        and also the alignment specifier, e.g.
   9403 
   9404 alignas(double) int i;
   9405 
   9406      * G++ now implements [10]C++11 inheriting constructors, e.g.
   9407 
   9408 struct A { A(int); };
   9409 struct B: A { using A::A; }; // defines B::B(int)
   9410 B b(42); // OK
   9411 
   9412      * As of GCC 4.8.1, G++ implements the change to decltype semantics
   9413        from [11]N3276.
   9414 
   9415 struct A f();
   9416 decltype(f()) g();    // OK, return type of f() is not required to be complete.
   9417 
   9418      * As of GCC 4.8.1, G++ implements [12]C++11 ref-qualifiers, e.g.
   9419 
   9420 struct A { int f() &; };
   9421 int i = A().f();  // error, f() requires an lvalue object
   9422 
   9423      * G++ now supports a -std=c++1y option for experimentation with
   9424        features proposed for the next revision of the standard, expected
   9425        around 2014. Currently the only difference from -std=c++11 is
   9426        support for return type deduction in normal functions, as proposed
   9427        in [13]N3386. Status of C++1y features in GCC 4.8 can be found
   9428        [14]here.
   9429      * The G++ namespace association extension, __attribute ((strong)),
   9430        has been deprecated. Inline namespaces should be used instead.
   9431      * G++ now supports a -fext-numeric-literal option to control whether
   9432        GNU numeric literal suffixes are accepted as extensions or
   9433        processed as C++11 user-defined numeric literal suffixes. The flag
   9434        is on (use suffixes for GNU literals) by default for -std=gnu++*,
   9435        and -std=c++98. The flag is off (use suffixes for user-defined
   9436        literals) by default for -std=c++11 and later.
   9437 
   9438     Runtime Library (libstdc++)
   9439 
   9440      * [15]Improved experimental support for the new ISO C++ standard,
   9441        C++11, including:
   9442           + forward_list meets the allocator-aware container requirements;
   9443           + this_thread::sleep_for(), this_thread::sleep_until() and
   9444             this_thread::yield() are defined without requiring the
   9445             configure option --enable-libstdcxx-time;
   9446      * Improvements to <random>:
   9447           + SSE optimized normal_distribution.
   9448           + Use of hardware RNG instruction for random_device on new x86
   9449             processors (requires the assembler to support the
   9450             instruction.)
   9451        and <ext/random>:
   9452           + New random number engine simd_fast_mersenne_twister_engine
   9453             with an optimized SSE implementation.
   9454           + New random number distributions beta_distribution,
   9455             normal_mv_distribution, rice_distribution,
   9456             nakagami_distribution, pareto_distribution, k_distribution,
   9457             arcsine_distribution, hoyt_distribution.
   9458      * Added --disable-libstdcxx-verbose configure option to disable
   9459        diagnostic messages issued when a process terminates abnormally.
   9460        This may be useful for embedded systems to reduce the size of
   9461        executables that link statically to the library.
   9462 
   9463   [16]Fortran
   9464 
   9465      * Compatibility notice:
   9466           + Module files: The version of module files (.mod) has been
   9467             incremented. Fortran MODULEs compiled by earlier GCC versions
   9468             have to be recompiled, when they are USEd by files compiled
   9469             with GCC 4.8. GCC 4.8 is not able to read .mod files created
   9470             by earlier versions; attempting to do so gives an error
   9471             message.
   9472             Note: The ABI of the produced assembler data itself has not
   9473             changed; object files and libraries are fully compatible with
   9474             older versions except as noted below.
   9475           + ABI: Some internal names (used in the assembler/object file)
   9476             have changed for symbols declared in the specification part of
   9477             a module. If an affected module - or a file using it via use
   9478             association - is recompiled, the module and all files which
   9479             directly use such symbols have to be recompiled as well. This
   9480             change only affects the following kind of module symbols:
   9481                o Procedure pointers. Note: C-interoperable function
   9482                  pointers (type(c_funptr)) are not affected nor are
   9483                  procedure-pointer components.
   9484                o Deferred-length character strings.
   9485      * The [17]BACKTRACE intrinsic subroutine has been added. It shows a
   9486        backtrace at an arbitrary place in user code; program execution
   9487        continues normally afterwards.
   9488      * The [18]-Wc-binding-type warning option has been added (disabled by
   9489        default). It warns if the a variable might not be C interoperable;
   9490        in particular, if the variable has been declared using an intrinsic
   9491        type with default kind instead of using a kind parameter defined
   9492        for C interoperability in the intrinsic ISO_C_Binding module.
   9493        Before, this warning was always printed. The -Wc-binding-type
   9494        option is enabled by -Wall.
   9495      * The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
   9496        options have been added, which diagnose when code is inserted for
   9497        automatic (re)allocation of a variable during assignment. This
   9498        option can be used to decide whether it is safe to use
   9499        [20]-fno-realloc-lhs. Additionally, it can be used to find
   9500        automatic (re)allocation in hot loops. (For arrays, replacing
   9501        "var=" by "var(:)=" disables the automatic reallocation.)
   9502      * The [21]-Wcompare-reals command-line option has been added. When
   9503        this is set, warnings are issued when comparing REAL or COMPLEX
   9504        types for equality and inequality; consider replacing a == b by
   9505        abs(a-b) < eps with a suitable eps. -Wcompare-reals is enabled by
   9506        -Wextra.
   9507      * The [22]-Wtarget-lifetime command-line option has been added
   9508        (enabled with -Wall), which warns if the pointer in a pointer
   9509        assignment might outlive its target.
   9510      * Reading floating point numbers which use "q" for the exponential
   9511        (such as 4.0q0) is now supported as vendor extension for better
   9512        compatibility with old data files. It is strongly recommended to
   9513        use for I/O the equivalent but standard conforming "e" (such as
   9514        4.0e0).
   9515        (For Fortran source code, consider replacing the "q" in
   9516        floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
   9517        suitable qp). Note that - in Fortran source code - replacing "q" by
   9518        a simple "e" is not equivalent.)
   9519      * The GFORTRAN_TMPDIR environment variable for specifying a
   9520        non-default directory for files opened with STATUS="SCRATCH", is
   9521        not used anymore. Instead gfortran checks the POSIX/GNU standard
   9522        TMPDIR environment variable. If TMPDIR is not defined, gfortran
   9523        falls back to other methods to determine the directory for
   9524        temporary files as documented in the [23]user manual.
   9525      * [24]Fortran 2003:
   9526           + Support for unlimited polymorphic variables (CLASS(*)) has
   9527             been added. Nonconstant character lengths are not yet
   9528             supported.
   9529      * [25]TS 29113:
   9530           + Assumed types (TYPE(*)) are now supported.
   9531           + Experimental support for assumed-rank arrays (dimension(..))
   9532             has been added. Note that currently gfortran's own array
   9533             descriptor is used, which is different from the one defined in
   9534             TS29113, see [26]gfortran's header file or use the [27]Chasm
   9535             Language Interoperability Tools.
   9536 
   9537   [28]Go
   9538 
   9539      * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
   9540        release.
   9541      * GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
   9542        release. The library support is not quite complete.
   9543      * Go has been tested on GNU/Linux and Solaris platforms for various
   9544        processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
   9545        work on other platforms as well.
   9546 
   9547 [29]New Targets and Target Specific Improvements
   9548 
   9549   [30]AArch64
   9550 
   9551      * A new port has been added to support AArch64, the new 64-bit
   9552        architecture from ARM. Note that this is a separate port from the
   9553        existing 32-bit ARM port.
   9554      * The port provides initial support for the Cortex-A53 and the
   9555        Cortex-A57 processors with the command line options
   9556        -mcpu=cortex-a53 and -mcpu=cortex-a57.
   9557      * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
   9558        has been added and can be enabled by giving the
   9559        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   9560        default by configuring GCC with the --enable-fix-cortex-a53-835769
   9561        option.
   9562 
   9563   [31]ARM
   9564 
   9565      * Initial support has been added for the AArch32 extensions defined
   9566        in the ARMv8 architecture.
   9567      * Code generation improvements for the Cortex-A7 and Cortex-A15 CPUs.
   9568      * A new option, -mcpu=marvell-pj4, has been added to generate code
   9569        for the Marvell PJ4 processor.
   9570      * The compiler can now automatically generate the VFMA, VFMS, REVSH
   9571        and REV16 instructions.
   9572      * A new vectorizer cost model for Advanced SIMD configurations to
   9573        improve the auto-vectorization strategies used.
   9574      * The scheduler now takes into account the number of live registers
   9575        to reduce the amount of spilling that can occur. This should
   9576        improve code performance in large functions. The limit can be
   9577        removed by using the option -fno-sched-pressure.
   9578      * Improvements have been made to the Marvell iWMMX code generation
   9579        and support for the iWMMX2 SIMD unit has been added. The option
   9580        -mcpu=iwmmxt2 can be used to enable code generation for the latter.
   9581      * A number of code generation improvements for Thumb2 to reduce code
   9582        size when compiling for the M-profile processors.
   9583      * The RTEMS (arm-rtems) port has been updated to use the EABI.
   9584      * Code generation support for the old FPA and Maverick floating-point
   9585        architectures has been removed. Ports that previously relied on
   9586        these features have also been removed. This includes the targets:
   9587           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   9588           + arm*-*-elf (use arm*-*-eabi)
   9589           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   9590           + arm*-*-ecos-elf (no alternative)
   9591           + arm*-*-freebsd (no alternative)
   9592           + arm*-wince-pe* (no alternative).
   9593 
   9594   [32]AVR
   9595 
   9596      * Support for the command-line option -mshort-calls has been removed.
   9597        It was deprecated in GCC 4.7.
   9598      * The configure option --with-avrlibc supported since GCC 4.7.2 is
   9599        turned on per default for all non-RTEMS configurations. This option
   9600        arranges for a better integration of [33]AVR-LibC with avr-gcc. For
   9601        technical details, see [34]PR54461. To turn off the option in
   9602        non-AVR-LibC configurations, use --with-avrlibc=no. If the compiler
   9603        is configured for RTEMS, the option is always turned off.
   9604      * Support for the "Embedded C" fixed-point has been added. For
   9605        details, see the [35]GCC wiki and the [36]user manual. The support
   9606        is not complete.
   9607      * A new print modifier %r for register operands in inline assembler
   9608        is supported. It will print the raw register number without the
   9609        register prefix 'r':
   9610     /* Return the most significant byte of 'val', a 64-bit value.  */
   9611 
   9612     unsigned char msb (long long val)
   9613     {
   9614       unsigned char c;
   9615       __asm__ ("mov %0, %r1+7" : "=r" (c) : "r" (val));
   9616       return c;
   9617     }
   9618        The inline assembler in this example will generate code like
   9619     mov r24, 8+7
   9620        provided c is allocated to R24 and val is allocated to R8...R15.
   9621        This works because the GNU assembler accepts plain register numbers
   9622        without register prefix.
   9623      * Static initializers with 3-byte symbols are supported now:
   9624     extern const __memx char foo;
   9625     const __memx void *pfoo = &foo;
   9626        This requires at least Binutils 2.23.
   9627 
   9628   IA-32/x86-64
   9629 
   9630      * Allow -mpreferred-stack-boundary=3 for the x86-64 architecture with
   9631        SSE extensions disabled. Since the x86-64 ABI requires 16 byte
   9632        stack alignment, this is ABI incompatible and intended to be used
   9633        in controlled environments where stack space is an important
   9634        limitation. This option will lead to wrong code when functions
   9635        compiled with 16 byte stack alignment (such as functions from a
   9636        standard library) are called with misaligned stack. In this case,
   9637        SSE instructions may lead to misaligned memory access traps. In
   9638        addition, variable arguments will be handled incorrectly for 16
   9639        byte aligned objects (including x87 long double and __int128),
   9640        leading to wrong results. You must build all modules with
   9641        -mpreferred-stack-boundary=3, including any libraries. This
   9642        includes the system libraries and startup modules.
   9643      * Support for the new Intel processor codename Broadwell with RDSEED,
   9644        ADCX, ADOX, PREFETCHW is available through -madx, -mprfchw,
   9645        -mrdseed command-line options.
   9646      * Support for the Intel RTM and HLE intrinsics, built-in functions
   9647        and code generation is available via -mrtm and -mhle.
   9648      * Support for the Intel FXSR, XSAVE and XSAVEOPT instruction sets.
   9649        Intrinsics and built-in functions are available via -mfxsr, -mxsave
   9650        and -mxsaveopt respectively.
   9651      * New -maddress-mode=[short|long] options for x32.
   9652        -maddress-mode=short overrides default 64-bit addresses to 32-bit
   9653        by emitting the 0x67 address-size override prefix. This is the
   9654        default address mode for x32.
   9655      * New built-in functions to detect run-time CPU type and ISA:
   9656           + A built-in function __builtin_cpu_is has been added to detect
   9657             if the run-time CPU is of a particular type. It returns a
   9658             positive integer on a match and zero otherwise. It accepts one
   9659             string literal argument, the CPU name. For example,
   9660             __builtin_cpu_is("westmere") returns a positive integer if the
   9661             run-time CPU is an Intel Core i7 Westmere processor. Please
   9662             refer to the [37]user manual for the list of valid CPU names
   9663             recognized.
   9664           + A built-in function __builtin_cpu_supports has been added to
   9665             detect if the run-time CPU supports a particular ISA feature.
   9666             It returns a positive integer on a match and zero otherwise.
   9667             It accepts one string literal argument, the ISA feature. For
   9668             example, __builtin_cpu_supports("ssse3") returns a positive
   9669             integer if the run-time CPU supports SSSE3 instructions.
   9670             Please refer to the [38]user manual for the list of valid ISA
   9671             names recognized.
   9672        Caveat: If these built-in functions are called before any static
   9673        constructors are invoked, like during IFUNC initialization, then
   9674        the CPU detection initialization must be explicitly run using this
   9675        newly provided built-in function, __builtin_cpu_init. The
   9676        initialization needs to be done only once. For example, this is how
   9677        the invocation would look like inside an IFUNC initializer:
   9678     static void (*some_ifunc_resolver(void))(void)
   9679     {
   9680       __builtin_cpu_init();
   9681       if (__builtin_cpu_is("amdfam10h") ...
   9682       if (__builtin_cpu_supports("popcnt") ...
   9683     }
   9684 
   9685      * Function Multiversioning Support with G++:
   9686        It is now possible to create multiple function versions each
   9687        targeting a specific processor and/or ISA. Function versions have
   9688        the same signature but different target attributes. For example,
   9689        here is a program with function versions:
   9690     __attribute__ ((target ("default")))
   9691     int foo(void)
   9692     {
   9693       return 1;
   9694     }
   9695 
   9696     __attribute__ ((target ("sse4.2")))
   9697     int foo(void)
   9698     {
   9699       return 2;
   9700     }
   9701 
   9702     int main (void)
   9703     {
   9704       int (*p) = &foo;
   9705       assert ((*p)() == foo());
   9706       return 0;
   9707     }
   9708 
   9709        Please refer to this [39]wiki for more information.
   9710      * The x86 back end has been improved to allow option -fschedule-insns
   9711        to work reliably. This option can be used to schedule instructions
   9712        better and leads to improved performace in certain cases.
   9713      * Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
   9714        from the Mingw-w64 trunk.
   9715      * Support for new AMD family 15h processors (Steamroller core) is now
   9716        available through the -march=bdver3 and -mtune=bdver3 options.
   9717      * Support for new AMD family 16h processors (Jaguar core) is now
   9718        available through the -march=btver2 and -mtune=btver2 options.
   9719 
   9720   [40]FRV
   9721 
   9722      * This target now supports the -fstack-usage command-line option.
   9723 
   9724   [41]MIPS
   9725 
   9726      * GCC can now generate code specifically for the R4700, Broadcom XLP
   9727        and MIPS 34kn processors. The associated -march options are
   9728        -march=r4700, -march=xlp and -march=34kn respectively.
   9729      * GCC now generates better DSP code for MIPS 74k cores thanks to
   9730        further scheduling optimizations.
   9731      * The MIPS port now supports the -fstack-check option.
   9732      * GCC now passes the -mmcu and -mno-mcu options to the assembler.
   9733      * Previous versions of GCC would silently accept -fpic and -fPIC for
   9734        -mno-abicalls targets like mips*-elf. This combination was not
   9735        intended or supported, and did not generate position-independent
   9736        code. GCC 4.8 now reports an error when this combination is used.
   9737 
   9738   [42]PowerPC / PowerPC64 / RS6000
   9739 
   9740      * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
   9741        restore or update the VRSAVE register by default. The respective
   9742        operating systems manage the VRSAVE register directly.
   9743      * Large TOC support has been added for AIX through the command line
   9744        option -mcmodel=large.
   9745      * Native Thread-Local Storage support has been added for AIX.
   9746      * VMX (Altivec) and VSX instruction sets now are enabled implicitly
   9747        when targetting processors that support those hardware features on
   9748        AIX 6.1 and above.
   9749 
   9750   [43]RX
   9751 
   9752      * This target will now issue a warning message whenever multiple fast
   9753        interrupt handlers are found in the same compilation unit. This
   9754        feature can be turned off by the new
   9755        -mno-warn-multiple-fast-interrupts command-line option.
   9756 
   9757   S/390, System z
   9758 
   9759      * Support for the IBM zEnterprise zEC12 processor has been added.
   9760        When using the -march=zEC12 option, the compiler will generate code
   9761        making use of the following new instructions:
   9762           + load and trap instructions
   9763           + 2 new compare and trap instructions
   9764           + rotate and insert selected bits - without CC clobber
   9765        The -mtune=zEC12 option enables zEC12 specific instruction
   9766        scheduling without making use of new instructions.
   9767      * Register pressure sensitive instruction scheduling is enabled by
   9768        default.
   9769      * The ifunc function attribute is enabled by default.
   9770      * memcpy and memcmp invokations on big memory chunks or with run time
   9771        lengths are not generated inline anymore when tuning for z10 or
   9772        higher. The purpose is to make use of the IFUNC optimized versions
   9773        in Glibc.
   9774 
   9775   [44]SH
   9776 
   9777      * The default alignment settings have been reduced to be less
   9778        aggressive. This results in more compact code for optimization
   9779        levels other than -Os.
   9780      * Improved support for the __atomic built-in functions:
   9781           + A new option -matomic-model=model selects the model for the
   9782             generated atomic sequences. The following models are
   9783             supported:
   9784 
   9785               soft-gusa
   9786                       Software gUSA sequences (SH3* and SH4* only). On
   9787                       SH4A targets this will now also partially utilize
   9788                       the movco.l and movli.l instructions. This is the
   9789                       default when the target is sh3*-*-linux* or
   9790                       sh4*-*-linux*.
   9791 
   9792               hard-llcs
   9793                       Hardware movco.l / movli.l sequences (SH4A only).
   9794 
   9795               soft-tcb
   9796                       Software thread control block sequences.
   9797 
   9798               soft-imask
   9799                       Software interrupt flipping sequences (privileged
   9800                       mode only). This is the default when the target is
   9801                       sh1*-*-linux* or sh2*-*-linux*.
   9802 
   9803               none
   9804                       Generates function calls to the respective __atomic
   9805                       built-in functions. This is the default for SH64
   9806                       targets or when the target is not sh*-*-linux*.
   9807 
   9808           + The option -msoft-atomic has been deprecated. It is now an
   9809             alias for -matomic-model=soft-gusa.
   9810           + A new option -mtas makes the compiler generate the tas.b
   9811             instruction for the __atomic_test_and_set built-in function
   9812             regardless of the selected atomic model.
   9813           + The __sync functions in libgcc now reflect the selected atomic
   9814             model when building the toolchain.
   9815      * Added support for the mov.b and mov.w instructions with
   9816        displacement addressing.
   9817      * Added support for the SH2A instructions movu.b and movu.w.
   9818      * Various improvements to code generated for integer arithmetic.
   9819      * Improvements to conditional branches and code that involves the T
   9820        bit. A new option -mzdcbranch tells the compiler to favor
   9821        zero-displacement branches. This is enabled by default for SH4*
   9822        targets.
   9823      * The pref instruction will now be emitted by the __builtin_prefetch
   9824        built-in function for SH3* targets.
   9825      * The fmac instruction will now be emitted by the fmaf standard
   9826        function and the __builtin_fmaf built-in function.
   9827      * The -mfused-madd option has been deprecated in favor of the
   9828        machine-independent -ffp-contract option. Notice that the fmac
   9829        instruction will now be generated by default for expressions like a
   9830        * b + c. This is due to the compiler default setting
   9831        -ffp-contract=fast.
   9832      * Added new options -mfsrra and -mfsca to allow the compiler using
   9833        the fsrra and fsca instructions on targets other than SH4A (where
   9834        they are already enabled by default).
   9835      * Added support for the __builtin_bswap32 built-in function. It is
   9836        now expanded as a sequence of swap.b and swap.w instructions
   9837        instead of a library function call.
   9838      * The behavior of the -mieee option has been fixed and the negative
   9839        form -mno-ieee has been added to control the IEEE conformance of
   9840        floating point comparisons. By default -mieee is now enabled and
   9841        the option -ffinite-math-only implicitly sets -mno-ieee.
   9842      * Added support for the built-in functions __builtin_thread_pointer
   9843        and __builtin_set_thread_pointer. This assumes that GBR is used to
   9844        hold the thread pointer of the current thread. Memory loads and
   9845        stores relative to the address returned by __builtin_thread_pointer
   9846        will now also utilize GBR based displacement address modes.
   9847      * The -mdiv= option for targets other than SHmedia has been fixed and
   9848        documented.
   9849 
   9850   [45]SPARC
   9851 
   9852      * Added optimized instruction scheduling for Niagara4.
   9853 
   9854   [46]TILE-Gx
   9855 
   9856      * Added support for the -mcmodel=MODEL command-line option. The
   9857        models supported are small and large.
   9858 
   9859   [47]V850
   9860 
   9861      * This target now supports the E3V5 architecture via the use of the
   9862        new -mv850e3v5 command-line option. It also has experimental
   9863        support for the e3v5 LOOP instruction which can be enabled via the
   9864        new -mloop command-line option.
   9865 
   9866   [48]XStormy16
   9867 
   9868      * This target now supports the -fstack-usage command-line option.
   9869 
   9870 [49]Operating Systems
   9871 
   9872   [50]OpenBSD
   9873 
   9874      * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
   9875        support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
   9876 
   9877   [51]Windows (Cygwin)
   9878 
   9879      * Executables are now linked against shared libgcc by default. The
   9880        previous default was to link statically, which can still be done by
   9881        explicitly specifying -static or static-libgcc on the command line.
   9882        However it is strongly advised against, as it will cause problems
   9883        for any application that makes use of DLLs compiled by GCC. It
   9884        should be alright for a monolithic stand-alone application that
   9885        only links against the Windows DLLs, but offers little or no
   9886        benefit.
   9887 
   9888 [52]GCC 4.8.1
   9889 
   9890    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   9891    system that are known to be fixed in the 4.8.1 release. This list might
   9892    not be complete (that is, it is possible that some PRs that have been
   9893    fixed are not listed here).
   9894 
   9895    The C++11 <chrono> std::chrono::system_clock and
   9896    std::chrono::steady_clock classes have changed ABI in GCC 4.8.1, they
   9897    both are now separate (never typedefs of each other), both use
   9898    std::chrono::nanoseconds resolution, on most GNU/Linux configurations
   9899    std::chrono::steady_clock is now finally monotonic, and both classes
   9900    are mangled differently than in the previous GCC releases.
   9901    std::chrono::system_clock::now() with std::chrono::microseconds resp.
   9902    std::chrono::seconds resolution is still exported for backwards
   9903    compatibility with default configured libstdc++. Note that libstdc++
   9904    configured with --enable-libstdcxx-time= used to be ABI incompatible
   9905    with default configured libstdc++ for those two classes and no ABI
   9906    compatibility can be offered for those configurations, so any C++11
   9907    code that uses those classes and has been compiled and linked against
   9908    libstdc++ configured with the non-default --enable-libstdcxx-time=
   9909    configuration option needs to be recompiled.
   9910 
   9911 [54]GCC 4.8.2
   9912 
   9913    This is the [55]list of problem reports (PRs) from GCC's bug tracking
   9914    system that are known to be fixed in the 4.8.2 release. This list might
   9915    not be complete (that is, it is possible that some PRs that have been
   9916    fixed are not listed here).
   9917 
   9918 [56]GCC 4.8.3
   9919 
   9920    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   9921    system that are known to be fixed in the 4.8.3 release. This list might
   9922    not be complete (that is, it is possible that some PRs that have been
   9923    fixed are not listed here).
   9924 
   9925    Support for the new powerpc64le-linux platform has been added. It
   9926    defaults to generating code that conforms to the ELFV2 ABI.
   9927 
   9928 [58]GCC 4.8.4
   9929 
   9930    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   9931    system that are known to be fixed in the 4.8.4 release. This list might
   9932    not be complete (that is, it is possible that some PRs that have been
   9933    fixed are not listed here).
   9934 
   9935 [60]GCC 4.8.5
   9936 
   9937    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   9938    system that are known to be fixed in the 4.8.5 release. This list might
   9939    not be complete (that is, it is possible that some PRs that have been
   9940    fixed are not listed here).
   9941 
   9942 
   9943     For questions related to the use of GCC, please consult these web
   9944     pages and the [62]GCC manuals. If that fails, the
   9945     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9946     web pages and the development of GCC are welcome on our developer
   9947     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   9948     archives.
   9949 
   9950    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   9951    distribution of this entire article is permitted in any medium,
   9952    provided this notice is preserved.
   9953 
   9954    These pages are [67]maintained by the GCC team. Last modified
   9955    2025-02-28.
   9956 
   9957 References
   9958 
   9959    1. https://gcc.gnu.org/wiki/cxx-conversion
   9960    2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
   9961    3. https://gcc.gnu.org/gcc-4.8/porting_to.html
   9962    4. https://github.com/google/sanitizers
   9963    5. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
   9964    6. https://lkml.org/lkml/2006/11/28/239
   9965    7. https://gcc.gnu.org/gcc-4.8/changes.html#cxx
   9966    8. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9967    9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9968   10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9969   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
   9970   12. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9971   13. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   9972   14. https://gcc.gnu.org/projects/cxx1y.html
   9973   15. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
   9974   16. https://gcc.gnu.org/gcc-4.8/changes.html#fortran
   9975   17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
   9976   18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9977   19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9978   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   9979   21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9980   22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9981   23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
   9982   24. https://gcc.gnu.org/wiki/Fortran2003Status
   9983   25. https://gcc.gnu.org/wiki/TS29113Status
   9984   26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
   9985   27. https://chasm-interop.sourceforge.net/
   9986   28. https://gcc.gnu.org/gcc-4.8/changes.html#go
   9987   29. https://gcc.gnu.org/gcc-4.8/changes.html#targets
   9988   30. https://gcc.gnu.org/gcc-4.8/changes.html#aarch64
   9989   31. https://gcc.gnu.org/gcc-4.8/changes.html#arm
   9990   32. https://gcc.gnu.org/gcc-4.8/changes.html#avr
   9991   33. http://www.nongnu.org/avr-libc/
   9992   34. https://gcc.gnu.org/PR54461
   9993   35. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
   9994   36. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
   9995   37. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   9996   38. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   9997   39. https://gcc.gnu.org/wiki/FunctionMultiVersioning
   9998   40. https://gcc.gnu.org/gcc-4.8/changes.html#frv
   9999   41. https://gcc.gnu.org/gcc-4.8/changes.html#mips
   10000   42. https://gcc.gnu.org/gcc-4.8/changes.html#powerpc
   10001   43. https://gcc.gnu.org/gcc-4.8/changes.html#rx
   10002   44. https://gcc.gnu.org/gcc-4.8/changes.html#sh
   10003   45. https://gcc.gnu.org/gcc-4.8/changes.html#sparc
   10004   46. https://gcc.gnu.org/gcc-4.8/changes.html#tilegx
   10005   47. https://gcc.gnu.org/gcc-4.8/changes.html#v850
   10006   48. https://gcc.gnu.org/gcc-4.8/changes.html#xstormy16
   10007   49. https://gcc.gnu.org/gcc-4.8/changes.html#os
   10008   50. https://gcc.gnu.org/gcc-4.8/changes.html#openbsd
   10009   51. https://gcc.gnu.org/gcc-4.8/changes.html#windows
   10010   52. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.1
   10011   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
   10012   54. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.2
   10013   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
   10014   56. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.3
   10015   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
   10016   58. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.4
   10017   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
   10018   60. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.5
   10019   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
   10020   62. https://gcc.gnu.org/onlinedocs/
   10021   63. mailto:gcc-help (a] gcc.gnu.org
   10022   64. mailto:gcc (a] gcc.gnu.org
   10023   65. https://gcc.gnu.org/lists.html
   10024   66. https://www.fsf.org/
   10025   67. https://gcc.gnu.org/about.html
   10026 ======================================================================
   10027 http://gcc.gnu.org/gcc-4.7/index.html
   10028 
   10029                              GCC 4.7 Release Series
   10030 
   10031    (This release series is no longer supported.)
   10032 
   10033    June 12, 2014
   10034 
   10035    The [1]GNU project and the GCC developers are pleased to announce the
   10036    release of GCC 4.7.4.
   10037 
   10038    This release is a bug-fix release, containing fixes for regressions in
   10039    GCC 4.7.3 relative to previous releases of GCC.
   10040 
   10041 Release History
   10042 
   10043    GCC 4.7.4
   10044           June 12, 2014 ([2]changes, [3]documentation)
   10045 
   10046    GCC 4.7.3
   10047           April 11, 2013 ([4]changes, [5]documentation)
   10048 
   10049    GCC 4.7.2
   10050           September 20, 2012 ([6]changes, [7]documentation)
   10051 
   10052    GCC 4.7.1
   10053           June 14, 2012 ([8]changes, [9]documentation)
   10054 
   10055    GCC 4.7.0
   10056           March 22, 2012 ([10]changes, [11]documentation)
   10057 
   10058 References and Acknowledgements
   10059 
   10060    GCC used to stand for the GNU C Compiler, but since the compiler
   10061    supports several other languages aside from C, it now stands for the
   10062    GNU Compiler Collection.
   10063 
   10064    A list of [12]successful builds is updated as new information becomes
   10065    available.
   10066 
   10067    The GCC developers would like to thank the numerous people that have
   10068    contributed new features, improvements, bug fixes, and other changes as
   10069    well as test results to GCC. This [13]amazing group of volunteers is
   10070    what makes GCC successful.
   10071 
   10072    For additional information about GCC please refer to the [14]GCC
   10073    project web site or contact the [15]GCC development mailing list.
   10074 
   10075    To obtain GCC please use [16]our mirror sites or [17]our version
   10076    control system.
   10077 
   10078 
   10079     For questions related to the use of GCC, please consult these web
   10080     pages and the [18]GCC manuals. If that fails, the
   10081     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10082     web pages and the development of GCC are welcome on our developer
   10083     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   10084     archives.
   10085 
   10086    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   10087    distribution of this entire article is permitted in any medium,
   10088    provided this notice is preserved.
   10089 
   10090    These pages are [23]maintained by the GCC team. Last modified
   10091    2022-10-26.
   10092 
   10093 References
   10094 
   10095    1. http://www.gnu.org/
   10096    2. https://gcc.gnu.org/gcc-4.7/changes.html
   10097    3. https://gcc.gnu.org/onlinedocs/4.7.4/
   10098    4. https://gcc.gnu.org/gcc-4.7/changes.html
   10099    5. https://gcc.gnu.org/onlinedocs/4.7.3/
   10100    6. https://gcc.gnu.org/gcc-4.7/changes.html
   10101    7. https://gcc.gnu.org/onlinedocs/4.7.2/
   10102    8. https://gcc.gnu.org/gcc-4.7/changes.html
   10103    9. https://gcc.gnu.org/onlinedocs/4.7.1/
   10104   10. https://gcc.gnu.org/gcc-4.7/changes.html
   10105   11. https://gcc.gnu.org/onlinedocs/4.7.0/
   10106   12. https://gcc.gnu.org/gcc-4.7/buildstat.html
   10107   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   10108   14. https://gcc.gnu.org/index.html
   10109   15. mailto:gcc (a] gcc.gnu.org
   10110   16. https://gcc.gnu.org/mirrors.html
   10111   17. https://gcc.gnu.org/git.html
   10112   18. https://gcc.gnu.org/onlinedocs/
   10113   19. mailto:gcc-help (a] gcc.gnu.org
   10114   20. mailto:gcc (a] gcc.gnu.org
   10115   21. https://gcc.gnu.org/lists.html
   10116   22. https://www.fsf.org/
   10117   23. https://gcc.gnu.org/about.html
   10118 ======================================================================
   10119 http://gcc.gnu.org/gcc-4.7/changes.html
   10120 
   10121                              GCC 4.7 Release Series
   10122                         Changes, New Features, and Fixes
   10123 
   10124 Caveats
   10125 
   10126      * The -fconserve-space flag has been deprecated. The flag had no
   10127        effect for most targets: only targets without a global .bss section
   10128        and without support for switchable sections. Furthermore, the flag
   10129        only had an effect for G++, where it could result in wrong
   10130        semantics (please refer to the GCC manual for further details). The
   10131        flag will be removed in GCC 4.8
   10132      * Support for a number of older systems and recently unmaintained or
   10133        untested target ports of GCC has been declared obsolete in GCC 4.7.
   10134        Unless there is activity to revive them, the next release of GCC
   10135        will have their sources permanently removed.
   10136        All GCC ports for the following processor architectures have been
   10137        declared obsolete:
   10138           + picoChip (picochip-*)
   10139        The following ports for individual systems on particular
   10140        architectures have been obsoleted:
   10141           + IRIX 6.5 (mips-sgi-irix6.5)
   10142           + MIPS OpenBSD (mips*-*-openbsd*)
   10143           + Solaris 8 (*-*-solaris2.8). Details can be found in the
   10144             [1]announcement.
   10145           + Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
   10146      * On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
   10147        ARMv7-R, or ARMv7-M, the new option -munaligned-access is active by
   10148        default, which for some sources generates code that accesses memory
   10149        on unaligned addresses. This requires the kernel of those systems
   10150        to enable such accesses (controlled by CP15 register c1, refer to
   10151        ARM documentation). Alternatively, or for compatibility with
   10152        kernels where unaligned accesses are not supported, all code has to
   10153        be compiled with -mno-unaligned-access. Upstream Linux kernel
   10154        releases have automatically and unconditionally supported unaligned
   10155        accesses as emitted by GCC due to this option being active since
   10156        version 2.6.28.
   10157      * Support on ARM for the legacy floating-point accelerator (FPA) and
   10158        the mixed-endian floating-point format that it used has been
   10159        obsoleted. The ports that still use this format have been obsoleted
   10160        as well. Many legacy ARM ports already provide an alternative that
   10161        uses the VFP floating-point format. The obsolete ports will be
   10162        deleted in the next release.
   10163        The obsolete ports with alternatives are:
   10164           + arm*-*-rtems (use arm*-*-rtemseabi)
   10165           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   10166           + arm*-*-elf (use arm*-*-eabi)
   10167           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   10168        Note, however, that these alternatives are not binary compatible
   10169        with their legacy counterparts (although some can support running
   10170        legacy applications).
   10171        The obsolete ports that currently lack a modern alternative are:
   10172           + arm*-*-ecos-elf
   10173           + arm*-*-freebsd
   10174           + arm*-wince-pe*
   10175        New ports that support more recent versions of the architecture are
   10176        welcome.
   10177      * Support for the Maverick co-processor on ARM has been obsoleted.
   10178        Code to support it will be deleted in the next release.
   10179      * Support has been removed for Unix International threads on Solaris
   10180        2, so the --enable-threads=solaris configure option and the
   10181        -threads compiler option don't work any longer.
   10182      * Support has been removed for the Solaris BSD Compatibility Package,
   10183        which lives in /usr/ucbinclude and /usr/ucblib. It has been removed
   10184        from Solaris 11, and was only intended as a migration aid from
   10185        SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
   10186        recognized any longer.
   10187      * The ARM port's -mwords-little-endian option has been deprecated. It
   10188        will be removed in a future release.
   10189      * Support has been removed for the NetWare x86 configuration
   10190        obsoleted in GCC 4.6.
   10191      * It is no longer possible to use the "l" constraint in MIPS16 asm
   10192        statements.
   10193      * GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard
   10194        library which affected the ABI in C++11 mode: a data member was
   10195        added to std::list changing its size and altering the definitions
   10196        of some member functions, and std::pair's move constructor was
   10197        non-trivial which altered the calling convention for functions with
   10198        std::pair arguments or return types. The ABI incompatibilities have
   10199        been fixed for GCC version 4.7.2 but as a result C++11 code
   10200        compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11
   10201        code compiled with different GCC versions and with C++98/C++03 code
   10202        compiled with any version.
   10203      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   10204        rules for the layout of vectors that could lead to wrong code being
   10205        generated. Vectors larger than 8 bytes in size are now by default
   10206        aligned to an 8-byte boundary. This is an ABI change: code that
   10207        makes explicit use of vector types may be incompatible with binary
   10208        objects built with older versions of GCC. Auto-vectorized code is
   10209        not affected by this change. (This change affects GCC versions
   10210        4.7.2 and later.)
   10211      * More information on porting to GCC 4.7 from previous versions of
   10212        GCC can be found in the [2]porting guide for this release.
   10213 
   10214 General Optimizer Improvements
   10215 
   10216      * Support for a new parameter --param case-values-threshold=n was
   10217        added to allow users to control the cutoff between doing switch
   10218        statements as a series of if statements and using a jump table.
   10219      * Link-time optimization (LTO) improvements:
   10220           + Improved scalability and reduced memory usage. Link time
   10221             optimization of Firefox now requires 3GB of RAM on a 64-bit
   10222             system, while over 8GB was needed previously. Linking time has
   10223             been improved, too. The serial stage of linking Firefox has
   10224             been sped up by about a factor of 10.
   10225           + Reduced size of object files and temporary storage used during
   10226             linking.
   10227           + Streaming performance (both outbound and inbound) has been
   10228             improved.
   10229           + ld -r is now supported with LTO.
   10230           + Several bug fixes, especially in symbol table handling and
   10231             merging.
   10232      * Interprocedural optimization improvements:
   10233           + Heuristics now take into account that after inlining code will
   10234             be optimized out because of known values (or properties) of
   10235             function parameters. For example:
   10236 void foo(int a)
   10237 {
   10238   if (a > 10)
   10239     ... huge code ...
   10240 }
   10241 void bar (void)
   10242 {
   10243   foo (0);
   10244 }
   10245 
   10246             The call of foo will be inlined into bar even when optimizing
   10247             for code size. Constructs based on __builtin_constant_p are
   10248             now understood by the inliner and code size estimates are
   10249             evaluated a lot more realistically.
   10250           + The representation of C++ virtual thunks and aliases (both
   10251             implicit and defined via the alias attribute) has been
   10252             re-engineered. Aliases no longer pose optimization barriers
   10253             and calls to an alias can be inlined and otherwise optimized.
   10254           + The inter-procedural constant propagation pass has been
   10255             rewritten. It now performs generic function specialization.
   10256             For example when compiling the following:
   10257 void foo(bool flag)
   10258 {
   10259   if (flag)
   10260     ... do something ...
   10261   else
   10262     ... do something else ...
   10263 }
   10264 void bar (void)
   10265 {
   10266   foo (false);
   10267   foo (true);
   10268   foo (false);
   10269   foo (true);
   10270   foo (false);
   10271   foo (true);
   10272 }
   10273 
   10274             GCC will now produce two copies of foo. One with flag being
   10275             true, while other with flag being false. This leads to
   10276             performance improvements previously possible only by inlining
   10277             all calls. Cloning causes a lot less code size growth.
   10278      * A string length optimization pass has been added. It attempts to
   10279        track string lengths and optimize various standard C string
   10280        functions like strlen, strchr, strcpy, strcat, stpcpy and their
   10281        _FORTIFY_SOURCE counterparts into faster alternatives. This pass is
   10282        enabled by default at -O2 or above, unless optimizing for size, and
   10283        can be disabled by the -fno-optimize-strlen option. The pass can
   10284        e.g. optimize
   10285 char *bar (const char *a)
   10286 {
   10287   size_t l = strlen (a) + 2;
   10288   char *p = malloc (l); if (p == NULL) return p;
   10289   strcpy (p, a); strcat (p, "/"); return p;
   10290 }
   10291 
   10292        into:
   10293 char *bar (const char *a)
   10294 {
   10295   size_t tmp = strlen (a);
   10296   char *p = malloc (tmp + 2); if (p == NULL) return p;
   10297   memcpy (p, a, tmp); memcpy (p + tmp, "/", 2); return p;
   10298 }
   10299 
   10300        or for hosted compilations where stpcpy is available in the runtime
   10301        and headers provide its prototype, e.g.
   10302 void foo (char *a, const char *b, const char *c, const char *d)
   10303 {
   10304   strcpy (a, b); strcat (a, c); strcat (a, d);
   10305 }
   10306 
   10307        can be optimized into:
   10308 void foo (char *a, const char *b, const char *c, const char *d)
   10309 {
   10310   strcpy (stpcpy (stpcpy (a, b), c), d);
   10311 }
   10312 
   10313 New Languages and Language specific improvements
   10314 
   10315      * Version 3.1 of the OpenMP specification is now supported for the C,
   10316        C++, and Fortran compilers.
   10317 
   10318   Ada
   10319 
   10320      * The command-line option -feliminate-unused-debug-types has been
   10321        re-enabled by default, as it is for the other languages, leading to
   10322        a reduction in debug info size of 12.5% and more for relevant
   10323        cases, as well as to a small compilation speedup.
   10324 
   10325   C family
   10326 
   10327      * A new built-in, __builtin_assume_aligned, has been added, through
   10328        which the compiler can be hinted about pointer alignment and can
   10329        use it to improve generated code.
   10330      * A new warning option -Wunused-local-typedefs was added for C, C++,
   10331        Objective-C and Objective-C++. This warning diagnoses typedefs
   10332        locally defined in a function, and otherwise not used.
   10333      * A new experimental command-line option -ftrack-macro-expansion was
   10334        added for C, C++, Objective-C, Objective-C++ and Fortran. It allows
   10335        the compiler to emit diagnostic about the current macro expansion
   10336        stack when a compilation error occurs in a macro expansion.
   10337      * Experimental support for transactional memory has been added. It
   10338        includes support in the compiler, as well as a supporting runtime
   10339        library called libitm. To compile code with transactional memory
   10340        constructs, use the -fgnu-tm option.
   10341        Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
   10342        and 32-bit/64-bit x86 platforms.
   10343        For more details on transactional memory see [3]the GCC WiKi.
   10344      * Support for atomic operations specifying the C++11/C11 memory model
   10345        has been added. These new __atomic routines replace the existing
   10346        __sync built-in routines.
   10347        Atomic support is also available for memory blocks. Lock-free
   10348        instructions will be used if a memory block is the same size and
   10349        alignment as a supported integer type. Atomic operations which do
   10350        not have lock-free support are left as function calls. A set of
   10351        library functions is available on the GCC atomic wiki in the
   10352        "External Atomics Library" section.
   10353        For more details on the memory models and features, see the
   10354        [4]atomic wiki.
   10355      * When a binary operation is performed on vector types and one of the
   10356        operands is a uniform vector, it is possible to replace the vector
   10357        with the generating element. For example:
   10358 typedef int v4si __attribute__ ((vector_size (16)));
   10359 v4si res, a = {1,2,3,4};
   10360 int x;
   10361 
   10362 res = 2 + a;  /* means {2,2,2,2} + a  */
   10363 res = a - x;  /* means a - {x,x,x,x}  */
   10364 
   10365   [5]C
   10366 
   10367      * There is support for some more features from the C11 revision of
   10368        the ISO C standard. GCC now accepts the options -std=c11 and
   10369        -std=gnu11, in addition to the previous -std=c1x and -std=gnu1x.
   10370           + Unicode strings (previously supported only with options such
   10371             as -std=gnu11, now supported with -std=c11), and the
   10372             predefined macros __STDC_UTF_16__ and __STDC_UTF_32__.
   10373           + Nonreturning functions (_Noreturn and <stdnoreturn.h>).
   10374           + Alignment support (_Alignas, _Alignof, max_align_t,
   10375             <stdalign.h>).
   10376           + A built-in function __builtin_complex is provided to support C
   10377             library implementation of the CMPLX family of macros.
   10378 
   10379   [6]C++
   10380 
   10381      * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
   10382        options, which are equivalent to -std=c++0x, -std=gnu++0x, and
   10383        -Wc++0x-compat, respectively.
   10384      * G++ now implements [7]C++11 extended friend syntax:
   10385 
   10386 template<class W>
   10387 class Q
   10388 {
   10389   static const int I = 2;
   10390 public:
   10391   friend W;
   10392 };
   10393 
   10394 struct B
   10395 {
   10396   int ar[Q<B>::I];
   10397 };
   10398 
   10399      * Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
   10400        override control.
   10401 
   10402 struct B {
   10403   virtual void f() const final;
   10404   virtual void f(int);
   10405 };
   10406 
   10407 struct D : B {
   10408   void f() const;            // error: D::f attempts to override final B::f
   10409   void f(long) override;     // error: doesn't override anything
   10410   void f(int) override;      // ok
   10411 };
   10412 
   10413 struct E final { };
   10414 struct F: E { }; // error: deriving from final class
   10415 
   10416      * G++ now implements [9]C++11 non-static data member initializers.
   10417 
   10418 struct A {
   10419   int i = 42;
   10420 } a; // initializes a.i to 42
   10421 
   10422      * Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
   10423        user-defined literals.
   10424 
   10425 // Not actually a good approximation.  :)
   10426 constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
   10427 long double pi = 180.0_degrees;
   10428 
   10429      * G++ now implements [11]C++11 alias-declarations.
   10430 
   10431 template <class T> using Ptr = T*;
   10432 Ptr<int> ip;  // decltype(ip) is int*
   10433 
   10434      * Thanks to Ville Voutilainen and Pedro Lamaro, G++ now implements
   10435        [12]C++11 delegating constructors.
   10436 
   10437 struct A {
   10438   A(int);
   10439   A(): A(42) { } // delegate to the A(int) constructor
   10440 };
   10441 
   10442      * G++ now fully implements C++11 atomic classes rather than just
   10443        integer derived classes.
   10444 
   10445 class POD {
   10446   int a;
   10447   int b;
   10448 };
   10449 std::atomic<POD> my_atomic_POD;
   10450 
   10451      * G++ now sets the predefined macro __cplusplus to the correct value,
   10452        199711L for C++98/03, and 201103L for C++11.
   10453      * G++ now correctly implements the two-phase lookup rules such that
   10454        an unqualified name used in a template must have an appropriate
   10455        declaration found either in scope at the point of definition of the
   10456        template or by argument-dependent lookup at the point of
   10457        instantiation. As a result, code that relies on a second
   10458        unqualified lookup at the point of instantiation to find functions
   10459        declared after the template or in dependent bases will be rejected.
   10460        The compiler will suggest ways to fix affected code, and using the
   10461        -fpermissive compiler flag will allow the code to compile with a
   10462        warning.
   10463 
   10464 template <class T>
   10465 void f() { g(T()); } // error, g(int) not found by argument-dependent lookup
   10466 void g(int) { } // fix by moving this declaration before the declaration of f
   10467 
   10468 template <class T>
   10469 struct A: T {
   10470   // error, B::g(B) not found by argument-dependent lookup
   10471   void f() { g(T()); } // fix by using this->g or A::g
   10472 };
   10473 
   10474 struct B { void g(B); };
   10475 
   10476 int main()
   10477 {
   10478   f<int>();
   10479   A<B>().f();
   10480 }
   10481 
   10482      * G++ now properly re-uses stack space allocated for temporary
   10483        objects when their lifetime ends, which can significantly lower
   10484        stack consumption for some C++ functions. As a result of this, some
   10485        code with undefined behavior will now break:
   10486 
   10487 const int &f(const int &i) { return i; }
   10488 ....
   10489 const int &x = f(1);
   10490 const int &y = f(2);
   10491 
   10492        Here, x refers to the temporary allocated to hold the 1 argument,
   10493        which only lives until the end of the initialization; it
   10494        immediately becomes a dangling reference. So the next statement
   10495        re-uses the stack slot to hold the 2 argument, and users of x get
   10496        that value instead.
   10497        Note that this should not cause any change of behavior for
   10498        temporaries of types with non-trivial destructors, as they are
   10499        already destroyed at end of full-expression; the change is that now
   10500        the storage is released as well.
   10501      * A new command-line option -Wdelete-non-virtual-dtor has been added
   10502        to warn when delete is used to destroy an instance of a class which
   10503        has virtual functions and non-virtual destructor. It is unsafe to
   10504        delete an instance of a derived class through a pointer to a base
   10505        class if the base class does not have a virtual destructor. This
   10506        warning is enabled by -Wall.
   10507      * A new command-line option -Wzero-as-null-pointer-constant has been
   10508        added to warn when a literal '0' is used as null pointer constant.
   10509        It can be useful to facilitate the conversion to nullptr in C++11.
   10510      * As per C++98, access-declarations are now deprecated by G++.
   10511        Using-declarations are to be used instead. Furthermore, some
   10512        efforts have been made to improve the support of class scope
   10513        using-declarations. In particular, using-declarations referring to
   10514        a dependent type now work as expected ([13]bug c++/14258).
   10515      * The ELF symbol visibility of a template instantiation is now
   10516        properly constrained by the visibility of its template arguments
   10517        ([14]bug c++/35688).
   10518 
   10519     Runtime Library (libstdc++)
   10520 
   10521      * [15]Improved experimental support for the new ISO C++ standard,
   10522        C++11, including:
   10523           + using noexcept in most of the library;
   10524           + implementations of pointer_traits, allocator_traits and
   10525             scoped_allocator_adaptor;
   10526           + uses-allocator construction for tuple;
   10527           + vector meets the allocator-aware container requirements;
   10528           + replacing monotonic_clock with steady_clock;
   10529           + enabling the thread support library on most POSIX targets;
   10530           + many small improvements to conform to the FDIS.
   10531      * Added --enable-clocale=newlib configure option.
   10532      * Debug Mode iterators for unordered associative containers.
   10533      * Avoid polluting the global namespace and do not include <unistd.h>.
   10534 
   10535   [16]Fortran
   10536 
   10537      * The compile flag [17]-fstack-arrays has been added, which causes
   10538        all local arrays to be put on stack memory. For some programs this
   10539        will improve the performance significantly. If your program uses
   10540        very large local arrays, it is possible that you will have to
   10541        extend your runtime limits for stack memory.
   10542      * The [18]-Ofast flag now also implies [19]-fno-protect-parens and
   10543        [20]-fstack-arrays.
   10544      * Front-end optimizations can now be selected by the
   10545        [21]-ffrontend-optimize option and deselected by the
   10546        -fno-frontend-optimize option.
   10547      * When front-end optimization removes a function call,
   10548        [22]-Wfunction-elimination warns about that.
   10549      * When performing front-end-optimization, the
   10550        [23]-faggressive-function-elimination option allows the removal of
   10551        duplicate function calls even for impure functions.
   10552      * The flag [24]-Wreal-q-constant has been added, which warns if
   10553        floating-point literals have been specified using q (such as
   10554        1.0q0); the q marker is now supported as a vendor extension to
   10555        denote quad precision (REAL(16) or, if not available, REAL(10)).
   10556        Consider using a kind parameter (such as in 1.0_qp) instead, which
   10557        can be obtained via [25]SELECTED_REAL_KIND.
   10558      * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
   10559        Fortran now always prints error messages to standard error. If you
   10560        wish to redirect standard error, please consult the manual for your
   10561        OS, shell, batch environment etc. as appropriate.
   10562      * The -fdump-core option and GFORTRAN_ERROR_DUMPCORE environment
   10563        variable have been removed. When encountering a serious error,
   10564        gfortran will now always abort the program. Whether a core dump is
   10565        generated depends on the user environment settings; see the ulimit
   10566        -c setting for POSIX shells, limit coredumpsize for C shells, and
   10567        the [26]WER user-mode dumps settings on Windows.
   10568      * The [27]-fbacktrace option is now enabled by default. When
   10569        encountering a fatal error, gfortran will attempt to print a
   10570        backtrace to standard error before aborting. It can be disabled
   10571        with -fno-backtrace. Note: On POSIX targets with the addr2line
   10572        utility from GNU binutils, GNU Fortran can print a backtrace with
   10573        function name, file name, line number information in addition to
   10574        the addresses; otherwise only the addresses are printed.
   10575      * [28]Fortran 2003:
   10576           + Generic interface names which have the same name as derived
   10577             types are now supported, which allows to write constructor
   10578             functions. Note that Fortran does not support static
   10579             constructor functions; only default initialization or an
   10580             explicit structure-constructor initialization are available.
   10581           + [29]Polymorphic (class) arrays are now supported.
   10582      * [30]Fortran 2008:
   10583           + Support for the DO CONCURRENT construct has been added, which
   10584             allows the user to specify that individual loop iterations
   10585             have no interdependencies.
   10586           + [31]Coarrays: Full single-image support except for polymorphic
   10587             coarrays. Additionally, preliminary support for multiple
   10588             images via an MPI-based [32]coarray communication library has
   10589             been added. Note: The library version is not yet usable as
   10590             remote coarray access is not yet possible.
   10591      * [33]TS 29113:
   10592           + New flag [34]-std=f2008ts permits programs that are expected
   10593             to conform to the Fortran 2008 standard and the draft
   10594             Technical Specification (TS) 29113 on Further Interoperability
   10595             of Fortran with C.
   10596           + The OPTIONAL attribute is now allowed for dummy arguments of
   10597             BIND(C) procedures.
   10598           + The RANK intrinsic has been added.
   10599           + The implementation of the ASYNCHRONOUS attribute in GCC is
   10600             compatible with the candidate draft of TS 29113 (since GCC
   10601             4.6).
   10602 
   10603   [35]Go
   10604 
   10605      * GCC 4.7 implements the [36]Go 1 language standard. The library
   10606        support in 4.7.0 is not quite complete, due to release timing.
   10607        Release 4.7.1 includes complete support for Go 1. The Go library is
   10608        from the Go 1.0.1 release.
   10609      * Go has been tested on GNU/Linux and Solaris platforms. It may work
   10610        on other platforms as well.
   10611 
   10612 [37]New Targets and Target Specific Improvements
   10613 
   10614   [38]ARM
   10615 
   10616      * GCC now supports the Cortex-A7 processor implementing the v7-a
   10617        version of the architecture using the option -mcpu=cortex-a7.
   10618      * The default vector size in auto-vectorization for NEON is now 128
   10619        bits. If vectorization fails thusly, the vectorizer tries again
   10620        with 64-bit vectors.
   10621      * A new option -mvectorize-with-neon-double was added to allow users
   10622        to change the vector size to 64 bits.
   10623 
   10624   [39]AVR
   10625 
   10626      * The AVR port's libgcc has been improved and its multilib structure
   10627        has been enhanced. As a result, all objects contributing to an
   10628        application must either be compiled with GCC versions up to 4.6.x
   10629        or with GCC versions 4.7.1 or later. If the compiler is used with
   10630        AVR-LibC, you need a version that supports the new layout, i.e.
   10631        implements [40]#35407.
   10632      * The -mshort-calls command-line option has been deprecated. It will
   10633        be removed in the GCC 4.8 release. See -mrelax for a replacement.
   10634      * The compiled code only references startup code that clears .bss and
   10635        the common section resp. initializes the .data and .rodata section
   10636        provided respective sections (or subsections thereof) are not
   10637        empty, see [41]PR18145. Applications that put all static storage
   10638        objects into non-standard sections and / or define all static
   10639        storage objects in assembler modules, must reference __do_clear_bss
   10640        resp. __do_copy_data by hand or undefine the symbol(s) by means of
   10641        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
   10642      * GCC now supports the XMEGA architecture. This requires GNU Binutils
   10643        2.22 or later.
   10644      * Support for the [42]named address spaces __flash, __flash1, ...,
   10645        __flash5 and __memx has been added. These address spaces locate
   10646        read-only data in flash memory and allow reading from flash memory
   10647        by means of ordinary C code, i.e. without the need of (inline)
   10648        assembler code:
   10649 
   10650 const __flash int values[] = { 42, 31 };
   10651 
   10652 int add_values (const __flash int *p, int i)
   10653 {
   10654     return values[i] + *p;
   10655 }
   10656 
   10657      * Support has been added for the AVR-specific configure option
   10658        --with-avrlibc=yes in order to arrange for better integration of
   10659        [43]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
   10660        and newer and will only take effect in non-RTEMS configurations. If
   10661        avr-gcc is configured for RTEMS, the option will be ignored which
   10662        is the same as specifying --with-avrlibc=no. See [44]PR54461 for
   10663        more technical details.
   10664      * Support for AVR-specific [45]built-in functions has been added.
   10665      * Support has been added for the signed and unsigned 24-bit scalar
   10666        integer types __int24 and __uint24.
   10667      * New command-line options -maccumulate-args, -mbranch-cost=cost and
   10668        -mstrict-X were added to allow better fine-tuning of code
   10669        optimization.
   10670      * The command-line option -fdata-sections now also takes affect on
   10671        the section names of variables with the progmem attribute.
   10672      * A new inline assembler print modifier %i to print a RAM address as
   10673        I/O address has been added:
   10674 
   10675 #include <avr/io.h> /* Port Definitions from AVR-LibC */
   10676 
   10677 void set_portb (uint8_t value)
   10678 {
   10679     asm volatile ("out %i0, %1" :: "n" (&PORTB), "r" (value) : "memory");
   10680 }
   10681 
   10682        The offset between an I/O address and the RAM address for that I/O
   10683        location is device-specific. This offset is taken into account when
   10684        printing a RAM address with the %i modifier so that the address is
   10685        suitable to be used as operand in an I/O command. The address must
   10686        be a constant integer known at compile time.
   10687      * The inline assembler constraint "R" to represent integers in the
   10688        range -6 ... 5 has been removed without replacement.
   10689      * Many optimizations to:
   10690           + 64-bit integer arithmetic
   10691           + Widening multiplication
   10692           + Integer division by a constant
   10693           + Avoid constant reloading in multi-byte instructions.
   10694           + Micro-optimizations for special instruction sequences.
   10695           + Generic built-in functions like __builtin_ffs*,
   10696             __builtin_clz*, etc.
   10697           + If-else decision trees generated by switch instructions
   10698           + Merging of data located in flash memory
   10699           + New libgcc variants for devices with 8-bit wide stack pointer
   10700           + ...
   10701      * Better documentation:
   10702           + Handling of EIND and indirect jumps on devices with more than
   10703             128 KiB of program memory.
   10704           + Handling of the RAMPD, RAMPX, RAMPY and RAMPZ special function
   10705             registers.
   10706           + Function attributes OS_main and OS_task.
   10707           + AVR-specific built-in macros.
   10708 
   10709   C6X
   10710 
   10711      * Support has been added for the Texas Instruments C6X family of
   10712        processors.
   10713 
   10714   CR16
   10715 
   10716      * Support has been added for National Semiconductor's CR16
   10717        architecture.
   10718 
   10719   Epiphany
   10720 
   10721      * Support has been added for Adapteva's Epiphany architecture.
   10722 
   10723   IA-32/x86-64
   10724 
   10725      * Support for Intel AVX2 intrinsics, built-in functions and code
   10726        generation is available via -mavx2.
   10727      * Support for Intel BMI2 intrinsics, built-in functions and code
   10728        generation is available via -mbmi2.
   10729      * Implementation and automatic generation of __builtin_clz* using the
   10730        lzcnt instruction is available via -mlzcnt.
   10731      * Support for Intel FMA3 intrinsics and code generation is available
   10732        via -mfma.
   10733      * A new -mfsgsbase command-line option is available that makes GCC
   10734        generate new segment register read/write instructions through
   10735        dedicated built-ins.
   10736      * Support for the new Intel rdrnd instruction is available via
   10737        -mrdrnd.
   10738      * Two additional AVX vector conversion instructions are available via
   10739        -mf16c.
   10740      * Support for new Intel processor codename IvyBridge with RDRND,
   10741        FSGSBASE and F16C is available through -march=core-avx-i.
   10742      * Support for the new Intel processor codename Haswell with AVX2,
   10743        FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
   10744      * Support for new AMD family 15h processors (Piledriver core) is now
   10745        available through -march=bdver2 and -mtune=bdver2 options.
   10746      * Support for [46]the x32 psABI is now available through the -mx32
   10747        option.
   10748      * Windows mingw targets are using the -mms-bitfields option by
   10749        default.
   10750      * Windows x86 targets are using the __thiscall calling convention for
   10751        C++ class-member functions.
   10752      * Support for the configure option --with-threads=posix for Windows
   10753        mingw targets.
   10754 
   10755   [47]MIPS
   10756 
   10757      * GCC now supports thread-local storage (TLS) for MIPS16. This
   10758        requires GNU binutils 2.22 or later.
   10759      * GCC can now generate code specifically for the Cavium Octeon+ and
   10760        Octeon2 processors. The associated command-line options are
   10761        -march=octeon+ and -march=octeon2 respectively. Both options
   10762        require GNU binutils 2.22 or later.
   10763      * GCC can now work around certain 24k errata, under the control of
   10764        the command-line option -mfix-24k. These workarounds require GNU
   10765        binutils 2.20 or later.
   10766      * 32-bit MIPS GNU/Linux targets such as mips-linux-gnu can now build
   10767        n32 and n64 multilibs. The result is effectively a 64-bit GNU/Linux
   10768        toolchain that generates 32-bit code by default. Use the
   10769        configure-time option --enable-targets=all to select these extra
   10770        multilibs.
   10771      * Passing -fno-delayed-branch now also stops the assembler from
   10772        automatically filling delay slots.
   10773 
   10774   PowerPC/PowerPC64
   10775 
   10776      * Vectors of type vector long long or vector long are passed and
   10777        returned using the same method as other vectors with the VSX
   10778        instruction set. Previously GCC did not adhere to the ABI for
   10779        128-bit vectors with 64-bit integer base types (PR 48857). This
   10780        will also be fixed in the GCC 4.6.1 and 4.5.4 releases.
   10781      * A new option -mno-pointers-to-nested-functions was added to allow
   10782        AIX 32-bit/64-bit and GNU/Linux 64-bit PowerPC users to specify
   10783        that the compiler should not load up the chain register (r11)
   10784        before calling a function through a pointer. If you use this
   10785        option, you cannot call nested functions through a pointer, or call
   10786        other languages that might use the static chain.
   10787      * A new option msave-toc-indirect was added to allow AIX
   10788        32-bit/64-bit and GNU/Linux 64-bit PowerPC users control whether we
   10789        save the TOC in the prologue for indirect calls or generate the
   10790        save inline. This can speed up some programs that call through a
   10791        function pointer a lot, but it can slow down other functions that
   10792        only call through a function pointer in exceptional cases.
   10793      * The PowerPC port will now enable machine-specific built-in
   10794        functions when the user switches the target machine using the
   10795        #pragma GCC target or __attribute__ ((__target__ ("target"))) code
   10796        sequences. In addition, the target macros are updated. However, due
   10797        to the way the -save-temps switch is implemented, you won't see the
   10798        effect of these additional macros being defined in preprocessor
   10799        output.
   10800 
   10801   SH
   10802 
   10803      * A new option -msoft-atomic has been added. When it is specified,
   10804        GCC will generate GNU/Linux-compatible gUSA atomic sequences for
   10805        the new __atomic routines.
   10806      * Since it is neither supported by GAS nor officially documented,
   10807        code generation for little endian SH2A has been disabled.
   10808        Specifying -ml with -m2a* will now result in a compiler error.
   10809      * The defunct -mbranch-cost option has been fixed.
   10810      * Some improvements to the generated code of:
   10811           + Utilization of the tst #imm,R0 instruction.
   10812           + Dynamic shift instructions on SH2A.
   10813           + Integer absolute value calculations.
   10814      * The -mdiv= option for targets other than SHmedia has been fixed and
   10815        documented.
   10816 
   10817   SPARC
   10818 
   10819      * The option -mflat has been reinstated. When it is specified, the
   10820        compiler will generate code for a single register window model.
   10821        This is essentially a new implementation and the corresponding
   10822        debugger support has been added to GDB 7.4.
   10823      * Support for the options -mtune=native and -mcpu=native has been
   10824        added on selected native platforms (GNU/Linux and Solaris).
   10825      * Support for the SPARC T3 (Niagara 3) processor has been added.
   10826      * VIS:
   10827           + An intrinsics header visintrin.h has been added.
   10828           + Builtin intrinsics for the VIS 1.0 edge handling and pixel
   10829             compare instructions have been added.
   10830           + The little-endian version of alignaddr is now supported.
   10831           + When possible, VIS builtins are marked const, which should
   10832             increase the compiler's ability to optimize VIS operations.
   10833           + The compiler now properly tracks the %gsr register and how it
   10834             behaves as an input for various VIS instructions.
   10835           + Akin to fzero, the compiler can now generate fone instructions
   10836             in order to set all of the bits of a floating-point register
   10837             to 1.
   10838           + The documentation for the VIS intrinsics in the GCC manual has
   10839             been brought up to date and many inaccuracies were fixed.
   10840           + Intrinsics for the VIS 2.0 bmask, bshuffle, and
   10841             non-condition-code setting edge instructions have been added.
   10842             Their availability is controlled by the new -mvis2 and
   10843             -mno-vis2 options. They are enabled by default on
   10844             UltraSPARC-III and later CPUs.
   10845      * Support for UltraSPARC Fused Multiply-Add floating-point extensions
   10846        has been added. These instructions are enabled by default on SPARC
   10847        T3 (Niagara 3) and later CPUs.
   10848 
   10849   TILE-Gx/TILEPro
   10850 
   10851      * Support has been added for the Tilera TILE-Gx and TILEPro families
   10852        of processors.
   10853 
   10854 Other significant improvements
   10855 
   10856      * A new option (-grecord-gcc-switches) was added that appends
   10857        compiler command-line options that might affect code generation to
   10858        the DW_AT_producer attribute string in the DWARF debugging
   10859        information.
   10860      * GCC now supports various new GNU extensions to the DWARF debugging
   10861        information format, like [48]entry value and [49]call site
   10862        information, [50]typed DWARF stack or [51]a more compact macro
   10863        representation. Support for these extensions has been added to GDB
   10864        7.4. They can be disabled through the -gstrict-dwarf command-line
   10865        option.
   10866 
   10867 [52]GCC 4.7.1
   10868 
   10869    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   10870    system that are known to be fixed in the 4.7.1 release. This list might
   10871    not be complete (that is, it is possible that some PRs that have been
   10872    fixed are not listed here).
   10873 
   10874    The Go front end in the 4.7.1 release fully supports the [54]Go 1
   10875    language standard.
   10876 
   10877 [55]GCC 4.7.2
   10878 
   10879    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   10880    system that are known to be fixed in the 4.7.2 release. This list might
   10881    not be complete (that is, it is possible that some PRs that have been
   10882    fixed are not listed here).
   10883 
   10884 [57]GCC 4.7.3
   10885 
   10886    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   10887    system that are known to be fixed in the 4.7.3 release. This list might
   10888    not be complete (that is, it is possible that some PRs that have been
   10889    fixed are not listed here).
   10890 
   10891 [59]GCC 4.7.4
   10892 
   10893    This is the [60]list of problem reports (PRs) from GCC's bug tracking
   10894    system that are known to be fixed in the 4.7.4 release. This list might
   10895    not be complete (that is, it is possible that some PRs that have been
   10896    fixed are not listed here).
   10897 
   10898 
   10899     For questions related to the use of GCC, please consult these web
   10900     pages and the [61]GCC manuals. If that fails, the
   10901     [62]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10902     web pages and the development of GCC are welcome on our developer
   10903     list at [63]gcc (a] gcc.gnu.org. All of [64]our lists have public
   10904     archives.
   10905 
   10906    Copyright (C) [65]Free Software Foundation, Inc. Verbatim copying and
   10907    distribution of this entire article is permitted in any medium,
   10908    provided this notice is preserved.
   10909 
   10910    These pages are [66]maintained by the GCC team. Last modified
   10911    2025-06-10.
   10912 
   10913 References
   10914 
   10915    1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
   10916    2. https://gcc.gnu.org/gcc-4.7/porting_to.html
   10917    3. https://gcc.gnu.org/wiki/TransactionalMemory
   10918    4. https://gcc.gnu.org/wiki/Atomic/GCCMM
   10919    5. https://gcc.gnu.org/gcc-4.7/changes.html#c
   10920    6. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
   10921    7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10922    8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10923    9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10924   10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10925   11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10926   12. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10927   13. https://gcc.gnu.org/PR14258
   10928   14. https://gcc.gnu.org/PR35688
   10929   15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
   10930   16. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
   10931   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   10932   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
   10933   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
   10934   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   10935   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
   10936   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
   10937   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
   10938   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
   10939   25. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
   10940   26. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
   10941   27. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
   10942   28. https://gcc.gnu.org/wiki/Fortran2003Status
   10943   29. https://gcc.gnu.org/wiki/OOP
   10944   30. https://gcc.gnu.org/wiki/Fortran2008Status
   10945   31. https://gcc.gnu.org/wiki/Coarray
   10946   32. https://gcc.gnu.org/wiki/CoarrayLib
   10947   33. https://gcc.gnu.org/wiki/TS29113Status
   10948   34. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
   10949   35. https://gcc.gnu.org/gcc-4.7/changes.html#go
   10950   36. https://go.dev/doc/go1
   10951   37. https://gcc.gnu.org/gcc-4.7/changes.html#targets
   10952   38. https://gcc.gnu.org/gcc-4.7/changes.html#arm
   10953   39. https://gcc.gnu.org/gcc-4.7/changes.html#avr
   10954   40. http://savannah.nongnu.org/bugs/?35407
   10955   41. https://gcc.gnu.org/PR18145
   10956   42. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
   10957   43. http://www.nongnu.org/avr-libc/
   10958   44. https://gcc.gnu.org/PR54461
   10959   45. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
   10960   46. https://sites.google.com/site/x32abi/
   10961   47. https://gcc.gnu.org/gcc-4.7/changes.html#mips
   10962   48. https://dwarfstd.org/issues/100909.1.html
   10963   49. https://dwarfstd.org/issues/100909.2.html
   10964   50. https://dwarfstd.org/issues/140425.1.html
   10965   51. https://dwarfstd.org/issues/110722.1.html
   10966   52. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
   10967   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
   10968   54. https://go.dev/doc/go1
   10969   55. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
   10970   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
   10971   57. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
   10972   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
   10973   59. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
   10974   60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
   10975   61. https://gcc.gnu.org/onlinedocs/
   10976   62. mailto:gcc-help (a] gcc.gnu.org
   10977   63. mailto:gcc (a] gcc.gnu.org
   10978   64. https://gcc.gnu.org/lists.html
   10979   65. https://www.fsf.org/
   10980   66. https://gcc.gnu.org/about.html
   10981 ======================================================================
   10982 http://gcc.gnu.org/gcc-4.6/index.html
   10983 
   10984                              GCC 4.6 Release Series
   10985 
   10986    (This release series is no longer supported.)
   10987 
   10988    April 12, 2013
   10989 
   10990    The [1]GNU project and the GCC developers are pleased to announce the
   10991    release of GCC 4.6.4.
   10992 
   10993    This release is a bug-fix release, containing fixes for regressions in
   10994    GCC 4.6.3 relative to previous releases of GCC.
   10995 
   10996 Release History
   10997 
   10998    GCC 4.6.4
   10999           April 12, 2013 ([2]changes, [3]documentation)
   11000 
   11001    GCC 4.6.3
   11002           March 1, 2012 ([4]changes, [5]documentation)
   11003 
   11004    GCC 4.6.2
   11005           October 26, 2011 ([6]changes, [7]documentation)
   11006 
   11007    GCC 4.6.1
   11008           June 27, 2011 ([8]changes, [9]documentation)
   11009 
   11010    GCC 4.6.0
   11011           March 25, 2011 ([10]changes, [11]documentation)
   11012 
   11013 References and Acknowledgements
   11014 
   11015    GCC used to stand for the GNU C Compiler, but since the compiler
   11016    supports several other languages aside from C, it now stands for the
   11017    GNU Compiler Collection.
   11018 
   11019    A list of [12]successful builds is updated as new information becomes
   11020    available.
   11021 
   11022    The GCC developers would like to thank the numerous people that have
   11023    contributed new features, improvements, bug fixes, and other changes as
   11024    well as test results to GCC. This [13]amazing group of volunteers is
   11025    what makes GCC successful.
   11026 
   11027    For additional information about GCC please refer to the [14]GCC
   11028    project web site or contact the [15]GCC development mailing list.
   11029 
   11030    To obtain GCC please use [16]our mirror sites or [17]our version
   11031    control system.
   11032 
   11033 
   11034     For questions related to the use of GCC, please consult these web
   11035     pages and the [18]GCC manuals. If that fails, the
   11036     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11037     web pages and the development of GCC are welcome on our developer
   11038     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   11039     archives.
   11040 
   11041    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   11042    distribution of this entire article is permitted in any medium,
   11043    provided this notice is preserved.
   11044 
   11045    These pages are [23]maintained by the GCC team. Last modified
   11046    2022-10-26.
   11047 
   11048 References
   11049 
   11050    1. http://www.gnu.org/
   11051    2. https://gcc.gnu.org/gcc-4.6/changes.html
   11052    3. https://gcc.gnu.org/onlinedocs/4.6.4/
   11053    4. https://gcc.gnu.org/gcc-4.6/changes.html
   11054    5. https://gcc.gnu.org/onlinedocs/4.6.3/
   11055    6. https://gcc.gnu.org/gcc-4.6/changes.html
   11056    7. https://gcc.gnu.org/onlinedocs/4.6.2/
   11057    8. https://gcc.gnu.org/gcc-4.6/changes.html
   11058    9. https://gcc.gnu.org/onlinedocs/4.6.1/
   11059   10. https://gcc.gnu.org/gcc-4.6/changes.html
   11060   11. https://gcc.gnu.org/onlinedocs/4.6.0/
   11061   12. https://gcc.gnu.org/gcc-4.6/buildstat.html
   11062   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   11063   14. https://gcc.gnu.org/index.html
   11064   15. mailto:gcc (a] gcc.gnu.org
   11065   16. https://gcc.gnu.org/mirrors.html
   11066   17. https://gcc.gnu.org/git.html
   11067   18. https://gcc.gnu.org/onlinedocs/
   11068   19. mailto:gcc-help (a] gcc.gnu.org
   11069   20. mailto:gcc (a] gcc.gnu.org
   11070   21. https://gcc.gnu.org/lists.html
   11071   22. https://www.fsf.org/
   11072   23. https://gcc.gnu.org/about.html
   11073 ======================================================================
   11074 http://gcc.gnu.org/gcc-4.6/changes.html
   11075 
   11076                              GCC 4.6 Release Series
   11077                         Changes, New Features, and Fixes
   11078 
   11079 Caveats
   11080 
   11081      * The options -b <machine> and -V <version> have been removed because
   11082        they were unreliable. Instead, users should directly run
   11083        <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to
   11084        run a different version of gcc.
   11085      * GCC now has stricter checks for invalid command-line options. In
   11086        particular, when gcc was called to link object files rather than
   11087        compile source code, it would previously accept and ignore all
   11088        options starting with --, including linker options such as
   11089        --as-needed and --export-dynamic, although such options would
   11090        result in errors if any source code was compiled. Such options, if
   11091        unknown to the compiler, are now rejected in all cases; if the
   11092        intent was to pass them to the linker, options such as
   11093        -Wl,--as-needed should be used.
   11094      * Versions of the GNU C library up to and including 2.11.1 included
   11095        an [1]incorrect implementation of the cproj function. GCC optimizes
   11096        its builtin cproj according to the behavior specified and allowed
   11097        by the ISO C99 standard. If you want to avoid discrepancies between
   11098        the C library and GCC's builtin transformations when using cproj in
   11099        your code, use GLIBC 2.12 or later. If you are using an older GLIBC
   11100        and actually rely on the incorrect behavior of cproj, then you can
   11101        disable GCC's transformations using -fno-builtin-cproj.
   11102      * The C-only intermodule optimization framework (IMA, enabled by
   11103        -combine) has been removed in favor of the new generic link-time
   11104        optimization framework (LTO) introduced in [2]GCC 4.5.0.
   11105      * GCC now ships with the LGPL-licensed libquadmath library, which
   11106        provides quad-precision mathematical functions for targets with a
   11107        __float128 datatype. __float128 is available for targets on 32-bit
   11108        x86, x86-64 and Itanium architectures. The libquadmath library is
   11109        automatically built on such targets when building the Fortran
   11110        compiler.
   11111      * New -Wunused-but-set-variable and -Wunused-but-set-parameter
   11112        warnings were added for C, C++, Objective-C and Objective-C++.
   11113        These warnings diagnose variables respective parameters which are
   11114        only set in the code and never otherwise used. Usually such
   11115        variables are useless and often even the value assigned to them is
   11116        computed needlessly, sometimes expensively. The
   11117        -Wunused-but-set-variable warning is enabled by default by -Wall
   11118        flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
   11119      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   11120        rules for the layout of vectors that could lead to wrong code being
   11121        generated. Vectors larger than 8 bytes in size are now by default
   11122        aligned to an 8-byte boundary. This is an ABI change: code that
   11123        makes explicit use of vector types may be incompatible with binary
   11124        objects built with older versions of GCC. Auto-vectorized code is
   11125        not affected by this change. (This change affects GCC versions
   11126        4.6.4 and later, with the exception of versions 4.7.0 and 4.7.1.)
   11127      * On AVR, variables with the progmem attribute to locate data in
   11128        flash memory must be qualified as const.
   11129      * Support for a number of older systems and recently unmaintained or
   11130        untested target ports of GCC has been declared obsolete in GCC 4.6.
   11131        Unless there is activity to revive them, the next release of GCC
   11132        will have their sources permanently removed.
   11133        All GCC ports for the following processor architectures have been
   11134        declared obsolete:
   11135           + Argonaut ARC (arc-*)
   11136           + National Semiconductor CRX (crx-*)
   11137           + Motorola 68HC11 and 68HC12 (m68hc11-*-*, m6811-*-*,
   11138             m68hc12-*-*, m6812-*-*)
   11139           + Sunplus S+core (score-*)
   11140        The following ports for individual systems on particular
   11141        architectures have been obsoleted:
   11142           + Interix (i[34567]86-*-interix3*)
   11143           + NetWare x86 (i[3456x]86-*-netware*)
   11144           + Generic ARM PE (arm-*-pe* other than arm*-wince-pe*)
   11145           + MCore PE (mcore-*-pe*)
   11146           + SH SymbianOS (sh*-*-symbianelf*)
   11147           + GNU Hurd on Alpha and PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
   11148           + M68K uClinux old ABI (m68k-*-uclinuxoldabi*)
   11149           + a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*,
   11150             vax-*-netbsd*, but not *-*-netbsdelf*)
   11151        The i[34567]86-*-pe alias for Cygwin targets has also been
   11152        obsoleted; users should configure for i[34567]86-*-cygwin* instead.
   11153        Certain configure options to control the set of libraries built
   11154        with GCC on some targets have been obsoleted. On ARM targets, the
   11155        options --disable-fpu, --disable-26bit, --disable-underscore,
   11156        --disable-interwork, --disable-biendian and --disable-nofmult have
   11157        been obsoleted. On MIPS targets, the options
   11158        --disable-single-float, --disable-biendian and --disable-softfloat
   11159        have been obsoleted.
   11160      * Support has been removed for all the [3]configurations obsoleted in
   11161        GCC 4.5.
   11162      * More information on porting to GCC 4.6 from previous versions of
   11163        GCC can be found in the [4]porting guide for this release.
   11164 
   11165 General Optimizer Improvements
   11166 
   11167      * A new general optimization level, -Ofast, has been introduced. It
   11168        combines the existing optimization level -O3 with options that can
   11169        affect standards compliance but result in better optimized code.
   11170        For example, -Ofast enables -ffast-math.
   11171      * Link-time optimization improvements:
   11172           + The [5]Scalable Whole Program Optimizer (WHOPR) project has
   11173             stabilized to the point of being usable. It has become the
   11174             default mode when using the LTO optimization model. Link time
   11175             optimization can now split itself into multiple parallel
   11176             compilations. Parallelism is controlled with -flto=n (where n
   11177             specifies the number of compilations to execute in parallel).
   11178             GCC can also cooperate with a GNU make job server by
   11179             specifying the -flto=jobserver option and adding + to the
   11180             beginning of the Makefile rule executing the linker.
   11181             Classical LTO mode can be enforced by -flto-partition=none.
   11182             This may result in small code quality improvements.
   11183           + A large number of bugs were fixed. GCC itself, Mozilla Firefox
   11184             and other large applications can be built with LTO enabled.
   11185           + The linker plugin support improvements
   11186                o Linker plugin is now enabled by default when the linker
   11187                  is detected to have plugin support. This is the case for
   11188                  GNU ld 2.21.51 or newer (on ELF and Cygwin targets) and
   11189                  the Gold linker on ELF targets. Plugin support of the
   11190                  Apple linker on Darwin is not compatible with GCC. The
   11191                  linker plugin can also be controlled by the
   11192                  -fuse-linker-plugin command-line option.
   11193                o Resolution information from the linker plugin is used to
   11194                  drive whole program assumptions. Use of the linker plugin
   11195                  results in more aggressive optimization on binaries and
   11196                  on shared libraries that use the hidden visibility
   11197                  attribute. Consequently the use of -fwhole-program is not
   11198                  necessary in addition to LTO.
   11199           + Hidden symbols used from non-LTO objects now have to be
   11200             explicitly annotated with externally_visible when the linker
   11201             plugin is not used.
   11202           + C++ inline functions and virtual tables are now privatized
   11203             more aggressively, leading to better inter-procedural
   11204             optimization and faster dynamic linking.
   11205           + Memory usage and intermediate language streaming performance
   11206             have been improved.
   11207           + Static constructors and destructors from individual units are
   11208             inlined into a single function. This can significantly improve
   11209             startup times of large C++ applications where static
   11210             constructors are very common. For example, static constructors
   11211             are used when including the iostream header.
   11212           + Support for the Ada language has been added.
   11213      * Interprocedural optimization improvements
   11214           + The interprocedural framework was re-tuned for link time
   11215             optimization. Several scalability issues were resolved.
   11216           + Improved auto-detection of const and pure functions. Newly,
   11217             noreturn functions are auto-detected.
   11218             The [6]-Wsuggest-attribute=[const|pure|noreturn] flag is
   11219             available that informs users when adding attributes to headers
   11220             might improve code generation.
   11221           + A number of inlining heuristic improvements. In particular:
   11222                o Partial inlining is now supported and enabled by default
   11223                  at -O2 and greater. The feature can be controlled via
   11224                  -fpartial-inlining.
   11225                  Partial inlining splits functions with short hot path to
   11226                  return. This allows more aggressive inlining of the hot
   11227                  path leading to better performance and often to code size
   11228                  reductions (because cold parts of functions are not
   11229                  duplicated).
   11230                o Scalability for large compilation units was improved
   11231                  significantly.
   11232                o Inlining of callbacks is now more aggressive.
   11233                o Virtual methods are considered for inlining when the
   11234                  caller is inlined and devirtualization is then possible.
   11235                o Inlining when optimizing for size (either in cold regions
   11236                  of a program or when compiling with -Os) was improved to
   11237                  better handle C++ programs with larger abstraction
   11238                  penalty, leading to smaller and faster code.
   11239           + The IPA reference optimization pass detecting global variables
   11240             used or modified by functions was strengthened and sped up.
   11241           + Functions whose address was taken are now optimized out when
   11242             all references to them are dead.
   11243           + A new inter-procedural static profile estimation pass detects
   11244             functions that are executed once or unlikely to be executed.
   11245             Unlikely executed functions are optimized for size. Functions
   11246             executed once are optimized for size except for the inner
   11247             loops.
   11248           + On most targets with named section support, functions used
   11249             only at startup (static constructors and main), functions used
   11250             only at exit and functions detected to be cold are placed into
   11251             separate text segment subsections. This extends the
   11252             -freorder-functions feature and is controlled by the same
   11253             switch. The goal is to improve the startup time of large C++
   11254             programs.
   11255             Proper function placement requires linker support. GNU ld
   11256             2.21.51 on ELF targets was updated to place those functions
   11257             together within the text section leading to better code
   11258             locality and faster startup times of large C++ programs. The
   11259             feature is also supported in the Apple linker. Support in the
   11260             gold linker is planned.
   11261      * A new switch -fstack-usage has been added. It makes the compiler
   11262        output stack usage information for the program, on a per-function
   11263        basis, in an auxiliary file.
   11264      * A new switch -fcombine-stack-adjustments has been added. It can be
   11265        used to enable or disable the compiler's stack-slot combining pass
   11266        which before was enabled automatically at -O1 and above, but could
   11267        not be controlled on its own.
   11268      * A new switch -fstrict-volatile-bitfields has been added. Using it
   11269        indicates that accesses to volatile bitfields should use a single
   11270        access of the width of the field's type. This option can be useful
   11271        for precisely defining and accessing memory-mapped peripheral
   11272        registers from C or C++.
   11273 
   11274 Compile time and memory usage improvements
   11275 
   11276      * Datastructures used by the dataflow framework in GCC were
   11277        reorganized for better memory usage and more cache locality.
   11278        Compile time is improved especially on units with large functions
   11279        (possibly resulting from a lot of inlining) not fitting into the
   11280        processor cache. The compile time of the GCC C compiler binary with
   11281        link-time optimization went down by over 10% (benchmarked on x86-64
   11282        target).
   11283 
   11284 New Languages and Language specific improvements
   11285 
   11286   Ada
   11287 
   11288      * Stack checking has been improved on selected architectures (Alpha,
   11289        IA-32/x86-64, RS/6000 and SPARC): it now will detect stack
   11290        overflows in all cases on these architectures.
   11291      * Initial support for Ada 2012 has been added.
   11292 
   11293   C family
   11294 
   11295      * A new warning, enabled by -Wdouble-promotion, has been added that
   11296        warns about cases where a value of type float is implicitly
   11297        promoted to double. This is especially helpful for CPUs that handle
   11298        the former in hardware, but emulate the latter in software.
   11299      * A new function attribute leaf was introduced. This attribute allows
   11300        better inter-procedural optimization across calls to functions that
   11301        return to the current unit only via returning or exception
   11302        handling. This is the case for most library functions that have no
   11303        callbacks.
   11304      * Support for a new data type __int128 for targets having wide enough
   11305        machine-mode support.
   11306      * The new function attribute callee_pop_aggregate allows to specify
   11307        if the caller or callee is responsible for popping the aggregate
   11308        return pointer value from the stack.
   11309      * Support for selectively enabling and disabling warnings via #pragma
   11310        GCC diagnostic has been added. For instance:
   11311 #pragma GCC diagnostic error "-Wuninitialized"
   11312   foo(a);                       /* error is given for this one */
   11313 #pragma GCC diagnostic push
   11314 #pragma GCC diagnostic ignored "-Wuninitialized"
   11315   foo(b);                       /* no diagnostic for this one */
   11316 #pragma GCC diagnostic pop
   11317   foo(c);                       /* error is given for this one */
   11318 #pragma GCC diagnostic pop
   11319   foo(d);                       /* depends on command-line options */
   11320 
   11321      * The -fmax-errors=N option is now supported. Using this option
   11322        causes the compiler to exit after N errors have been issued.
   11323 
   11324   [7]C
   11325 
   11326      * There is now experimental support for some features from the
   11327        upcoming C1X revision of the ISO C standard. This support may be
   11328        selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
   11329        Note that this support is experimental and may change incompatibly
   11330        in future releases for consistency with changes to the C1X standard
   11331        draft. The following features are newly supported as described in
   11332        the N1539 draft of C1X (with changes agreed at the March 2011 WG14
   11333        meeting); some other features were already supported with no
   11334        compiler changes being needed, or have some support but not in full
   11335        accord with N1539 (as amended).
   11336           + Static assertions (_Static_assert keyword)
   11337           + Typedef redefinition
   11338           + New macros in <float.h>
   11339           + Anonymous structures and unions
   11340      * The new -fplan9-extensions option directs the compiler to support
   11341        some extensions for anonymous struct fields which are implemented
   11342        by the Plan 9 compiler. A pointer to a struct may be automatically
   11343        converted to a pointer to an anonymous field when calling a
   11344        function, in order to make the types match. An anonymous struct
   11345        field whose type is a typedef name may be referred to using the
   11346        typedef name.
   11347 
   11348   [8]C++
   11349 
   11350      * Improved [9]experimental support for the upcoming C++0x ISO C++
   11351        standard, including support for constexpr (thanks to Gabriel Dos
   11352        Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
   11353        noexcept, unrestricted unions, range-based for loops (thanks to
   11354        Rodrigo Rivas Costa), opaque enum declarations (thanks also to
   11355        Rodrigo), implicitly deleted functions and implicit move
   11356        constructors.
   11357      * When an extern declaration within a function does not match a
   11358        declaration in the enclosing context, G++ now properly declares the
   11359        name within the namespace of the function rather than the namespace
   11360        which was open just before the function definition ([10]c++/43145).
   11361      * GCC now warns by default when casting integers to larger pointer
   11362        types. These warnings can be disabled with the option
   11363        -Wno-int-to-pointer-cast, which is now also available in C++.
   11364      * G++ no longer optimizes using the assumption that a value of
   11365        enumeration type will fall within the range specified by the
   11366        standard, since that assumption is easily violated with a
   11367        conversion from integer type ([11]c++/43680). The old behavior can
   11368        be restored with -fstrict-enums.
   11369      * The new -fnothrow-opt flag changes the semantics of a throw()
   11370        exception specification to match the proposed semantics of the
   11371        noexcept specification: just call terminate if an exception tries
   11372        to propagate out of a function with such an exception
   11373        specification. This dramatically reduces or eliminates the code
   11374        size overhead from adding the exception specification.
   11375      * The new -Wnoexcept flag will suggest adding a noexcept qualifier to
   11376        a function that the compiler can tell doesn't throw if it would
   11377        change the value of a noexcept expression.
   11378      * The -Wshadow option now warns if a local variable or type
   11379        declaration shadows another type in C++. Note that the compiler
   11380        will not warn if a local variable shadows a struct/class/enum, but
   11381        will warn if it shadows an explicit typedef.
   11382      * When an identifier is not found in the current scope, G++ now
   11383        offers suggestions about which identifier might have been intended.
   11384      * G++ now issues clearer diagnostics for missing semicolons after
   11385        class, struct, and union definitions.
   11386      * G++ now issues clearer diagnostics for missing semicolons after
   11387        class member declarations.
   11388      * G++ now issues clearer diagnostics when a colon is used in a place
   11389        where a double-colon was intended.
   11390      * G++ no longer accepts mutable on reference members ([12]c++/33558).
   11391        Use -fpermissive to allow the old, non-conforming behaviour.
   11392      * A few mangling fixes have been made, to attribute const/volatile on
   11393        function pointer types, decltype of a plain decl, and use of a
   11394        function parameter in the declaration of another parameter. By
   11395        default the compiler still uses the old mangling, but emits aliases
   11396        with the new mangling on targets that support strong aliases. Users
   11397        can switch over entirely to the new mangling with -fabi-version=5
   11398        or -fabi-version=0. -Wabi will now warn about code that uses the
   11399        old mangling.
   11400      * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
   11401        type to be default initialized unless the type has a user-declared
   11402        default constructor. In 4.6.2 G++ implements the proposed
   11403        resolution of [13]DR 253, so default initialization is allowed if
   11404        it initializes all subobjects. Code that fails to compile can be
   11405        fixed by providing an initializer e.g.
   11406     struct A { A(); };
   11407     struct B : A { int i; };
   11408     const B b = B();
   11409        Use -fpermissive to allow the old, non-conforming behaviour.
   11410 
   11411     Runtime Library (libstdc++)
   11412 
   11413      * [14]Improved experimental support for the upcoming ISO C++
   11414        standard, C++0x, including using constexpr and nullptr.
   11415      * Performance improvements to the [15]Debug Mode, thanks to Franois
   11416        Dumont.
   11417      * Atomic operations used for reference-counting are annotated so that
   11418        they can be understood by race detectors such as Helgrind, see
   11419        [16]Data Race Hunting.
   11420      * Most libstdc++ standard headers have been changed to no longer
   11421        include the cstddef header as an implementation detail. Code that
   11422        relied on that header being included as side-effect of including
   11423        other standard headers will need to include cstddef explicitly.
   11424 
   11425   [17]Fortran
   11426 
   11427      * On systems supporting the libquadmath library, GNU Fortran now also
   11428        supports a quad-precision, kind=16 floating-point data type
   11429        (REAL(16), COMPLEX(16)). As the data type is not fully supported in
   11430        hardware, calculations might be one to two orders of magnitude
   11431        slower than with the 4, 8 or 10 bytes floating-point data types.
   11432        This change does not affect systems which support REAL(16) in
   11433        hardware nor those which do not support libquadmath.
   11434      * Much improved compile time for large array constructors.
   11435      * In order to reduce execution time and memory consumption, use of
   11436        temporary arrays in assignment expressions is avoided for many
   11437        cases. The compiler now reverses loops in order to avoid generating
   11438        a temporary array where possible.
   11439      * Improved diagnostics, especially with -fwhole-file.
   11440      * The -fwhole-file flag is now enabled by default. This improves code
   11441        generation and diagnostics. It can be disabled using the deprecated
   11442        -fno-whole-file flag.
   11443      * Support the generation of Makefile dependencies via the [18]-M...
   11444        flags of GCC; you may need to specify the -cpp option in addition.
   11445        The dependencies take modules, Fortran's include, and CPP's
   11446        #include into account. Note: Using -M for the module path is no
   11447        longer supported, use -J instead.
   11448      * The flag -Wconversion has been modified to only issue warnings
   11449        where a conversion leads to information loss. This drastically
   11450        reduces the number of warnings; -Wconversion is thus now enabled
   11451        with -Wall. The flag -Wconversion-extra has been added and also
   11452        warns about other conversions; -Wconversion-extra typically issues
   11453        a huge number of warnings, most of which can be ignored.
   11454      * A new command-line option -Wunused-dummy-argument warns about
   11455        unused dummy arguments and is included in -Wall. Before,
   11456        -Wunused-variable also warned about unused dummy arguments.
   11457      * Fortran 2003 support has been extended:
   11458           + Improved support for polymorphism between libraries and
   11459             programs and for complicated inheritance patterns (cf.
   11460             [19]object-oriented programming).
   11461           + Experimental support of the ASSOCIATE construct.
   11462           + In pointer assignments it is now possible to specify the lower
   11463             bounds of the pointer and, for a rank-1 or a simply contiguous
   11464             data-target, to remap the bounds.
   11465           + Automatic (re)allocation: In intrinsic assignments to
   11466             allocatable variables the left-hand side will be automatically
   11467             allocated (if unallocated) or reallocated (if the shape or
   11468             type parameter is different). To avoid the small performance
   11469             penalty, you can use a(:) = ... instead of a = ... for arrays
   11470             and character strings - or disable the feature using -std=f95
   11471             or -fno-realloc-lhs.
   11472           + Deferred type parameter: For scalar allocatable and pointer
   11473             variables the character length can be deferred.
   11474           + Namelist variables with allocatable and pointer attribute and
   11475             nonconstant length type parameter are supported.
   11476      * Fortran 2008 support has been extended:
   11477           + Experimental [20]coarray support (for one image only, i.e.
   11478             num_images() == 1); use the [21]-fcoarray=single flag to
   11479             enable it.
   11480           + The STOP and the new ERROR STOP statements now support all
   11481             constant expressions.
   11482           + Support for the CONTIGUOUS attribute.
   11483           + Support for ALLOCATE with MOLD.
   11484           + Support for the STORAGE_SIZE intrinsic inquiry function.
   11485           + Support of the NORM2 and PARITY intrinsic functions.
   11486           + The following bit intrinsics were added: POPCNT and POPPAR for
   11487             counting the number of 1 bits and returning the parity; BGE,
   11488             BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR
   11489             for combined left and right shifts, MASKL and MASKR for simple
   11490             left and right justified masks, MERGE_BITS for a bitwise merge
   11491             using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations,
   11492             and the transformational bit intrinsics IALL, IANY and
   11493             IPARITY.
   11494           + Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
   11495           + Support for the IMPURE attribute for procedures, which allows
   11496             for ELEMENTAL procedures without the restrictions of PURE.
   11497           + Null pointers (including NULL()) and not allocated variables
   11498             can be used as actual argument to optional non-pointer,
   11499             non-allocatable dummy arguments, denoting an absent argument.
   11500           + Non-pointer variables with TARGET attribute can be used as
   11501             actual argument to POINTER dummies with INTENT(IN)
   11502           + Pointers including procedure pointers and those in a derived
   11503             type (pointer components) can now be initialized by a target
   11504             instead of only by NULL.
   11505           + The EXIT statement (with construct-name) can now be used to
   11506             leave not only the DO but also the ASSOCIATE, BLOCK, IF,
   11507             SELECT CASE and SELECT TYPE constructs.
   11508           + Internal procedures can now be used as actual argument.
   11509           + The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS
   11510             and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV
   11511             have been added; these arrays contain the supported kind
   11512             values for the respective types.
   11513           + The module procedures C_SIZEOF of the intrinsic module
   11514             ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
   11515             ISO_FORTRAN_ENV have been implemented.
   11516           + Minor changes: obsolescence diagnostics for ENTRY was added
   11517             for -std=f2008; a line may start with a semicolon; for
   11518             internal and module procedures END can be used instead of END
   11519             SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes
   11520             a RADIX argument; intrinsic types are supported for
   11521             TYPE(intrinsic-type-spec); multiple type-bound procedures can
   11522             be declared in a single PROCEDURE statement; implied-shape
   11523             arrays are supported for named constants (PARAMETER). The
   11524             transformational, three argument versions of BESSEL_JN and
   11525             BESSEL_YN were added - the elemental, two-argument version had
   11526             been added in GCC 4.4; note that the transformational
   11527             functions use a recurrence algorithm.
   11528 
   11529   [22]Go
   11530 
   11531    Support for the Go programming language has been added to GCC. It is
   11532    not enabled by default when you build GCC; use the --enable-languages
   11533    configure option to build it. The driver program for compiling Go code
   11534    is gccgo.
   11535 
   11536    Go is currently known to work on GNU/Linux and RTEMS. Solaris support
   11537    is in progress. It may or may not work on other platforms.
   11538 
   11539   [23]Objective-C and Objective-C++
   11540 
   11541      * The -fobjc-exceptions flag is now required to enable Objective-C
   11542        exception and synchronization syntax (introduced by the keywords
   11543        @try, @catch, @finally and @synchronized).
   11544      * A number of Objective-C 2.0 features and extensions are now
   11545        supported by GCC. These features are enabled by default; you can
   11546        disable them by using the new -fobjc-std=objc1 command-line option.
   11547      * The Objective-C 2.0 dot-syntax is now supported. It is an
   11548        alternative syntax for using getters and setters; object.count is
   11549        automatically converted into [object count] or [object setCount:
   11550        ...] depending on context; for example if (object.count > 0) is
   11551        automatically compiled into the equivalent of if ([object count] >
   11552        0) while object.count = 0; is automatically compiled into the
   11553        equivalent ot [object setCount: 0];. The dot-syntax can be used
   11554        with instance and class objects and with any setters or getters, no
   11555        matter if they are part of a declared property or not.
   11556      * Objective-C 2.0 declared properties are now supported. They are
   11557        declared using the new @property keyword, and are most commonly
   11558        used in conjunction with the new Objective-C 2.0 dot-syntax. The
   11559        nonatomic, readonly, readwrite, assign, retain, copy, setter and
   11560        getter attributes are all supported. Marking declared properties
   11561        with __attribute__ ((deprecated)) is supported too.
   11562      * The Objective-C 2.0 @synthesize and @dynamic keywords are
   11563        supported. @synthesize causes the compiler to automatically
   11564        synthesize a declared property, while @dynamic is used to disable
   11565        all warnings for a declared property for which no implementation is
   11566        provided at compile time. Synthesizing declared properties requires
   11567        runtime support in most useful cases; to be able to use it with the
   11568        GNU runtime, appropriate helper functions have been added to the
   11569        GNU Objective-C runtime ABI, and are implemented by the GNU
   11570        Objective-C runtime library shipped with GCC.
   11571      * The Objective-C 2.0 fast enumeration syntax is supported in
   11572        Objective-C. This is currently not yet available in Objective-C++.
   11573        Fast enumeration requires support in the runtime, and such support
   11574        has been added to the GNU Objective-C runtime library (shipped with
   11575        GCC).
   11576      * The Objective-C 2.0 @optional keyword is supported. It allows you
   11577        to mark methods or properties in a protocol as optional as opposed
   11578        to required.
   11579      * The Objective-C 2.0 @package keyword is supported. It has currently
   11580        the same effect as the @public keyword.
   11581      * Objective-C 2.0 method attributes are supported. Currently the
   11582        supported attributes are deprecated, sentinel, noreturn and format.
   11583      * Objective-C 2.0 method argument attributes are supported. The most
   11584        widely used attribute is unused, to mark an argument as unused in
   11585        the implementation.
   11586      * Objective-C 2.0 class and protocol attributes are supported.
   11587        Currently the only supported attribute is deprecated.
   11588      * Objective-C 2.0 class extensions are supported. A class extension
   11589        has the same syntax as a category declaration with no category
   11590        name, and the methods and properties declared in it are added
   11591        directly to the main class. It is mostly used as an alternative to
   11592        a category to add methods to a class without advertising them in
   11593        the public headers, with the advantage that for class extensions
   11594        the compiler checks that all the privately declared methods are
   11595        actually implemented.
   11596      * As a result of these enhancements, GCC can now be used to build
   11597        Objective-C and Objective-C++ software that uses Foundation and
   11598        other important system frameworks with the NeXT runtime on Darwin 9
   11599        and Darwin 10 (OSX 10.5 and 10.6).
   11600      * Many bugs in the compiler have been fixed in this release; in
   11601        particular, LTO can now be used when compiling Objective-C and
   11602        Objective-C++ and the parser is much more robust in dealing with
   11603        invalid code.
   11604 
   11605     Runtime Library (libobjc)
   11606 
   11607      * The GNU Objective-C runtime library now defines the macro
   11608        __GNU_LIBOBJC__ (with a value that is increased at every release
   11609        where there is any change to the API) in objc/objc.h, making it
   11610        easy to determine if the GNU Objective-C runtime library is being
   11611        used, and if so, which version. Previous versions of the GNU
   11612        Objective-C runtime library (and other Objective-C runtime
   11613        libraries such as the Apple one) do not define this macro.
   11614      * A new Objective-C 2.0 API, almost identical to the one implemented
   11615        by the Apple Objective-C runtime, has been implemented in the GNU
   11616        Objective-C runtime library. The new API hides the internals of
   11617        most runtime structures but provides a more extensive set of
   11618        functions to operate on them. It is much easier, for example, to
   11619        create or modify classes at runtime. The new API also makes it
   11620        easier to port software from Apple to GNU as almost no changes
   11621        should be required. The old API is still supported for backwards
   11622        compatibility; including the old objc/objc-api.h header file
   11623        automatically selects the old API, while including the new
   11624        objc/runtime.h header file automatically selects the new API.
   11625        Support for the old API is being phased out and upgrading the
   11626        software to use the new API is strongly recommended. To check for
   11627        the availability of the new API, the __GNU_LIBOBJC__ macro can be
   11628        used as older versions of the GNU Objective-C runtime library,
   11629        which do not support the new API, do not define such a macro.
   11630      * Runtime support for @synchronized has been added.
   11631      * Runtime support for Objective-C 2.0 synthesized property accessors
   11632        has been added.
   11633      * Runtime support for Objective-C 2.0 fast enumeration has been
   11634        added.
   11635 
   11636 [24]New Targets and Target Specific Improvements
   11637 
   11638   [25]ARM
   11639 
   11640      * GCC now supports the Cortex-M4 processor implementing the v7-em
   11641        version of the architecture using the option -mcpu=cortex-m4.
   11642      * Scheduling descriptions for the Cortex-M4, the Neon and the
   11643        floating point units of the Cortex-A9 and a pipeline description
   11644        for the Cortex-A5 have been added.
   11645      * Synchronization primitives such as __sync_fetch_and_add and friends
   11646        are now inlined for supported architectures rather than calling
   11647        into a kernel helper function.
   11648      * SSA loop prefetching is enabled by default for the Cortex-A9 at
   11649        -O3.
   11650      * Several improvements were committed to improve code generation for
   11651        the ARM architecture including a rewritten implementation for load
   11652        and store multiples.
   11653      * Several enhancements were committed to improve SIMD code generation
   11654        for NEON by adding support for widening instructions, misaligned
   11655        loads and stores, vector conditionals and support for 64-bit
   11656        arithmetic.
   11657      * Support was added for the Faraday cores fa526, fa606te, fa626te,
   11658        fmp626te, fmp626 and fa726te and can be used with the respective
   11659        names as parameters to the -mcpu= option.
   11660      * Basic support was added for Cortex-A15 and is available through
   11661        -mcpu=cortex-a15.
   11662      * GCC for AAPCS configurations now more closely adheres to the AAPCS
   11663        specification by enabling -fstrict-volatile-bitfields by default.
   11664 
   11665   IA-32/x86-64
   11666 
   11667      * The new -fsplit-stack option permits programs to use a
   11668        discontiguous stack. This is useful for threaded programs, in that
   11669        it is no longer necessary to specify the maximum stack size when
   11670        creating a thread. This feature is currently only implemented for
   11671        32-bit and 64-bit x86 GNU/Linux targets.
   11672      * Support for emitting profiler counter calls before function
   11673        prologues. This is enabled via a new command-line option -mfentry.
   11674      * Optimization for the Intel Core 2 processors is now available
   11675        through the -march=core2 and -mtune=core2 options.
   11676      * Support for Intel Core i3/i5/i7 processors is now available through
   11677        the -march=corei7 and -mtune=corei7 options.
   11678      * Support for Intel Core i3/i5/i7 processors with AVX is now
   11679        available through the -march=corei7-avx and -mtune=corei7-avx
   11680        options.
   11681      * Support for AMD Bobcat (family 14) processors is now available
   11682        through the -march=btver1 and -mtune=btver1 options.
   11683      * Support for AMD Bulldozer (family 15) processors is now available
   11684        through the -march=bdver1 and -mtune=bdver1 options.
   11685      * The default setting (when not optimizing for size) for 32-bit
   11686        GNU/Linux and Darwin x86 targets has been changed to
   11687        -fomit-frame-pointer. The default can be reverted to
   11688        -fno-omit-frame-pointer by configuring GCC with the
   11689        --enable-frame-pointer configure option.
   11690      * Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
   11691        __float128 on 32-bit and 64-bit x86 targets.
   11692      * AVX floating-point arithmetic can now be enabled by default at
   11693        configure time with the new --with-fpmath=avx option.
   11694      * The SSA loop prefetching pass is enabled when using -O3 when
   11695        optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
   11696        than K6).
   11697      * Support for TBM (Trailing Bit Manipulation) built-in functions and
   11698        code generation is available via -mtbm.
   11699      * Support for AMD's BMI (Bit Manipulation) built-in functions and
   11700        code generation is available via -mbmi.
   11701 
   11702   [26]MicroBlaze
   11703 
   11704      * Support has been added for the Xilinx MicroBlaze softcore processor
   11705        (microblaze-elf) embedded target. This configurable processor is
   11706        supported on several Xilinx Spartan and Virtex FPGAs.
   11707 
   11708   MIPS
   11709 
   11710      * GCC now supports the Loongson 3A processor. Its canonical -march=
   11711        and -mtune= name is loongson3a.
   11712 
   11713   [27]MN10300 / AM33
   11714 
   11715      * The inline assembly register constraint "A" has been renamed "c".
   11716        This constraint is used to select a floating-point register that
   11717        can be used as the destination of a multiply-accumulate
   11718        instruction.
   11719      * New inline assembly register constraints "A" and "D" have been
   11720        added. These constraint letters resolve to all general registers
   11721        when compiling for AM33, and resolve to address registers only or
   11722        data registers only when compiling for MN10300.
   11723      * The MDR register is represented in the compiler. One can access the
   11724        register via the "z" constraint in inline assembly. It can be
   11725        marked as clobbered or used as a local register variable via the
   11726        "mdr" name. The compiler uses the RETF instruction if the function
   11727        does not modify the MDR register, so it is important that inline
   11728        assembly properly annotate any usage of the register.
   11729 
   11730   PowerPC/PowerPC64
   11731 
   11732      * GCC now supports the Applied Micro Titan processor with
   11733        -mcpu=titan.
   11734      * The -mrecip option has been added, which indicates whether the
   11735        reciprocal and reciprocal square root instructions should be used.
   11736      * The -mveclibabi=mass option can be used to enable the compiler to
   11737        autovectorize mathematical functions using the Mathematical
   11738        Acceleration Subsystem library.
   11739      * The -msingle-pic-base option has been added, which instructs the
   11740        compiler to avoid loading the PIC base register in function
   11741        prologues. The PIC base register must be initialized by the runtime
   11742        system.
   11743      * The -mblock-move-inline-limit option has been added, which enables
   11744        the user to control the maximum size of inlined memcpy calls and
   11745        similar.
   11746      * PowerPC64 GNU/Linux support for applications requiring a large TOC
   11747        section has been improved. A new command-line option,
   11748        -mcmodel=MODEL, controls this feature; valid values for MODEL are
   11749        small, medium, or large.
   11750      * The Altivec builtin functions vec_ld and vec_st have been modified
   11751        to generate the Altivec memory instructions LVX and STVX, even if
   11752        the -mvsx option is used. In the initial GCC 4.5 release, these
   11753        builtin functions were changed to generate VSX memory reference
   11754        instructions instead of Altivec memory instructions, but there are
   11755        differences between the two instructions. If the VSX instruction
   11756        set is available, you can now use the new builtin functions
   11757        vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   11758        instructions.
   11759      * The GCC compiler on AIX now defaults to a process layout with a
   11760        larger data space allowing larger programs to be compiled.
   11761      * The GCC long double type on AIX 6.1 and above has reverted to
   11762        64-bit double precision, matching the AIX XL compiler default,
   11763        because of missing C99 symbols required by the GCC runtime.
   11764      * The default processor scheduling model and tuning for PowerPC64
   11765        GNU/Linux and for AIX 6.1 and above now is POWER7.
   11766      * Starting with GCC 4.6.1, vectors of type vector long long or vector
   11767        long are passed and returned in the same method as other vectors
   11768        with the VSX instruction set. Previously the GCC compiler did not
   11769        adhere to the ABI for 128-bit vectors with 64-bit integer base
   11770        types (PR 48857). This is also fixed in the GCC 4.5.4 release.
   11771 
   11772   S/390, zSeries and System z9/z10, IBM zEnterprise z196
   11773 
   11774      * Support for the zEnterprise z196 processor has been added. When
   11775        using the -march=z196 option, the compiler will generate code
   11776        making use of the following instruction facilities:
   11777           + Conditional load/store
   11778           + Distinct-operands
   11779           + Floating-point-extension
   11780           + Interlocked-access
   11781           + Population-count
   11782        The -mtune=z196 option avoids the compare and branch instructions
   11783        as well as the load address instruction with an index register as
   11784        much as possible and performs instruction scheduling appropriate
   11785        for the new out-of-order pipeline architecture.
   11786      * When using the -m31 -mzarch options the generated code still
   11787        conforms to the 32-bit ABI but uses the general purpose registers
   11788        as 64-bit registers internally. This requires a Linux kernel saving
   11789        the whole 64-bit registers when doing a context switch. Kernels
   11790        providing that feature indicate that by the 'highgprs' string in
   11791        /proc/cpuinfo.
   11792      * The SSA loop prefetching pass is enabled when using -O3.
   11793 
   11794   SPARC
   11795 
   11796      * GCC now supports the LEON series of SPARC V8 processors. The code
   11797        generated by the compiler can either be tuned to it by means of the
   11798        --with-tune=leon configure option and -mtune=leon compilation
   11799        option, or the compiler can be built for the sparc-leon-{elf,linux}
   11800        and sparc-leon3-{elf,linux} targets directly.
   11801      * GCC has stopped sign/zero-extending parameter registers in the
   11802        callee for functions taking parameters with sub-word size in 32-bit
   11803        mode, since this is redundant with the specification of the ABI.
   11804        GCC has never done so in 64-bit mode since this is also redundant.
   11805      * The command-line option -mfix-at697f has been added to enable the
   11806        documented workaround for the single erratum of the Atmel AT697F
   11807        processor.
   11808 
   11809 [28]Operating Systems
   11810 
   11811   [29]Android
   11812 
   11813      * GCC now supports the Bionic C library and provides a convenient way
   11814        of building native libraries and applications for the Android
   11815        platform. Refer to the documentation of the -mandroid and -mbionic
   11816        options for details on building native code. At the moment, Android
   11817        support is enabled only for ARM.
   11818 
   11819   [30]Darwin/Mac OS X
   11820 
   11821      * General
   11822           + Initial support for CFString types has been added.
   11823             This allows GCC to build projects including the system Core
   11824             Foundation frameworks. The GCC Objective-C family supports
   11825             CFString "toll-free bridged" as per the Mac OS X system tools.
   11826             CFString is also recognized in the context of format
   11827             attributes and arguments (see the documentation for format
   11828             attributes for limitations). At present, 8-bit character types
   11829             are supported.
   11830           + Object file size reduction.
   11831             The Darwin zeroed memory allocators have been re-written to
   11832             make more use of .zerofill sections. For non-debug code, this
   11833             can reduce object file size significantly.
   11834           + Objective-C family 64-bit support (NeXT ABI 2).
   11835             Initial support has been added to support 64-bit Objective-C
   11836             code using the Darwin/OS X native (NeXT) runtime. ABI version
   11837             2 will be selected automatically when 64-bit code is built.
   11838           + Objective-C family 32-bit ABI 1.
   11839             For 32-bit code ABI 1 is also now also allowed. At present it
   11840             must be selected manually using -fobjc-abi-version=1 where
   11841             applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).
   11842      * x86 Architecture
   11843           + The -mdynamic-no-pic option has been enabled.
   11844             Code supporting -mdynamic-no-pic optimization has been added
   11845             and is applicable to -m32 builds. The compiler bootstrap uses
   11846             the option where appropriate.
   11847           + The default value for -mtune= has been changed.
   11848             Since Darwin systems are primarily Xeon, Core-2 or similar the
   11849             default tuning has been changed to -mtune=core2.
   11850           + Enable 128-bit long double (__float128) support on Darwin.
   11851      * PPC Architecture
   11852           + Darwin64 ABI.
   11853             Several significant bugs have been fixed, such that GCC now
   11854             produces code compatible with the Darwin64 PowerPC ABI.
   11855           + libffi and boehm-gc.
   11856             The Darwin ports of the libffi and boehm-gc libraries have
   11857             been upgraded to include a Darwin64 implementation. This means
   11858             that powerpc*-*-darwin9 platforms may now, for example, build
   11859             Java applications with -m64 enabled.
   11860           + Plug-in support has been enabled.
   11861           + The -fsection-anchors option is now available although,
   11862             presently, not heavily tested.
   11863 
   11864   [31]Solaris 2
   11865 
   11866     New Features
   11867 
   11868      * Support symbol versioning with the Sun linker.
   11869      * Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
   11870      * Support thread-local storage (TLS) with the Sun assembler on
   11871        Solaris 2/x86.
   11872      * Support TLS on Solaris 8/9 if prerequisites are met.
   11873      * Support COMDAT group with the GNU assembler and recent Sun linker.
   11874      * Support the Sun assembler visibility syntax.
   11875      * Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
   11876        -march=pentiumpro (Solaris 8/9).
   11877      * Don't use SSE on Solaris 8/9 x86 by default.
   11878      * Enable 128-bit long double (__float128) support on Solaris 2/x86.
   11879 
   11880     ABI Change
   11881 
   11882      * Change the ABI for returning 8-byte vectors like __m64 in MMX
   11883        registers on Solaris 10+/x86 to match the Sun Studio 12.1+
   11884        compilers. This is an incompatible change. If you use such types,
   11885        you must either recompile all your code with the new compiler or
   11886        use the new -mvect8-ret-in-mem option to remain compatible with
   11887        previous versions of GCC and Sun Studio.
   11888 
   11889   [32]Windows x86/x86_64
   11890 
   11891      * Initial support for decimal floating point.
   11892      * Support for the __thiscall calling-convention.
   11893      * Support for hot-patchable function prologues via the
   11894        ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
   11895      * Improvements of stack-probing and stack-allocation mechanisms.
   11896      * Support of push/pop-macro pragma as preprocessor command.
   11897        With #pragma push_macro("macro-name") the current definition of
   11898        macro-name is saved and can be restored with #pragma
   11899        pop_macro("macro-name") to its saved definition.
   11900      * Enable 128-bit long double (__float128) support on MinGW and
   11901        Cygwin.
   11902 
   11903 Other significant improvements
   11904 
   11905   Installation changes
   11906 
   11907      * An install-strip make target is provided that installs stripped
   11908        executables, and may install libraries with unneeded or debugging
   11909        sections stripped.
   11910      * On Power7 systems, there is a potential problem if you build the
   11911        GCC compiler with a host compiler using options that enable the VSX
   11912        instruction set generation. If the host compiler has been patched
   11913        so that the vec_ld and vec_st builtin functions generate Altivec
   11914        memory instructions instead of VSX memory instructions, then you
   11915        should be able to build the compiler with VSX instruction
   11916        generation.
   11917 
   11918 Changes for GCC Developers
   11919 
   11920    Note: these changes concern developers that develop GCC itself or
   11921    software that integrates with GCC, such as plugins, and not the general
   11922    GCC users.
   11923      * The gengtype utility, which previously was internal to the GCC
   11924        build process, has been enchanced to provide GC root information
   11925        for plugins as necessary.
   11926      * The old GC allocation interface of ggc_alloc and friends was
   11927        replaced with a type-safe alternative.
   11928 
   11929 [33]GCC 4.6.1
   11930 
   11931    This is the [34]list of problem reports (PRs) from GCC's bug tracking
   11932    system that are known to be fixed in the 4.6.1 release. This list might
   11933    not be complete (that is, it is possible that some PRs that have been
   11934    fixed are not listed here).
   11935 
   11936 [35]GCC 4.6.2
   11937 
   11938    This is the [36]list of problem reports (PRs) from GCC's bug tracking
   11939    system that are known to be fixed in the 4.6.2 release. This list might
   11940    not be complete (that is, it is possible that some PRs that have been
   11941    fixed are not listed here).
   11942 
   11943 [37]GCC 4.6.3
   11944 
   11945    This is the [38]list of problem reports (PRs) from GCC's bug tracking
   11946    system that are known to be fixed in the 4.6.3 release. This list might
   11947    not be complete (that is, it is possible that some PRs that have been
   11948    fixed are not listed here).
   11949 
   11950 [39]GCC 4.6.4
   11951 
   11952    This is the [40]list of problem reports (PRs) from GCC's bug tracking
   11953    system that are known to be fixed in the 4.6.4 release. This list might
   11954    not be complete (that is, it is possible that some PRs that have been
   11955    fixed are not listed here).
   11956 
   11957 
   11958     For questions related to the use of GCC, please consult these web
   11959     pages and the [41]GCC manuals. If that fails, the
   11960     [42]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11961     web pages and the development of GCC are welcome on our developer
   11962     list at [43]gcc (a] gcc.gnu.org. All of [44]our lists have public
   11963     archives.
   11964 
   11965    Copyright (C) [45]Free Software Foundation, Inc. Verbatim copying and
   11966    distribution of this entire article is permitted in any medium,
   11967    provided this notice is preserved.
   11968 
   11969    These pages are [46]maintained by the GCC team. Last modified
   11970    2025-01-31.
   11971 
   11972 References
   11973 
   11974    1. https://sourceware.org/bugzilla/show_bug.cgi?id=10401
   11975    2. https://gcc.gnu.org/gcc-4.5/changes.html
   11976    3. https://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
   11977    4. https://gcc.gnu.org/gcc-4.6/porting_to.html
   11978    5. https://gcc.gnu.org/projects/lto/whopr.pdf
   11979    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   11980    7. https://gcc.gnu.org/gcc-4.6/changes.html#c
   11981    8. https://gcc.gnu.org/gcc-4.6/changes.html#cplusplus
   11982    9. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
   11983   10. https://gcc.gnu.org/PR43145
   11984   11. https://gcc.gnu.org/PR43680
   11985   12. https://gcc.gnu.org/PR33558
   11986   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
   11987   14. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
   11988   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
   11989   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
   11990   17. https://gcc.gnu.org/gcc-4.6/changes.html#fortran
   11991   18. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
   11992   19. https://gcc.gnu.org/wiki/OOP
   11993   20. https://gcc.gnu.org/wiki/Coarray
   11994   21. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
   11995   22. https://gcc.gnu.org/gcc-4.6/changes.html#go
   11996   23. https://gcc.gnu.org/gcc-4.6/changes.html#objective-c
   11997   24. https://gcc.gnu.org/gcc-4.6/changes.html#targets
   11998   25. https://gcc.gnu.org/gcc-4.6/changes.html#arm
   11999   26. https://gcc.gnu.org/gcc-4.6/changes.html#microblaze
   12000   27. https://gcc.gnu.org/gcc-4.6/changes.html#mn10300
   12001   28. https://gcc.gnu.org/gcc-4.6/changes.html#os
   12002   29. https://gcc.gnu.org/gcc-4.6/changes.html#android
   12003   30. https://gcc.gnu.org/gcc-4.6/changes.html#darwin
   12004   31. https://gcc.gnu.org/gcc-4.6/changes.html#solaris
   12005   32. https://gcc.gnu.org/gcc-4.6/changes.html#windows
   12006   33. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.1
   12007   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
   12008   35. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.2
   12009   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
   12010   37. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.3
   12011   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
   12012   39. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.4
   12013   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
   12014   41. https://gcc.gnu.org/onlinedocs/
   12015   42. mailto:gcc-help (a] gcc.gnu.org
   12016   43. mailto:gcc (a] gcc.gnu.org
   12017   44. https://gcc.gnu.org/lists.html
   12018   45. https://www.fsf.org/
   12019   46. https://gcc.gnu.org/about.html
   12020 ======================================================================
   12021 http://gcc.gnu.org/gcc-4.5/index.html
   12022 
   12023                              GCC 4.5 Release Series
   12024 
   12025    (This release series is no longer supported.)
   12026 
   12027    Jul 2, 2012
   12028 
   12029    The [1]GNU project and the GCC developers are pleased to announce the
   12030    release of GCC 4.5.4.
   12031 
   12032    This release is a bug-fix release, containing fixes for regressions in
   12033    GCC 4.5.3 relative to previous releases of GCC.
   12034 
   12035 Release History
   12036 
   12037    GCC 4.5.4
   12038           Jul 2, 2012 ([2]changes)
   12039 
   12040    GCC 4.5.3
   12041           Apr 28, 2011 ([3]changes)
   12042 
   12043    GCC 4.5.2
   12044           Dec 16, 2010 ([4]changes)
   12045 
   12046    GCC 4.5.1
   12047           Jul 31, 2010 ([5]changes)
   12048 
   12049    GCC 4.5.0
   12050           April 14, 2010 ([6]changes)
   12051 
   12052 References and Acknowledgements
   12053 
   12054    GCC used to stand for the GNU C Compiler, but since the compiler
   12055    supports several other languages aside from C, it now stands for the
   12056    GNU Compiler Collection.
   12057 
   12058    A list of [7]successful builds is updated as new information becomes
   12059    available.
   12060 
   12061    The GCC developers would like to thank the numerous people that have
   12062    contributed new features, improvements, bug fixes, and other changes as
   12063    well as test results to GCC. This [8]amazing group of volunteers is
   12064    what makes GCC successful.
   12065 
   12066    For additional information about GCC please refer to the [9]GCC project
   12067    web site or contact the [10]GCC development mailing list.
   12068 
   12069    To obtain GCC please use [11]our mirror sites or [12]our version
   12070    control system.
   12071 
   12072 
   12073     For questions related to the use of GCC, please consult these web
   12074     pages and the [13]GCC manuals. If that fails, the
   12075     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12076     web pages and the development of GCC are welcome on our developer
   12077     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   12078     archives.
   12079 
   12080    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   12081    distribution of this entire article is permitted in any medium,
   12082    provided this notice is preserved.
   12083 
   12084    These pages are [18]maintained by the GCC team. Last modified
   12085    2022-10-26.
   12086 
   12087 References
   12088 
   12089    1. http://www.gnu.org/
   12090    2. https://gcc.gnu.org/gcc-4.5/changes.html
   12091    3. https://gcc.gnu.org/gcc-4.5/changes.html
   12092    4. https://gcc.gnu.org/gcc-4.5/changes.html
   12093    5. https://gcc.gnu.org/gcc-4.5/changes.html
   12094    6. https://gcc.gnu.org/gcc-4.5/changes.html
   12095    7. https://gcc.gnu.org/gcc-4.5/buildstat.html
   12096    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12097    9. https://gcc.gnu.org/index.html
   12098   10. mailto:gcc (a] gcc.gnu.org
   12099   11. https://gcc.gnu.org/mirrors.html
   12100   12. https://gcc.gnu.org/git.html
   12101   13. https://gcc.gnu.org/onlinedocs/
   12102   14. mailto:gcc-help (a] gcc.gnu.org
   12103   15. mailto:gcc (a] gcc.gnu.org
   12104   16. https://gcc.gnu.org/lists.html
   12105   17. https://www.fsf.org/
   12106   18. https://gcc.gnu.org/about.html
   12107 ======================================================================
   12108 http://gcc.gnu.org/gcc-4.5/changes.html
   12109 
   12110                              GCC 4.5 Release Series
   12111                         Changes, New Features, and Fixes
   12112 
   12113 Caveats
   12114 
   12115      * GCC now requires the [1]MPC library in order to build. See the
   12116        [2]prerequisites page for version requirements.
   12117      * Support for a number of older systems and recently unmaintained or
   12118        untested target ports of GCC has been declared obsolete in GCC 4.5.
   12119        Unless there is activity to revive them, the next release of GCC
   12120        will have their sources permanently removed.
   12121        The following ports for individual systems on particular
   12122        architectures have been obsoleted:
   12123           + IRIX releases before 6.5 (mips-sgi-irix5*,
   12124             mips-sgi-irix6.[0-4])
   12125           + Solaris 7 (*-*-solaris2.7)
   12126           + Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
   12127             alpha-dec-osf5.0*)
   12128           + Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions
   12129             can be found in the [3]announcement.
   12130        Support for the classic POWER architecture implemented in the
   12131        original RIOS and RIOS2 processors of the old IBM RS/6000 product
   12132        line has been obsoleted in the rs6000 port. This does not affect
   12133        the new generation Power and PowerPC architectures.
   12134      * Support has been removed for all the [4]configurations obsoleted in
   12135        GCC 4.4.
   12136      * Support has been removed for the protoize and unprotoize utilities,
   12137        obsoleted in GCC 4.4.
   12138      * Support has been removed for tuning for Itanium1 (Merced) variants.
   12139        Note that code tuned for Itanium2 should also run correctly on
   12140        Itanium1.
   12141      * GCC now generates unwind info also for epilogues. DWARF debuginfo
   12142        generated by GCC now uses more features of DWARF3 than before, and
   12143        also some DWARF4 features. GDB older than 7.0 is not able to handle
   12144        either of these, so to debug GCC 4.5 generated binaries or
   12145        libraries GDB 7.0 or later is needed. You can disable use of DWARF4
   12146        features with the -gdwarf-3 -gstrict-dwarf options, or use
   12147        -gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but
   12148        epilogue unwind info is emitted unconditionally whenever unwind
   12149        info is emitted.
   12150      * On x86 targets, code containing floating-point calculations may run
   12151        significantly more slowly when compiled with GCC 4.5 in strict C99
   12152        conformance mode than they did with earlier GCC versions. This is
   12153        due to stricter standard conformance of the compiler and can be
   12154        avoided by using the option -fexcess-precision=fast; also see
   12155        [5]below.
   12156      * The function attribute noinline no longer prevents GCC from cloning
   12157        the function. A new attribute noclone has been introduced for this
   12158        purpose. Cloning a function means that it is duplicated and the new
   12159        copy is specialized for certain contexts (for example when a
   12160        parameter is a known constant).
   12161 
   12162 General Optimizer Improvements
   12163 
   12164      * The -save-temps now takes an optional argument. The -save-temps and
   12165        -save-temps=cwd switches write the temporary files in the current
   12166        working directory based on the original source file. The
   12167        -save-temps=obj switch will write files into the directory
   12168        specified with the -o option, and the intermediate filenames are
   12169        based on the output file. This will allow the user to get the
   12170        compiler intermediate files when doing parallel builds without two
   12171        builds of the same filename located in different directories from
   12172        interfering with each other.
   12173      * Debugging dumps are now created in the same directory as the object
   12174        file rather than in the current working directory. This allows the
   12175        user to get debugging dumps when doing parallel builds without two
   12176        builds of the same filename interfering with each other.
   12177      * GCC has been integrated with the MPC library. This allows GCC to
   12178        evaluate complex arithmetic at compile time [6]more accurately. It
   12179        also allows GCC to evaluate calls to complex built-in math
   12180        functions having constant arguments and replace them at compile
   12181        time with their mathematically equivalent results. In doing so, GCC
   12182        can generate correct results regardless of the math library
   12183        implementation or floating point precision of the host platform.
   12184        This also allows GCC to generate identical results regardless of
   12185        whether one compiles in native or cross-compile configurations to a
   12186        particular target. The following built-in functions take advantage
   12187        of this new capability: cacos, cacosh, casin, casinh, catan,
   12188        catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan,
   12189        and ctanh. The float and long double variants of these functions
   12190        (e.g. csinf and csinl) are also handled.
   12191      * A new link-time optimizer has been added ([7]-flto). When this
   12192        option is used, GCC generates a bytecode representation of each
   12193        input file and writes it to specially-named sections in each object
   12194        file. When the object files are linked together, all the function
   12195        bodies are read from these named sections and instantiated as if
   12196        they had been part of the same translation unit. This enables
   12197        interprocedural optimizations to work across different files (and
   12198        even different languages), potentially improving the performance of
   12199        the generated code. To use the link-timer optimizer, -flto needs to
   12200        be specified at compile time and during the final link. If the
   12201        program does not require any symbols to be exported, it is possible
   12202        to combine -flto and the experimental [8]-fwhopr with
   12203        [9]-fwhole-program to allow the interprocedural optimizers to use
   12204        more aggressive assumptions.
   12205      * The automatic parallelization pass was enhanced to support
   12206        parallelization of outer loops.
   12207      * Automatic parallelization can be enabled as part of Graphite. In
   12208        addition to -ftree-parallelize-loops=, specify
   12209        -floop-parallelize-all to enable the Graphite-based optimization.
   12210      * The infrastructure for optimizing based on [10]restrict qualified
   12211        pointers has been rewritten and should result in code generation
   12212        improvements. Optimizations based on restrict qualified pointers
   12213        are now also available when using -fno-strict-aliasing.
   12214      * There is a new optimization pass that attempts to change prototype
   12215        of functions to avoid unused parameters, pass only relevant parts
   12216        of structures and turn arguments passed by reference to arguments
   12217        passed by value when possible. It is enabled by -O2 and above as
   12218        well as -Os and can be manually invoked using the new command-line
   12219        switch -fipa-sra.
   12220      * GCC now optimize exception handling code. In particular cleanup
   12221        regions that are proved to not have any effect are optimized out.
   12222 
   12223 New Languages and Language specific improvements
   12224 
   12225   All languages
   12226 
   12227      * The -fshow-column option is now on by default. This means error
   12228        messages now have a column associated with them.
   12229 
   12230   Ada
   12231 
   12232      * Compilation of programs heavily using discriminated record types
   12233        with variant parts has been sped up and generates more compact
   12234        code.
   12235      * Stack checking now works reasonably well on most plaforms. In some
   12236        specific cases, stack overflows may still fail to be detected, but
   12237        a compile-time warning will be issued for these cases.
   12238 
   12239   C family
   12240 
   12241      * If a header named in a #include directive is not found, the
   12242        compiler exits immediately. This avoids a cascade of errors arising
   12243        from declarations expected to be found in that header being
   12244        missing.
   12245      * A new built-in function __builtin_unreachable() has been added that
   12246        tells the compiler that control will never reach that point. It may
   12247        be used after asm statements that terminate by transferring control
   12248        elsewhere, and in other places that are known to be unreachable.
   12249      * The -Wlogical-op option now warns for logical expressions such as
   12250        (c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be
   12251        mistakes. This option is disabled by default.
   12252      * An asm goto feature has been added to allow asm statements that
   12253        jump to C labels.
   12254      * C++0x raw strings are supported for C++ and for C with -std=gnu99.
   12255      * The deprecated attribute now takes an optional string argument, for
   12256        example, __attribute__((deprecated("text string"))), that will be
   12257        printed together with the deprecation warning.
   12258 
   12259   C
   12260 
   12261      * The -Wenum-compare option, which warns when comparing values of
   12262        different enum types, now works for C. It formerly only worked for
   12263        C++. This warning is enabled by -Wall. It may be avoided by using a
   12264        type cast.
   12265      * The -Wcast-qual option now warns about casts which are unsafe in
   12266        that they permit const-correctness to be violated without further
   12267        warnings. Specifically, it warns about cases where a qualifier is
   12268        added when all the lower types are not const. For example, it warns
   12269        about a cast from char ** to const char **.
   12270      * The -Wc++-compat option is significantly improved. It issues new
   12271        warnings for:
   12272           + Using C++ reserved operator names as identifiers.
   12273           + Conversions to enum types without explicit casts.
   12274           + Using va_arg with an enum type.
   12275           + Using different enum types in the two branches of ?:.
   12276           + Using ++ or -- on a variable of enum type.
   12277           + Using the same name as both a struct, union or enum tag and a
   12278             typedef, unless the typedef refers to the tagged type itself.
   12279           + Using a struct, union, or enum which is defined within another
   12280             struct or union.
   12281           + A struct field defined using a typedef if there is a field in
   12282             the struct, or an enclosing struct, whose name is the typedef
   12283             name.
   12284           + Duplicate definitions at file scope.
   12285           + Uninitialized const variables.
   12286           + A global variable with an anonymous struct, union, or enum
   12287             type.
   12288           + Using a string constant to initialize a char array whose size
   12289             is the length of the string.
   12290      * The new -Wjump-misses-init option warns about cases where a goto or
   12291        switch skips the initialization of a variable. This sort of branch
   12292        is an error in C++ but not in C. This warning is enabled by
   12293        -Wc++-compat.
   12294      * GCC now ensures that a C99-conforming <stdint.h> is present on most
   12295        targets, and uses information about the types in this header to
   12296        implement the Fortran bindings to those types. GCC does not ensure
   12297        the presence of such a header, and does not implement the Fortran
   12298        bindings, on the following targets: NetBSD, VxWorks, VMS,
   12299        SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF.
   12300      * GCC now implements C90- and C99-conforming rules for constant
   12301        expressions. This may cause warnings or errors for some code using
   12302        expressions that can be folded to a constant but are not constant
   12303        expressions as defined by ISO C.
   12304      * All known target-independent C90 and C90 Amendment 1 conformance
   12305        bugs, and all known target-independent C99 conformance bugs not
   12306        related to floating point or extended identifiers, have been fixed.
   12307      * The C decimal floating point support now includes support for the
   12308        FLOAT_CONST_DECIMAL64 pragma.
   12309      * The named address space feature from ISO/IEC TR 18037 is now
   12310        supported. This is currently only implemented for the SPU
   12311        processor.
   12312 
   12313   [11]C++
   12314 
   12315      * Improved [12]experimental support for the upcoming C++0x ISO C++
   12316        standard, including support for raw strings, lambda expressions and
   12317        explicit type conversion operators.
   12318      * When printing the name of a class template specialization, G++ will
   12319        now omit any template arguments which come from default template
   12320        arguments. This behavior (and the pretty-printing of function
   12321        template specializations as template signature and arguments) can
   12322        be disabled with the -fno-pretty-templates option.
   12323      * Access control is now applied to typedef names used in a template,
   12324        which may cause G++ to reject some ill-formed code that was
   12325        accepted by earlier releases. The -fno-access-control option can be
   12326        used as a temporary workaround until the code is corrected.
   12327      * Compilation time for code that uses templates should now scale
   12328        linearly with the number of instantiations rather than
   12329        quadratically, as template instantiations are now looked up using
   12330        hash tables.
   12331      * Declarations of functions that look like builtin declarations of
   12332        library functions are only considered to be redeclarations if they
   12333        are declared with extern "C". This may cause problems with code
   12334        that omits extern "C" on hand-written declarations of C library
   12335        functions such as abort or memcpy. Such code is ill-formed, but was
   12336        accepted by earlier releases.
   12337      * Diagnostics that used to complain about passing non-POD types to
   12338        ... or jumping past the declaration of a non-POD variable now check
   12339        for triviality rather than PODness, as per C++0x.
   12340      * In C++0x mode local and anonymous classes are now allowed as
   12341        template arguments, and in declarations of variables and functions
   12342        with linkage, so long as any such declaration that is used is also
   12343        defined ([13]DR 757).
   12344      * Labels may now have attributes, as has been permitted for a while
   12345        in C. This is only permitted when the label definition and the
   12346        attribute specifier is followed by a semicolon--i.e., the label
   12347        applies to an empty statement. The only useful attribute for a
   12348        label is unused.
   12349      * G++ now implements [14]DR 176. Previously G++ did not support using
   12350        the injected-class-name of a template base class as a type name,
   12351        and lookup of the name found the declaration of the template in the
   12352        enclosing scope. Now lookup of the name finds the
   12353        injected-class-name, which can be used either as a type or as a
   12354        template, depending on whether or not the name is followed by a
   12355        template argument list. As a result of this change, some code that
   12356        was previously accepted may be ill-formed because
   12357          1. The injected-class-name is not accessible because it's from a
   12358             private base, or
   12359          2. The injected-class-name cannot be used as an argument for a
   12360             template template parameter.
   12361        In either of these cases, the code can be fixed by adding a
   12362        nested-name-specifier to explicitly name the template. The first
   12363        can be worked around with -fno-access-control; the second is only
   12364        rejected with -pedantic.
   12365      * A new standard mangling for SIMD vector types has been added, to
   12366        avoid name clashes on systems with vectors of varying length. By
   12367        default the compiler still uses the old mangling, but emits aliases
   12368        with the new mangling on targets that support strong aliases. Users
   12369        can switch over entirely to the new mangling with -fabi-version=4
   12370        or -fabi-version=0. -Wabi will now warn about code that uses the
   12371        old mangling.
   12372      * The command-line option -ftemplate-depth-N is now written as
   12373        -ftemplate-depth=N and the old form is deprecated.
   12374      * Conversions between NULL and non-pointer types are now warned by
   12375        default. The new option -Wno-conversion-null disables these
   12376        warnings. Previously these warnings were only available when using
   12377        -Wconversion explicitly.
   12378 
   12379     Runtime Library (libstdc++)
   12380 
   12381      * Improved experimental support for the upcoming ISO C++ standard,
   12382        C++0x, including:
   12383           + Support for <future>, <functional>, and <random>.
   12384           + Existing facilities now exploit explicit operators and the
   12385             newly implemented core C++0x features.
   12386           + The header <cstdatomic> has been renamed to <atomic>.
   12387      * An experimental [15]profile mode has been added. This is an
   12388        implementation of many C++ standard library constructs with an
   12389        additional analysis layer that gives performance improvement advice
   12390        based on recognition of suboptimal usage patterns. For example,
   12391 #include <vector>
   12392 int main()
   12393 {
   12394   std::vector<int> v;
   12395   for (int k = 0; k < 1024; ++k)
   12396     v.insert(v.begin(), k);
   12397 }
   12398 
   12399        When instrumented via the profile mode, can return suggestions
   12400        about the initial size and choice of the container used as follows:
   12401 vector-to-list: improvement = 5: call stack = 0x804842c ...
   12402     : advice = change std::vector to std::list
   12403 vector-size: improvement = 3: call stack = 0x804842c ...
   12404     : advice = change initial container size from 0 to 1024
   12405 
   12406        These constructs can be substituted for the normal libstdc++
   12407        constructs on a piecemeal basis, or all existing components can be
   12408        transformed via the -D_GLIBCXX_PROFILE macro.
   12409      * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR
   12410        24733) has been added. This support is in header file
   12411        <decimal/decimal>, uses namespace std::decimal, and includes
   12412        classes decimal32, decimal64, and decimal128.
   12413      * Sources have been audited for application of function attributes
   12414        nothrow, const, pure, and noreturn.
   12415      * Python pretty-printers have been added for many standard library
   12416        components that simplify the internal representation and present a
   12417        more intuitive view of components when used with
   12418        appropriately-advanced versions of GDB. For more information,
   12419        please consult the more [17]detailed description.
   12420      * The default behavior for comparing typeinfo names has changed, so
   12421        in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
   12422      * The new -static-libstdc++ option directs g++ to link the C++
   12423        library statically, even if the default would normally be to link
   12424        it dynamically.
   12425 
   12426   [18]Fortran
   12427 
   12428      * The COMMON default padding has been changed - instead of adding the
   12429        padding before a variable it is now added afterwards, which
   12430        increases the compatibility with other vendors and helps to obtain
   12431        the correct output in some cases. Cf. also the -falign-commons
   12432        option ([19]added in 4.4).
   12433      * The -finit-real= option now also supports the value snan for
   12434        signaling not-a-number; to be effective, one additionally needs to
   12435        enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
   12436        optimizations can turn a signaling NaN into a quiet one.
   12437      * The new option -fcheck= has been added with the options bounds,
   12438        array-temps, do, pointer, and recursive. The bounds and array-temps
   12439        options are equivalent to -fbounds-check and
   12440        -fcheck-array-temporaries. The do option checks for invalid
   12441        modification of loop iteration variables, and the recursive option
   12442        tests for recursive calls to subroutines/functions which are not
   12443        marked as recursive. With pointer pointer association checks in
   12444        calls are performed; however, neither undefined pointers nor
   12445        pointers in expressions are handled. Using -fcheck=all enables all
   12446        these run-time checks.
   12447      * The run-time checking -fcheck=bounds now warns about invalid string
   12448        lengths of character dummy arguments. Additionally, more
   12449        compile-time checks have been added.
   12450      * The new option [20]-fno-protect-parens has been added; if set, the
   12451        compiler may reorder REAL and COMPLEX expressions without regard to
   12452        parentheses.
   12453      * GNU Fortran no longer links against libgfortranbegin. As before,
   12454        MAIN__ (assembler symbol name) is the actual Fortran main program,
   12455        which is invoked by the main function. However, main is now
   12456        generated and put in the same object file as MAIN__. For the time
   12457        being, libgfortranbegin still exists for backward compatibility.
   12458        For details see the new [21]Mixed-Language Programming chapter in
   12459        the manual.
   12460      * The I/O library was restructured for performance and cleaner code.
   12461      * Array assignments and WHERE are now run in parallel when OpenMP's
   12462        WORKSHARE is used.
   12463      * The experimental option -fwhole-file was added. The option allows
   12464        whole-file checking of procedure arguments and allows for better
   12465        optimizations. It can also be used with -fwhole-program, which is
   12466        now also supported in gfortran.
   12467      * More Fortran 2003 and Fortran 2008 mathematical functions can now
   12468        be used as initialization expressions.
   12469      * Some extended attributes such as STDCALL are now supported via the
   12470        [22]GCC$ compiler directive.
   12471      * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
   12472        intrinsic behaves now as if zero were always positive.
   12473      * For legacy compatibiliy: On Cygwin and MinGW, the special files
   12474        CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now
   12475        supported.
   12476      * Fortran 2003 support has been extended:
   12477           + Procedure-pointer function results and procedure-pointer
   12478             components (including PASS),
   12479           + allocatable scalars (experimental),
   12480           + DEFERRED type-bound procedures,
   12481           + the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements
   12482             have been implemented.
   12483           + The ALLOCATE statement supports type-specs and the SOURCE=
   12484             argument.
   12485           + OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC
   12486             type-bound procedure (i.e. as type-bound operators).
   12487           + Rounding (ROUND=, RZ, ...) for output is now supported.
   12488           + The INT_FAST{8,16,32,64,128}_T kind type parameters of the
   12489             intrinsic module ISO_C_BINDING are now supported, except for
   12490             the targets listed above as ones where GCC does not have
   12491             <stdint.h> type information.
   12492           + Extensible derived types with type-bound procedure or
   12493             procedure pointer with PASS attribute now have to use CLASS in
   12494             line with the Fortran 2003 standard; the workaround to use
   12495             TYPE is no longer supported.
   12496           + [23]Experimental, incomplete support for polymorphism,
   12497             including CLASS, SELECT TYPE and dynamic dispatch of
   12498             type-bound procedure calls. Some features do not work yet such
   12499             as unlimited polymorphism (CLASS(*)).
   12500      * Fortran 2008 support has been extended:
   12501           + The OPEN statement now supports the NEWUNIT= option, which
   12502             returns a unique file unit, thus preventing inadvertent use of
   12503             the same unit in different parts of the program.
   12504           + Support for unlimited format items has been added.
   12505           + The INT{8,16,32} and REAL{32,64,128} kind type parameters of
   12506             the intrinsic module ISO_FORTRAN_ENV are now supported.
   12507           + Using complex arguments with TAN, SINH, COSH, TANH, ASIN,
   12508             ACOS, and ATAN is now possible; the functions ASINH, ACOSH,
   12509             and ATANH have been added (for real and complex arguments) and
   12510             ATAN(Y,X) is now an alias for ATAN2(Y,X).
   12511           + The BLOCK construct has been implemented.
   12512 
   12513 [24]New Targets and Target Specific Improvements
   12514 
   12515   AIX
   12516 
   12517      * Full cross-toolchain support now available with GNU Binutils
   12518 
   12519   ARM
   12520 
   12521      * GCC now supports the Cortex-M0 and Cortex-A5 processors.
   12522      * GCC now supports the ARM v7E-M architecture.
   12523      * GCC now supports VFPv4-based FPUs and FPUs with
   12524        single-precision-only VFP.
   12525      * GCC has many improvements to optimization for other ARM processors,
   12526        including scheduling support for the integer pipeline on Cortex-A9.
   12527      * GCC now supports the IEEE 754-2008 half-precision floating-point
   12528        type, and a variant ARM-specific half-precision type. This type is
   12529        specified using __fp16, with the layout determined by
   12530        -mfp16-format. With appropriate -mfpu options, the Cortex-A9 and
   12531        VFPv4 half-precision instructions will be used.
   12532      * GCC now supports the variant of AAPCS that uses VFP registers for
   12533        parameter passing and return values.
   12534 
   12535   AVR
   12536 
   12537      * The -mno-tablejump option has been removed because it has the same
   12538        effect as the -fno-jump-tables option.
   12539      * Added support for these new AVR devices:
   12540           + ATmega8U2
   12541           + ATmega16U2
   12542           + ATmega32U2
   12543 
   12544   [25]IA-32/x86-64
   12545 
   12546      * GCC now will set the default for -march= based on the configure
   12547        target.
   12548      * GCC now supports handling floating-point excess precision arising
   12549        from use of the x87 floating-point unit in a way that conforms to
   12550        ISO C99. This is enabled with -fexcess-precision=standard and with
   12551        standards conformance options such as -std=c99, and may be disabled
   12552        using -fexcess-precision=fast.
   12553      * Support for the Intel Atom processor is now available through the
   12554        -march=atom and -mtune=atom options.
   12555      * A new -mcrc32 option is now available to enable crc32 intrinsics.
   12556      * A new -mmovbe option is now available to enable GCC to use the
   12557        movbe instruction to implement __builtin_bswap32 and
   12558        __builtin_bswap64.
   12559      * SSE math now can be enabled by default at configure time with the
   12560        new --with-fpmath=sse option.
   12561      * There is a new intrinsic header file, <x86intrin.h>. It should be
   12562        included before using any IA-32/x86-64 intrinsics.
   12563      * Support for the XOP, FMA4, and LWP instruction sets for the AMD
   12564        Orochi processors are now available with the -mxop, -mfma4, and
   12565        -mlwp options.
   12566      * The -mabm option enables GCC to use the popcnt and lzcnt
   12567        instructions on AMD processors.
   12568      * The -mpopcnt option enables GCC to use the popcnt instructions on
   12569        both AMD and Intel processors.
   12570 
   12571   M68K/ColdFire
   12572 
   12573      * GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x
   12574        and 5441x devices.
   12575      * GCC now supports thread-local storage (TLS) on M68K and ColdFire
   12576        processors.
   12577 
   12578   [26]MeP
   12579 
   12580    Support has been added for the Toshiba Media embedded Processor (MeP,
   12581    or mep-elf) embedded target.
   12582 
   12583   MIPS
   12584 
   12585      * GCC now supports MIPS 1004K processors.
   12586      * GCC can now be configured with options --with-arch-32,
   12587        --with-arch-64, --with-tune-32 and --with-tune-64 to control the
   12588        default optimization separately for 32-bit and 64-bit modes.
   12589      * MIPS targets now support an alternative _mcount interface, in which
   12590        register $12 points to the function's save slot for register $31.
   12591        This interface is selected by the -mcount-ra-address option; see
   12592        the documentation for more details.
   12593      * GNU/Linux targets can now generate read-only .eh_frame sections.
   12594        This optimization requires GNU binutils 2.20 or above, and is only
   12595        available if GCC is configured with a suitable version of binutils.
   12596      * GNU/Linux targets can now attach special relocations to indirect
   12597        calls, so that the linker can turn them into direct jumps or
   12598        branches. This optimization requires GNU binutils 2.20 or later,
   12599        and is automatically selected if GCC is configured with an
   12600        appropriate version of binutils. It can be explicitly enabled or
   12601        disabled using the -mrelax-pic-calls command-line option.
   12602      * GCC now generates more heavily-optimized atomic operations on
   12603        Octeon processors.
   12604      * MIPS targets now support the -fstack-protector option.
   12605      * GCC now supports an -msynci option, which specifies that synci is
   12606        enough to flush the instruction cache, without help from the
   12607        operating system. GCC uses this information to optimize
   12608        automatically-generated cache flush operations, such as those used
   12609        for nested functions in C. There is also a --with-synci
   12610        configure-time option, which makes -msynci the default.
   12611      * GCC supports four new function attributes for interrupt handlers:
   12612        interrupt, use_shadow_register_set, keep_interrupts_masked and
   12613        use_debug_exception_return. See the documentation for more details
   12614        about these attributes.
   12615 
   12616   [27]RS/6000 (POWER/PowerPC)
   12617 
   12618      * GCC now supports the Power ISA 2.06, which includes the VSX
   12619        instructions that add vector 64-bit floating point support, new
   12620        population count instructions, and conversions between floating
   12621        point and unsigned types.
   12622      * Support for the power7 processor is now available through the
   12623        -mcpu=power7 and -mtune=power7.
   12624      * GCC will now vectorize loops that contain simple math functions
   12625        like copysign when generating code for altivec or VSX targets.
   12626      * Support for the A2 processor is now available through the -mcpu=a2
   12627        and -mtune=a2 options.
   12628      * Support for the 476 processor is now available through the
   12629        -mcpu={476,476fp} and -mtune={476,476fp} options.
   12630      * Support for the e500mc64 processor is now available through the
   12631        -mcpu=e500mc64 and -mtune=e500mc64 options.
   12632      * GCC can now be configured with options --with-cpu-32,
   12633        --with-cpu-64, --with-tune-32 and --with-tune-64 to control the
   12634        default optimization separately for 32-bit and 64-bit modes.
   12635      * Starting with GCC 4.5.4, vectors of type vector long long or vector
   12636        long are passed and returned in the same method as other vectors
   12637        with the VSX instruction set. Previously the GCC compiler did not
   12638        adhere to the ABI for 128-bit vectors with 64-bit integer base
   12639        types (PR 48857). This is also fixed in the GCC 4.6.1 release.
   12640 
   12641   [28]RX
   12642 
   12643    Support has been added for the Renesas RX Processor (rx-elf) target.
   12644 
   12645 [29]Operating Systems
   12646 
   12647   [30]Windows (Cygwin and MinGW)
   12648 
   12649      * GCC now installs all the major language runtime libraries as DLLs
   12650        when configured with the --enable-shared option.
   12651      * GCC now makes use of the new support for aligned common variables
   12652        in versions of binutils >= 2.20 to fix bugs in the support for SSE
   12653        data types.
   12654      * Improvements to the libffi support library increase the reliability
   12655        of code generated by GCJ on all Windows platforms. Libgcj is
   12656        enabled by default for the first time.
   12657      * Libtool improvements simplify installation by placing the generated
   12658        DLLs in the correct binaries directory.
   12659      * Numerous other minor bugfixes and improvements, and substantial
   12660        enhancements to the Fortran language support library.
   12661 
   12662    >
   12663 
   12664 Other significant improvements
   12665 
   12666   Plugins
   12667 
   12668      * It is now possible to extend the compiler without having to modify
   12669        its source code. A new option -fplugin=file.so tells GCC to load
   12670        the shared object file.so and execute it as part of the compiler.
   12671        The internal documentation describes the details on how plugins can
   12672        interact with the compiler.
   12673 
   12674   Installation changes
   12675 
   12676      * The move to newer autotools changed default installation
   12677        directories and switches to control them: The --with-datarootdir,
   12678        --with-docdir, --with-pdfdir, and --with-htmldir switches are not
   12679        used any more. Instead, you can now use --datarootdir, --docdir,
   12680        --htmldir, and --pdfdir. The default installation directories have
   12681        changed as follows according to the GNU Coding Standards:
   12682 
   12683        datarootdir read-only architecture-independent data root [PREFIX/share]
   12684        localedir   locale-specific message catalogs [DATAROOTDIR/locale]
   12685        docdir      documentation root [DATAROOTDIR/doc/PACKAGE]
   12686        htmldir     html documentation [DOCDIR]
   12687        dvidir      dvi documentation [DOCDIR]
   12688        pdfdir      pdf documentation [DOCDIR]
   12689        psdir       ps documentation [DOCDIR]
   12690        The following variables have new default values:
   12691 
   12692        datadir read-only architecture-independent data [DATAROOTDIR]
   12693        infodir info documentation [DATAROOTDIR/info]
   12694        mandir  man documentation [DATAROOTDIR/man]
   12695 
   12696 [31]GCC 4.5.1
   12697 
   12698    This is the [32]list of problem reports (PRs) from GCC's bug tracking
   12699    system that are known to be fixed in the 4.5.1 release. This list might
   12700    not be complete (that is, it is possible that some PRs that have been
   12701    fixed are not listed here).
   12702 
   12703   All languages
   12704 
   12705      * GCC's new link-time optimizer ([33]-flto) now also works on a few
   12706        non-ELF targets:
   12707           + Cygwin (*-cygwin*)
   12708           + MinGW (*-mingw*)
   12709           + Darwin on x86-64 (x86_64-apple-darwin*)
   12710        LTO is not enabled by default for these targets. To enable LTO, you
   12711        should configure with the --enable-lto option.
   12712 
   12713 [34]GCC 4.5.2
   12714 
   12715    This is the [35]list of problem reports (PRs) from GCC's bug tracking
   12716    system that are known to be fixed in the 4.5.2 release. This list might
   12717    not be complete (that is, it is possible that some PRs that have been
   12718    fixed are not listed here).
   12719 
   12720 [36]GCC 4.5.3
   12721 
   12722    This is the [37]list of problem reports (PRs) from GCC's bug tracking
   12723    system that are known to be fixed in the 4.5.3 release. This list might
   12724    not be complete (that is, it is possible that some PRs that have been
   12725    fixed are not listed here).
   12726 
   12727    On the PowerPC compiler, the Altivec builtin functions vec_ld and
   12728    vec_st have been modified to generate the Altivec memory instructions
   12729    LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5
   12730    release, these builtin functions were changed to generate VSX memory
   12731    reference instructions instead of Altivec memory instructions, but
   12732    there are differences between the two instructions. If the VSX
   12733    instruction set is available, you can now use the new builtin functions
   12734    vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   12735    instructions.
   12736 
   12737 [38]GCC 4.5.4
   12738 
   12739    This is the [39]list of problem reports (PRs) from GCC's bug tracking
   12740    system that are known to be fixed in the 4.5.4 release. This list might
   12741    not be complete (that is, it is possible that some PRs that have been
   12742    fixed are not listed here).
   12743 
   12744 
   12745     For questions related to the use of GCC, please consult these web
   12746     pages and the [40]GCC manuals. If that fails, the
   12747     [41]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12748     web pages and the development of GCC are welcome on our developer
   12749     list at [42]gcc (a] gcc.gnu.org. All of [43]our lists have public
   12750     archives.
   12751 
   12752    Copyright (C) [44]Free Software Foundation, Inc. Verbatim copying and
   12753    distribution of this entire article is permitted in any medium,
   12754    provided this notice is preserved.
   12755 
   12756    These pages are [45]maintained by the GCC team. Last modified
   12757    2025-01-31.
   12758 
   12759 References
   12760 
   12761    1. https://www.multiprecision.org/
   12762    2. https://gcc.gnu.org/install/prerequisites.html
   12763    3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
   12764    4. https://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
   12765    5. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   12766    6. https://gcc.gnu.org/PR30789
   12767    7. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   12768    8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
   12769    9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
   12770   10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
   12771   11. https://gcc.gnu.org/gcc-4.5/changes.html#cplusplus
   12772   12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   12773   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   12774   14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
   12775   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
   12776   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
   12777   17. https://sourceware.org/gdb/wiki/STLSupport
   12778   18. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
   12779   19. https://gcc.gnu.org/gcc-4.4/changes.html
   12780   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   12781   21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
   12782   22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
   12783   23. https://gcc.gnu.org/wiki/OOP
   12784   24. https://gcc.gnu.org/gcc-4.5/changes.html#targets
   12785   25. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   12786   26. https://gcc.gnu.org/gcc-4.5/changes.html#mep
   12787   27. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
   12788   28. https://gcc.gnu.org/gcc-4.5/changes.html#rx
   12789   29. https://gcc.gnu.org/gcc-4.5/changes.html#os
   12790   30. https://gcc.gnu.org/gcc-4.5/changes.html#windows
   12791   31. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
   12792   32. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
   12793   33. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   12794   34. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
   12795   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
   12796   36. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
   12797   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
   12798   38. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
   12799   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
   12800   40. https://gcc.gnu.org/onlinedocs/
   12801   41. mailto:gcc-help (a] gcc.gnu.org
   12802   42. mailto:gcc (a] gcc.gnu.org
   12803   43. https://gcc.gnu.org/lists.html
   12804   44. https://www.fsf.org/
   12805   45. https://gcc.gnu.org/about.html
   12806 ======================================================================
   12807 http://gcc.gnu.org/gcc-4.4/index.html
   12808 
   12809                              GCC 4.4 Release Series
   12810 
   12811    This release series is no longer maintained.
   12812 
   12813    March 13, 2012
   12814 
   12815    The [1]GNU project and the GCC developers are pleased to announce the
   12816    release of GCC 4.4.7.
   12817 
   12818    This release is a bug-fix release, containing fixes for regressions in
   12819    GCC 4.4.6 relative to previous releases of GCC.
   12820 
   12821 Release History
   12822 
   12823    GCC 4.4.7
   12824           March 13, 2012 ([2]changes)
   12825 
   12826    GCC 4.4.6
   12827           April 16, 2011 ([3]changes)
   12828 
   12829    GCC 4.4.5
   12830           October 1, 2010 ([4]changes)
   12831 
   12832    GCC 4.4.4
   12833           April 29, 2010 ([5]changes)
   12834 
   12835    GCC 4.4.3
   12836           January 21, 2010 ([6]changes)
   12837 
   12838    GCC 4.4.2
   12839           October 15, 2009 ([7]changes)
   12840 
   12841    GCC 4.4.1
   12842           July 22, 2009 ([8]changes)
   12843 
   12844    GCC 4.4.0
   12845           April 21, 2009 ([9]changes)
   12846 
   12847 References and Acknowledgements
   12848 
   12849    GCC used to stand for the GNU C Compiler, but since the compiler
   12850    supports several other languages aside from C, it now stands for the
   12851    GNU Compiler Collection.
   12852 
   12853    A list of [10]successful builds is updated as new information becomes
   12854    available.
   12855 
   12856    The GCC developers would like to thank the numerous people that have
   12857    contributed new features, improvements, bug fixes, and other changes as
   12858    well as test results to GCC. This [11]amazing group of volunteers is
   12859    what makes GCC successful.
   12860 
   12861    For additional information about GCC please refer to the [12]GCC
   12862    project web site or contact the [13]GCC development mailing list.
   12863 
   12864    To obtain GCC please use [14]our mirror sites or [15]our version
   12865    control system.
   12866 
   12867 
   12868     For questions related to the use of GCC, please consult these web
   12869     pages and the [16]GCC manuals. If that fails, the
   12870     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12871     web pages and the development of GCC are welcome on our developer
   12872     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   12873     archives.
   12874 
   12875    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   12876    distribution of this entire article is permitted in any medium,
   12877    provided this notice is preserved.
   12878 
   12879    These pages are [21]maintained by the GCC team. Last modified
   12880    2022-10-26.
   12881 
   12882 References
   12883 
   12884    1. http://www.gnu.org/
   12885    2. https://gcc.gnu.org/gcc-4.4/changes.html
   12886    3. https://gcc.gnu.org/gcc-4.4/changes.html
   12887    4. https://gcc.gnu.org/gcc-4.4/changes.html
   12888    5. https://gcc.gnu.org/gcc-4.4/changes.html
   12889    6. https://gcc.gnu.org/gcc-4.4/changes.html
   12890    7. https://gcc.gnu.org/gcc-4.4/changes.html
   12891    8. https://gcc.gnu.org/gcc-4.4/changes.html
   12892    9. https://gcc.gnu.org/gcc-4.4/changes.html
   12893   10. https://gcc.gnu.org/gcc-4.4/buildstat.html
   12894   11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12895   12. https://gcc.gnu.org/index.html
   12896   13. mailto:gcc (a] gcc.gnu.org
   12897   14. https://gcc.gnu.org/mirrors.html
   12898   15. https://gcc.gnu.org/git.html
   12899   16. https://gcc.gnu.org/onlinedocs/
   12900   17. mailto:gcc-help (a] gcc.gnu.org
   12901   18. mailto:gcc (a] gcc.gnu.org
   12902   19. https://gcc.gnu.org/lists.html
   12903   20. https://www.fsf.org/
   12904   21. https://gcc.gnu.org/about.html
   12905 ======================================================================
   12906 http://gcc.gnu.org/gcc-4.4/changes.html
   12907 
   12908                              GCC 4.4 Release Series
   12909                         Changes, New Features, and Fixes
   12910 
   12911    The latest release in the 4.4 release series is [1]GCC 4.4.7.
   12912 
   12913 Caveats
   12914 
   12915      * __builtin_stdarg_start has been completely removed from GCC.
   12916        Support for <varargs.h> had been deprecated since GCC 4.0. Use
   12917        __builtin_va_start as a replacement.
   12918      * Some of the errors issued by the C++ front end that could be
   12919        downgraded to warnings in previous releases by using -fpermissive
   12920        are now warnings by default. They can be converted into errors by
   12921        using -pedantic-errors.
   12922      * Use of the cpp assertion extension will now emit a warning when
   12923        -Wdeprecated or -pedantic is used. This extension has been
   12924        deprecated for many years, but never warned about.
   12925      * Packed bit-fields of type char were not properly bit-packed on many
   12926        targets prior to GCC 4.4. On these targets, the fix in GCC 4.4
   12927        causes an ABI change. For example there is no longer a 4-bit
   12928        padding between field a and b in this structure:
   12929     struct foo
   12930     {
   12931       char a:4;
   12932       char b:8;
   12933     } __attribute__ ((packed));
   12934        There is a new warning to help identify fields that are affected:
   12935     foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
   12936        The warning can be disabled with -Wno-packed-bitfield-compat.
   12937      * On ARM EABI targets, the C++ mangling of the va_list type has been
   12938        changed to conform to the current revision of the EABI. This does
   12939        not affect the libstdc++ library included with GCC.
   12940      * The SCOUNT and POS bits of the MIPS DSP control register are now
   12941        treated as global. Previous versions of GCC treated these fields as
   12942        call-clobbered instead.
   12943      * The MIPS port no longer recognizes the h asm constraint. It was
   12944        necessary to remove this constraint in order to avoid generating
   12945        unpredictable code sequences.
   12946        One of the main uses of the h constraint was to extract the high
   12947        part of a multiplication on 64-bit targets. For example:
   12948     asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
   12949        You can now achieve the same effect using 128-bit types:
   12950     typedef unsigned int uint128_t __attribute__((mode(TI)));
   12951     result = ((uint128_t) x * y) >> 64;
   12952        The second sequence is better in many ways. For example, if x and y
   12953        are constants, the compiler can perform the multiplication at
   12954        compile time. If x and y are not constants, the compiler can
   12955        schedule the runtime multiplication better than it can schedule an
   12956        asm statement.
   12957      * Support for a number of older systems and recently unmaintained or
   12958        untested target ports of GCC has been declared obsolete in GCC 4.4.
   12959        Unless there is activity to revive them, the next release of GCC
   12960        will have their sources permanently removed.
   12961        The following ports for individual systems on particular
   12962        architectures have been obsoleted:
   12963           + Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
   12964             m68k-*-aout*)
   12965           + Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
   12966             armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
   12967             sh-*-*). This does not affect other more specific targets
   12968             using the COFF object format on those architectures, or the
   12969             more specific H8300 and SH targets (h8300-*-rtems*,
   12970             h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
   12971             sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).
   12972           + 2BSD on PDP-11 (pdp11-*-bsd)
   12973           + AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
   12974             powerpc-ibm-aix4.[12]*)
   12975           + Tuning support for Itanium1 (Merced) variants. Note that code
   12976             tuned for Itanium2 should also run correctly on Itanium1.
   12977      * The protoize and unprotoize utilities have been obsoleted and will
   12978        be removed in GCC 4.5. These utilities have not been installed by
   12979        default since GCC 3.0.
   12980      * Support has been removed for all the [2]configurations obsoleted in
   12981        GCC 4.3.
   12982      * Unknown -Wno-* options are now silently ignored by GCC if no other
   12983        diagnostics are issued. If other diagnostics are issued, then GCC
   12984        warns about the unknown options.
   12985      * More information on porting to GCC 4.4 from previous versions of
   12986        GCC can be found in the [3]porting guide for this release.
   12987 
   12988 General Optimizer Improvements
   12989 
   12990      * A new command-line switch -findirect-inlining has been added. When
   12991        turned on it allows the inliner to also inline indirect calls that
   12992        are discovered to have known targets at compile time thanks to
   12993        previous inlining.
   12994      * A new command-line switch -ftree-switch-conversion has been added.
   12995        This new pass turns simple initializations of scalar variables in
   12996        switch statements into initializations from a static array, given
   12997        that all the values are known at compile time and the ratio between
   12998        the new array size and the original switch branches does not exceed
   12999        the parameter --param switch-conversion-max-branch-ratio (default
   13000        is eight).
   13001      * A new command-line switch -ftree-builtin-call-dce has been added.
   13002        This optimization eliminates unnecessary calls to certain builtin
   13003        functions when the return value is not used, in cases where the
   13004        calls can not be eliminated entirely because the function may set
   13005        errno. This optimization is on by default at -O2 and above.
   13006      * A new command-line switch -fconserve-stack directs the compiler to
   13007        minimize stack usage even if it makes the generated code slower.
   13008        This affects inlining decisions.
   13009      * When the assembler supports it, the compiler will now emit unwind
   13010        information using assembler .cfi directives. This makes it possible
   13011        to use such directives in inline assembler code. The new option
   13012        -fno-dwarf2-cfi-asm directs the compiler to not use .cfi
   13013        directives.
   13014      * The [4]Graphite branch has been merged. This merge has brought in a
   13015        new framework for loop optimizations based on a polyhedral
   13016        intermediate representation. These optimizations apply to all the
   13017        languages supported by GCC. The following new code transformations
   13018        are available in GCC 4.4:
   13019           + -floop-interchange performs loop interchange transformations
   13020             on loops. Interchanging two nested loops switches the inner
   13021             and outer loops. For example, given a loop like:
   13022           DO J = 1, M
   13023             DO I = 1, N
   13024               A(J, I) = A(J, I) * C
   13025             ENDDO
   13026           ENDDO
   13027 
   13028             loop interchange will transform the loop as if the user had
   13029             written:
   13030           DO I = 1, N
   13031             DO J = 1, M
   13032               A(J, I) = A(J, I) * C
   13033             ENDDO
   13034           ENDDO
   13035 
   13036             which can be beneficial when N is larger than the caches,
   13037             because in Fortran, the elements of an array are stored in
   13038             memory contiguously by column, and the original loop iterates
   13039             over rows, potentially creating at each access a cache miss.
   13040           + -floop-strip-mine performs loop strip mining transformations
   13041             on loops. Strip mining splits a loop into two nested loops.
   13042             The outer loop has strides equal to the strip size and the
   13043             inner loop has strides of the original loop within a strip.
   13044             For example, given a loop like:
   13045           DO I = 1, N
   13046             A(I) = A(I) + C
   13047           ENDDO
   13048 
   13049             loop strip mining will transform the loop as if the user had
   13050             written:
   13051           DO II = 1, N, 4
   13052             DO I = II, min (II + 3, N)
   13053               A(I) = A(I) + C
   13054             ENDDO
   13055           ENDDO
   13056 
   13057           + -floop-block performs loop blocking transformations on loops.
   13058             Blocking strip mines each loop in the loop nest such that the
   13059             memory accesses of the element loops fit inside caches. For
   13060             example, given a loop like:
   13061           DO I = 1, N
   13062             DO J = 1, M
   13063               A(J, I) = B(I) + C(J)
   13064             ENDDO
   13065           ENDDO
   13066 
   13067             loop blocking will transform the loop as if the user had
   13068             written:
   13069           DO II = 1, N, 64
   13070             DO JJ = 1, M, 64
   13071               DO I = II, min (II + 63, N)
   13072                 DO J = JJ, min (JJ + 63, M)
   13073                   A(J, I) = B(I) + C(J)
   13074                 ENDDO
   13075               ENDDO
   13076             ENDDO
   13077           ENDDO
   13078 
   13079             which can be beneficial when M is larger than the caches,
   13080             because the innermost loop will iterate over a smaller amount
   13081             of data that can be kept in the caches.
   13082      * A new register allocator has replaced the old one. It is called
   13083        integrated register allocator (IRA) because coalescing, register
   13084        live range splitting, and hard register preferencing are done
   13085        on-the-fly during coloring. It also has better integration with the
   13086        reload pass. IRA is a regional register allocator which uses modern
   13087        Chaitin-Briggs coloring instead of Chow's priority coloring used in
   13088        the old register allocator. More info about IRA internals and
   13089        options can be found in the GCC manuals.
   13090      * A new instruction scheduler and software pipeliner, based on the
   13091        selective scheduling approach, has been added. The new pass
   13092        performs instruction unification, register renaming, substitution
   13093        through register copies, and speculation during scheduling. The
   13094        software pipeliner is able to pipeline non-countable loops. The new
   13095        pass is targeted at scheduling-eager in-order platforms. In GCC 4.4
   13096        it is available for the Intel Itanium platform working by default
   13097        as the second scheduling pass (after register allocation) at the
   13098        -O3 optimization level.
   13099      * When using -fprofile-generate with a multi-threaded program, the
   13100        profile counts may be slightly wrong due to race conditions. The
   13101        new -fprofile-correction option directs the compiler to apply
   13102        heuristics to smooth out the inconsistencies. By default the
   13103        compiler will give an error message when it finds an inconsistent
   13104        profile.
   13105      * The new -fprofile-dir=PATH option permits setting the directory
   13106        where profile data files are stored when using -fprofile-generate
   13107        and friends, and the directory used when reading profile data files
   13108        using -fprofile-use and friends.
   13109 
   13110 New warning options
   13111 
   13112      * The new -Wframe-larger-than=NUMBER option directs GCC to emit a
   13113        warning if any stack frame is larger than NUMBER bytes. This may be
   13114        used to help ensure that code fits within a limited amount of stack
   13115        space.
   13116      * The command-line option -Wlarger-than-N is now written as
   13117        -Wlarger-than=N and the old form is deprecated.
   13118      * The new -Wno-mudflap option disables warnings about constructs
   13119        which can not be instrumented when using -fmudflap.
   13120 
   13121 New Languages and Language specific improvements
   13122 
   13123      * Version 3.0 of the OpenMP specification is now supported for the C,
   13124        C++, and Fortran compilers.
   13125      * New character data types, per [5]TR 19769: New character types in
   13126        C, are now supported for the C compiler in -std=gnu99 mode, as
   13127        __CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in
   13128        -std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too.
   13129 
   13130   C family
   13131 
   13132      * A new optimize attribute was added to allow programmers to change
   13133        the optimization level and particular optimization options for an
   13134        individual function. You can also change the optimization options
   13135        via the GCC optimize pragma for functions defined after the pragma.
   13136        The GCC push_options pragma and the GCC pop_options pragma allow
   13137        you temporarily save and restore the options used. The GCC
   13138        reset_options pragma restores the options to what was specified on
   13139        the command line.
   13140      * Uninitialized warnings do not require enabling optimization
   13141        anymore, that is, -Wuninitialized can be used together with -O0.
   13142        Nonetheless, the warnings given by -Wuninitialized will probably be
   13143        more accurate if optimization is enabled.
   13144      * -Wparentheses now warns about expressions such as (!x | y) and (!x
   13145        & y). Using explicit parentheses, such as in ((!x) | y), silences
   13146        this warning.
   13147      * -Wsequence-point now warns within if, while,do while and for
   13148        conditions, and within for begin/end expressions.
   13149      * A new option -dU is available to dump definitions of preprocessor
   13150        macros that are tested or expanded.
   13151 
   13152   C++
   13153 
   13154      * [6]Improved experimental support for the upcoming ISO C++ standard,
   13155        C++0x. Including support for auto, inline namespaces, generalized
   13156        initializer lists, defaulted and deleted functions, new character
   13157        types, and scoped enums.
   13158      * Those errors that may be downgraded to warnings to build legacy
   13159        code now mention -fpermissive when -fdiagnostics-show-option is
   13160        enabled.
   13161      * -Wconversion now warns if the result of a static_cast to enumeral
   13162        type is unspecified because the value is outside the range of the
   13163        enumeral type.
   13164      * -Wuninitialized now warns if a non-static reference or non-static
   13165        const member appears in a class without constructors.
   13166      * G++ now properly implements value-initialization, so objects with
   13167        an initializer of () and an implicitly defined default constructor
   13168        will be zero-initialized before the default constructor is called.
   13169 
   13170     Runtime Library (libstdc++)
   13171 
   13172      * Improved experimental support for the upcoming ISO C++ standard,
   13173        C++0x, including:
   13174           + Support for <chrono>, <condition_variable>, <cstdatomic>,
   13175             <forward_list>, <initializer_list>, <mutex>, <ratio>,
   13176             <system_error>, and <thread>.
   13177           + unique_ptr, <algorithm> additions, exception propagation, and
   13178             support for the new character types in <string> and <limits>.
   13179           + Existing facilities now exploit initializer lists, defaulted
   13180             and deleted functions, and the newly implemented core C++0x
   13181             features.
   13182           + Some standard containers are more efficient together with
   13183             stateful allocators, i.e., no allocator is constructed on the
   13184             fly at element construction time.
   13185      * Experimental support for non-standard pointer types in containers.
   13186      * The long standing libstdc++/30928 has been fixed for targets
   13187        running glibc 2.10 or later.
   13188      * As usual, many small and larger bug fixes, in particular quite a
   13189        few corner cases in <locale>.
   13190 
   13191   Fortran
   13192 
   13193      * GNU Fortran now employs libcpp directly instead of using cc1 as an
   13194        external preprocessor. The [7]-cpp option was added to allow manual
   13195        invocation of the preprocessor without relying on filename
   13196        extensions.
   13197      * The [8]-Warray-temporaries option warns about array temporaries
   13198        generated by the compiler, as an aid to optimization.
   13199      * The [9]-fcheck-array-temporaries option has been added, printing a
   13200        notification at run time, when an array temporary had to be created
   13201        for an function argument. Contrary to -Warray-temporaries the
   13202        warning is only printed if the array is noncontiguous.
   13203      * Improved generation of DWARF debugging symbols
   13204      * If using an intrinsic not part of the selected standard (via -std=
   13205        and -fall-intrinsics) gfortran will now treat it as if this
   13206        procedure were declared EXTERNAL and try to link to a user-supplied
   13207        procedure. -Wintrinsics-std will warn whenever this happens. The
   13208        now-useless option -Wnonstd-intrinsic was removed.
   13209      * The flag -falign-commons has been added to control the alignment of
   13210        variables in COMMON blocks, which is enabled by default in line
   13211        with previous GCC version. Using -fno-align-commons one can force
   13212        commons to be contiguous in memory as required by the Fortran
   13213        standard, however, this slows down the memory access. The option
   13214        -Walign-commons, which is enabled by default, warns when padding
   13215        bytes were added for alignment. The proper solution is to sort the
   13216        common objects by decreasing storage size, which avoids the
   13217        alignment problems.
   13218      * Fortran 2003 support has been extended:
   13219           + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
   13220             now supported (except internal reads from/writes to wide
   13221             strings). [10]-fbackslash now supports also \unnnn and
   13222             \Unnnnnnnn to enter Unicode characters.
   13223           + Asynchronous I/O (implemented as synchronous I/O) and the
   13224             decimal=, size=, sign=, pad=, blank=, and delim= specifiers
   13225             are now supported in I/O statements.
   13226           + Support for Fortran 2003 structure constructors and for array
   13227             constructor with typespec has been added.
   13228           + Procedure Pointers (but not yet as component in derived types
   13229             and as function results) are now supported.
   13230           + Abstract types, type extension, and type-bound procedures
   13231             (both PROCEDURE and GENERIC but not as operators). Note: As
   13232             CLASS/polymorphyic types are not implemented, type-bound
   13233             procedures with PASS accept as non-standard extension TYPE
   13234             arguments.
   13235      * Fortran 2008 support has been added:
   13236           + The -std=f2008 option and support for the file extensions
   13237             .f2008 and .F2008 has been added.
   13238           + The g0 format descriptor is now supported.
   13239           + The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH,
   13240             ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED
   13241             are now available (some of them existed as GNU extension
   13242             before). Note: The hyperbolic functions are not yet supporting
   13243             complex arguments and the three- argument version of BESSEL_*N
   13244             is not available.
   13245           + The bit intrinsics LEADZ and TRAILZ have been added.
   13246 
   13247   Java (GCJ)
   13248 
   13249   Ada
   13250 
   13251      * The Ada runtime now supports multilibs on many platforms including
   13252        x86_64, SPARC and PowerPC. Their build is enabled by default.
   13253 
   13254 [11]New Targets and Target Specific Improvements
   13255 
   13256   ARM
   13257 
   13258      * GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
   13259        Cortex-R4F processors and has many other improvements to
   13260        optimization for ARM processors.
   13261      * GCC now supports the VFPv3 variant with 16 double-precision
   13262        registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been
   13263        renamed to -mfpu=vfpv3.
   13264      * GCC now supports the -mfix-cortex-m3-ldrd option to work around an
   13265        erratum on Cortex-M3 processors.
   13266      * GCC now supports the __sync_* atomic operations for ARM EABI
   13267        GNU/Linux.
   13268      * The section anchors optimization is now enabled by default when
   13269        optimizing for ARM.
   13270      * GCC now uses a new EABI-compatible profiling interface for EABI
   13271        targets. This requires a function __gnu_mcount_nc, which is
   13272        provided by GNU libc versions 2.8 and later.
   13273 
   13274   AVR
   13275 
   13276      * The -mno-tablejump option has been deprecated because it has the
   13277        same effect as the -fno-jump-tables option.
   13278      * Added support for these new AVR devices:
   13279           + ATA6289
   13280           + ATtiny13A
   13281           + ATtiny87
   13282           + ATtiny167
   13283           + ATtiny327
   13284           + ATmega8C1
   13285           + ATmega16C1
   13286           + ATmega32C1
   13287           + ATmega8M1
   13288           + ATmega16M1
   13289           + ATmega32M1
   13290           + ATmega32U4
   13291           + ATmega16HVB
   13292           + ATmega4HVD
   13293           + ATmega8HVD
   13294           + ATmega64C1
   13295           + ATmega64M1
   13296           + ATmega16U4
   13297           + ATmega32U6
   13298           + ATmega128RFA1
   13299           + AT90PWM81
   13300           + AT90SCR100
   13301           + M3000F
   13302           + M3000S
   13303           + M3001B
   13304 
   13305   IA-32/x86-64
   13306 
   13307      * Support for Intel AES built-in functions and code generation is
   13308        available via -maes.
   13309      * Support for Intel PCLMUL built-in function and code generation is
   13310        available via -mpclmul.
   13311      * Support for Intel AVX built-in functions and code generation is
   13312        available via -mavx.
   13313      * Automatically align the stack for local variables with alignment
   13314        requirement.
   13315      * GCC can now utilize the SVML library for vectorizing calls to a set
   13316        of C99 functions if -mveclibabi=svml is specified and you link to
   13317        an SVML ABI compatible library.
   13318      * On x86-64, the ABI has been changed in the following cases to
   13319        conform to the x86-64 ABI:
   13320           + Passing/returning structures with flexible array member:
   13321   struct foo
   13322     {
   13323       int i;
   13324       int flex[];
   13325     };
   13326           + Passing/returning structures with complex float member:
   13327   struct foo
   13328     {
   13329       int i;
   13330       __complex__ float f;
   13331     };
   13332           + Passing/returning unions with long double member:
   13333   union foo
   13334     {
   13335       int x;
   13336       long double ld;
   13337     };
   13338        Code built with previous versions of GCC that uses any of these is
   13339        not compatible with code built with GCC 4.4.0 or later.
   13340      * A new target attribute was added to allow programmers to change the
   13341        target options like -msse2 or -march=k8 for an individual function.
   13342        You can also change the target options via the GCC target pragma
   13343        for functions defined after the pragma.
   13344      * GCC can now be configured with options --with-arch-32,
   13345        --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
   13346        --with-tune-64 to control the default optimization separately for
   13347        32-bit and 64-bit modes.
   13348 
   13349   IA-32/IA64
   13350 
   13351      * Support for __float128 (TFmode) IEEE quad type and corresponding
   13352        TCmode IEEE complex quad type is available via the soft-fp library
   13353        on IA-32/IA64 targets. This includes basic arithmetic operations
   13354        (addition, subtraction, negation, multiplication and division) on
   13355        __float128 real and TCmode complex values, the full set of IEEE
   13356        comparisons between __float128 values, conversions to and from
   13357        float, double and long double floating point types, as well as
   13358        conversions to and from signed or unsigned integer, signed or
   13359        unsigned long integer and signed or unsigned quad (TImode, IA64
   13360        only) integer types. Additionally, all operations generate the full
   13361        set of IEEE exceptions and support the full set of IEEE rounding
   13362        modes.
   13363 
   13364   M68K/ColdFire
   13365 
   13366      * GCC now supports instruction scheduling for ColdFire V1, V3 and V4
   13367        processors. (Scheduling support for ColdFire V2 processors was
   13368        added in GCC 4.3.)
   13369      * GCC now supports the -mxgot option to support programs requiring
   13370        many GOT entries on ColdFire.
   13371      * The m68k-*-linux-gnu target now builds multilibs by default.
   13372 
   13373   MIPS
   13374 
   13375      * MIPS Technologies have extended the original MIPS SVR4 ABI to
   13376        include support for procedure linkage tables (PLTs) and copy
   13377        relocations. These extensions allow GNU/Linux executables to use a
   13378        significantly more efficient code model than the one defined by the
   13379        original ABI.
   13380        GCC support for this code model is available via a new command-line
   13381        option, -mplt. There is also a new configure-time option,
   13382        --with-mips-plt, to make -mplt the default.
   13383        The new code model requires support from the assembler, the linker,
   13384        and the runtime C library. This support is available in binutils
   13385        2.19 and GLIBC 2.9.
   13386      * GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
   13387        and 32-bit GNU/Linux shared libraries. This feature requires GNU
   13388        binutils 2.19 or above.
   13389      * Support for RMI's XLR processor is now available through the
   13390        -march=xlr and -mtune=xlr options.
   13391      * 64-bit targets can now perform 128-bit multiplications inline,
   13392        instead of relying on a libgcc function.
   13393      * Native GNU/Linux toolchains now support -march=native and
   13394        -mtune=native, which select the host processor.
   13395      * GCC now supports the R10K, R12K, R14K and R16K processors. The
   13396        canonical -march= and -mtune= names for these processors are
   13397        r10000, r12000, r14000 and r16000 respectively.
   13398      * GCC can now work around the side effects of speculative execution
   13399        on R10K processors. Please see the documentation of the
   13400        -mr10k-cache-barrier option for details.
   13401      * Support for the MIPS64 Release 2 instruction set has been added.
   13402        The option -march=mips64r2 enables generation of these
   13403        instructions.
   13404      * GCC now supports Cavium Networks' Octeon processor. This support is
   13405        available through the -march=octeon and -mtune=octeon options.
   13406      * GCC now supports STMicroelectronics' Loongson 2E/2F processors. The
   13407        canonical -march= and -mtune= names for these processors are
   13408        loongson2e and loongson2f.
   13409 
   13410   [12]picochip
   13411 
   13412    Picochip is a 16-bit processor. A typical picoChip contains over 250
   13413    small cores, each with small amounts of memory. There are three
   13414    processor variants (STAN, MEM and CTRL) with different instruction sets
   13415    and memory configurations and they can be chosen using the -mae option.
   13416 
   13417    This port is intended to be a "C" only port.
   13418 
   13419   Power Architecture and PowerPC
   13420 
   13421      * GCC now supports the e300c2, e300c3 and e500mc processors.
   13422      * GCC now supports Xilinx processors with a single-precision FPU.
   13423      * Decimal floating point is now supported for e500 processors.
   13424 
   13425   S/390, zSeries and System z9/z10
   13426 
   13427      * Support for the IBM System z10 EC/BC processor has been added. When
   13428        using the -march=z10 option, the compiler will generate code making
   13429        use of instructions provided by the General-Instruction-Extension
   13430        Facility and the Execute-Extension Facility.
   13431 
   13432   VxWorks
   13433 
   13434      * GCC now supports the thread-local storage mechanism used on
   13435        VxWorks.
   13436 
   13437   Xtensa
   13438 
   13439      * GCC now supports thread-local storage (TLS) for Xtensa processor
   13440        configurations that include the Thread Pointer option. TLS also
   13441        requires support from the assembler and linker; this support is
   13442        provided in the GNU binutils beginning with version 2.19.
   13443 
   13444 Documentation improvements
   13445 
   13446 Other significant improvements
   13447 
   13448 [13]GCC 4.4.1
   13449 
   13450    This is the [14]list of problem reports (PRs) from GCC's bug tracking
   13451    system that are known to be fixed in the 4.4.1 release. This list might
   13452    not be complete (that is, it is possible that some PRs that have been
   13453    fixed are not listed here).
   13454 
   13455 [15]GCC 4.4.2
   13456 
   13457    This is the [16]list of problem reports (PRs) from GCC's bug tracking
   13458    system that are known to be fixed in the 4.4.2 release. This list might
   13459    not be complete (that is, it is possible that some PRs that have been
   13460    fixed are not listed here).
   13461 
   13462 [17]GCC 4.4.3
   13463 
   13464    This is the [18]list of problem reports (PRs) from GCC's bug tracking
   13465    system that are known to be fixed in the 4.4.3 release. This list might
   13466    not be complete (that is, it is possible that some PRs that have been
   13467    fixed are not listed here).
   13468 
   13469 [19]GCC 4.4.4
   13470 
   13471    This is the [20]list of problem reports (PRs) from GCC's bug tracking
   13472    system that are known to be fixed in the 4.4.4 release. This list might
   13473    not be complete (that is, it is possible that some PRs that have been
   13474    fixed are not listed here).
   13475 
   13476 [21]GCC 4.4.5
   13477 
   13478    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   13479    system that are known to be fixed in the 4.4.5 release. This list might
   13480    not be complete (that is, it is possible that some PRs that have been
   13481    fixed are not listed here).
   13482 
   13483 [23]GCC 4.4.6
   13484 
   13485    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   13486    system that are known to be fixed in the 4.4.6 release. This list might
   13487    not be complete (that is, it is possible that some PRs that have been
   13488    fixed are not listed here).
   13489 
   13490 [25]GCC 4.4.7
   13491 
   13492    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   13493    system that are known to be fixed in the 4.4.7 release. This list might
   13494    not be complete (that is, it is possible that some PRs that have been
   13495    fixed are not listed here).
   13496 
   13497 
   13498     For questions related to the use of GCC, please consult these web
   13499     pages and the [27]GCC manuals. If that fails, the
   13500     [28]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13501     web pages and the development of GCC are welcome on our developer
   13502     list at [29]gcc (a] gcc.gnu.org. All of [30]our lists have public
   13503     archives.
   13504 
   13505    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
   13506    distribution of this entire article is permitted in any medium,
   13507    provided this notice is preserved.
   13508 
   13509    These pages are [32]maintained by the GCC team. Last modified
   13510    2025-01-31.
   13511 
   13512 References
   13513 
   13514    1. https://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
   13515    2. https://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
   13516    3. https://gcc.gnu.org/gcc-4.4/porting_to.html
   13517    4. https://gcc.gnu.org/wiki/Graphite
   13518    5. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
   13519    6. https://gcc.gnu.org/gcc-4.4/cxx0x_status.html
   13520    7. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
   13521    8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
   13522    9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
   13523   10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
   13524   11. https://gcc.gnu.org/gcc-4.4/changes.html#targets
   13525   12. https://gcc.gnu.org/gcc-4.4/changes.html#picochip
   13526   13. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.1
   13527   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
   13528   15. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.2
   13529   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
   13530   17. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.3
   13531   18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
   13532   19. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.4
   13533   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
   13534   21. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.5
   13535   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
   13536   23. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.6
   13537   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
   13538   25. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.7
   13539   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
   13540   27. https://gcc.gnu.org/onlinedocs/
   13541   28. mailto:gcc-help (a] gcc.gnu.org
   13542   29. mailto:gcc (a] gcc.gnu.org
   13543   30. https://gcc.gnu.org/lists.html
   13544   31. https://www.fsf.org/
   13545   32. https://gcc.gnu.org/about.html
   13546 ======================================================================
   13547 http://gcc.gnu.org/gcc-4.3/index.html
   13548 
   13549                              GCC 4.3 Release Series
   13550 
   13551    (This release series is no longer supported.)
   13552 
   13553    Jun 27, 2011
   13554 
   13555    The [1]GNU project and the GCC developers are pleased to announce the
   13556    release of GCC 4.3.6.
   13557 
   13558    This release is a bug-fix release, containing fixes for regressions in
   13559    GCC 4.3.5 relative to previous releases of GCC.
   13560 
   13561 Release History
   13562 
   13563    GCC 4.3.6
   13564           Jun 27, 2011 ([2]changes)
   13565 
   13566    GCC 4.3.5
   13567           May 22, 2010 ([3]changes)
   13568 
   13569    GCC 4.3.4
   13570           August 4, 2009 ([4]changes)
   13571 
   13572    GCC 4.3.3
   13573           January 24, 2009 ([5]changes)
   13574 
   13575    GCC 4.3.2
   13576           August 27, 2008 ([6]changes)
   13577 
   13578    GCC 4.3.1
   13579           June 6, 2008 ([7]changes)
   13580 
   13581    GCC 4.3.0
   13582           March 5, 2008 ([8]changes)
   13583 
   13584 References and Acknowledgements
   13585 
   13586    GCC used to stand for the GNU C Compiler, but since the compiler
   13587    supports several other languages aside from C, it now stands for the
   13588    GNU Compiler Collection.
   13589 
   13590    A list of [9]successful builds is updated as new information becomes
   13591    available.
   13592 
   13593    The GCC developers would like to thank the numerous people that have
   13594    contributed new features, improvements, bug fixes, and other changes as
   13595    well as test results to GCC. This [10]amazing group of volunteers is
   13596    what makes GCC successful.
   13597 
   13598    For additional information about GCC please refer to the [11]GCC
   13599    project web site or contact the [12]GCC development mailing list.
   13600 
   13601    To obtain GCC please use [13]our mirror sites or [14]our version
   13602    control system.
   13603 
   13604 
   13605     For questions related to the use of GCC, please consult these web
   13606     pages and the [15]GCC manuals. If that fails, the
   13607     [16]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13608     web pages and the development of GCC are welcome on our developer
   13609     list at [17]gcc (a] gcc.gnu.org. All of [18]our lists have public
   13610     archives.
   13611 
   13612    Copyright (C) [19]Free Software Foundation, Inc. Verbatim copying and
   13613    distribution of this entire article is permitted in any medium,
   13614    provided this notice is preserved.
   13615 
   13616    These pages are [20]maintained by the GCC team. Last modified
   13617    2022-10-26.
   13618 
   13619 References
   13620 
   13621    1. http://www.gnu.org/
   13622    2. https://gcc.gnu.org/gcc-4.3/changes.html
   13623    3. https://gcc.gnu.org/gcc-4.3/changes.html
   13624    4. https://gcc.gnu.org/gcc-4.3/changes.html
   13625    5. https://gcc.gnu.org/gcc-4.3/changes.html
   13626    6. https://gcc.gnu.org/gcc-4.3/changes.html
   13627    7. https://gcc.gnu.org/gcc-4.3/changes.html
   13628    8. https://gcc.gnu.org/gcc-4.3/changes.html
   13629    9. https://gcc.gnu.org/gcc-4.3/buildstat.html
   13630   10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13631   11. https://gcc.gnu.org/index.html
   13632   12. mailto:gcc (a] gcc.gnu.org
   13633   13. https://gcc.gnu.org/mirrors.html
   13634   14. https://gcc.gnu.org/git.html
   13635   15. https://gcc.gnu.org/onlinedocs/
   13636   16. mailto:gcc-help (a] gcc.gnu.org
   13637   17. mailto:gcc (a] gcc.gnu.org
   13638   18. https://gcc.gnu.org/lists.html
   13639   19. https://www.fsf.org/
   13640   20. https://gcc.gnu.org/about.html
   13641 ======================================================================
   13642 http://gcc.gnu.org/gcc-4.3/changes.html
   13643 
   13644                              GCC 4.3 Release Series
   13645                         Changes, New Features, and Fixes
   13646 
   13647    The latest release in the 4.3 release series is [1]GCC 4.3.5.
   13648 
   13649 Caveats
   13650 
   13651      * GCC requires the [2]GMP and [3]MPFR libraries for building all the
   13652        various front-end languages it supports. See the [4]prerequisites
   13653        page for version requirements.
   13654      * ColdFire targets now treat long double as having the same format as
   13655        double. In earlier versions of GCC, they used the 68881 long double
   13656        format instead.
   13657      * The m68k-uclinux target now uses the same calling conventions as
   13658        m68k-linux-gnu. You can select the original calling conventions by
   13659        configuring for m68k-uclinuxoldabi instead. Note that
   13660        m68k-uclinuxoldabi also retains the original 80-bit long double on
   13661        ColdFire targets.
   13662      * The -fforce-mem option has been removed because it has had no
   13663        effect in the last few GCC releases.
   13664      * The i386 -msvr3-shlib option has been removed since it is no longer
   13665        used.
   13666      * Fastcall for i386 has been changed not to pass aggregate arguments
   13667        in registers, following Microsoft compilers.
   13668      * Support for the AOF assembler has been removed from the ARM back
   13669        end; this affects only the targets arm-semi-aof and armel-semi-aof,
   13670        which are no longer recognized. We removed these targets without a
   13671        deprecation period because we discovered that they have been
   13672        unusable since GCC 4.0.0.
   13673      * Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*)
   13674        has been removed. This support had been deprecated since GCC 4.0.0.
   13675      * Support for a number of older systems and recently unmaintained or
   13676        untested target ports of GCC has been declared obsolete in GCC 4.3.
   13677        Unless there is activity to revive them, the next release of GCC
   13678        will have their sources permanently removed.
   13679        All GCC ports for the following processor architectures have been
   13680        declared obsolete:
   13681           + Morpho MT (mt-*)
   13682        The following aliases for processor architectures have been
   13683        declared obsolete. Users should use the indicated generic target
   13684        names instead, with compile-time options such as -mcpu or
   13685        configure-time options such as --with-cpu to control the
   13686        configuration more precisely.
   13687           + strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-*
   13688             instead).
   13689           + parisc*-*-* (use hppa*-*-* instead).
   13690           + m680[012]0-*-* (use m68k-*-* instead).
   13691        All GCC ports for the following operating systems have been
   13692        declared obsolete:
   13693           + BeOS (*-*-beos*)
   13694           + kaOS (*-*-kaos*)
   13695           + GNU/Linux using the a.out object format (*-*-linux*aout*)
   13696           + GNU/Linux using version 1 of the GNU C Library
   13697             (*-*-linux*libc1*)
   13698           + Solaris versions before Solaris 7 (*-*-solaris2.[0-6],
   13699             *-*-solaris2.[0-6].*)
   13700           + Miscellaneous System V (*-*-sysv*)
   13701           + WindISS (*-*-windiss*)
   13702        Also, those for some individual systems on particular architectures
   13703        have been obsoleted:
   13704           + UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*)
   13705           + CRIS with a.out object format (cris-*-aout)
   13706           + BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
   13707           + OSF/1 on PA-RISC (hppa1.1-*-osf*)
   13708           + PRO on PA-RISC (hppa1.1-*-pro*)
   13709           + Sequent PTX on IA32 (i[34567]86-sequent-ptx4*,
   13710             i[34567]86-sequent-sysv4*)
   13711           + SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*)
   13712           + UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host
   13713             was previously [5]removed in 2001, leaving only the support
   13714             for UWIN as a target now being deprecated)
   13715           + ChorusOS on PowerPC (powerpc-*-chorusos*)
   13716           + All VAX configurations apart from NetBSD and OpenBSD
   13717             (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*)
   13718      * The [6]-Wconversion option has been modified. Its purpose now is to
   13719        warn for implicit conversions that may alter a value. This new
   13720        behavior is available for both C and C++. Warnings about
   13721        conversions between signed and unsigned integers can be disabled by
   13722        using -Wno-sign-conversion. In C++, they are disabled by default
   13723        unless -Wsign-conversion is explicitly requested. The old behavior
   13724        of -Wconversion, that is, warn for prototypes causing a type
   13725        conversion that is different from what would happen to the same
   13726        argument in the absence of a prototype, has been moved to a new
   13727        option -Wtraditional-conversion, which is only available for C.
   13728      * The -m386, -m486, -mpentium and -mpentiumpro tuning options have
   13729        been removed because they were deprecated for more than 3 GCC major
   13730        releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or
   13731        -mtune=pentiumpro as a replacement.
   13732      * The -funsafe-math-optimizations option now automatically turns on
   13733        -fno-trapping-math in addition to -fno-signed-zeros, as it enables
   13734        reassociation and thus may introduce or remove traps.
   13735      * The -ftree-vectorize option is now on by default under -O3. In
   13736        order to generate code for a SIMD extension, it has to be enabled
   13737        as well: use -maltivec for PowerPC platforms and -msse/-msse2 for
   13738        i?86 and x86_64.
   13739      * More information on porting to GCC 4.3 from previous versions of
   13740        GCC can be found in the [7]porting guide for this release.
   13741 
   13742 General Optimizer Improvements
   13743 
   13744      * The GCC middle-end has been integrated with the MPFR library. This
   13745        allows GCC to evaluate and replace at compile-time calls to
   13746        built-in math functions having constant arguments with their
   13747        mathematically equivalent results. In making use of MPFR, GCC can
   13748        generate correct results regardless of the math library
   13749        implementation or floating point precision of the host platform.
   13750        This also allows GCC to generate identical results regardless of
   13751        whether one compiles in native or cross-compile configurations to a
   13752        particular target. The following built-in functions take advantage
   13753        of this new capability: acos, acosh, asin, asinh, atan2, atan,
   13754        atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1,
   13755        fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10,
   13756        log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh,
   13757        tan, tanh, tgamma, y0, y1 and yn. The float and long double
   13758        variants of these functions (e.g. sinf and sinl) are also handled.
   13759        The sqrt and cabs functions with constant arguments were already
   13760        optimized in prior GCC releases. Now they also use MPFR.
   13761      * A new forward propagation pass on RTL was added. The new pass
   13762        replaces several slower transformations, resulting in compile-time
   13763        improvements as well as better code generation in some cases.
   13764      * A new command-line switch -frecord-gcc-switches has been added to
   13765        GCC, although it is only enabled for some targets. The switch
   13766        causes the command line that was used to invoke the compiler to be
   13767        recorded into the object file that is being created. The exact
   13768        format of this recording is target and binary file format
   13769        dependent, but it usually takes the form of a note section
   13770        containing ASCII text. The switch is related to the -fverbose-asm
   13771        switch, but that one only records the information in the assembler
   13772        output file as comments, so the information never reaches the
   13773        object file.
   13774      * The inliner heuristic is now aware of stack frame consumption. New
   13775        command-line parameters --param large-stack-frame and --param
   13776        large-stack-frame-growth can be used to limit stack frame size
   13777        growth caused by inlining.
   13778      * During feedback directed optimizations, the expected block size the
   13779        memcpy, memset and bzero functions operate on is discovered and for
   13780        cases of commonly used small sizes, specialized inline code is
   13781        generated.
   13782      * __builtin_expect no longer requires its argument to be a compile
   13783        time constant.
   13784      * Interprocedural optimization was reorganized to work on functions
   13785        in SSA form. This enables more precise and cheaper dataflow
   13786        analysis and makes writing interprocedural optimizations easier.
   13787        The following improvements have been implemented on top of this
   13788        framework:
   13789           + Pre-inline optimization: Selected local optimization passes
   13790             are run before the inliner (and other interprocedural passes)
   13791             are executed. This significantly improves the accuracy of code
   13792             growth estimates used by the inliner and reduces the overall
   13793             memory footprint for large compilation units.
   13794           + Early inlining (a simple bottom-up inliner pass inlining only
   13795             functions whose body is smaller than the expected call
   13796             overhead) is now executed with the early optimization passes,
   13797             thus inlining already optimized function bodies into an
   13798             unoptimized function that is subsequently optimized by early
   13799             optimizers. This enables the compiler to quickly eliminate
   13800             abstraction penalty in C++ programs.
   13801           + Interprocedural constant propagation now operate on SSA form
   13802             increasing accuracy of the analysis.
   13803      * A new internal representation for GIMPLE statements has been
   13804        contributed, resulting in compile-time memory savings.
   13805      * The vectorizer was enhanced to support vectorization of outer
   13806        loops, intra-iteration parallelism (loop-aware SLP), vectorization
   13807        of strided accesses and loops with multiple data-types. Run-time
   13808        dependency testing using loop versioning was added. The cost model,
   13809        turned on by -fvect-cost-model, was developed.
   13810 
   13811 New Languages and Language specific improvements
   13812 
   13813      * We have added new command-line options
   13814        -finstrument-functions-exclude-function-list and
   13815        -finstrument-functions-exclude-file-list. They provide more control
   13816        over which functions are annotated by the -finstrument-functions
   13817        option.
   13818 
   13819   C family
   13820 
   13821      * Implicit conversions between generic vector types are now only
   13822        permitted when the two vectors in question have the same number of
   13823        elements and compatible element types. (Note that the restriction
   13824        involves compatible element types, not implicitly-convertible
   13825        element types: thus, a vector type with element type int may not be
   13826        implicitly converted to a vector type with element type unsigned
   13827        int.) This restriction, which is in line with specifications for
   13828        SIMD architectures such as AltiVec, may be relaxed using the flag
   13829        -flax-vector-conversions. This flag is intended only as a
   13830        compatibility measure and should not be used for new code.
   13831      * -Warray-bounds has been added and is now enabled by default for
   13832        -Wall . It produces warnings for array subscripts that can be
   13833        determined at compile time to be always out of bounds.
   13834        -Wno-array-bounds will disable the warning.
   13835      * The constructor and destructor function attributes now accept
   13836        optional priority arguments which control the order in which the
   13837        constructor and destructor functions are run.
   13838      * New [8]command-line options -Wtype-limits, -Wold-style-declaration,
   13839        -Wmissing-parameter-type, -Wempty-body, -Wclobbered and
   13840        -Wignored-qualifiers have been added for finer control of the
   13841        diverse warnings enabled by -Wextra.
   13842      * A new function attribute alloc_size has been added to mark up
   13843        malloc style functions. For constant sized allocations this can be
   13844        used to find out the size of the returned pointer using the
   13845        __builtin_object_size() function for buffer overflow checking and
   13846        similar. This supplements the already built-in malloc and calloc
   13847        constant size handling.
   13848      * Integer constants written in binary are now supported as a GCC
   13849        extension. They consist of a prefix 0b or 0B, followed by a
   13850        sequence of 0 and 1 digits.
   13851      * A new predefined macro __COUNTER__ has been added. It expands to
   13852        sequential integral values starting from 0. In conjunction with the
   13853        ## operator, this provides a convenient means to generate unique
   13854        identifiers.
   13855      * A new command-line option -fdirectives-only has been added. It
   13856        enables a special preprocessing mode which improves the performance
   13857        of applications like distcc and ccache.
   13858      * Fixed-point data types and operators have been added. They are
   13859        based on Chapter 4 of the Embedded-C specification (n1169.pdf).
   13860        Currently, only MIPS targets are supported.
   13861      * Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
   13862        N1241, is now supported as a GCC extension to C for targets
   13863        i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu,
   13864        and x86_64-*-linux-gnu. The feature introduces new data types
   13865        _Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF,
   13866        DD, and DL.
   13867 
   13868   C++
   13869 
   13870      * [9]Experimental support for the upcoming ISO C++ standard, C++0x.
   13871      * -Wc++0x-compat has been added and is now enabled by default for
   13872        -Wall. It produces warnings for constructs whose meaning differs
   13873        between ISO C++ 1998 and C++0x.
   13874      * The -Wparentheses option now works for C++ as it does for C. It
   13875        warns if parentheses are omitted when operators with confusing
   13876        precedence are nested. It also warns about ambiguous else
   13877        statements. Since -Wparentheses is enabled by -Wall, this may cause
   13878        additional warnings with existing C++ code which uses -Wall. These
   13879        new warnings may be disabled by using -Wall -Wno-parentheses.
   13880      * The -Wmissing-declarations now works for C++ as it does for C.
   13881      * The -fvisibility-ms-compat flag was added, to make it easier to
   13882        port larger projects using shared libraries from Microsoft's Visual
   13883        Studio to ELF and Mach-O systems.
   13884      * C++ attribute handling has been overhauled for template arguments
   13885        (ie dependent types). In particular, __attribute__((aligned(T)));
   13886        works for C++ types.
   13887 
   13888     Runtime Library (libstdc++)
   13889 
   13890      * [10]Experimental support for the upcoming ISO C++ standard, C++0x.
   13891      * Support for TR1 mathematical special functions and regular
   13892        expressions.
   13893      * Default what implementations give more elaborate exception strings
   13894        for bad_cast, bad_typeid, bad_exception, and bad_alloc.
   13895      * Header dependencies have been streamlined, reducing unnecessary
   13896        includes and pre-processed bloat.
   13897      * Variadic template implementations of items in <tuple> and
   13898        <functional>.
   13899      * An experimental [11]parallel mode has been added. This is a
   13900        parallel implementation of many C++ Standard library algorithms,
   13901        like std::accumulate, std::for_each, std::transform, or std::sort,
   13902        to give but four examples. These algorithms can be substituted for
   13903        the normal (sequential) libstdc++ algorithms on a piecemeal basis,
   13904        or all existing algorithms can be transformed via the
   13905        -D_GLIBCXX_PARALLEL macro.
   13906      * Debug mode versions of classes in <unordered_set> and
   13907        <unordered_map>.
   13908      * Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are
   13909        now <backward/hash_set> and <backward/hash_map>. This code:
   13910     #include <ext/hash_set>
   13911     __gnu_cxx::hash_set<int> s;
   13912 
   13913        Can be transformed (in order of preference) to:
   13914     #include <tr1/unordered_set>
   13915     std::tr1::unordered_set<int> s;
   13916 
   13917        or
   13918     #include <backward/hash_set>
   13919     __gnu_cxx::hash_set<int> s;
   13920 
   13921        Similar transformations apply to __gnu_cxx::hash_map,
   13922        __gnu_cxx::hash_multimap, __gnu_cxx::hash_set,
   13923        __gnu_cxx::hash_multiset.
   13924 
   13925   Fortran
   13926 
   13927      * Due to the fact that the GMP and MPFR libraries are required for
   13928        all languages, Fortran is no longer special in this regard and is
   13929        available by default.
   13930      * The [12]-fexternal-blas option has been added, which generates
   13931        calls to BLAS routines for intrinsic matrix operations such as
   13932        matmul rather than using the built-in algorithms.
   13933      * Support to give a backtrace (compiler flag -fbacktrace or
   13934        environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems
   13935        only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a
   13936        run-time error occured.
   13937      * GNU Fortran now defines __GFORTRAN__ when it runs the C
   13938        preprocessor (CPP).
   13939      * The [13]-finit-local-zero, -finit-real, -finit-integer,
   13940        -finit-character, and -finit-logical options have been added, which
   13941        can be used to initialize local variables.
   13942      * The intrinsic procedures [14]GAMMA and [15]LGAMMA have been added,
   13943        which calculate the Gamma function and its logarithm. Use EXTERNAL
   13944        gamma if you want to use your own gamma function.
   13945      * GNU Fortran now regards the backslash character as literal (as
   13946        required by the Fortran 2003 standard); using [16]-fbackslash GNU
   13947        Fortran interprets backslashes as C-style escape characters.
   13948      * The [17]interpretation of binary, octal and hexadecimal (BOZ)
   13949        literal constants has been changed. Before they were always
   13950        interpreted as integer; now they are bit-wise transferred as
   13951        argument of INT, REAL, DBLE and CMPLX as required by the Fortran
   13952        2003 standard, and for real and complex variables in DATA
   13953        statements or when directly assigned to real and complex variables.
   13954        Everywhere else and especially in expressions they are still
   13955        regarded as integer constants.
   13956      * Fortran 2003 support has been extended:
   13957           + Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
   13958           + Pointer intent
   13959           + Intrinsic module ISO_ENV_FORTRAN
   13960           + Interoperability with C (ISO C Bindings)
   13961           + ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
   13962             attribute)
   13963           + Fortran 2003 BOZ
   13964 
   13965   Java (GCJ)
   13966 
   13967      * GCJ now uses the Eclipse Java compiler for its Java parsing needs.
   13968        This enables the use of all 1.5 language features, and fixes most
   13969        existing front end bugs.
   13970      * libgcj now supports all 1.5 language features which require runtime
   13971        support: foreach, enum, annotations, generics, and auto-boxing.
   13972      * We've made many changes to the tools shipped with gcj.
   13973           + The old jv-scan tool has been removed. This tool never really
   13974             worked properly. There is no replacement.
   13975           + gcjh has been rewritten. Some of its more obscure options no
   13976             longer work, but are still recognized in an attempt at
   13977             compatibility. gjavah is a new program with similar
   13978             functionality but different command-line options.
   13979           + grmic and grmiregistry have been rewritten. grmid has been
   13980             added.
   13981           + gjar replaces the old fastjar.
   13982           + gjarsigner (used for signing jars), gkeytool (used for key
   13983             management), gorbd (for CORBA), gserialver (computes
   13984             serialization UIDs), and gtnameserv (also for CORBA) are now
   13985             installed.
   13986      * The ability to dump the contents of the java run time heap to a
   13987        file for off-line analysis has been added. The heap dumps may be
   13988        analyzed with the new gc-analyze tool. They may be generated on
   13989        out-of-memory conditions or on demand and are controlled by the new
   13990        run time class gnu.gcj.util.GCInfo.
   13991      * java.util.TimeZone can now read files from /usr/share/zoneinfo to
   13992        provide correct, updated, timezone information. This means that
   13993        packagers no longer have to update libgcj when a time zone change
   13994        is published.
   13995 
   13996 [18]New Targets and Target Specific Improvements
   13997 
   13998   IA-32/x86-64
   13999 
   14000      * Tuning for Intel Core 2 processors is available via -mtune=core2
   14001        and -march=core2.
   14002      * Tuning for AMD Geode processors is available via -mtune=geode and
   14003        -march=geode.
   14004      * Code generation of block move (memcpy) and block set (memset) was
   14005        rewritten. GCC can now pick the best algorithm (loop, unrolled
   14006        loop, instruction with rep prefix or a library call) based on the
   14007        size of the block being copied and the CPU being optimized for. A
   14008        new option -minline-stringops-dynamically has been added. With this
   14009        option string operations of unknown size are expanded such that
   14010        small blocks are copied by in-line code, while for large blocks a
   14011        library call is used. This results in faster code than
   14012        -minline-all-stringops when the library implementation is capable
   14013        of using cache hierarchy hints. The heuristic choosing the
   14014        particular algorithm can be overwritten via -mstringop-strategy.
   14015        Newly also memset of values different from 0 is inlined.
   14016      * GCC no longer places the cld instruction before string operations.
   14017        Both i386 and x86-64 ABI documents mandate the direction flag to be
   14018        clear at the entry of a function. It is now invalid to set the flag
   14019        in asm statement without reseting it afterward.
   14020      * Support for SSSE3 built-in functions and code generation are
   14021        available via -mssse3.
   14022      * Support for SSE4.1 built-in functions and code generation are
   14023        available via -msse4.1.
   14024      * Support for SSE4.2 built-in functions and code generation are
   14025        available via -msse4.2.
   14026      * Both SSE4.1 and SSE4.2 support can be enabled via -msse4.
   14027      * A new set of options -mpc32, -mpc64 and -mpc80 have been added to
   14028        allow explicit control of x87 floating point precision.
   14029      * Support for __float128 (TFmode) IEEE quad type and corresponding
   14030        TCmode IEEE complex quad type is available via the soft-fp library
   14031        on x86_64 targets. This includes basic arithmetic operations
   14032        (addition, subtraction, negation, multiplication and division) on
   14033        __float128 real and TCmode complex values, the full set of IEEE
   14034        comparisons between __float128 values, conversions to and from
   14035        float, double and long double floating point types, as well as
   14036        conversions to and from signed or unsigned integer, signed or
   14037        unsigned long integer and signed or unsigned quad (TImode) integer
   14038        types. Additionally, all operations generate the full set of IEEE
   14039        exceptions and support the full set of IEEE rounding modes.
   14040      * GCC can now utilize the ACML library for vectorizing calls to a set
   14041        of C99 functions on x86_64 if -mveclibabi=acml is specified and you
   14042        link to an ACML ABI compatible library.
   14043 
   14044   ARM
   14045 
   14046      * Compiler and Library support for Thumb-2 and the ARMv7 architecture
   14047        has been added.
   14048 
   14049   [19]CRIS
   14050 
   14051     New features
   14052 
   14053      * Compiler and Library support for the CRIS v32 architecture, as
   14054        found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been
   14055        added.
   14056 
   14057     Configuration changes
   14058 
   14059      * The cris-*-elf target now includes support for CRIS v32, including
   14060        libraries, through the -march=v32 option.
   14061      * A new crisv32-*-elf target defaults to generate code for CRIS v32.
   14062      * A new crisv32-*-linux* target defaults to generate code for CRIS
   14063        v32.
   14064      * The cris-*-aout target has been obsoleted.
   14065 
   14066     Improved support for built-in functions
   14067 
   14068      * GCC can now use the lz and swapwbr instructions to implement the
   14069        __builtin_clz, __builtin_ctz and __builtin_ffs family of functions.
   14070      * __builtin_bswap32 is now implemented using the swapwb instruction,
   14071        when available.
   14072 
   14073   [20]m68k and ColdFire
   14074 
   14075     New features
   14076 
   14077      * Support for several new ColdFire processors has been added. You can
   14078        generate code for them using the new -mcpu option.
   14079      * All targets now support ColdFire processors.
   14080      * m68k-uclinux targets have improved support for C++ constructors and
   14081        destructors, and for shared libraries.
   14082      * It is now possible to set breakpoints on the first or last line of
   14083        a function, even if there are no statements on that line.
   14084 
   14085     Optimizations
   14086 
   14087      * Support for sibling calls has been added.
   14088      * More use is now made of the ColdFire mov3q instruction.
   14089      * __builtin_clz is now implemented using the ff1 ColdFire
   14090        instruction, when available.
   14091      * GCC now honors the -m68010 option. 68010 code now uses clr rather
   14092        than move to zero volatile memory.
   14093      * 68020 targets and above can now use symbol(index.size*scale)
   14094        addresses for indexed array accesses. Earlier compilers would
   14095        always load the symbol into a base register first.
   14096 
   14097     Configuration changes
   14098 
   14099      * All m68k and ColdFire targets now allow the default processor to be
   14100        set at configure time using --with-cpu.
   14101      * A --with-arch configuration option has been added. This option
   14102        allows you to restrict a target to ColdFire or non-ColdFire
   14103        processors.
   14104 
   14105     Preprocessor macros
   14106 
   14107      * An __mcfv*__ macro is now defined for all ColdFire targets.
   14108        (Earlier versions of GCC only defined __mcfv4e__.)
   14109      * __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added.
   14110      * All targets now define __mc68010 and __mc68010__ when generating
   14111        68010 code.
   14112 
   14113     Command-line changes
   14114 
   14115      * New command-line options -march, -mcpu, -mtune and -mhard-float
   14116        have been added. These options apply to both m68k and ColdFire
   14117        targets.
   14118      * -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative
   14119        versions of -mshort, etc.
   14120      * -fforce-addr has been removed. It is now ignored by the compiler.
   14121 
   14122     Other improvements
   14123 
   14124      * ColdFire targets now try to maintain a 4-byte-aligned stack where
   14125        possible.
   14126      * m68k-uclinux targets now try to avoid situations that lead to the
   14127        load-time error: BINFMT_FLAT: reloc outside program.
   14128 
   14129   MIPS
   14130 
   14131     Changes to existing configurations
   14132 
   14133      * libffi and libjava now support all three GNU/Linux ABIs: o32, n32
   14134        and n64. Every GNU/Linux configuration now builds these libraries
   14135        by default.
   14136      * GNU/Linux configurations now generate -mno-shared code unless
   14137        overridden by -fpic, -fPIC, -fpie or -fPIE.
   14138      * mipsisa32*-linux-gnu configurations now generate hard-float code by
   14139        default, just like other mipsisa32* and mips*-linux-gnu
   14140        configurations. You can build a soft-float version of any
   14141        mips*-linux-gnu configuration by passing --with-float=soft to
   14142        configure.
   14143      * mips-wrs-vxworks now supports run-time processes (RTPs).
   14144 
   14145     Changes to existing command-line options
   14146 
   14147      * The -march and -mtune options no longer accept 24k as a processor
   14148        name. Please use 24kc, 24kf2_1 or 24kf1_1 instead.
   14149      * The -march and -mtune options now accept 24kf2_1, 24kef2_1 and
   14150        34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The
   14151        options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for
   14152        24kx, 24kex and 34kx.
   14153 
   14154     New configurations
   14155 
   14156    GCC now supports the following configurations:
   14157      * mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by
   14158        default. Earlier releases also recognized this configuration, but
   14159        they treated it in the same way as mipsisa32*-linux-gnu*. Note that
   14160        you can customize any mips*-linux-gnu* configuration to a
   14161        particular ISA or processor by passing an appropriate --with-arch
   14162        option to configure.
   14163      * mipsisa*-sde-elf*, which provides compatibility with MIPS
   14164        Technologies' SDE toolchains. The configuration uses the SDE
   14165        libraries by default, but you can use it like other newlib-based
   14166        ELF configurations by passing --with-newlib to configure. It is the
   14167        only configuration besides mips64vr*-elf* to build MIPS16 as well
   14168        as non-MIPS16 libraries.
   14169      * mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf*
   14170        configuration, but uses the o32 and o64 ABIs instead of the 32-bit
   14171        and 64-bit forms of the EABI.
   14172 
   14173     New processors and application-specific extensions
   14174 
   14175      * Support for the SmartMIPS ASE is available through the new
   14176        -msmartmips option.
   14177      * Support for revision 2 of the DSP ASE is available through the new
   14178        -mdspr2 option. A new preprocessor macro called __mips_dsp_rev
   14179        indicates the revision of the ASE in use.
   14180      * Support for the 4KS and 74K families of processors is available
   14181        through the -march and -mtune options.
   14182 
   14183     Improved support for built-in functions
   14184 
   14185      * GCC can now use load-linked, store-conditional and sync
   14186        instructions to implement atomic built-in functions such as
   14187        __sync_fetch_and_add. The memory reference must be 4 bytes wide for
   14188        32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
   14189      * GCC can now use the clz and dclz instructions to implement the
   14190        __builtin_ctz and __builtin_ffs families of functions.
   14191      * There is a new __builtin___clear_cache function for flushing the
   14192        instruction cache. GCC expands this function inline on MIPS32
   14193        revision 2 targets, otherwise it calls the function specified by
   14194        -mcache-flush-func.
   14195 
   14196     MIPS16 improvements
   14197 
   14198      * GCC can now compile objects that contain a mixture of MIPS16 and
   14199        non-MIPS16 code. There are two new attributes, mips16 and nomips16,
   14200        for specifying which mode a function should use.
   14201      * A new option called -minterlink-mips16 makes non-MIPS16 code
   14202        link-compatible with MIPS16 code.
   14203      * After many bug fixes, the long-standing MIPS16 -mhard-float support
   14204        should now work fairly reliably.
   14205      * GCC can now use the MIPS16e save and restore instructions.
   14206      * -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled
   14207        with -G0 -fsection-anchors is often smaller than code compiled with
   14208        -G8. However, please note that you must usually compile all objects
   14209        in your application with the same -G option; see the documentation
   14210        of -G for details.
   14211      * A new option called-mcode-readable specifies which instructions are
   14212        allowed to load from the code segment. -mcode-readable=yes is the
   14213        default and says that any instruction may load from the code
   14214        segment. The other alternatives are -mcode-readable=pcrel, which
   14215        says that only PC-relative MIPS16 instructions may load from the
   14216        code segment, and -mcode-readable=no, which says that no
   14217        instruction may do so. Please see the documentation for more
   14218        details, including example uses.
   14219 
   14220     Small-data improvements
   14221 
   14222    There are three new options for controlling small data:
   14223      * -mno-extern-sdata, which disables small-data accesses for
   14224        externally-defined variables. Code compiled with -Gn
   14225        -mno-extern-sdata will be link-compatible with any -G setting
   14226        between -G0 and -Gn inclusive.
   14227      * -mno-local-sdata, which disables the use of small-data sections for
   14228        data that is not externally visible. This option can be a useful
   14229        way of reducing small-data usage in less performance-critical parts
   14230        of an application.
   14231      * -mno-gpopt, which disables the use of the $gp register while still
   14232        honoring the -G limit when placing externally-visible data. This
   14233        option implies -mno-extern-sdata and -mno-local-sdata and it can be
   14234        useful in situations where $gp does not necessarily hold the
   14235        expected value.
   14236 
   14237     Miscellaneous improvements
   14238 
   14239      * There is a new option called -mbranch-cost for tweaking the
   14240        perceived cost of branches.
   14241      * If GCC is configured to use a version of GAS that supports the
   14242        .gnu_attribute directive, it will use that directive to record
   14243        certain properties of the output code. .gnu_attribute is new to GAS
   14244        2.18.
   14245      * There are two new function attributes, near and far, for overriding
   14246        the command-line setting of -mlong-calls on a function-by-function
   14247        basis.
   14248      * -mfp64, which previously required a 64-bit target, now works with
   14249        MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and
   14250        mipsisa*-sde-elf* configurations provide suitable library support.
   14251      * GCC now recognizes the -mdmx and -mmt options and passes them down
   14252        to the assembler. It does nothing else with the options at present.
   14253 
   14254   SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture
   14255   (BEA)
   14256 
   14257      * Support has been added for this new architecture.
   14258 
   14259   RS6000 (POWER/PowerPC)
   14260 
   14261      * Support for the PowerPC 750CL paired-single instructions has been
   14262        added with a new powerpc-*-linux*paired* target configuration. It
   14263        is enabled by an associated -mpaired option and can be accessed
   14264        using new built-in functions.
   14265      * Support for auto-detecting architecture and system configuration to
   14266        auto-select processor optimization tuning.
   14267      * Support for VMX on AIX 5.3 has been added.
   14268      * Support for AIX Version 6.1 has been added.
   14269 
   14270   S/390, zSeries and System z9
   14271 
   14272      * Support for the IBM System z9 EC/BC processor (z9 GA3) has been
   14273        added. When using the -march=z9-ec option, the compiler will
   14274        generate code making use of instructions provided by the decimal
   14275        floating point facility and the floating point conversion facility
   14276        (pfpo). Besides the instructions used to implement decimal floating
   14277        point operations these facilities also contain instructions to move
   14278        between general purpose and floating point registers and to modify
   14279        and copy the sign-bit of floating point values.
   14280      * When the -march=z9-ec option is used the new
   14281        -mhard-dfp/-mno-hard-dfp options can be used to specify whether the
   14282        decimal floating point hardware instructions will be used or not.
   14283        If none of them is given the hardware support is enabled by
   14284        default.
   14285      * The -mstack-guard option can now be omitted when using stack
   14286        checking via -mstack-size in order to let GCC choose a sensible
   14287        stack guard value according to the frame size of each function.
   14288      * Various changes to improve performance of generated code have been
   14289        implemented, including:
   14290           + The condition code set by an add logical with carry
   14291             instruction is now available for overflow checks like: a + b +
   14292             carry < b.
   14293           + The test data class instruction is now used to implement
   14294             sign-bit and infinity checks of binary and decimal floating
   14295             point numbers.
   14296 
   14297   SPARC
   14298 
   14299      * Support for the Sun UltraSPARC T2 (Niagara 2) processor has been
   14300        added.
   14301 
   14302   Xtensa
   14303 
   14304      * Stack unwinding for exception handling now uses by default a
   14305        specialized version of DWARF unwinding. This is not
   14306        binary-compatible with the setjmp/longjmp (sjlj) unwinding used for
   14307        Xtensa with previous versions of GCC.
   14308      * For Xtensa processors that include the Conditional Store option,
   14309        the built-in functions for atomic memory access are now implemented
   14310        using S32C1I instructions.
   14311      * If the Xtensa NSA option is available, GCC will use it to implement
   14312        the __builtin_ctz and __builtin_clz functions.
   14313 
   14314 Documentation improvements
   14315 
   14316      * Existing libstdc++ documentation has been edited and restructured
   14317        into a single DocBook XML manual. The results can be viewed online
   14318        [21]here.
   14319 
   14320 Other significant improvements
   14321 
   14322      * The compiler's --help command-line option has been extended so that
   14323        it now takes an optional set of arguments. These arguments restrict
   14324        the information displayed to specific classes of command-line
   14325        options, and possibly only a subset of those options. It is also
   14326        now possible to replace the descriptive text associated with each
   14327        displayed option with an indication of its current value, or for
   14328        binary options, whether it has been enabled or disabled.
   14329        Here are some examples. The following will display all the options
   14330        controlling warning messages:
   14331       --help=warnings
   14332 
   14333        Whereas this will display all the undocumented, target specific
   14334        options:
   14335       --help=target,undocumented
   14336 
   14337        This sequence of commands will display the binary optimizations
   14338        that are enabled by -O3:
   14339       gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   14340       gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   14341       diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   14342 
   14343      * The configure options --with-pkgversion and --with-bugurl have been
   14344        added. These allow distributors of GCC to include a
   14345        distributor-specific string in manuals and --version output and to
   14346        specify the URL for reporting bugs in their versions of GCC.
   14347 
   14348 [22]GCC 4.3.1
   14349 
   14350    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   14351    system that are known to be fixed in the 4.3.1 release. This list might
   14352    not be complete (that is, it is possible that some PRs that have been
   14353    fixed are not listed here).
   14354 
   14355 Target Specific Changes
   14356 
   14357   IA-32/x86-64
   14358 
   14359     ABI changes
   14360 
   14361      * Starting with GCC 4.3.1, decimal floating point variables are
   14362        aligned to their natural boundaries when they are passed on the
   14363        stack for i386.
   14364 
   14365     Command-line changes
   14366 
   14367      * Starting with GCC 4.3.1, the -mcld option has been added to
   14368        automatically generate a cld instruction in the prologue of
   14369        functions that use string instructions. This option is used for
   14370        backward compatibility on some operating systems and can be enabled
   14371        by default for 32-bit x86 targets by configuring GCC with the
   14372        --enable-cld configure option.
   14373 
   14374 [24]GCC 4.3.2
   14375 
   14376    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   14377    system that are known to be fixed in the 4.3.2 release. This list might
   14378    not be complete (that is, it is possible that some PRs that have been
   14379    fixed are not listed here).
   14380 
   14381 [26]GCC 4.3.3
   14382 
   14383    This is the [27]list of problem reports (PRs) from GCC's bug tracking
   14384    system that are known to be fixed in the 4.3.3 release. This list might
   14385    not be complete (that is, it is possible that some PRs that have been
   14386    fixed are not listed here).
   14387 
   14388 [28]GCC 4.3.4
   14389 
   14390    This is the [29]list of problem reports (PRs) from GCC's bug tracking
   14391    system that are known to be fixed in the 4.3.4 release. This list might
   14392    not be complete (that is, it is possible that some PRs that have been
   14393    fixed are not listed here).
   14394 
   14395 [30]GCC 4.3.5
   14396 
   14397    This is the [31]list of problem reports (PRs) from GCC's bug tracking
   14398    system that are known to be fixed in the 4.3.5 release. This list might
   14399    not be complete (that is, it is possible that some PRs that have been
   14400    fixed are not listed here).
   14401 
   14402 [32]GCC 4.3.6
   14403 
   14404    This is the [33]list of problem reports (PRs) from GCC's bug tracking
   14405    system that are known to be fixed in the 4.3.6 release. This list might
   14406    not be complete (that is, it is possible that some PRs that have been
   14407    fixed are not listed here).
   14408 
   14409 
   14410     For questions related to the use of GCC, please consult these web
   14411     pages and the [34]GCC manuals. If that fails, the
   14412     [35]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14413     web pages and the development of GCC are welcome on our developer
   14414     list at [36]gcc (a] gcc.gnu.org. All of [37]our lists have public
   14415     archives.
   14416 
   14417    Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and
   14418    distribution of this entire article is permitted in any medium,
   14419    provided this notice is preserved.
   14420 
   14421    These pages are [39]maintained by the GCC team. Last modified
   14422    2025-01-31.
   14423 
   14424 References
   14425 
   14426    1. https://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
   14427    2. https://gmplib.org/
   14428    3. https://www.mpfr.org/
   14429    4. https://gcc.gnu.org/install/prerequisites.html
   14430    5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
   14431    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   14432    7. https://gcc.gnu.org/gcc-4.3/porting_to.html
   14433    8. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   14434    9. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   14435   10. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   14436   11. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
   14437   12. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
   14438   13. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
   14439   14. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
   14440   15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
   14441   16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
   14442   17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
   14443   18. https://gcc.gnu.org/gcc-4.3/changes.html#targets
   14444   19. https://gcc.gnu.org/gcc-4.3/changes.html#cris
   14445   20. https://gcc.gnu.org/gcc-4.3/changes.html#m68k
   14446   21. https://gcc.gnu.org/onlinedocs/libstdc++/
   14447   22. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.1
   14448   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
   14449   24. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.2
   14450   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
   14451   26. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.3
   14452   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
   14453   28. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.4
   14454   29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
   14455   30. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.5
   14456   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
   14457   32. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.6
   14458   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
   14459   34. https://gcc.gnu.org/onlinedocs/
   14460   35. mailto:gcc-help (a] gcc.gnu.org
   14461   36. mailto:gcc (a] gcc.gnu.org
   14462   37. https://gcc.gnu.org/lists.html
   14463   38. https://www.fsf.org/
   14464   39. https://gcc.gnu.org/about.html
   14465 ======================================================================
   14466 http://gcc.gnu.org/gcc-4.2/index.html
   14467 
   14468                              GCC 4.2 Release Series
   14469 
   14470    (This release series is no longer supported.)
   14471 
   14472    May 19, 2008
   14473 
   14474    The [1]GNU project and the GCC developers are pleased to announce the
   14475    release of GCC 4.2.4.
   14476 
   14477    This release is a bug-fix release, containing fixes for regressions in
   14478    GCC 4.2.3 relative to previous releases of GCC.
   14479 
   14480 Release History
   14481 
   14482    GCC 4.2.4
   14483           May 19, 2008 ([2]changes)
   14484 
   14485    GCC 4.2.3
   14486           February 1, 2008 ([3]changes)
   14487 
   14488    GCC 4.2.2
   14489           October 7, 2007 ([4]changes)
   14490 
   14491    GCC 4.2.1
   14492           July 18, 2007 ([5]changes)
   14493 
   14494    GCC 4.2.0
   14495           May 13, 2007 ([6]changes)
   14496 
   14497 References and Acknowledgements
   14498 
   14499    GCC used to stand for the GNU C Compiler, but since the compiler
   14500    supports several other languages aside from C, it now stands for the
   14501    GNU Compiler Collection.
   14502 
   14503    A list of [7]successful builds is updated as new information becomes
   14504    available.
   14505 
   14506    The GCC developers would like to thank the numerous people that have
   14507    contributed new features, improvements, bug fixes, and other changes as
   14508    well as test results to GCC. This [8]amazing group of volunteers is
   14509    what makes GCC successful.
   14510 
   14511    For additional information about GCC please refer to the [9]GCC project
   14512    web site or contact the [10]GCC development mailing list.
   14513 
   14514    To obtain GCC please use [11]our mirror sites or [12]our version
   14515    control system.
   14516 
   14517 
   14518     For questions related to the use of GCC, please consult these web
   14519     pages and the [13]GCC manuals. If that fails, the
   14520     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14521     web pages and the development of GCC are welcome on our developer
   14522     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   14523     archives.
   14524 
   14525    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   14526    distribution of this entire article is permitted in any medium,
   14527    provided this notice is preserved.
   14528 
   14529    These pages are [18]maintained by the GCC team. Last modified
   14530    2022-10-26.
   14531 
   14532 References
   14533 
   14534    1. http://www.gnu.org/
   14535    2. https://gcc.gnu.org/gcc-4.2/changes.html
   14536    3. https://gcc.gnu.org/gcc-4.2/changes.html
   14537    4. https://gcc.gnu.org/gcc-4.2/changes.html
   14538    5. https://gcc.gnu.org/gcc-4.2/changes.html
   14539    6. https://gcc.gnu.org/gcc-4.2/changes.html
   14540    7. https://gcc.gnu.org/gcc-4.2/buildstat.html
   14541    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14542    9. https://gcc.gnu.org/index.html
   14543   10. mailto:gcc (a] gcc.gnu.org
   14544   11. https://gcc.gnu.org/mirrors.html
   14545   12. https://gcc.gnu.org/git.html
   14546   13. https://gcc.gnu.org/onlinedocs/
   14547   14. mailto:gcc-help (a] gcc.gnu.org
   14548   15. mailto:gcc (a] gcc.gnu.org
   14549   16. https://gcc.gnu.org/lists.html
   14550   17. https://www.fsf.org/
   14551   18. https://gcc.gnu.org/about.html
   14552 ======================================================================
   14553 http://gcc.gnu.org/gcc-4.2/changes.html
   14554 
   14555                              GCC 4.2 Release Series
   14556                         Changes, New Features, and Fixes
   14557 
   14558 Caveats
   14559 
   14560      * GCC no longer accepts the -fshared-data option. This option has had
   14561        no effect in any GCC 4 release; the targets to which the option
   14562        used to apply had been removed before GCC 4.0.
   14563 
   14564 General Optimizer Improvements
   14565 
   14566      * New command-line options specify the possible relationships among
   14567        parameters and between parameters and global data. For example,
   14568        -fargument-noalias-anything specifies that arguments do not alias
   14569        any other storage.
   14570        Each language will automatically use whatever option is required by
   14571        the language standard. You should not need to use these options
   14572        yourself.
   14573 
   14574 New Languages and Language specific improvements
   14575 
   14576      * [1]OpenMP is now supported for the C, C++ and Fortran compilers.
   14577      * New command-line options -fstrict-overflow and -Wstrict-overflow
   14578        have been added. -fstrict-overflow tells the compiler that it may
   14579        assume that the program follows the strict signed overflow
   14580        semantics permitted for the language: for C and C++ this means that
   14581        the compiler may assume that signed overflow does not occur. For
   14582        example, a loop like
   14583       for (i = 1; i > 0; i *= 2)
   14584 
   14585        is presumably intended to continue looping until i overflows. With
   14586        -fstrict-overflow, the compiler may assume that signed overflow
   14587        will not occur, and transform this into an infinite loop.
   14588        -fstrict-overflow is turned on by default at -O2, and may be
   14589        disabled via -fno-strict-overflow. The -Wstrict-overflow option may
   14590        be used to warn about cases where the compiler assumes that signed
   14591        overflow will not occur. It takes five different levels:
   14592        -Wstrict-overflow=1 to 5. See the [2]documentation for details.
   14593        -Wstrict-overflow=1 is enabled by -Wall.
   14594      * The new command-line option -fno-toplevel-reorder directs GCC to
   14595        emit top-level functions, variables, and asm statements in the same
   14596        order that they appear in the input file. This is intended to
   14597        support existing code which relies on a particular ordering (for
   14598        example, code which uses top-level asm statements to switch
   14599        sections). For new code, it is generally better to use function and
   14600        variable attributes. The -fno-toplevel-reorder option may be used
   14601        for most cases which currently use -fno-unit-at-a-time. The
   14602        -fno-unit-at-a-time option will be removed in some future version
   14603        of GCC. If you know of a case which requires -fno-unit-at-a-time
   14604        which is not fixed by -fno-toplevel-reorder, please open a bug
   14605        report.
   14606 
   14607   C family
   14608 
   14609      * The pragma redefine_extname will now macro expand its tokens for
   14610        compatibility with SunPRO.
   14611      * In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct
   14612        GCC to handle inline functions as specified in the C99 standard. In
   14613        preparation for this, GCC 4.2 will warn about any use of non-static
   14614        inline functions in gnu99 or c99 mode. This new warning may be
   14615        disabled with the new gnu_inline function attribute or the new
   14616        -fgnu89-inline command-line option. Also, GCC 4.2 and later will
   14617        define one of the preprocessor macros __GNUC_GNU_INLINE__ or
   14618        __GNUC_STDC_INLINE__ to indicate the semantics of inline functions
   14619        in the current compilation.
   14620      * A new command-line option -Waddress has been added to warn about
   14621        suspicious uses of memory addresses as, for example, using the
   14622        address of a function in a conditional expression, and comparisons
   14623        against the memory address of a string literal. This warning is
   14624        enabled by -Wall.
   14625 
   14626   C++
   14627 
   14628      * C++ visibility handling has been overhauled.
   14629        Restricted visiblity is propagated from classes to members, from
   14630        functions to local statics, and from templates and template
   14631        arguments to instantiations, unless the latter has explicitly
   14632        declared visibility.
   14633        The visibility attribute for a class must come between the
   14634        class-key and the name, not after the closing brace.
   14635        Attributes are now allowed for enums and elaborated-type-specifiers
   14636        that only declare a type.
   14637        Members of the anonymous namespace are now local to a particular
   14638        translation unit, along with any other declarations which use them,
   14639        though they are still treated as having external linkage for
   14640        language semantics.
   14641      * The (undocumented) extension which permitted templates with default
   14642        arguments to be bound to template template parameters with fewer
   14643        parameters has been removed. For example:
   14644         template <template <typename> class C>
   14645         void f(C<double>) {}
   14646 
   14647         template <typename T, typename U = int>
   14648         struct S {};
   14649 
   14650         template void f(S<double>);
   14651 
   14652        is no longer accepted by G++. The reason this code is not accepted
   14653        is that S is a template with two parameters; therefore, it cannot
   14654        be bound to C which has only one parameter.
   14655      * The <?, >?, <?=, and >?= operators, deprecated in previous GCC
   14656        releases, have been removed.
   14657      * The command-line option -fconst-strings, deprecated in previous GCC
   14658        releases, has been removed.
   14659      * The configure variable enable-__cxa_atexit is now enabled by
   14660        default for more targets. Enabling this variable is necessary in
   14661        order for static destructors to be executed in the correct order,
   14662        but it depends upon the presence of a non-standard C library in the
   14663        target library in order to work. The variable is now enabled for
   14664        more targets which are known to have suitable C libraries.
   14665      * -Wextra will produce warnings for if statements with a semicolon as
   14666        the only body, to catch code like:
   14667          if (a);
   14668             return 1;
   14669          return 0;
   14670 
   14671        To suppress the warning in valid cases, use { } instead.
   14672      * The C++ front end now also produces strict aliasing warnings when
   14673        -fstrict-aliasing -Wstrict-aliasing is in effect.
   14674 
   14675     Runtime Library (libstdc++)
   14676 
   14677      * Added support for TR1 <random>, <complex>, and C compatibility
   14678        headers. In addition, a lock-free version of shared_ptr was
   14679        contributed as part of Phillip Jordan's Google Summer of Code
   14680        project on lock-free containers.
   14681      * In association with the Summer of Code work on lock-free
   14682        containers, the interface for atomic builtins was adjusted,
   14683        creating simpler alternatives for non-threaded code paths. Also,
   14684        usage was consolidated and all elements were moved from namespace
   14685        std to namespace__gnu_cxx. Affected interfaces are the functions
   14686        __exchange_and_add, __atomic_add, and the objects __mutex,
   14687        __recursive_mutex, and __scoped_lock.
   14688      * Support for versioning weak symbol names via namespace association
   14689        was added. However, as this changes the names of exported symbols,
   14690        this is turned off by default in the current ABI. Intrepid users
   14691        can enable this feature by using
   14692        --enable-symvers=gnu-versioned-namespace during configuration.
   14693      * Revised, simplified, and expanded policy-based associative
   14694        containers, including data types for tree and trie forms
   14695        (basic_tree, tree, trie), lists (list_update), and both
   14696        collision-chaining and probing hash-based containers
   14697        (basic_hash_table, cc_hash_table, gp_hash_table). More details per
   14698        the [3]documentation.
   14699      * The implementation of the debug mode was modified, whereby the
   14700        debug namespaces were nested inside of namespace std and namespace
   14701        __gnu_cxx in order to resolve some long standing corner cases
   14702        involving name lookup. Debug functionality from the policy-based
   14703        data structures was consolidated and enabled with the single macro,
   14704        _GLIBCXX_DEBUG. See PR 26142 for more information.
   14705      * Added extensions for type traits: __conditional_type,
   14706        __numeric_traits, __add_unsigned, __removed_unsigned, __enable_if.
   14707      * Added a typelist implementation for compile-time meta-programming.
   14708        Elements for typelist construction and operation can be found
   14709        within namespace __gnu_cxx::typelist.
   14710      * Added a new allocator, __gnu_cxx::throw_allocator, for testing
   14711        exception-safety.
   14712      * Enabled library-wide visibility control, allowing -fvisibility to
   14713        be used.
   14714      * Consolidated all nested namespaces and the conversion of
   14715        __gnu_internal implementation-private details to anonymous
   14716        namespaces whenever possible.
   14717      * Implemented LWG resolutions DR 431 and DR 538.
   14718 
   14719   Fortran
   14720 
   14721      * Support for allocatable components has been added (TR 15581 and
   14722        Fortran 2003).
   14723      * Support for the Fortran 2003 streaming IO extension has been added.
   14724      * The GNU Fortran compiler now uses 4-byte record markers by default
   14725        for unformatted files to be compatible with g77 and most other
   14726        compilers. The implementation allows for records greater than 2 GB
   14727        and is compatible with several other compilers. Older versions of
   14728        gfortran used 8-byte record markers by default (on most systems).
   14729        In order to change the length of the record markers, e.g. to read
   14730        unformatted files created by older gfortran versions, the
   14731        [4]-frecord-marker=8 option can be used.
   14732 
   14733   Java (GCJ)
   14734 
   14735      * A new command-line option -static-libgcj has been added for targets
   14736        that use a linker compatible with GNU Binutils. As its name
   14737        implies, this causes libgcj to be linked statically. In some cases
   14738        this causes the resulting executable to start faster and use less
   14739        memory than if the shared version of libgcj were used. However
   14740        caution should be used as it can also cause essential parts of the
   14741        library to be omitted. Some of these issues are discussed in:
   14742        [5]https://gcc.gnu.org/wiki/Statically_linking_libgcj
   14743      * fastjar is no longer bundled with GCC. To build libgcj, you will
   14744        need either InfoZIP (both zip and unzip) or an external jar
   14745        program. In the former case, the GCC build will install a jar shell
   14746        script that is based on InfoZIP and provides the same functionality
   14747        as fastjar.
   14748 
   14749 [6]New Targets and Target Specific Improvements
   14750 
   14751   IA-32/x86-64
   14752 
   14753      * -mtune=generic can now be used to generate code running well on
   14754        common x86 chips. This includes AMD Athlon, AMD Opteron, Intel
   14755        Pentium-M, Intel Pentium 4 and Intel Core 2.
   14756      * -mtune=native and -march=native will produce code optimized for the
   14757        host architecture as detected using the cpuid instruction.
   14758      * Added a new command-line option -fstackrealign and and
   14759        __attribute__ ((force_align_arg_pointer)) to realign the stack at
   14760        runtime. This allows functions compiled with a vector-aligned stack
   14761        to be invoked from legacy objects that keep only word-alignment.
   14762 
   14763   SPARC
   14764 
   14765      * The default CPU setting has been changed from V7 to V9 in 32-bit
   14766        mode on Solaris 7 and above. This is already the case in 64-bit
   14767        mode. It can be overridden by specifying --with-cpu at configure
   14768        time.
   14769      * Back-end support of built-in functions for atomic memory access has
   14770        been implemented.
   14771      * Support for the Sun UltraSPARC T1 (Niagara) processor has been
   14772        added.
   14773 
   14774   M32C
   14775 
   14776      * Various bug fixes have made some functions (notably, functions
   14777        returning structures) incompatible with previous releases.
   14778        Recompiling all libraries is recommended. Note that code quality
   14779        has considerably improved since 4.1, making a recompile even more
   14780        beneficial.
   14781 
   14782   MIPS
   14783 
   14784      * Added support for the Broadcom SB-1A core.
   14785 
   14786   IA-64
   14787 
   14788      * Added support for IA-64 data and control speculation. By default
   14789        speculation is enabled only during second scheduler pass. A number
   14790        of machine flags was introduced to control the usage of speculation
   14791        for both scheduler passes.
   14792 
   14793   HPPA
   14794 
   14795      * Added Java language support (libffi and libjava) for 32-bit HP-UX
   14796        11 target.
   14797 
   14798 [7]Obsolete Systems
   14799 
   14800 Documentation improvements
   14801 
   14802   PDF Documentation
   14803 
   14804      * A make pdf target has been added to the top-level makefile,
   14805        enabling automated production of PDF documentation files.
   14806        (Front-ends external to GCC should modify their Make-lang.in file
   14807        to add a lang.pdf: target.)
   14808 
   14809 Other significant improvements
   14810 
   14811   Build system improvements
   14812 
   14813      * All the components of the compiler are now bootstrapped by default.
   14814        This improves the resilience to bugs in the system compiler or
   14815        binary compatibility problems, as well as providing better testing
   14816        of GCC 4.2 itself. In addition, if you build the compiler from a
   14817        combined tree, the assembler, linker, etc. will also be
   14818        bootstrapped (i.e. built with themselves).
   14819        You can disable this behavior, and go back to the pre-GCC 4.2 set
   14820        up, by configuring GCC with --disable-bootstrap.
   14821      * The rules that configure follows to find target tools resemble more
   14822        closely the locations that the built compiler will search. In
   14823        addition, you can use the new configure option --with-target-tools
   14824        to specify where to find the target tools used during the build,
   14825        without affecting what the built compiler will use.
   14826        This can be especially useful when building packages of GCC. For
   14827        example, you may want to build GCC with GNU as or ld, even if the
   14828        resulting compiler to work with the native assembler and linker. To
   14829        do so, you can use --with-target-tools to point to the native
   14830        tools.
   14831 
   14832   Incompatible changes to the build system
   14833 
   14834      * Front-ends external to GCC should modify their Make-lang.in file to
   14835        replace double-colon rules (e.g. dvi::) with normal rules (like
   14836        lang.dvi:). Front-end makefile hooks do not use double-colon rules
   14837        anymore.
   14838      * Up to GCC 4.1, a popular way to specify the target tools used
   14839        during the build was to create directories named gas, binutils,
   14840        etc. in the build tree, and create links to the tools from there.
   14841        This does not work any more when the compiler is bootstrapped. The
   14842        new configure option --with-target-tools provides a better way to
   14843        achieve the same effect, and works for all native and cross
   14844        settings.
   14845 
   14846 
   14847     For questions related to the use of GCC, please consult these web
   14848     pages and the [8]GCC manuals. If that fails, the
   14849     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14850     web pages and the development of GCC are welcome on our developer
   14851     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   14852     archives.
   14853 
   14854    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   14855    distribution of this entire article is permitted in any medium,
   14856    provided this notice is preserved.
   14857 
   14858    These pages are [13]maintained by the GCC team. Last modified
   14859    2025-01-31.
   14860 
   14861 References
   14862 
   14863    1. https://gcc.gnu.org/projects/gomp/
   14864    2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   14865    3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
   14866    4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
   14867    5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
   14868    6. https://gcc.gnu.org/gcc-4.2/changes.html#targets
   14869    7. https://gcc.gnu.org/gcc-4.2/changes.html#obsolete_systems
   14870    8. https://gcc.gnu.org/onlinedocs/
   14871    9. mailto:gcc-help (a] gcc.gnu.org
   14872   10. mailto:gcc (a] gcc.gnu.org
   14873   11. https://gcc.gnu.org/lists.html
   14874   12. https://www.fsf.org/
   14875   13. https://gcc.gnu.org/about.html
   14876 ======================================================================
   14877 http://gcc.gnu.org/gcc-4.1/index.html
   14878 
   14879                              GCC 4.1 Release Series
   14880 
   14881    (This release series is no longer supported.)
   14882 
   14883    February 13, 2007
   14884 
   14885    The [1]GNU project and the GCC developers are pleased to announce the
   14886    release of GCC 4.1.2.
   14887 
   14888    This release is a bug-fix release, containing fixes for regressions in
   14889    GCC 4.1.1 relative to previous releases of GCC.
   14890 
   14891 Release History
   14892 
   14893    GCC 4.1.2
   14894           February 13, 2007 ([2]changes)
   14895 
   14896    GCC 4.1.1
   14897           May 24, 2006 ([3]changes)
   14898 
   14899    GCC 4.1.0
   14900           February 28, 2006 ([4]changes)
   14901 
   14902 References and Acknowledgements
   14903 
   14904    GCC used to stand for the GNU C Compiler, but since the compiler
   14905    supports several other languages aside from C, it now stands for the
   14906    GNU Compiler Collection.
   14907 
   14908    A list of [5]successful builds is updated as new information becomes
   14909    available.
   14910 
   14911    The GCC developers would like to thank the numerous people that have
   14912    contributed new features, improvements, bug fixes, and other changes as
   14913    well as test results to GCC. This [6]amazing group of volunteers is
   14914    what makes GCC successful.
   14915 
   14916    For additional information about GCC please refer to the [7]GCC project
   14917    web site or contact the [8]GCC development mailing list.
   14918 
   14919    To obtain GCC please use [9]our mirror sites or [10]our version control
   14920    system.
   14921 
   14922 
   14923     For questions related to the use of GCC, please consult these web
   14924     pages and the [11]GCC manuals. If that fails, the
   14925     [12]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14926     web pages and the development of GCC are welcome on our developer
   14927     list at [13]gcc (a] gcc.gnu.org. All of [14]our lists have public
   14928     archives.
   14929 
   14930    Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
   14931    distribution of this entire article is permitted in any medium,
   14932    provided this notice is preserved.
   14933 
   14934    These pages are [16]maintained by the GCC team. Last modified
   14935    2022-10-26.
   14936 
   14937 References
   14938 
   14939    1. http://www.gnu.org/
   14940    2. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   14941    3. https://gcc.gnu.org/gcc-4.1/changes.html
   14942    4. https://gcc.gnu.org/gcc-4.1/changes.html
   14943    5. https://gcc.gnu.org/gcc-4.1/buildstat.html
   14944    6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14945    7. https://gcc.gnu.org/index.html
   14946    8. mailto:gcc (a] gcc.gnu.org
   14947    9. https://gcc.gnu.org/mirrors.html
   14948   10. https://gcc.gnu.org/git.html
   14949   11. https://gcc.gnu.org/onlinedocs/
   14950   12. mailto:gcc-help (a] gcc.gnu.org
   14951   13. mailto:gcc (a] gcc.gnu.org
   14952   14. https://gcc.gnu.org/lists.html
   14953   15. https://www.fsf.org/
   14954   16. https://gcc.gnu.org/about.html
   14955 ======================================================================
   14956 http://gcc.gnu.org/gcc-4.1/changes.html
   14957 
   14958                              GCC 4.1 Release Series
   14959                         Changes, New Features, and Fixes
   14960 
   14961    The latest release in the 4.1 release series is [1]GCC 4.1.2.
   14962 
   14963 Caveats
   14964 
   14965 General Optimizer Improvements
   14966 
   14967      * GCC now has infrastructure for inter-procedural optimizations and
   14968        the following inter-procedural optimizations are implemented:
   14969           + Profile guided inlining. When doing profile feedback guided
   14970             optimization, GCC can now use the profile to make better
   14971             informed decisions on whether inlining of a function is
   14972             profitable or not. This means that GCC will no longer inline
   14973             functions at call sites that are not executed very often, and
   14974             that functions at hot call sites are more likely to be
   14975             inlined.
   14976             A new parameter min-inline-recursive-probability is also now
   14977             available to throttle recursive inlining of functions with
   14978             small average recursive depths.
   14979           + Discovery of pure and const functions, a form of side-effects
   14980             analysis. While older GCC releases could also discover such
   14981             special functions, the new IPA-based pass runs earlier so that
   14982             the results are available to more optimizers. The pass is also
   14983             simply more powerful than the old one.
   14984           + Analysis of references to static variables and type escape
   14985             analysis, also forms of side-effects analysis. The results of
   14986             these passes allow the compiler to be less conservative about
   14987             call-clobbered variables and references. This results in more
   14988             redundant loads being eliminated and in making static
   14989             variables candidates for register promotion.
   14990           + Improvement of RTL-based alias analysis. The results of type
   14991             escape analysis are fed to the RTL type-based alias analyzer,
   14992             allowing it to disambiguate more memory references.
   14993           + Interprocedural constant propagation and function versioning.
   14994             This pass looks for functions that are always called with the
   14995             same constant value for one or more of the function arguments,
   14996             and propagates those constants into those functions.
   14997           + GCC will now eliminate static variables whose usage was
   14998             optimized out.
   14999           + -fwhole-program --combine can now be used to make all
   15000             functions in program static allowing whole program
   15001             optimization. As an exception, the main function and all
   15002             functions marked with the new externally_visible attribute are
   15003             kept global so that programs can link with runtime libraries.
   15004      * GCC can now do a form of partial dead code elimination (PDCE) that
   15005        allows code motion of expressions to the paths where the result of
   15006        the expression is actually needed. This is not always a win, so the
   15007        pass has been limited to only consider profitable cases. Here is an
   15008        example:
   15009     int foo (int *, int *);
   15010     int
   15011     bar (int d)
   15012     {
   15013       int a, b, c;
   15014       b = d + 1;
   15015       c = d + 2;
   15016       a = b + c;
   15017       if (d)
   15018         {
   15019           foo (&b, &c);
   15020           a = b + c;
   15021         }
   15022       printf ("%d\n", a);
   15023     }
   15024 
   15025        The a = b + c can be sunk to right before the printf. Normal code
   15026        sinking will not do this, it will sink the first one above into the
   15027        else-branch of the conditional jump, which still gives you two
   15028        copies of the code.
   15029      * GCC now has a value range propagation pass. This allows the
   15030        compiler to eliminate bounds checks and branches. The results of
   15031        the pass can also be used to accurately compute branch
   15032        probabilities.
   15033      * The pass to convert PHI nodes to straight-line code (a form of
   15034        if-conversion for GIMPLE) has been improved significantly. The two
   15035        most significant improvements are an improved algorithm to
   15036        determine the order in which the PHI nodes are considered, and an
   15037        improvement that allow the pass to consider if-conversions of basic
   15038        blocks with more than two predecessors.
   15039      * Alias analysis improvements. GCC can now differentiate between
   15040        different fields of structures in Tree-SSA's virtual operands form.
   15041        This lets stores/loads from non-overlapping structure fields not
   15042        conflict. A new algorithm to compute points-to sets was contributed
   15043        that can allows GCC to see now that p->a and p->b, where p is a
   15044        pointer to a structure, can never point to the same field.
   15045      * Various enhancements to auto-vectorization:
   15046           + Incrementally preserve SSA form when vectorizing.
   15047           + Incrementally preserve loop-closed form when vectorizing.
   15048           + Improvements to peeling for alignment: generate better code
   15049             when the misalignment of an access is known at compile time,
   15050             or when different accesses are known to have the same
   15051             misalignment, even if the misalignment amount itself is
   15052             unknown.
   15053           + Consider dependence distance in the vectorizer.
   15054           + Externalize generic parts of data reference analysis to make
   15055             this analysis available to other passes.
   15056           + Vectorization of conditional code.
   15057           + Reduction support.
   15058      * GCC can now partition functions in sections of hot and cold code.
   15059        This can significantly improve performance due to better
   15060        instruction cache locality. This feature works best together with
   15061        profile feedback driven optimization.
   15062      * A new pass to avoid saving of unneeded arguments to the stack in
   15063        vararg functions if the compiler can prove that they will not be
   15064        needed.
   15065      * Transition of basic block profiling to tree level implementation
   15066        has been completed. The new implementation should be considerably
   15067        more reliable (hopefully avoiding profile mismatch errors when
   15068        using -fprofile-use or -fbranch-probabilities) and can be used to
   15069        drive higher level optimizations, such as inlining.
   15070        The -ftree-based-profiling command-line option was removed and
   15071        -fprofile-use now implies disabling old RTL level loop optimizer
   15072        (-fno-loop-optimize). Speculative prefetching optimization
   15073        (originally enabled by -fspeculative-prefetching) was removed.
   15074 
   15075 New Languages and Language specific improvements
   15076 
   15077   C and Objective-C
   15078 
   15079      * The old Bison-based C and Objective-C parser has been replaced by a
   15080        new, faster hand-written recursive-descent parser.
   15081 
   15082   Ada
   15083 
   15084      * The build infrastructure for the Ada runtime library and tools has
   15085        been changed to be better integrated with the rest of the build
   15086        infrastructure of GCC. This should make doing cross builds of Ada a
   15087        bit easier.
   15088 
   15089   [2]C++
   15090 
   15091      * ARM-style name-injection of friend declarations is no longer the
   15092        default. For example:
   15093           struct S {
   15094             friend void f();
   15095           };
   15096 
   15097           void g() { f(); }
   15098        will not be accepted; instead a declaration of f will need to be
   15099        present outside of the scope of S. The new -ffriend-injection
   15100        option will enable the old behavior.
   15101      * The (undocumented) extension which permitted templates with default
   15102        arguments to be bound to template template parameters with fewer
   15103        parameters has been deprecated, and will be removed in the next
   15104        major release of G++. For example:
   15105        template <template <typename> class C>
   15106        void f(C<double>) {}
   15107 
   15108        template <typename T, typename U = int>
   15109        struct S {};
   15110 
   15111        template void f(S<double>);
   15112 
   15113        makes use of the deprecated extension. The reason this code is not
   15114        valid ISO C++ is that S is a template with two parameters;
   15115        therefore, it cannot be bound to C which has only one parameter.
   15116 
   15117     Runtime Library (libstdc++)
   15118 
   15119      * Optimization work:
   15120           + A new implementation of std::search_n is provided, better
   15121             performing in case of random access iterators.
   15122           + Added further efficient specializations of istream functions,
   15123             i.e., character array and string extractors.
   15124           + Other smaller improvements throughout.
   15125      * Policy-based associative containers, designed for high-performance,
   15126        flexibility and semantic safety are delivered in ext/pb_assoc.
   15127      * A versatile string class, __gnu_cxx::__versa_string, providing
   15128        facilities conforming to the standard requirements for
   15129        basic_string, is delivered in <ext/vstring.h>. In particular:
   15130           + Two base classes are provided: the default one avoids
   15131             reference counting and is optimized for short strings; the
   15132             alternate one, still uses it while improving in a few low
   15133             level areas (e.g., alignment). See vstring_fwd.h for some
   15134             useful typedefs.
   15135           + Various algorithms have been rewritten (e.g., replace), the
   15136             code streamlined and simple optimizations added.
   15137           + Option 3 of DR 431 is implemented for both available bases,
   15138             thus improving the support for stateful allocators.
   15139      * As usual, many bugs have been fixed (e.g., libstdc++/13583,
   15140        libstdc++/23953) and LWG resolutions put into effect for the first
   15141        time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
   15142        Issue 6.19). The implementation status of TR1 is now tracked in the
   15143        docs in tr1.html.
   15144 
   15145   Objective-C++
   15146 
   15147      * A new language front end for Objective-C++ has been added. This
   15148        language allows users to mix the object oriented features of
   15149        Objective-C with those of C++.
   15150 
   15151   Java (GCJ)
   15152 
   15153      * Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
   15154        features (plus some 0.20 bug-fixes)
   15155           + Networking
   15156                o The java.net.HttpURLConnection implementation no longer
   15157                  buffers the entire response body in memory. This means
   15158                  that response bodies larger than available memory can now
   15159                  be handled.
   15160           + (N)IO
   15161                o NIO FileChannel.map implementation, fast bulk put
   15162                  implementation for DirectByteBuffer (speeds up this
   15163                  method 10x).
   15164                o FileChannel.lock() and FileChannel.force() implemented.
   15165           + XML
   15166                o gnu.xml fix for nodes created outside a namespace
   15167                  context.
   15168                o Add support for output indenting and
   15169                  cdata-section-elements output instruction in
   15170                  xml.transform.
   15171                o xml.xpath corrections for cases where elements/attributes
   15172                  might have been created in non-namespace-aware mode.
   15173                  Corrections to handling of XSL variables and minor
   15174                  conformance updates.
   15175           + AWT
   15176                o GNU JAWT implementation, the AWT Native Interface, which
   15177                  allows direct access to native screen resources from
   15178                  within a Canvas's paint method. GNU Classpath Examples
   15179                  comes with a Demo, see libjava/classpath/examples/README.
   15180                o awt.datatransfer updated to 1.5 with support for
   15181                  FlavorEvents. The gtk+ awt peers now allow copy/paste of
   15182                  text, images, URIs/files and serialized objects with
   15183                  other applications and tracking clipboard change events
   15184                  with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
   15185                  objects are supported). A GNU Classpath Examples
   15186                  datatransfer Demo was added to show the new
   15187                  functionality.
   15188                o Split gtk+ awt peers event handling in two threads and
   15189                  improve gdk lock handling (solves several awt lock ups).
   15190                o Speed up awt Image loading.
   15191                o Better gtk+ scrollbar peer implementation when using gtk+
   15192                  >= 2.6.
   15193                o Handle image loading errors correctly for gdkpixbuf and
   15194                  MediaTracker.
   15195                o Better handle GDK lock. Properly prefix gtkpeer native
   15196                  functions (cp_gtk).
   15197                o GdkGraphics2D has been updated to use Cairo 0.5.x or
   15198                  higher.
   15199                o BufferedImage and GtkImage rewrites. All image drawing
   15200                  operations should now work correctly (flipping requires
   15201                  gtk+ >= 2.6)
   15202                o When gtk+ 2.6 or higher is installed the default log
   15203                  handler will produce stack traces whenever a WARNING,
   15204                  CRITICAL or ERROR message is produced.
   15205           + Free Swing
   15206                o The RepaintManager has been reworked for more efficient
   15207                  painting, especially for large GUIs.
   15208                o The layout manager OverlayLayout has been implemented,
   15209                  the BoxLayout has been rewritten to make use of the
   15210                  SizeRequirements utility class and caching for more
   15211                  efficient layout.
   15212                o Improved accessibility support.
   15213                o Significant progress has been made in the implementation
   15214                  of the javax.swing.plaf.metal package, with most UI
   15215                  delegates in a working state now. Please test this with
   15216                  your own applications and provide feedback that will help
   15217                  us to improve this package.
   15218                o The GUI demo (gnu.classpath.examples.swing.Demo) has been
   15219                  extended to highlight various features in our Free Swing
   15220                  implementation. And it includes a look and feel switcher
   15221                  for Metal (default), Ocean and GNU themes.
   15222                o The javax.swing.plaf.multi package is now implemented.
   15223                o Editing and several key actions for JTree and JTable were
   15224                  implemented.
   15225                o Lots of icons and look and feel improvements for Free
   15226                  Swing basic and metal themes were added. Try running the
   15227                  GNU Classpath Swing Demo in examples
   15228                  (gnu.classpath.examples.swing.Demo) with:
   15229                  -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFee
   15230                  l or
   15231                  -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFee
   15232                  l
   15233                o Start of styled text capabilites for java.swing.text.
   15234                o DefaultMutableTreeNode pre-order, post-order, depth-first
   15235                  and breadth-first traversal enumerations implemented.
   15236                o JInternalFrame colors and titlebar draw properly.
   15237                o JTree is working up to par (icons, selection and keyboard
   15238                  traversal).
   15239                o JMenus were made more compatible in visual and
   15240                  programmatic behavior.
   15241                o JTable changeSelection and multiple selections
   15242                  implemented.
   15243                o JButton and JToggleButton change states work properly
   15244                  now.
   15245                o JFileChooser fixes.
   15246                o revalidate() and repaint() fixes which make Free Swing
   15247                  much more responsive.
   15248                o MetalIconFactory implemented.
   15249                o Free Swing Top-Level Compatibility. JFrame, JDialog,
   15250                  JApplet, JInternalFrame, and JWindow are now 1.5
   15251                  compatible in the sense that you can call add() and
   15252                  setLayout() directly on them, which will have the same
   15253                  effect as calling getContentPane().add() and
   15254                  getContentPane().setLayout().
   15255                o The JTree interface has been completed. JTrees now
   15256                  recognizes mouse clicks and selections work.
   15257                o BoxLayout works properly now.
   15258                o Fixed GrayFilter to actually work.
   15259                o Metal SplitPane implemented.
   15260                o Lots of Free Swing text and editor stuff work now.
   15261           + Free RMI and Corba
   15262                o Andrew Watson, Vice President and Technical Director of
   15263                  the Object Management Group, has officially assigned us
   15264                  20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
   15265                  mark remote classpath-specific system exceptions.
   15266                  Obtaining the VMCID means that GNU Classpath now is a
   15267                  recogniseable type of node in a highly interoperable
   15268                  CORBA world.
   15269                o GNU Classpath now includes the first working draft to
   15270                  support the RMI over IIOP protocol. The current
   15271                  implementation is capable of remote invocations,
   15272                  transferring various Serializables and Externalizables
   15273                  via RMI-IIOP protocol. It can flatten graphs and, at
   15274                  least for the simple cases, is interoperable with 1.5
   15275                  JDKs.
   15276                o org.omg.PortableInterceptor and related functionality in
   15277                  other packages is now implemented:
   15278                     # The sever and client interceptors work as required
   15279                       since 1.4.
   15280                     # The IOR interceptor works as needed for 1.5.
   15281                o The org.omg.DynamicAny package is completed and passes
   15282                  the prepared tests.
   15283                o The Portable Object Adapter should now support the output
   15284                  of the recent IDL to java compilers. These compilers now
   15285                  generate servants and not CORBA objects as before, making
   15286                  the output depend on the existing POA implementation.
   15287                  Completing POA means that such code can already be tried
   15288                  to run on Classpath. Our POA is tested for the following
   15289                  usager scenarios:
   15290                     # POA converts servant to the CORBA object.
   15291                     # Servant provides to the CORBA object.
   15292                     # POA activates new CORBA object with the given Object
   15293                       Id (byte array) that is later accessible for the
   15294                       servant.
   15295                     # During the first call, the ServantActivator provides
   15296                       servant for this and all subsequent calls on the
   15297                       current object.
   15298                     # During each call, the ServantLocator provides
   15299                       servant for this call only.
   15300                     # ServantLocator or ServantActivator forwards call to
   15301                       another server.
   15302                     # POA has a single servant, responsible for all
   15303                       objects.
   15304                     # POA has a default servant, but some objects are
   15305                       explicitly connected to they specific servants.
   15306                  The POA is verified using tests from the former
   15307                  cost.omg.org.
   15308                o The CORBA implementation is now a working prototype that
   15309                  should support features up to 1.3 inclusive. We invite
   15310                  groups writing CORBA dependent applications to try
   15311                  Classpath implementation, reporting any possible bugs.
   15312                  The CORBA prototype is interoperable with Sun's
   15313                  implementation v 1.4, transferring object references,
   15314                  primitive types, narrow and wide strings, arrays,
   15315                  structures, trees, abstract interfaces and value types
   15316                  (feature of CORBA 2.3) between these two platforms.
   15317                  Remote exceptions are transferred and handled correctly.
   15318                  The stringified object references (IORs) from various
   15319                  sources are parsed as required. The transient (for
   15320                  current session) and permanent (till jre restart)
   15321                  redirections work. Both Little and Big Endian encoded
   15322                  messages are accepted. The implementation is verified
   15323                  using tests from the former cost.omg.org. The current
   15324                  release includes working examples (see the examples
   15325                  directory), demonstrating the client-server
   15326                  communication, using either CORBA Request or IDL-based
   15327                  stub (usually generated by a IDL to java compiler). These
   15328                  examples also show how to use the Classpath CORBA naming
   15329                  service. The IDL to java compiler is not yet written, but
   15330                  as our library must be compatible, it naturally accepts
   15331                  the output of other idlj implementations.
   15332           + Misc
   15333                o Updated TimeZone data against Olson tzdata2005l.
   15334                o Make zip and jar packages UTF-8 clean.
   15335                o "native" code builds and compiles (warning free) on
   15336                  Darwin and Solaris.
   15337                o java.util.logging.FileHandler now rotates files.
   15338                o Start of a generic JDWP framework in gnu/classpath/jdwp.
   15339                  This is unfinished, but feedback (at classpath (a] gnu.org)
   15340                  from runtime hackers is greatly appreciated. Although
   15341                  most of the work is currently being done around gcj/gij
   15342                  we want this framework to be as VM neutral as possible.
   15343                  Early design is described in:
   15344                  [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   15345                o QT4 AWT peers, enable by giving configure
   15346                  --enable-qt-peer. Included, but not ready for production
   15347                  yet. They are explicitly disabled and not supported. But
   15348                  if you want to help with the development of these new
   15349                  features we are interested in feedback. You will have to
   15350                  explicitly enable them to try them out (and they will
   15351                  most likely contain bugs).
   15352                o Documentation fixes all over the place. See
   15353                  [4]https://developer.classpath.org/doc/
   15354 
   15355 [5]New Targets and Target Specific Improvements
   15356 
   15357   IA-32/x86-64
   15358 
   15359      * The x86-64 medium model (that allows building applications whose
   15360        data segment exceeds 4GB) was redesigned to match latest ABI draft.
   15361        New implementation split large datastructures into separate segment
   15362        improving performance of accesses to small datastructures and also
   15363        allows linking of small model libraries into medium model programs
   15364        as long as the libraries are not accessing the large datastructures
   15365        directly. Medium model is also supported in position independent
   15366        code now.
   15367        The ABI change results in partial incompatibility among medium
   15368        model objects. Linking medium model libraries (or objects) compiled
   15369        with new compiler into medium model program compiled with older
   15370        will likely result in exceeding ranges of relocations.
   15371        Binutils 2.16.91 or newer are required for compiling medium model
   15372        now.
   15373 
   15374   RS6000 (POWER/PowerPC)
   15375 
   15376      * The AltiVec vector primitives in <altivec.h> are now implemented in
   15377        a way that puts a smaller burden on the preprocessor, instead
   15378        processing the "overloading" in the front ends. This should benefit
   15379        compilation speed on AltiVec vector code.
   15380      * AltiVec initializers now are generated more efficiently.
   15381      * The popcountb instruction available on POWER5 now is generated.
   15382      * The floating point round to integer instructions available on
   15383        POWER5+ now is generated.
   15384      * Floating point divides can be synthesized using the floating point
   15385        reciprocal estimate instructions.
   15386      * Double precision floating point constants are initialized as single
   15387        precision values if they can be represented exactly.
   15388 
   15389   S/390, zSeries and System z9
   15390 
   15391      * Support for the IBM System z9 109 processor has been added. When
   15392        using the -march=z9-109 option, the compiler will generate code
   15393        making use of instructions provided by the extended immediate
   15394        facility.
   15395      * Support for 128-bit IEEE floating point has been added. When using
   15396        the -mlong-double-128 option, the compiler will map the long double
   15397        data type to 128-bit IEEE floating point. Using this option
   15398        constitutes an ABI change, and requires glibc support.
   15399      * Various changes to improve performance of generated code have been
   15400        implemented, including:
   15401           + In functions that do not require a literal pool, register %r13
   15402             (which is traditionally reserved as literal pool pointer), can
   15403             now be freely used for other purposes by the compiler.
   15404           + More precise tracking of register use allows the compiler to
   15405             generate more efficient function prolog and epilog code in
   15406             certain cases.
   15407           + The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
   15408             instructions are now used to implement C string functions.
   15409           + The MOVE CHARACTER instruction with single byte overlap is now
   15410             used to implement the memset function with non-zero fill byte.
   15411           + The LOAD ZERO instructions are now used where appropriate.
   15412           + The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK,
   15413             and INSERT IMMEDIATE instructions are now used more frequently
   15414             to optimize bitfield operations.
   15415           + The BRANCH ON COUNT instruction is now used more frequently.
   15416             In particular, the fact that a loop contains a subroutine call
   15417             no longer prevents the compiler from using this instruction.
   15418           + The compiler is now aware that all shift and rotate
   15419             instructions implicitly truncate the shift count to six bits.
   15420      * Back-end support for the following generic features has been
   15421        implemented:
   15422           + The full set of [6]built-in functions for atomic memory
   15423             access.
   15424           + The -fstack-protector feature.
   15425           + The optimization pass avoiding unnecessary stores of incoming
   15426             argument registers in functions with variable argument list.
   15427 
   15428   SPARC
   15429 
   15430      * The default code model in 64-bit mode has been changed from
   15431        Medium/Anywhere to Medium/Middle on Solaris.
   15432      * TLS support is disabled by default on Solaris prior to release 10.
   15433        It can be enabled on TLS-capable Solaris 9 versions (4/04 release
   15434        and later) by specifying --enable-tls at configure time.
   15435 
   15436   MorphoSys
   15437 
   15438      * Support has been added for this new architecture.
   15439 
   15440 [7]Obsolete Systems
   15441 
   15442 Documentation improvements
   15443 
   15444 Other significant improvements
   15445 
   15446      * GCC can now emit code for protecting applications from
   15447        stack-smashing attacks. The protection is realized by buffer
   15448        overflow detection and reordering of stack variables to avoid
   15449        pointer corruption.
   15450      * Some built-in functions have been fortified to protect them against
   15451        various buffer overflow (and format string) vulnerabilities.
   15452        Compared to the mudflap bounds checking feature, the safe builtins
   15453        have far smaller overhead. This means that programs built using
   15454        safe builtins should not experience any measurable slowdown.
   15455 
   15456 [8]GCC 4.1.2
   15457 
   15458    This is the [9]list of problem reports (PRs) from GCC's bug tracking
   15459    system that are known to be fixed in the 4.1.2 release. This list might
   15460    not be complete (that is, it is possible that some PRs that have been
   15461    fixed are not listed here).
   15462 
   15463    When generating code for a shared library, GCC now recognizes that
   15464    global functions may be replaced when the program runs. Therefore, it
   15465    is now more conservative in deducing information from the bodies of
   15466    functions. For example, in this example:
   15467     void f() {}
   15468     void g() {
   15469      try { f(); }
   15470      catch (...) {
   15471        cout << "Exception";
   15472      }
   15473     }
   15474 
   15475    G++ would previously have optimized away the catch clause, since it
   15476    would have concluded that f cannot throw exceptions. Because users may
   15477    replace f with another function in the main body of the program, this
   15478    optimization is unsafe, and is no longer performed. If you wish G++ to
   15479    continue to optimize as before, you must add a throw() clause to the
   15480    declaration of f to make clear that it does not throw exceptions.
   15481 
   15482 
   15483     For questions related to the use of GCC, please consult these web
   15484     pages and the [10]GCC manuals. If that fails, the
   15485     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15486     web pages and the development of GCC are welcome on our developer
   15487     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   15488     archives.
   15489 
   15490    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   15491    distribution of this entire article is permitted in any medium,
   15492    provided this notice is preserved.
   15493 
   15494    These pages are [15]maintained by the GCC team. Last modified
   15495    2025-01-31.
   15496 
   15497 References
   15498 
   15499    1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   15500    2. https://gcc.gnu.org/gcc-4.1/changes.html#cplusplus
   15501    3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   15502    4. https://developer.classpath.org/doc/
   15503    5. https://gcc.gnu.org/gcc-4.1/changes.html#targets
   15504    6. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
   15505    7. https://gcc.gnu.org/gcc-4.1/changes.html#obsolete_systems
   15506    8. https://gcc.gnu.org/gcc-4.1/changes.html#GCC4.1.2
   15507    9. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
   15508   10. https://gcc.gnu.org/onlinedocs/
   15509   11. mailto:gcc-help (a] gcc.gnu.org
   15510   12. mailto:gcc (a] gcc.gnu.org
   15511   13. https://gcc.gnu.org/lists.html
   15512   14. https://www.fsf.org/
   15513   15. https://gcc.gnu.org/about.html
   15514 ======================================================================
   15515 http://gcc.gnu.org/gcc-4.0/index.html
   15516 
   15517                              GCC 4.0 Release Series
   15518 
   15519    (This release series is no longer supported.)
   15520 
   15521    January 31, 2007
   15522 
   15523    The [1]GNU project and the GCC developers are pleased to announce the
   15524    release of GCC 4.0.4.
   15525 
   15526    This release is a bug-fix release, containing fixes for regressions in
   15527    GCC 4.0.3 relative to previous releases of GCC.
   15528 
   15529 Release History
   15530 
   15531    GCC 4.0.4
   15532           January 31, 2007 ([2]changes)
   15533 
   15534    GCC 4.0.3
   15535           March 10, 2006 ([3]changes)
   15536 
   15537    GCC 4.0.2
   15538           September 28, 2005 ([4]changes)
   15539 
   15540    GCC 4.0.1
   15541           July 7, 2005 ([5]changes)
   15542 
   15543    GCC 4.0.0
   15544           April 20, 2005 ([6]changes)
   15545 
   15546 References and Acknowledgements
   15547 
   15548    GCC used to stand for the GNU C Compiler, but since the compiler
   15549    supports several other languages aside from C, it now stands for the
   15550    GNU Compiler Collection.
   15551 
   15552    A list of [7]successful builds is updated as new information becomes
   15553    available.
   15554 
   15555    The GCC developers would like to thank the numerous people that have
   15556    contributed new features, improvements, bug fixes, and other changes as
   15557    well as test results to GCC. This [8]amazing group of volunteers is
   15558    what makes GCC successful.
   15559 
   15560    For additional information about GCC please refer to the [9]GCC project
   15561    web site or contact the [10]GCC development mailing list.
   15562 
   15563    To obtain GCC please use [11]our mirror sites, or [12]our version
   15564    control system.
   15565 
   15566 
   15567     For questions related to the use of GCC, please consult these web
   15568     pages and the [13]GCC manuals. If that fails, the
   15569     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15570     web pages and the development of GCC are welcome on our developer
   15571     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   15572     archives.
   15573 
   15574    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   15575    distribution of this entire article is permitted in any medium,
   15576    provided this notice is preserved.
   15577 
   15578    These pages are [18]maintained by the GCC team. Last modified
   15579    2022-10-26.
   15580 
   15581 References
   15582 
   15583    1. http://www.gnu.org/
   15584    2. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   15585    3. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
   15586    4. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
   15587    5. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
   15588    6. https://gcc.gnu.org/gcc-4.0/changes.html
   15589    7. https://gcc.gnu.org/gcc-4.0/buildstat.html
   15590    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15591    9. https://gcc.gnu.org/index.html
   15592   10. mailto:gcc (a] gcc.gnu.org
   15593   11. https://gcc.gnu.org/mirrors.html
   15594   12. https://gcc.gnu.org/git.html
   15595   13. https://gcc.gnu.org/onlinedocs/
   15596   14. mailto:gcc-help (a] gcc.gnu.org
   15597   15. mailto:gcc (a] gcc.gnu.org
   15598   16. https://gcc.gnu.org/lists.html
   15599   17. https://www.fsf.org/
   15600   18. https://gcc.gnu.org/about.html
   15601 ======================================================================
   15602 http://gcc.gnu.org/gcc-4.0/changes.html
   15603 
   15604                              GCC 4.0 Release Series
   15605                         Changes, New Features, and Fixes
   15606 
   15607    The latest release in the 4.0 release series is [1]GCC 4.0.4.
   15608 
   15609 Caveats
   15610 
   15611      * GCC now generates location lists by default when compiling with
   15612        debug info and optimization.
   15613           + GDB 6.0 and older crashes when it sees location lists. GDB 6.1
   15614             or later is needed to debug binaries containing location
   15615             lists.
   15616           + When you are trying to view a value of a variable in a part of
   15617             a function where it has no location (for example when the
   15618             variable is no longer used and thus its location was used for
   15619             something else) GDB will say that it is not available.
   15620        You can disable generating location lists by -fno-var-tracking.
   15621      * GCC no longer accepts the -fwritable-strings option. Use named
   15622        character arrays when you need a writable string.
   15623      * The options -freduce-all-givs and -fmove-all-movables have been
   15624        discontinued. They were used to circumvent a shortcoming in the
   15625        heuristics of the old loop optimization code with respect to common
   15626        Fortran constructs. The new (tree) loop optimizer works differently
   15627        and doesn't need those work-arounds.
   15628      * The graph-coloring register allocator, formerly enabled by the
   15629        option -fnew-ra, has been discontinued.
   15630      * -I- has been deprecated. -iquote is meant to replace the need for
   15631        this option.
   15632      * The MIPS -membedded-pic and -mrnames options have been removed.
   15633      * All MIPS targets now require the GNU assembler. In particular, IRIX
   15634        configurations can no longer use the MIPSpro assemblers, although
   15635        they do still support the MIPSpro linkers.
   15636      * The SPARC option -mflat has been removed.
   15637      * English-language diagnostic messages will now use Unicode quotation
   15638        marks in UTF-8 locales. (Non-English messages already used the
   15639        quotes appropriate for the language in previous releases.) If your
   15640        terminal does not support UTF-8 but you are using a UTF-8 locale
   15641        (such locales are the default on many GNU/Linux systems) then you
   15642        should set LC_CTYPE=C in the environment to disable that locale.
   15643        Programs that parse diagnostics and expect plain ASCII
   15644        English-language messages should set LC_ALL=C. See [2]Markus Kuhn's
   15645        explanation of Unicode quotation marks for more information.
   15646      * The specs file is no longer installed on most platforms. Most users
   15647        will be totally unaffected. However, if you are accustomed to
   15648        editing the specs file yourself, you will now have to use the
   15649        -dumpspecs option to generate the specs file, and then edit the
   15650        resulting file.
   15651 
   15652 General Optimizer Improvements
   15653 
   15654      * The [3]tree ssa branch has been merged. This merge has brought in a
   15655        completely new optimization framework based on a higher level
   15656        intermediate representation than the existing RTL representation.
   15657        Numerous new code transformations based on the new framework are
   15658        available in GCC 4.0, including:
   15659           + Scalar replacement of aggregates
   15660           + Constant propagation
   15661           + Value range propagation
   15662           + Partial redundancy elimination
   15663           + Load and store motion
   15664           + Strength reduction
   15665           + Dead store elimination
   15666           + Dead and unreachable code elimination
   15667           + [4]Autovectorization
   15668           + Loop interchange
   15669           + Tail recursion by accumulation
   15670        Many of these passes outperform their counterparts from previous
   15671        GCC releases.
   15672      * [5]Swing Modulo Scheduling (SMS). An RTL level instruction
   15673        scheduling optimization intended for loops that perform heavy
   15674        computations.
   15675 
   15676 New Languages and Language specific improvements
   15677 
   15678   C family
   15679 
   15680      * The sentinel attribute has been added to GCC. This function
   15681        attribute allows GCC to warn when variadic functions such as execl
   15682        are not NULL terminated. See the GCC manual for a complete
   15683        description of its behavior.
   15684      * Given __attribute__((alias("target"))) it is now an error if target
   15685        is not a symbol, defined in the same translation unit. This also
   15686        applies to aliases created by #pragma weak alias=target. This is
   15687        because it's meaningless to define an alias to an undefined symbol.
   15688        On Solaris, the native assembler would have caught this error, but
   15689        GNU as does not.
   15690 
   15691   C and Objective-C
   15692 
   15693      * The -Wstrict-aliasing=2 option has been added. This warning catches
   15694        all unsafe cases, but it may also give a warning for some cases
   15695        that are safe.
   15696      * The cast-as-lvalue, conditional-expression-as-lvalue and
   15697        compound-expression-as-lvalue extensions, which were deprecated in
   15698        3.3.4 and 3.4, have been removed.
   15699      * The -fwritable-strings option, which was deprecated in 3.4, has
   15700        been removed.
   15701      * #pragma pack() semantics have been brought closer to those used by
   15702        other compilers. This also applies to C++.
   15703      * Taking the address of a variable with register storage is invalid
   15704        in C. GCC now issues an error instead of a warning.
   15705      * Arrays of incomplete element type are invalid in C. GCC now issues
   15706        an error for such arrays. Declarations such as extern struct s x[];
   15707        (where struct s has not been defined) can be moved after the
   15708        definition of struct s. Function parameters declared as arrays of
   15709        incomplete type can instead be declared as pointers.
   15710 
   15711   C++
   15712 
   15713      * When compiling without optimizations (-O0), the C++ front end is
   15714        much faster than in any previous versions of GCC. Independent
   15715        testers have measured speed-ups up to 25% in real-world production
   15716        code, compared to the 3.4 family (which was already the fastest
   15717        version to date). Upgrading from older versions might show even
   15718        bigger improvements.
   15719      * ELF visibility attributes can now be applied to a class type, so
   15720        that it affects every member function of a class at once, without
   15721        having to specify each individually:
   15722 class __attribute__ ((visibility("hidden"))) Foo
   15723 {
   15724    int foo1();
   15725    void foo2();
   15726 };
   15727        The syntax is deliberately similar to the __declspec() system used
   15728        by Microsoft Windows based compilers, allowing cross-platform
   15729        projects to easily reuse their existing macro system for denoting
   15730        exports and imports. By explicitly marking internal classes never
   15731        used outside a binary as hidden, one can completely avoid PLT
   15732        indirection overheads during their usage by the compiler. You can
   15733        find out more about the advantages of this at
   15734        [6]https://www.akkadia.org/drepper/dsohowto.pdf
   15735      * The -fvisibility-inlines-hidden option has been added which marks
   15736        all inlineable functions as having hidden ELF visibility, thus
   15737        removing their symbol and typeinfo from the exported symbol table
   15738        of the output ELF binary. Using this option can reduce the exported
   15739        symbol count of template-heavy code by up to 40% with no code
   15740        change at all, thus notably improving link and load times for the
   15741        binary as well as a reduction in size of up to 10%. Also, check the
   15742        new [7]-fvisibility option.
   15743      * The compiler now uses the library interface specified by the [8]C++
   15744        ABI for thread-safe initialization of function-scope static
   15745        variables. Most users should leave this alone, but embedded
   15746        programmers may want to disable this by specifying
   15747        -fno-threadsafe-statics for a small savings in code size.
   15748      * Taking the address of an explicit register variable is no longer
   15749        supported. Note that C++ allows taking the address of variables
   15750        with register storage so this will continue to compile with a
   15751        warning. For example, assuming that r0 is a machine register:
   15752 register int foo asm ("r0");
   15753 register int bar;
   15754 &foo; // error, no longer accepted
   15755 &bar; // OK, with a warning
   15756      * G++ has an undocumented extension to virtual function covariancy
   15757        rules that allowed the overrider to return a type that was
   15758        implicitly convertable to the overridden function's return type.
   15759        For instance a function returning void * could be overridden by a
   15760        function returning T *. This is now deprecated and will be removed
   15761        in a future release.
   15762      * The G++ minimum and maximum operators (<? and >?) and their
   15763        compound forms (<?=) and >?=) have been deprecated and will be
   15764        removed in a future version. Code using these operators should be
   15765        modified to use std::min and std::max instead.
   15766      * Declaration of nested classes of class templates as friends are
   15767        supported:
   15768 template <typename T> struct A {
   15769   class B {};
   15770 };
   15771 class C {
   15772   template <typename T> friend class A<T>::B;
   15773 };
   15774        This complements the feature member functions of class templates as
   15775        friends introduced in GCC 3.4.0.
   15776      * When declaring a friend class using an unqualified name, classes
   15777        outside the innermost non-class scope are not searched:
   15778 class A;
   15779 namespace N {
   15780   class B {
   15781     friend class A;   // Refer to N::A which has not been declared yet
   15782                       // because name outside namespace N are not searched
   15783     friend class ::A; // Refer to ::A
   15784   };
   15785 }
   15786        Hiding the friend name until declaration is still not implemented.
   15787      * Friends of classes defined outside their namespace are correctly
   15788        handled:
   15789 namespace N {
   15790   class A;
   15791 }
   15792 class N::A {
   15793   friend class B; // Refer to N::B in GCC 4.0.0
   15794                   // but ::B in earlier versions of GCC
   15795 };
   15796 
   15797     Runtime Library (libstdc++)
   15798 
   15799      * Optimization work:
   15800           + Added efficient specializations of istream functions for char
   15801             and wchar_t.
   15802           + Further performance tuning of strings, in particular wrt
   15803             single-char append and getline.
   15804           + iter_swap - and therefore most of the mutating algorithms -
   15805             now makes an unqualified call to swap when the value_type of
   15806             the two iterators is the same.
   15807      * A large subset of the features in Technical Report 1 (TR1 for
   15808        short) is experimentally delivered (i.e., no guarantees about the
   15809        implementation are provided. In particular it is not promised that
   15810        the library will remain link-compatible when code using TR1 is
   15811        used):
   15812           + General utilities such as reference_wrapper and shared_ptr.
   15813           + Function objects, i.e., result_of, mem_fn, bind, function.
   15814           + Support for metaprogramming.
   15815           + New containers such as tuple, array, unordered_set,
   15816             unordered_map, unordered_multiset, unordered_multimap.
   15817      * As usual, many bugs have been fixed and LWG resolutions implemented
   15818        for the first time (e.g., DR 409).
   15819 
   15820   Java
   15821 
   15822      * In order to prevent naming conflicts with other implementations of
   15823        these tools, some GCJ binaries have been renamed:
   15824           + rmic is now grmic,
   15825           + rmiregistry is now grmiregistry, and
   15826           + jar is now fastjar.
   15827        In particular, these names were problematic for the jpackage.org
   15828        packaging conventions which install symlinks in /usr/bin that point
   15829        to the preferred versions of these tools.
   15830      * The -findirect-dispatch argument to the compiler now works and
   15831        generates code following a new "binary compatibility" ABI. Code
   15832        compiled this way follows the binary compatibility rules of the
   15833        Java Language Specification.
   15834      * libgcj now has support for using GCJ as a JIT, using the
   15835        gnu.gcj.jit family of system properties.
   15836      * libgcj can now find a shared library corresponding to the bytecode
   15837        representation of a class. See the documentation for the new
   15838        gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
   15839        property.
   15840      * There have been many improvements to the class library. Here are
   15841        some highlights:
   15842           + Much more of AWT and Swing exist.
   15843           + Many new packages and classes were added, including
   15844             java.util.regex, java.net.URI, javax.crypto,
   15845             javax.crypto.interfaces, javax.crypto.spec, javax.net,
   15846             javax.net.ssl, javax.security.auth,
   15847             javax.security.auth.callback, javax.security.auth.login,
   15848             javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
   15849             javax.imageio, javax.imageio.event, javax.imageio.spi,
   15850             javax.print, javax.print.attribute,
   15851             javax.print.attribute.standard, javax.print.event, and
   15852             javax.xml
   15853           + Updated SAX and DOM, and imported GNU JAXP
   15854 
   15855   Fortran
   15856 
   15857      * A new [9]Fortran front end has replaced the aging GNU Fortran 77
   15858        front end. The new front end supports Fortran 90 and Fortran 95. It
   15859        may not yet be as stable as the old Fortran front end.
   15860 
   15861   Ada
   15862 
   15863      * Ada (with tasking and Zero Cost Exceptions) is now available on
   15864        many more targets, including but not limited to: alpha-linux,
   15865        hppa-hpux, hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
   15866        s390x-linux, sparc-linux.
   15867      * Some of the new Ada 2005 features are now implemented like
   15868        Wide_Wide_Character and Ada.Containers.
   15869      * Many bugs have been fixed, tools and documentation improved.
   15870      * To compile Ada from the sources, install an older working Ada
   15871        compiler and then use --enable-languages=ada at configuration time,
   15872        since the Ada front end is not currently activated by default. See
   15873        the [10]Installing GCC for details.
   15874 
   15875 [11]New Targets and Target Specific Improvements
   15876 
   15877   H8/300
   15878 
   15879      * The frame layout has changed. In the new layout, the prologue of a
   15880        function first saves registers and then allocate space for locals,
   15881        resulting in an 1% improvement on code size.
   15882 
   15883   IA-32/x86-64 (AMD64)
   15884 
   15885      * The acos, asin, drem, exp10, exp2, expm1, fmod, ilogb, log10,
   15886        log1p, log2, logb and tan mathematical builtins (and their float
   15887        and long double variants) are now implemented as inline x87
   15888        intrinsics when using -ffast-math.
   15889      * The ceil, floor, nearbyint, rint and trunc mathematical builtins
   15890        (and their float and long double variants) are now implemented as
   15891        inline x87 intrinsics when using -ffast-math.
   15892      * The x87's fsincos instruction is now used automatically with
   15893        -ffast-math when calculating both the sin and cos of the same
   15894        argument.
   15895      * Instruction selection for multiplication and division by constants
   15896        has been improved.
   15897 
   15898   IA-64
   15899 
   15900      * Floating point division, integer division and sqrt are now inlined,
   15901        resulting in significant performance improvements on some codes.
   15902 
   15903   MIPS
   15904 
   15905      * Division by zero checks now use conditional traps if the target
   15906        processor supports them. This decreases code size by one word per
   15907        division operation. The old behavior (branch and break) can be
   15908        obtained either at configure time by passing --with-divide=breaks
   15909        to configure or at runtime by passing -mdivide-breaks to GCC.
   15910      * Support for MIPS64 paired-single instructions has been added. It is
   15911        enabled by -mpaired-single and can be accessed using both the
   15912        target-independent vector extensions and new MIPS-specific built-in
   15913        functions.
   15914      * Support for the MIPS-3D ASE has been added. It is enabled by
   15915        -mips3d and provides new MIPS-3D-specific built-in functions.
   15916      * The -mexplicit-relocs option now supports static n64 code (as is
   15917        used, for example, in 64-bit linux kernels). -mexplicit-relocs
   15918        should now be feature-complete and is enabled by default when GCC
   15919        is configured to use a compatible assembler.
   15920      * Support for the NEC VR4130 series has been added. This support
   15921        includes the use of VR-specific instructions and a new VR4130
   15922        scheduler. Full VR4130 support can be selected with -march=vr4130
   15923        while code for any ISA can be tuned for the VR4130 using
   15924        -mtune=vr4130. There is also a new -mvr4130-align option that
   15925        produces better schedules at the cost of increased code size.
   15926      * Support for the Broadcom SB-1 has been extended. There is now an
   15927        SB-1 scheduler as well as support for the SB-1-specific
   15928        paired-single instructions. Full SB-1 support can be selected with
   15929        -march=sb1 while code for any ISA can be optimized for the SB-1
   15930        using -mtune=sb1.
   15931      * The compiler can now work around errata in R4000, R4400, VR4120 and
   15932        VR4130 processors. These workarounds are enabled by -mfix-r4000,
   15933        -mfix-r4400, -mfix-vr4120 and -mfix-vr4130 respectively. The VR4120
   15934        and VR4130 workarounds need binutils 2.16 or above.
   15935      * IRIX shared libraries are now installed into the standard library
   15936        directories: o32 libraries go into lib/, n32 libraries go into
   15937        lib32/ and n64 libraries go into lib64/.
   15938      * The compiler supports a new -msym32 option. It can be used to
   15939        optimize n64 code in which all symbols are known to have 32-bit
   15940        values.
   15941 
   15942   S/390 and zSeries
   15943 
   15944      * New command-line options help to generate code intended to run in
   15945        an environment where stack space is restricted, e.g. Linux kernel
   15946        code:
   15947           + -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
   15948             warnings for single functions that require large or dynamic
   15949             stack frames.
   15950           + -mstack-size and -mstack-guard generate code that checks for
   15951             stack overflow at run time.
   15952           + -mpacked-stack generates code that reduces the stack frame
   15953             size of many functions by reusing unneeded parts of the stack
   15954             bias area.
   15955      * The -msoft-float option now ensures that generated code never
   15956        accesses floating point registers.
   15957      * The s390x-ibm-tpf target now fully supports C++, including
   15958        exceptions and threads.
   15959      * Various changes to improve performance of the generated code have
   15960        been implemented, including:
   15961           + GCC now uses sibling calls where possible.
   15962           + Condition code handling has been optimized, allowing GCC to
   15963             omit redundant comparisons in certain cases.
   15964           + The cost function guiding many optimizations has been refined
   15965             to more accurately represent the z900 and z990 processors.
   15966           + The ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
   15967             instructions are now used to avoid conditional branches in
   15968             certain cases.
   15969           + The back end now uses the LEGITIMIZE_RELOAD_ADDRESS feature to
   15970             optimize address arithmetic required to access large stack
   15971             frames.
   15972           + GCC now makes more efficient use of memory-to-memory type
   15973             instructions (MVC, CLC, ...).
   15974           + More precise tracking of special register use allows better
   15975             instruction scheduling, in particular of the function prologue
   15976             and epilogue sequences.
   15977           + The Java front end now generates inline code to implement
   15978             integer division, instead of calling library routines.
   15979 
   15980   SPARC
   15981 
   15982      * The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
   15983        -mf934 have been removed. They have been replaced with -mcpu=xxx.
   15984      * The internal model used to estimate the relative cost of each
   15985        instruction has been updated. It is expected to give better results
   15986        on recent UltraSPARC processors.
   15987      * Code generation for function prologues and epilogues has been
   15988        improved, resulting in better scheduling and allowing multiple exit
   15989        points in functions.
   15990      * Support for Sun's Visual Instruction Set (VIS) has been enhanced.
   15991        It is enabled by -mvis and provides new built-in functions for VIS
   15992        instructions on UltraSPARC processors.
   15993      * The option -mapp-regs has been turned on by default on Solaris too.
   15994 
   15995   NetWare
   15996 
   15997      * Novell NetWare (on ix86, no other hardware platform was ever really
   15998        supported by this OS) has been re-enabled and the ABI supported by
   15999        GCC has been brought into sync with that of MetroWerks CodeWarrior
   16000        (the ABI previously supported was that of some Unix systems, which
   16001        NetWare never tried to support).
   16002 
   16003 [12]Obsolete Systems
   16004 
   16005    Support for a number of older systems has been declared obsolete in GCC
   16006    4.0. Unless there is activity to revive them, the next release of GCC
   16007    will have their sources permanently removed.
   16008 
   16009    All GCC ports for the following processor architectures have been
   16010    declared obsolete:
   16011      * Intel i860
   16012      * Ubicom IP2022
   16013      * National Semiconductor NS32K (ns32k)
   16014      * Texas Instruments TMS320C[34]x
   16015 
   16016    Also, those for some individual systems have been obsoleted:
   16017      * SPARC family
   16018           + SPARClite-based systems (sparclite-*-coff, sparclite-*-elf,
   16019             sparc86x-*-elf)
   16020           + OpenBSD 32-bit (sparc-*-openbsd*)
   16021 
   16022 Documentation improvements
   16023 
   16024 Other significant improvements
   16025 
   16026      * Location lists are now generated by default when compiling with
   16027        debug info and optimization. Location lists provide more accurate
   16028        debug info about locations of variables and they allow debugging
   16029        code compiled with -fomit-frame-pointer.
   16030      * The -fvisibility option has been added which allows the default ELF
   16031        visibility of all symbols to be set per compilation and the new
   16032        #pragma GCC visibility preprocessor command allows the setting of
   16033        default ELF visibility for a region of code. Using
   16034        -fvisibility=hidden especially in combination with the new
   16035        -fvisibility-inlines-hidden can yield substantial improvements in
   16036        output binary quality including avoiding PLT indirection overheads,
   16037        reduction of the exported symbol count by up to 60% (with resultant
   16038        improvements to link and load times), better scope for the
   16039        optimizer to improve code and up to a 20% reduction in binary size.
   16040        Using these options correctly yields a binary with a similar symbol
   16041        count to a Windows DLL.
   16042        Perhaps more importantly, this new feature finally allows (with
   16043        careful planning) complete avoidance of symbol clashes when
   16044        manually loading shared objects with RTLD_GLOBAL, thus finally
   16045        solving problems many projects such as python were forced to use
   16046        RTLD_LOCAL for (with its resulting issues for C++ correctness). You
   16047        can find more information about using these options at
   16048        [13]https://gcc.gnu.org/wiki/Visibility.
   16049      __________________________________________________________________
   16050 
   16051 [14]GCC 4.0.1
   16052 
   16053    This is the [15]list of problem reports (PRs) from GCC's bug tracking
   16054    system that are known to be fixed in the 4.0.1 release. This list might
   16055    not be complete (that is, it is possible that some PRs that have been
   16056    fixed are not listed here).
   16057 
   16058 [16]GCC 4.0.2
   16059 
   16060    This is the [17]list of problem reports (PRs) from GCC's bug tracking
   16061    system that are known to be fixed in the 4.0.2 release. This list might
   16062    not be complete (that is, it is possible that some PRs that have been
   16063    fixed are not listed here).
   16064 
   16065    Unfortunately, due to a release engineering failure, this release has a
   16066    regression on Solaris that will affect some C++ programs. We suggest
   16067    that Solaris users apply a [18]patch that corrects the problem. Users
   16068    who do not wish to apply the patch should explicitly link C++ programs
   16069    with the -pthreads option, even if they do not use threads. This
   16070    problem has been corrected in the current 4.0 branch sources and will
   16071    not be present in GCC 4.0.3.
   16072 
   16073 [19]GCC 4.0.3
   16074 
   16075    Starting with this release, the function getcontext is recognized by
   16076    the compiler as having the same semantics as the setjmp function. In
   16077    particular, the compiler will ensure that all registers are dead before
   16078    calling such a function and will emit a warning about the variables
   16079    that may be clobbered after the second return from the function.
   16080 
   16081 [20]GCC 4.0.4
   16082 
   16083    This is the [21]list of problem reports (PRs) from GCC's bug tracking
   16084    system that are known to be fixed in the 4.0.4 release. This list might
   16085    not be complete (that is, it is possible that some PRs that have been
   16086    fixed are not listed here).
   16087 
   16088    The 4.0.4 release is provided for those that require a high degree of
   16089    binary compatibility with previous 4.0.x releases. For most users, the
   16090    GCC team recommends that version 4.1.1 or later be used instead."
   16091 
   16092 
   16093     For questions related to the use of GCC, please consult these web
   16094     pages and the [22]GCC manuals. If that fails, the
   16095     [23]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16096     web pages and the development of GCC are welcome on our developer
   16097     list at [24]gcc (a] gcc.gnu.org. All of [25]our lists have public
   16098     archives.
   16099 
   16100    Copyright (C) [26]Free Software Foundation, Inc. Verbatim copying and
   16101    distribution of this entire article is permitted in any medium,
   16102    provided this notice is preserved.
   16103 
   16104    These pages are [27]maintained by the GCC team. Last modified
   16105    2025-01-31.
   16106 
   16107 References
   16108 
   16109    1. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   16110    2. https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
   16111    3. https://gcc.gnu.org/projects/tree-ssa/
   16112    4. https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   16113    5. https://gcc.gnu.org/news/sms.html
   16114    6. https://www.akkadia.org/drepper/dsohowto.pdf
   16115    7. https://gcc.gnu.org/gcc-4.0/changes.html#visibility
   16116    8. https://itanium-cxx-abi.github.io/cxx-abi/
   16117    9. https://gcc.gnu.org/fortran/
   16118   10. https://gcc.gnu.org/install/
   16119   11. https://gcc.gnu.org/gcc-4.0/changes.html#targets
   16120   12. https://gcc.gnu.org/gcc-4.0/changes.html#obsolete_systems
   16121   13. https://gcc.gnu.org/wiki/Visibility
   16122   14. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.1
   16123   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
   16124   16. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.2
   16125   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
   16126   18. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
   16127   19. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.3
   16128   20. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.4
   16129   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
   16130   22. https://gcc.gnu.org/onlinedocs/
   16131   23. mailto:gcc-help (a] gcc.gnu.org
   16132   24. mailto:gcc (a] gcc.gnu.org
   16133   25. https://gcc.gnu.org/lists.html
   16134   26. https://www.fsf.org/
   16135   27. https://gcc.gnu.org/about.html
   16136 ======================================================================
   16137 http://gcc.gnu.org/gcc-3.4/index.html
   16138 
   16139                              GCC 3.4 Release Series
   16140 
   16141    (This release series is no longer supported.)
   16142 
   16143    May 26, 2006
   16144 
   16145    The [1]GNU project and the GCC developers are pleased to announce the
   16146    release of GCC 3.4.6.
   16147 
   16148    This release is a bug-fix release, containing fixes for regressions in
   16149    GCC 3.4.4 relative to previous releases of GCC. This is the last of the
   16150    3.4.x series.
   16151 
   16152    The GCC 3.4 release series includes numerous [2]new features,
   16153    improvements, bug fixes, and other changes, thanks to an [3]amazing
   16154    group of volunteers.
   16155 
   16156 Release History
   16157 
   16158    GCC 3.4.6
   16159           March 6, 2006 ([4]changes)
   16160 
   16161    GCC 3.4.5
   16162           November 30, 2005 ([5]changes)
   16163 
   16164    GCC 3.4.4
   16165           May 18, 2005 ([6]changes)
   16166 
   16167    GCC 3.4.3
   16168           November 4, 2004 ([7]changes)
   16169 
   16170    GCC 3.4.2
   16171           September 6, 2004 ([8]changes)
   16172 
   16173    GCC 3.4.1
   16174           July 1, 2004 ([9]changes)
   16175 
   16176    GCC 3.4.0
   16177           April 18, 2004 ([10]changes)
   16178 
   16179 References and Acknowledgements
   16180 
   16181    GCC used to stand for the GNU C Compiler, but since the compiler
   16182    supports several other languages aside from C, it now stands for the
   16183    GNU Compiler Collection.
   16184 
   16185    A list of [11]successful builds is updated as new information becomes
   16186    available.
   16187 
   16188    The GCC developers would like to thank the numerous people that have
   16189    contributed new features, improvements, bug fixes, and other changes as
   16190    well as test results to GCC. This [12]amazing group of volunteers is
   16191    what makes GCC successful.
   16192 
   16193    For additional information about GCC please refer to the [13]GCC
   16194    project web site or contact the [14]GCC development mailing list.
   16195 
   16196    To obtain GCC please use [15]our mirror sites, or [16]our version
   16197    control system.
   16198 
   16199 
   16200     For questions related to the use of GCC, please consult these web
   16201     pages and the [17]GCC manuals. If that fails, the
   16202     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16203     web pages and the development of GCC are welcome on our developer
   16204     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   16205     archives.
   16206 
   16207    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   16208    distribution of this entire article is permitted in any medium,
   16209    provided this notice is preserved.
   16210 
   16211    These pages are [22]maintained by the GCC team. Last modified
   16212    2022-10-26.
   16213 
   16214 References
   16215 
   16216    1. http://www.gnu.org/
   16217    2. https://gcc.gnu.org/gcc-3.4/changes.html
   16218    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   16219    4. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   16220    5. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
   16221    6. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
   16222    7. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
   16223    8. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.2
   16224    9. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
   16225   10. https://gcc.gnu.org/gcc-3.4/changes.html
   16226   11. https://gcc.gnu.org/gcc-3.4/buildstat.html
   16227   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   16228   13. https://gcc.gnu.org/index.html
   16229   14. mailto:gcc (a] gcc.gnu.org
   16230   15. https://gcc.gnu.org/mirrors.html
   16231   16. https://gcc.gnu.org/git.html
   16232   17. https://gcc.gnu.org/onlinedocs/
   16233   18. mailto:gcc-help (a] gcc.gnu.org
   16234   19. mailto:gcc (a] gcc.gnu.org
   16235   20. https://gcc.gnu.org/lists.html
   16236   21. https://www.fsf.org/
   16237   22. https://gcc.gnu.org/about.html
   16238 ======================================================================
   16239 http://gcc.gnu.org/gcc-3.4/changes.html
   16240 
   16241                              GCC 3.4 Release Series
   16242                         Changes, New Features, and Fixes
   16243 
   16244    The final release in the 3.4 release series is [1]GCC 3.4.6. The series
   16245    is now closed.
   16246 
   16247    GCC 3.4 has [2]many improvements in the C++ front end. Before reporting
   16248    a bug, please make sure it's really GCC, and not your code, that is
   16249    broken.
   16250 
   16251 Caveats
   16252 
   16253      * GNU Make is now required to build GCC.
   16254      * With -nostdinc the preprocessor used to ignore both standard
   16255        include paths and include paths contained in environment variables.
   16256        It was neither documented nor intended that environment variable
   16257        paths be ignored, so this has been corrected.
   16258      * GCC no longer accepts the options -fvolatile, -fvolatile-global and
   16259        -fvolatile-static. It is unlikely that they worked correctly in any
   16260        3.x release.
   16261      * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
   16262      * Support for all the systems [3]obsoleted in GCC 3.3 has been
   16263        removed from GCC 3.4. See below for a [4]list of systems which are
   16264        obsoleted in this release.
   16265      * GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
   16266        compilers will not work.
   16267      * The implementation of the [5]MIPS ABIs has changed. As a result,
   16268        the code generated for certain MIPS targets will not be binary
   16269        compatible with earlier releases.
   16270      * In previous releases, the MIPS port had a fake "hilo" register with
   16271        the user-visible name accum. This register has been removed.
   16272      * The implementation of the [6]SPARC ABIs has changed. As a result,
   16273        the code generated will not be binary compatible with earlier
   16274        releases in certain cases.
   16275      * The configure option --enable-threads=pthreads has been removed;
   16276        use --enable-threads=posix instead, which should have the same
   16277        effect.
   16278      * Code size estimates used by inlining heuristics for C, Objective-C,
   16279        C++ and Java have been redesigned significantly. As a result the
   16280        parameters of -finline-insns, --param max-inline-insns-single and
   16281        --param max-inline-insns-auto need to be reconsidered.
   16282      * --param max-inline-slope and --param min-inline-insns have been
   16283        removed; they are not needed for the new bottom-up inlining
   16284        heuristics.
   16285      * The new unit-at-a-time compilation scheme has several compatibility
   16286        issues:
   16287           + The order in which functions, variables, and top-level asm
   16288             statements are emitted may have changed. Code relying on some
   16289             particular ordering needs to be updated. The majority of such
   16290             top-level asm statements can be replaced by section
   16291             attributes.
   16292           + Unreferenced static variables and functions are removed. This
   16293             may result in undefined references when an asm statement
   16294             refers to the variable/function directly. In that case either
   16295             the variable/function shall be listed in asm statement operand
   16296             or in the case of top-level asm statements the attribute used
   16297             shall be used to force function/variable to be always output
   16298             and considered as a possibly used by unknown code.
   16299             For variables the attribute is accepted only by GCC 3.4 and
   16300             newer, while for earlier versions it is sufficient to use
   16301             unused to silence warnings about the variables not being
   16302             referenced. To keep code portable across different GCC
   16303             versions, you can use appropriate preprocessor conditionals.
   16304           + Static functions now can use non-standard passing conventions
   16305             that may break asm statements calling functions directly.
   16306             Again the attribute used shall be used to prevent this
   16307             behavior.
   16308        As a temporary workaround, -fno-unit-at-a-time can be used, but
   16309        this scheme may not be supported by future releases of GCC.
   16310      * GCC 3.4 automatically places zero-initialized variables in the .bss
   16311        section on some operating systems. Versions of GNU Emacs up to (and
   16312        including) 21.3 will not work correctly when using this
   16313        optimization; you can use -fno-zero-initialized-in-bss to disable
   16314        it.
   16315      * If GCC 3.4 is configured with --enable-threads=posix (the default
   16316        on most targets that support pthreads) then _REENTRANT will be
   16317        defined unconditionally by some libstdc++ headers. C++ code which
   16318        relies on that macro to detect whether multi-threaded code is being
   16319        compiled might change in meaning, possibly resulting in linker
   16320        errors for single-threaded programs. Affected users of [7]Boost
   16321        should compile single-threaded code with -DBOOST_DISABLE_THREADS.
   16322        See Bugzilla for [8]more information.
   16323 
   16324 General Optimizer Improvements
   16325 
   16326      * Usability of the profile feedback and coverage testing has been
   16327        improved.
   16328           + Performance of profiled programs has been improved by faster
   16329             profile merging code.
   16330           + Better use of the profile feedback for optimization (loop
   16331             unrolling and loop peeling).
   16332           + File locking support allowing fork() calls and parallel runs
   16333             of profiled programs.
   16334           + Coverage file format has been redesigned.
   16335           + gcov coverage tool has been improved.
   16336           + make profiledbootstrap available to build a faster compiler.
   16337             Experiments made on i386 hardware showed an 11% speedup on -O0
   16338             and a 7.5% speedup on -O2 compilation of a [9]large C++
   16339             testcase.
   16340           + New value profiling pass enabled via -fprofile-values
   16341           + New value profile transformations pass enabled via -fvpt aims
   16342             to optimize some code sequences by exploiting knowledge about
   16343             value ranges or other properties of the operands. At the
   16344             moment a conversion of expensive divisions into cheaper
   16345             operations has been implemented.
   16346           + New -fprofile-generate and -fprofile-use command-line options
   16347             to simplify the use of profile feedback.
   16348      * A new unit-at-a-time compilation scheme for C, Objective-C, C++ and
   16349        Java which is enabled via -funit-at-a-time (and implied by -O2). In
   16350        this scheme a whole file is parsed first and optimized later. The
   16351        following basic inter-procedural optimizations are implemented:
   16352           + Removal of unreachable functions and variables
   16353           + Discovery of local functions (functions with static linkage
   16354             whose address is never taken)
   16355           + On i386, these local functions use register parameter passing
   16356             conventions.
   16357           + Reordering of functions in topological order of the call graph
   16358             to enable better propagation of optimizing hints (such as the
   16359             stack alignments needed by functions) in the back end.
   16360           + Call graph based out-of-order inlining heuristics which allows
   16361             to limit overall compilation unit growth (--param
   16362             inline-unit-growth).
   16363        Overall, the unit-at-a-time scheme produces a 1.3% improvement for
   16364        the SPECint2000 benchmark on the i386 architecture (AMD Athlon
   16365        CPU).
   16366      * More realistic code size estimates used by inlining for C,
   16367        Objective-C, C++ and Java. The growth of large functions can now be
   16368        limited via --param large-function-insns and --param
   16369        large-function-growth.
   16370      * A new cfg-level loop optimizer pass replaces the old loop unrolling
   16371        pass and adds two other loop transformations -- loop peeling and
   16372        loop unswitching -- and also uses the profile feedback to limit
   16373        code growth. (The three optimizations are enabled by
   16374        -funroll-loops, -fpeel-loops and -funswitch-loops flags,
   16375        respectively).
   16376        The old loop unroller still can be enabled by -fold-unroll-loops
   16377        and may produce better code in some cases, especially when the
   16378        webizer optimization pass is not run.
   16379      * A new web construction pass enabled via -fweb (and implied by -O3)
   16380        improves the quality of register allocation, CSE, first scheduling
   16381        pass and some other optimization passes by avoiding re-use of
   16382        pseudo registers with non-overlapping live ranges. The pass almost
   16383        always improves code quality but does make debugging difficult and
   16384        thus is not enabled by default by -O2
   16385        The pass is especially effective as cleanup after code duplication
   16386        passes, such as the loop unroller or the tracer.
   16387      * Experimental implementations of superblock or trace scheduling in
   16388        the second scheduling pass can be enabled via
   16389        -fsched2-use-superblocks and -fsched2-use-traces, respectively.
   16390 
   16391 New Languages and Language specific improvements
   16392 
   16393   Ada
   16394 
   16395      * The Ada front end has been updated to include numerous bug fixes
   16396        and enhancements. These include:
   16397           + Improved project file support
   16398           + Additional set of warnings about potential wrong code
   16399           + Improved error messages
   16400           + Improved code generation
   16401           + Improved cross reference information
   16402           + Improved inlining
   16403           + Better run-time check elimination
   16404           + Better error recovery
   16405           + More efficient implementation of unbounded strings
   16406           + Added features in GNAT.Sockets, GNAT.OS_Lib, GNAT.Debug_Pools,
   16407             ...
   16408           + New GNAT.xxxx packages (e.g. GNAT.Strings,
   16409             GNAT.Exception_Action)
   16410           + New pragmas
   16411           + New -gnatS switch replacing gnatpsta
   16412           + Implementation of new Ada features (in particular limited
   16413             with, limited aggregates)
   16414 
   16415   C/Objective-C/C++
   16416 
   16417      * Precompiled headers are now supported. Precompiled headers can
   16418        dramatically speed up compilation of some projects. There are some
   16419        known defects in the current precompiled header implementation that
   16420        will result in compiler crashes in relatively rare situations.
   16421        Therefore, precompiled headers should be considered a "technology
   16422        preview" in this release. Read the manual for details about how to
   16423        use precompiled headers.
   16424      * File handling in the preprocessor has been rewritten. GCC no longer
   16425        gets confused by symlinks and hardlinks, and now has a correct
   16426        implementation of #import and #pragma once. These two directives
   16427        have therefore been un-deprecated.
   16428      * The undocumented extension that allowed C programs to have a label
   16429        at the end of a compound statement, which has been deprecated since
   16430        GCC 3.0, has been removed.
   16431      * The cast-as-lvalue extension has been removed for C++ and
   16432        deprecated for C and Objective-C. In particular, code like this:
   16433         int i;
   16434         (char) i = 5;
   16435 
   16436        or this:
   16437         char *p;
   16438         ((int *) p)++;
   16439 
   16440        is no longer accepted for C++ and will not be accepted for C and
   16441        Objective-C in a future version.
   16442      * The conditional-expression-as-lvalue extension has been deprecated
   16443        for C and Objective-C. In particular, code like this:
   16444         int a, b, c;
   16445         (a ? b : c) = 2;
   16446 
   16447        will not be accepted for C and Objective-C in a future version.
   16448      * The compound-expression-as-lvalue extension has been deprecated for
   16449        C and Objective-C. In particular, code like this:
   16450         int a, b;
   16451         (a, b) = 2;
   16452 
   16453        will not be accepted for C and Objective-C in a future version. A
   16454        possible non-intrusive workaround is the following:
   16455         (*(a, &b)) = 2;
   16456 
   16457      * Several [10]built-in functions such as __builtin_popcount for
   16458        counting bits, finding the highest and lowest bit in a word, and
   16459        parity have been added.
   16460      * The -fwritable-strings option has been deprecated and will be
   16461        removed.
   16462      * Many C math library functions are now recognized as built-ins and
   16463        optimized.
   16464      * The C, C++, and Objective-C compilers can now handle source files
   16465        written in any character encoding supported by the host C library.
   16466        The default input character set is taken from the current locale,
   16467        and may be overridden with the -finput-charset command line option.
   16468        In the future we will add support for inline encoding markers.
   16469 
   16470   [11]C++
   16471 
   16472      * G++ is now much closer to full conformance to the ISO/ANSI C++
   16473        standard. This means, among other things, that a lot of invalid
   16474        constructs which used to be accepted in previous versions will now
   16475        be rejected. It is very likely that existing C++ code will need to
   16476        be fixed. This document lists some of the most common issues.
   16477      * A hand-written recursive-descent C++ parser has replaced the
   16478        YACC-derived C++ parser from previous GCC releases. The new parser
   16479        contains much improved infrastructure needed for better parsing of
   16480        C++ source codes, handling of extensions, and clean separation
   16481        (where possible) between proper semantics analysis and parsing. The
   16482        new parser fixes many bugs that were found in the old parser.
   16483      * You must now use the typename and template keywords to disambiguate
   16484        dependent names, as required by the C++ standard.
   16485         struct K {
   16486           typedef int mytype_t;
   16487         };
   16488 
   16489         template <class T1> struct A {
   16490           template <class T2> struct B {
   16491               void callme(void);
   16492             };
   16493 
   16494           template <int N> void bar(void)
   16495           {
   16496             // Use 'typename' to tell the parser that T1::mytype_t names
   16497             //  a type. This is needed because the name is dependent (in
   16498             //  this case, on template parameter T1).
   16499             typename T1::mytype_t x;
   16500             x = 0;
   16501           }
   16502         };
   16503 
   16504         template <class T> void template_func(void)
   16505         {
   16506           // Use 'template' to prefix member templates within
   16507           //  dependent types (a has type A<T>, which depends on
   16508           //  the template parameter T).
   16509           A<T> a;
   16510           a.template bar<0>();
   16511 
   16512           // Use 'template' to tell the parser that B is a nested
   16513           //  template class (dependent on template parameter T), and
   16514           //  'typename' because the whole A<T>::B<int> is
   16515           //  the name of a type (again, dependent).
   16516           typename A<T>::template B<int> b;
   16517           b.callme();
   16518         }
   16519 
   16520         void non_template_func(void)
   16521         {
   16522           // Outside of any template class or function, no names can be
   16523           //  dependent, so the use of the keyword 'typename' and 'template'
   16524           //  is not needed (and actually forbidden).
   16525           A<K> a;
   16526           a.bar<0>();
   16527           A<K>::B<float> b;
   16528           b.callme();
   16529         }
   16530      * In a template definition, unqualified names will no longer find
   16531        members of a dependent base (as specified by [temp.dep]/3 in the
   16532        C++ standard). For example,
   16533         template <typename T> struct B {
   16534           int m;
   16535           int n;
   16536           int f ();
   16537           int g ();
   16538         };
   16539         int n;
   16540         int g ();
   16541         template <typename T> struct C : B<T> {
   16542           void h ()
   16543           {
   16544             m = 0; // error
   16545             f ();  // error
   16546             n = 0; // ::n is modified
   16547             g ();  // ::g is called
   16548           }
   16549         };
   16550        You must make the names dependent, e.g. by prefixing them with
   16551        this->. Here is the corrected definition of C<T>::h,
   16552         template <typename T> void C<T>::h ()
   16553         {
   16554           this->m = 0;
   16555           this->f ();
   16556           this->n = 0
   16557           this->g ();
   16558         }
   16559        As an alternative solution (unfortunately not backwards compatible
   16560        with GCC 3.3), you may use using declarations instead of this->:
   16561         template <typename T> struct C : B<T> {
   16562           using B<T>::m;
   16563           using B<T>::f;
   16564           using B<T>::n;
   16565           using B<T>::g;
   16566           void h ()
   16567           {
   16568             m = 0;
   16569             f ();
   16570             n = 0;
   16571             g ();
   16572           }
   16573         };
   16574      * In templates, all non-dependent names are now looked up and bound
   16575        at definition time (while parsing the code), instead of later when
   16576        the template is instantiated. For instance:
   16577         void foo(int);
   16578 
   16579         template <int> struct A {
   16580           static void bar(void){
   16581             foo('a');
   16582           }
   16583         };
   16584 
   16585         void foo(char);
   16586 
   16587         int main()
   16588         {
   16589           A<0>::bar();    // Calls foo(int), used to call foo(char).
   16590         }
   16591 
   16592      * In an explicit instantiation of a class template, you must use
   16593        class or struct before the template-id:
   16594         template <int N>
   16595         class A {};
   16596 
   16597         template A<0>;         // error, not accepted anymore
   16598         template class A<0>;   // OK
   16599      * The "named return value" and "implicit typename" extensions have
   16600        been removed.
   16601      * Default arguments in function types have been deprecated and will
   16602        be removed.
   16603      * ARM-style name-injection of friend declarations has been deprecated
   16604        and will be removed. For example: struct S { friend void f(); };
   16605        void g() { f(); } will not be accepted by future versions of G++;
   16606        instead a declaration of "f" will need to be present outside of the
   16607        scope of "S".
   16608      * Covariant returns are implemented for all but varadic functions
   16609        that require an adjustment.
   16610      * When -pedantic is used, G++ now issues errors about spurious
   16611        semicolons. For example,
   16612         namespace N {}; // Invalid semicolon.
   16613         void f() {}; // Invalid semicolon.
   16614      * G++ no longer accepts attributes for a declarator after the
   16615        initializer associated with that declarator. For example,
   16616         X x(1) __attribute__((...));
   16617        is no longer accepted. Instead, use:
   16618         X x __attribute__((...)) (1);
   16619      * Inside the scope of a template class, the name of the class itself
   16620        can be treated as either a class or a template. So GCC used to
   16621        accept the class name as argument of type template, and template
   16622        template parameter. However this is not C++ standard compliant. Now
   16623        the name is not treated as a valid template template argument
   16624        unless you qualify the name by its scope. For example, the code
   16625        below no longer compiles.
   16626         template <template <class> class TT> class X {};
   16627         template <class T> class Y {
   16628           X<Y> x; // Invalid, Y is always a type template parameter.
   16629         };
   16630        The valid code for the above example is
   16631           X< ::Y> x; // Valid.
   16632        (Notice the space between < and : to prevent GCC to interpret this
   16633        as a digraph for [.)
   16634      * Friend declarations that refer to template specializations are
   16635        rejected if the template has not already been declared. For
   16636        example,
   16637         template <typename T>
   16638         class C {
   16639           friend void f<> (C&);
   16640         };
   16641        is rejected. You must first declare f as a template,
   16642         template <typename T>
   16643         void f(T);
   16644      * In case of friend declarations, every name used in the friend
   16645        declaration must be accessible at the point of that declaration.
   16646        Previous versions of G++ used to be less strict about this and
   16647        allowed friend declarations for private class members, for example.
   16648        See the ISO C++ Standard Committee's [12]defect report #209 for
   16649        details.
   16650      * Declaration of member functions of class templates as friends are
   16651        supported. For example,
   16652         template <typename T> struct A {
   16653           void f();
   16654         };
   16655         class C {
   16656           template <typename T> friend void A<T>::f();
   16657         };
   16658      * You must use template <> to introduce template specializations, as
   16659        required by the standard. For example,
   16660         template <typename T>
   16661         struct S;
   16662 
   16663         struct S<int> { };
   16664        is rejected. You must write,
   16665         template <> struct S<int> {};
   16666      * G++ used to accept code like this,
   16667         struct S {
   16668           int h();
   16669           void f(int i = g());
   16670           int g(int i = h());
   16671         };
   16672        This behavior is not mandated by the standard. Now G++ issues an
   16673        error about this code. To avoid the error, you must move the
   16674        declaration of g before the declaration of f. The default arguments
   16675        for g must be visible at the point where it is called.
   16676      * The C++ ABI Section 3.3.3 specifications for the array construction
   16677        routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return
   16678        NULL when the allocator argument returns NULL. These changes are
   16679        incorporated into the libstdc++ runtime library.
   16680      * Using a name introduced by a typedef in a friend declaration or in
   16681        an explicit instantiation is now rejected, as specified by the ISO
   16682        C++ standard.
   16683         class A;
   16684         typedef A B;
   16685         class C {
   16686           friend class B;      // error, no typedef name here
   16687           friend B;            // error, friend always needs class/struct/enum
   16688           friend class A;      // OK
   16689         };
   16690 
   16691         template <int> class Q {};
   16692         typedef Q<0> R;
   16693         template class R;      // error, no typedef name here
   16694         template class Q<0>;   // OK
   16695      * When allocating an array with a new expression, GCC used to allow
   16696        parentheses around the type name. This is actually ill-formed and
   16697        it is now rejected:
   16698         int* a = new (int)[10];    // error, not accepted anymore
   16699         int* a = new int[10];      // OK
   16700      * When binding an rvalue of class type to a reference, the copy
   16701        constructor of the class must be accessible. For instance, consider
   16702        the following code:
   16703         class A
   16704         {
   16705         public:
   16706           A();
   16707 
   16708         private:
   16709           A(const A&);   // private copy ctor
   16710         };
   16711 
   16712         A makeA(void);
   16713         void foo(const A&);
   16714 
   16715         void bar(void)
   16716         {
   16717           foo(A());       // error, copy ctor is not accessible
   16718           foo(makeA());   // error, copy ctor is not accessible
   16719 
   16720           A a1;
   16721           foo(a1);        // OK, a1 is a lvalue
   16722         }
   16723        This might be surprising at first sight, especially since most
   16724        popular compilers do not correctly implement this rule ([13]further
   16725        details).
   16726      * When forming a pointer to member or a pointer to member function,
   16727        access checks for class visibility (public, protected, private) are
   16728        now performed using the qualifying scope of the name itself. This
   16729        is better explained with an example:
   16730         class A
   16731         {
   16732         public:
   16733           void pub_func();
   16734         protected:
   16735           void prot_func();
   16736         private:
   16737           void priv_func();
   16738         };
   16739 
   16740         class B : public A
   16741         {
   16742         public:
   16743           void foo()
   16744           {
   16745             &A::pub_func;   // OK, pub_func is accessible through A
   16746             &A::prot_func;  // error, cannot access prot_func through A
   16747             &A::priv_func;  // error, cannot access priv_func through A
   16748 
   16749             &B::pub_func;   // OK, pub_func is accessible through B
   16750             &B::prot_func;  // OK, can access prot_func through B (within B)
   16751             &B::priv_func;  // error, cannot access priv_func through B
   16752           }
   16753         };
   16754 
   16755     Runtime Library (libstdc++)
   16756 
   16757      * Optimization work:
   16758           + Streamlined streambuf, filebuf, separate synched with C
   16759             Standard I/O streambuf.
   16760           + All formatted I/O now uses cached locale information.
   16761           + STL optimizations (memory/speed for list, red-black trees as
   16762             used by sets and maps).
   16763           + More use of GCC builtins.
   16764           + String optimizations (avoid contention on
   16765             increment/decrement-and-test of the reference count in the
   16766             empty-string object, constructor from input_iterators
   16767             speedup).
   16768      * Static linkage size reductions.
   16769      * Large File Support (files larger than 2 GB on 32-bit systems).
   16770      * Wide character and variable encoding filebuf work (UTF-8, Unicode).
   16771      * Generic character traits.
   16772      * Also support wchar_t specializations on Mac OS 10.3.x, FreeBSD 5.x,
   16773        Solaris 2.7 and above, AIX 5.x, Irix 6.5.
   16774      * The allocator class is now standard-conformant, and two additional
   16775        extension allocators have been added, mt_alloc and
   16776        bitmap_allocator.
   16777      * PCH support: -include bits/stdc++.h (2x compile speedup).
   16778      * Rewrote __cxa_demangle with support for C++ style allocators.
   16779      * New debug modes for STL containers and iterators.
   16780      * Testsuite rewrite: five times as many tests, plus increasingly
   16781        sophisticated tests, including I/O, MT, multi-locale, wide and
   16782        narrow characters.
   16783      * Use current versions of GNU "autotools" for build/configuration.
   16784 
   16785   Objective-C
   16786 
   16787      * The Objective-C front end has been updated to include the numerous
   16788        bug fixes and enhancements previously available only in Apple's
   16789        version of GCC. These include:
   16790           + Structured exception (@try... @catch... @finally, @throw) and
   16791             synchronization (@synchronized) support. These are accessible
   16792             via the -fobjc-exceptions switch; as of this writing, they may
   16793             only be used in conjunction with -fnext-runtime on Mac OS X
   16794             10.3 and later. See [14]Options Controlling Objective-C
   16795             Dialect for more information.
   16796           + An overhaul of @encode logic. The C99 _Bool and C++ bool type
   16797             may now be encoded as 'B'. In addition, the back-end/codegen
   16798             dependencies have been removed.
   16799           + An overhaul of message dispatch construction, ensuring that
   16800             the various receiver types (and casts thereof) are handled
   16801             properly, and that correct diagnostics are issued.
   16802           + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
   16803             (-freplace-objc-classes) debugging modes, currently available
   16804             on Mac OS X 10.3 and later. See [15]Options Controlling
   16805             Objective-C Dialect for more information.
   16806           + Access to optimized runtime entry points (-fno-nil-receivers )
   16807             on the assumption that message receivers are never nil. This
   16808             is currently available on Mac OS X 10.3 and later. See
   16809             [16]Options Controlling Objective-C Dialect for more
   16810             information.
   16811 
   16812   Java
   16813 
   16814      * Compiling a .jar file will now cause non-.class entries to be
   16815        automatically compiled as resources.
   16816      * libgcj has been ported to Darwin.
   16817      * Jeff Sturm has adapted Jan Hubicka's call graph optimization code
   16818        to gcj.
   16819      * libgcj has a new gcjlib URL type; this lets URLClassLoader load
   16820        code from shared libraries.
   16821      * libgcj has been much more completely merged with [17]GNU Classpath.
   16822      * Class loading is now much more correct; in particular the caller's
   16823        class loader is now used when that is required.
   16824      * [18]Eclipse 2.x will run out of the box using gij.
   16825      * Parts of java.nio have been implemented. Direct and indirect
   16826        buffers work, as do fundamental file and socket operations.
   16827      * java.awt has been improved, though it is still not ready for
   16828        general use.
   16829      * The HTTP protocol handler now uses HTTP/1.1 and can handle the POST
   16830        method.
   16831      * The MinGW port has matured. Enhancements include socket timeout
   16832        support, thread interruption, improved Runtime.exec() handling and
   16833        support for accented characters in filenames.
   16834 
   16835   Fortran
   16836 
   16837      * Fortran improvements are listed in the [19]Fortran documentation.
   16838 
   16839 New Targets and Target Specific Improvements
   16840 
   16841   Alpha
   16842 
   16843      * Several [20]built-in functions have been added such as
   16844        __builtin_alpha_zap to allow utilizing the more obscure
   16845        instructions of the CPU.
   16846      * Parameter passing of complex arguments has changed to match the
   16847        ABI. This change is incompatible with previous GCC versions, but
   16848        does fix compatibility with the Tru64 compiler and several corner
   16849        cases where GCC was incompatible with itself.
   16850 
   16851   ARM
   16852 
   16853      * Nicolas Pitre has contributed his hand-coded floating-point support
   16854        code for ARM. It is both significantly smaller and faster than the
   16855        existing C-based implementation, even when building applications
   16856        for Thumb. The arm-elf configuration has been converted to use the
   16857        new code.
   16858      * Support for the Intel's iWMMXt architecture, a second generation
   16859        XScale processor, has been added. Enabled at run time with the
   16860        -mcpu=iwmmxt command line switch.
   16861      * A new ARM target has been added: arm-wince-pe. This is similar to
   16862        the arm-pe target, but it defaults to using the APCS32 ABI.
   16863      * The existing ARM pipeline description has been converted to the use
   16864        the [21]DFA processor pipeline model. There is not much change in
   16865        code performance, but the description is now [22]easier to
   16866        understand.
   16867      * Support for the Cirrus EP9312 Maverick floating point co-processor
   16868        added. Enabled at run time with the -mcpu=ep9312 command line
   16869        switch. Note however that the multilibs to support this chip are
   16870        currently disabled in gcc/config/arm/t-arm-elf, so if you want to
   16871        enable their production you will have to uncomment the entries in
   16872        that file.
   16873 
   16874   H8/300
   16875 
   16876      * Support for long long has been added.
   16877      * Support for saveall attribute has been added.
   16878      * Pavel Pisa contributed hand-written 32-bit-by-32-bit division code
   16879        for H8/300H and H8S, which is much faster than the previous
   16880        implementation.
   16881      * A lot of small performance improvements.
   16882 
   16883   IA-32/AMD64 (x86-64)
   16884 
   16885      * Tuning for K8 (AMD Opteron/Athlon64) core is available via
   16886        -march=k8 and -mcpu=k8.
   16887      * Scalar SSE code generation carefully avoids reformatting penalties,
   16888        hidden dependencies and minimizes the number of uops generated on
   16889        both Intel and AMD CPUs.
   16890      * Vector MMX and SSE operands are now passed in registers to improve
   16891        performance and match the argument passing convention used by the
   16892        Intel C++ Compiler. As a result it is not possible to call
   16893        functions accepting vector arguments compiled by older GCC version.
   16894      * Conditional jump elimination is now more aggressive on modern CPUs.
   16895      * The Athlon ports has been converted to use the DFA processor
   16896        pipeline description.
   16897      * Optimization of indirect tail calls is now possible in a similar
   16898        fashion as direct sibcall optimization.
   16899      * Further small performance improvements.
   16900      * -m128bit-long-double is now less buggy.
   16901      * __float128 support in 64-bit compilation.
   16902      * Support for data structures exceeding 2GB in 64-bit mode.
   16903      * -mcpu has been renamed to -mtune.
   16904 
   16905   IA-64
   16906 
   16907      * Tuning code for the Itanium 2 processor has been added. The
   16908        generation of code tuned for Itanium 2 (option -mtune=itanium2) is
   16909        enabled by default now. To generate code tuned for Itanium 1 the
   16910        option -mtune=itanium1 should be used.
   16911      * [23]DFA processor pipeline descriptions for the IA-64 processors
   16912        have been added. This resulted in about 3% improvement on the
   16913        SPECInt2000 benchmark for Itanium 2.
   16914      * Instruction bundling for the IA-64 processors has been rewritten
   16915        using the DFA pipeline hazard recognizer. It resulted in about 60%
   16916        compiler speedup on the SPECInt2000 C programs.
   16917 
   16918   M32R
   16919 
   16920      * Support for the M32R/2 processor has been added by Renesas.
   16921      * Support for an M32R GNU/Linux target and PIC code generation has
   16922        been added by Renesas.
   16923 
   16924   M68000
   16925 
   16926      * Bernardo Innocenti (Develer S.r.l.) has contributed the
   16927        m68k-uclinux target, based on former work done by Paul Dale
   16928        (SnapGear Inc.). Code generation for the ColdFire processors family
   16929        has been enhanced and extended to support the MCF 53xx and MCF 54xx
   16930        cores, integrating former work done by Peter Barada (Motorola).
   16931 
   16932   MIPS
   16933 
   16934     Processor-specific changes
   16935 
   16936      * Support for the RM7000 and RM9000 processors has been added. It can
   16937        be selected using the -march compiler option and should work with
   16938        any MIPS I (mips-*) or MIPS III (mips64-*) configuration.
   16939      * Support for revision 2 of the MIPS32 ISA has been added. It can be
   16940        selected with the command-line option -march=mips32r2.
   16941      * There is a new option, -mfix-sb1, to work around certain SB-1
   16942        errata.
   16943 
   16944     Configuration
   16945 
   16946      * It is possible to customize GCC using the following configure-time
   16947        options:
   16948           + --with-arch, which specifies the default value of the -march
   16949             option.
   16950           + --with-tune, which specifies the default value of the -mtune
   16951             option.
   16952           + --with-abi, which specifies the default ABI.
   16953           + --with-float=soft, which tells GCC to use software floating
   16954             point by default.
   16955           + --with-float=hard, which tells GCC to use hardware floating
   16956             point by default.
   16957      * A 64-bit GNU/Linux port has been added. The associated
   16958        configurations are mips64-linux-gnu and mips64el-linux-gnu.
   16959      * The 32-bit GNU/Linux port now supports Java.
   16960      * The IRIX 6 configuration now supports the o32 ABI and will build
   16961        o32 multilibs by default. This support is compatible with both
   16962        binutils and the SGI tools, but note that several features,
   16963        including debugging information and DWARF2 exception handling, are
   16964        only available when using the GNU assembler. Use of the GNU
   16965        assembler and linker (version 2.15 or above) is strongly
   16966        recommended.
   16967      * The IRIX 6 configuration now supports 128-bit long doubles.
   16968      * There are two new RTEMS-specific configurations, mips-rtems and
   16969        mipsel-rtems.
   16970      * There are two new *-elf configurations, mipsisa32r2-elf and
   16971        mipsisa32r2el-elf.
   16972 
   16973     General
   16974 
   16975      * Several [24]ABI bugs have been fixed. Unfortunately, these changes
   16976        will break binary compatibility with earlier releases.
   16977      * GCC can now use explicit relocation operators when generating
   16978        -mabicalls code. This behavior is controlled by -mexplicit-relocs
   16979        and can have several performance benefits. For example:
   16980           + It allows for more optimization of GOT accesses, including
   16981             better scheduling and redundancy elimination.
   16982           + It allows sibling calls to be implemented as jumps.
   16983           + n32 and n64 leaf functions can use a call-clobbered global
   16984             pointer instead of $28.
   16985           + The code to set up $gp can be removed from functions that
   16986             don't need it.
   16987      * A new option, -mxgot, allows the GOT to be bigger than 64k. This
   16988        option is equivalent to the assembler's -xgot option and should be
   16989        used instead of -Wa,-xgot.
   16990      * Frame pointer elimination is now supported when generating 64-bit
   16991        MIPS16 code.
   16992      * Inline block moves have been optimized to take more account of
   16993        alignment information.
   16994      * Many internal changes have been made to the MIPS port, mostly aimed
   16995        at reducing the reliance on assembler macros.
   16996 
   16997   PowerPC
   16998 
   16999      * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
   17000        [25]ABI incompatibilities regarding the way parameters are passed
   17001        during functions calls. These changes may result in incompatibility
   17002        between code compiled with GCC 3.3 and GCC 3.4.
   17003 
   17004     PowerPC Darwin
   17005 
   17006      * Support for shared/dylib gcc libraries has been added. It is
   17007        enabled by default on powerpc-apple-darwin7.0.0 and up.
   17008      * Libgcj is enabled by default. On systems older than
   17009        powerpc-apple-darwin7.0.0 you need to install dlcompat.
   17010      * 128-bit IBM extended precision format support added for long
   17011        double.
   17012 
   17013     PowerPC64 GNU/Linux
   17014 
   17015      * By default, PowerPC64 GNU/Linux now uses natural alignment of
   17016        structure elements. The old four byte alignment for double, with
   17017        special rules for a struct starting with a double, can be chosen
   17018        with -malign-power. This change may result in incompatibility
   17019        between code compiled with GCC 3.3 and GCC 3.4.
   17020      * -mabi=altivec is now the default rather than -mabi=no-altivec.
   17021      * 128-bit IBM extended precision format support added for long
   17022        double.
   17023 
   17024   S/390 and zSeries
   17025 
   17026      * New command-line options allow to specify the intended execution
   17027        environment for generated code:
   17028           + -mesa/-mzarch allows to specify whether to generate code
   17029             running in ESA/390 mode or in z/Architecture mode (this is
   17030             applicable to 31-bit code only).
   17031           + -march allows to specify a minimum processor architecture
   17032             level (g5, g6, z900, or z990).
   17033           + -mtune allows to specify which processor to tune for.
   17034      * It is possible to customize GCC using the following configure-time
   17035        options:
   17036           + --with-mode, which specifies whether to default to assuming
   17037             ESA/390 or z/Architecture mode.
   17038           + --with-arch, which specifies the default value of the -march
   17039             option.
   17040           + --with-tune, which specifies the default value of the -mtune
   17041             option.
   17042      * Support for the z990 processor has been added, and can be selected
   17043        using -march=z990 or -mtune=z990. This includes instruction
   17044        scheduling tuned for the superscalar instruction pipeline of the
   17045        z990 processor as well as support for all new instructions provided
   17046        by the long-displacement facility.
   17047      * Support to generate 31-bit code optimized for zSeries processors
   17048        (running in ESA/390 or in z/Architecture mode) has been added. This
   17049        can be selected using -march=z900 and -mzarch respectively.
   17050      * Instruction scheduling for the z900 and z990 processors now uses
   17051        the DFA pipeline hazard recognizer.
   17052      * GCC no longer generates code to maintain a stack backchain,
   17053        previously used to generate stack backtraces for debugging
   17054        purposes. As replacement that does not incur runtime overhead,
   17055        DWARF-2 call frame information is provided by GCC; this is
   17056        supported by GDB 6.1. The old behavior can be restored using the
   17057        -mbackchain option.
   17058      * The stack frame size of functions may now exceed 2 GB in 64-bit
   17059        code.
   17060      * A port for the 64-bit IBM TPF operating system has been added; the
   17061        configuration is s390x-ibm-tpf. This configuration is supported as
   17062        cross-compilation target only.
   17063      * Various changes to improve the generated code have been
   17064        implemented, including:
   17065           + GCC now uses the MULTIPLY AND ADD and MULTIPLY AND SUBTRACT
   17066             instructions to significantly speed up many floating-point
   17067             applications.
   17068           + GCC now uses the ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL
   17069             WITH BORROW instructions to speed up long long arithmetic.
   17070           + GCC now uses the SEARCH STRING instruction to implement
   17071             strlen().
   17072           + In many cases, function call overhead for 31-bit code has been
   17073             reduced by placing the literal pool after the function code
   17074             instead of after the function prolog.
   17075           + Register 14 is no longer reserved in 64-bit code.
   17076           + Handling of global register variables has been improved.
   17077 
   17078   SPARC
   17079 
   17080      * The option -mflat is deprecated.
   17081      * Support for large (> 2GB) frames has been added to the 64-bit port.
   17082      * Several [26]ABI bugs have been fixed. Unfortunately, these changes
   17083        will break binary compatibility with earlier releases.
   17084      * The default debugging format has been switched from STABS to
   17085        DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
   17086        the default debugging format for 64-bit code on Solaris.
   17087 
   17088   SuperH
   17089 
   17090      * Support for the SH2E processor has been added. Enabled at run time
   17091        with the -m2e command line switch, or at configure time by
   17092        specifying sh2e as the machine part of the target triple.
   17093 
   17094   V850
   17095 
   17096      * Support for the Mitsubishi V850E1 processor has been added. This is
   17097        a variant of the V850E processor with some additional debugging
   17098        instructions.
   17099 
   17100   Xtensa
   17101 
   17102      * Several ABI bugs have been fixed. Unfortunately, these changes
   17103        break binary compatibility with earlier releases.
   17104           + For big-endian processors, the padding of aggregate return
   17105             values larger than a word has changed. If the size of an
   17106             aggregate return value is not a multiple of 32 bits, previous
   17107             versions of GCC inserted padding in the most-significant bytes
   17108             of the first return value register. Aggregates larger than a
   17109             word are now padded in the least-significant bytes of the last
   17110             return value register used. Aggregates smaller than a word are
   17111             still padded in the most-significant bytes. The return value
   17112             padding has not changed for little-endian processors.
   17113           + Function arguments with 16-byte alignment are now properly
   17114             aligned.
   17115           + The implementation of the va_list type has changed. A va_list
   17116             value created by va_start from a previous release cannot be
   17117             used with va_arg from this release, or vice versa.
   17118      * More processor configuration options for Xtensa processors are
   17119        supported:
   17120           + the ABS instruction is now optional;
   17121           + the ADDX* and SUBX* instructions are now optional;
   17122           + an experimental CONST16 instruction can be used to synthesize
   17123             constants instead of loading them from constant pools.
   17124        These and other Xtensa processor configuration options can no
   17125        longer be enabled or disabled by command-line options; the
   17126        processor configuration must be specified by the xtensa-config.h
   17127        header file when building GCC. Additionally, the
   17128        -mno-serialize-volatile option is no longer supported.
   17129 
   17130 [27]Obsolete Systems
   17131 
   17132    Support for a number of older systems has been declared obsolete in GCC
   17133    3.4. Unless there is activity to revive them, the next release of GCC
   17134    will have their sources permanently removed.
   17135 
   17136    All configurations of the following processor architectures have been
   17137    declared obsolete:
   17138      * Mitsubishi D30V, d30v-*
   17139      * AT&T DSP1600 and DSP1610, dsp16xx-*
   17140      * Intel 80960, i960
   17141 
   17142    Also, some individual systems have been obsoleted:
   17143      * ARM Family
   17144           + Support for generating code for operation in APCS/26 mode
   17145             (-mapcs-26).
   17146      * IBM ESA/390
   17147           + "Bigfoot" port, i370-*. (The other port, s390-*, is actively
   17148             maintained and supported.)
   17149      * Intel 386 family
   17150           + MOSS, i?86-moss-msdos and i?86-*-moss*
   17151           + NCR 3000 running System V r.4, i?86-ncr-sysv4*
   17152           + FreeBSD with a.out object format, i?86-*-freebsd*aout* and
   17153             i?86-*-freebsd2*
   17154           + GNU/Linux with a.out object format, i?86-linux*aout*
   17155           + GNU/Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
   17156           + Interix versions before Interix 3, i?86-*-interix
   17157           + Mach microkernel, i?86-mach*
   17158           + SCO UnixWare with UDK, i?86-*-udk*
   17159           + Generic System V releases 1, 2, and 3, i?86-*-sysv[123]*
   17160           + VSTa microkernel, i386-*-vsta
   17161      * Motorola M68000 family
   17162           + HPUX, m68k-hp-hpux* and m68000-hp-hpux*
   17163           + NetBSD with a.out object format (before NetBSD 1.4),
   17164             m68k-*-*-netbsd* except m68k-*-*-netbsdelf*
   17165           + Generic System V r.4, m68k-*-sysv4*
   17166      * VAX
   17167           + Generic VAX, vax-*-* (This is generic VAX only; we have not
   17168             obsoleted any VAX triples for specific operating systems.)
   17169 
   17170 Documentation improvements
   17171 
   17172 Other significant improvements
   17173 
   17174      * The build system has undergone several significant cleanups.
   17175        Subdirectories will only be configured if they are being built, and
   17176        all subdirectory configures are run from the make command. The top
   17177        level has been autoconfiscated.
   17178      * Building GCC no longer writes to its source directory. This should
   17179        help those wishing to share a read-only source directory over NFS
   17180        or build from a CD. The exceptions to this feature are if you
   17181        configure with either --enable-maintainer-mode or
   17182        --enable-generated-files-in-srcdir.
   17183      * The -W warning option has been renamed to -Wextra, which is more
   17184        easily understood. The older spelling will be retained for
   17185        backwards compatibility.
   17186      * Substantial improvements in compile time have been made,
   17187        particularly for non-optimizing compilations.
   17188      __________________________________________________________________
   17189 
   17190 [28]GCC 3.4.0
   17191 
   17192   Bug Fixes
   17193 
   17194    A vast number of bugs have been fixed in 3.4.0, too many to publish a
   17195    complete list here. [29]Follow this link to query the Bugzilla database
   17196    for the list of over 900 bugs fixed in 3.4.0. This is the list of all
   17197    bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
   17198    regressions.
   17199      __________________________________________________________________
   17200 
   17201 [30]GCC 3.4.1
   17202 
   17203   Bug Fixes
   17204 
   17205    This section lists the problem reports (PRs) from GCC's bug tracking
   17206    system that are known to be fixed in the 3.4.1 release. This list might
   17207    not be complete (that is, it is possible that some PRs that have been
   17208    fixed are not listed here).
   17209 
   17210     Bootstrap failures
   17211 
   17212      * [31]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
   17213        emitted - PIC related
   17214      * [32]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
   17215      * [33]14760 A bug in configure.in prevents using both
   17216        --program-suffix and --program-prefix
   17217      * [34]14671 [hppa64] bootstrap fails: ICE in
   17218        save_call_clobbered_regs, in caller_save.c
   17219      * [35]15093 [alpha][Java] make bootstrap fails to configure libffi on
   17220        Alpha
   17221      * [36]15178 Solaris 9/x86 fails linking after stage 3
   17222 
   17223     Multi-platform internal compiler errors (ICEs)
   17224 
   17225      * [37]12753 (preprocessor) Memory corruption in preprocessor on bad
   17226        input
   17227      * [38]13985 ICE in gcc.c-torture/compile/930621-1.c
   17228      * [39]14810 (c++) tree check failures with invalid code involving
   17229        templates
   17230      * [40]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
   17231        cp/parser.c
   17232      * [41]15044 (c++) ICE on syntax error, template header
   17233      * [42]15057 (c++) Compiling of conditional value throw constructs
   17234        cause a segmentation violation
   17235      * [43]15064 (c++) typeid of template parameter gives ICE
   17236      * [44]15142 (c++) ICE when passing a string where a char* is expected
   17237        in a throw statement
   17238      * [45]15159 ICE in rtl_verify_flow_info_1
   17239      * [46]15165 (c++) ICE in instantiate_template
   17240      * [47]15193 Unary minus using pointer to V4SF vector causes
   17241        -fforce-mem to exhaust all memory
   17242      * [48]15209 (c++) Runs out of memory with packed structs
   17243      * [49]15227 (c++) Trouble with invalid function definition
   17244      * [50]15285 (c++) instantiate_type ICE when forming pointer to
   17245        template function
   17246      * [51]15299 (c++) ICE in resolve_overloaded_unification
   17247      * [52]15329 (c++) ICE on constructor of member template
   17248      * [53]15550 ICE in extract_insn, in recog.c
   17249      * [54]15554 (c++) ICE in tsubst_copy, in cp/pt.c
   17250      * [55]15640 (c++) ICE on invalid code in arg_assoc, in
   17251        cp/name-lookup.c
   17252      * [56]15666 [unit-at-a-time] Gcc abort on valid code
   17253      * [57]15696 (c++) ICE with bad pointer-to-member code
   17254      * [58]15701 (c++) ICE with friends and template template parameter
   17255      * [59]15761 ICE in do_SUBST, in combine.c
   17256      * [60]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
   17257 
   17258     Ada
   17259 
   17260      * [61]14538 All RTEMS targets broken for gnat
   17261 
   17262     C front end
   17263 
   17264      * [62]12391 missing warning about assigning to an incomplete type
   17265      * [63]14649 atan(1.0) should not be a constant expression
   17266      * [64]15004 [unit-at-a-time] no warning for unused paramater in
   17267        static function
   17268      * [65]15749 --pedantic-errors behaves differently from --pedantic
   17269        with C-compiler on GNU/Linux
   17270 
   17271     C++ compiler and library
   17272 
   17273      * [66]10646 non-const reference is incorrectly matched in a "const T"
   17274        partial specialization
   17275      * [67]12077 wcin.rdbuf()->in_avail() return value too high
   17276      * [68]13598 enc_filebuf doesn't work
   17277      * [69]14211 const_cast returns lvalue but should be rvalue
   17278      * [70]14220 num_put::do_put() undesired float/double behavior
   17279      * [71]14245 problem with user-defined allocators in std::basic_string
   17280      * [72]14340 libstdc++ Debug mode: failure to convert iterator to
   17281        const_iterator
   17282      * [73]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
   17283        FILE*
   17284      * [74]14668 no warning anymore for reevaluation of declaration
   17285      * [75]14775 LFS (large file support) tests missing
   17286      * [76]14821 Duplicate namespace alias declaration should not conflict
   17287      * [77]14930 Friend declaration ignored
   17288      * [78]14932 cannot use offsetof to get offsets of array elements in
   17289        g++ 3.4.0
   17290      * [79]14950 [non unit-at-a-time] always_inline does not mix with
   17291        templates and -O0
   17292      * [80]14962 g++ ignores #pragma redefine_extname
   17293      * [81]14975 Segfault on low-level write error during imbue
   17294      * [82]15002 Linewise stream input is unusably slow (std::string slow)
   17295      * [83]15025 compiler accepts redeclaration of template as
   17296        non-template
   17297      * [84]15046 [arm] Math functions misdetected by cross configuration
   17298      * [85]15069 a bit test on a variable of enum type is miscompiled
   17299      * [86]15074 g++ -lsupc++ still links against libstdc++
   17300      * [87]15083 spurious "statement has no effect" warning
   17301      * [88]15096 parse error with templates and pointer to const member
   17302      * [89]15287 combination of operator[] and operator .* fails in
   17303        templates
   17304      * [90]15317 __attribute__ unused in first parameter of constructor
   17305        gives error
   17306      * [91]15337 sizeof on incomplete type diagnostic
   17307      * [92]15361 bitset<>::_Find_next fails
   17308      * [93]15412 _GLIBCXX_ symbols symbols defined and used in different
   17309        namespaces
   17310      * [94]15427 valid code results in incomplete type error
   17311      * [95]15471 Incorrect member pointer offsets in anonymous
   17312        structs/unions
   17313      * [96]15503 nested template problem
   17314      * [97]15507 compiler hangs while laying out union
   17315      * [98]15542 operator & and template definitions
   17316      * [99]15565 SLES9: leading + sign for unsigned int with showpos
   17317      * [100]15625 friend defined inside a template fails to find static
   17318        function
   17319      * [101]15629 Function templates, overloads, and friend name injection
   17320      * [102]15742 'noreturn' attribute ignored in method of template
   17321        functions.
   17322      * [103]15775 Allocator::pointer consistently ignored
   17323      * [104]15821 Duplicate namespace alias within namespace rejected
   17324      * [105]15862 'enum yn' fails (confict with undeclared builtin)
   17325      * [106]15875 rejects pointer to member in template
   17326      * [107]15877 valid code using templates and anonymous enums is
   17327        rejected
   17328      * [108]15947 Puzzling error message for wrong destructor declaration
   17329        in template class
   17330      * [109]16020 cannot copy __gnu_debug::bitset
   17331      * [110]16154 input iterator concept too restrictive
   17332      * [111]16174 deducing top-level consts
   17333 
   17334     Java
   17335 
   17336      * [112]14315 Java compiler is not parallel make safe
   17337 
   17338     Fortran
   17339 
   17340      * [113]15151 [g77] incorrect logical i/o in 64-bit mode
   17341 
   17342     Objective-C
   17343 
   17344      * [114]7993 private variables cannot be shadowed in subclasses
   17345 
   17346     Optimization bugs
   17347 
   17348      * [115]15228 useless copies of floating point operands
   17349      * [116]15345 [non-unit-at-a-time] unreferenced nested inline
   17350        functions not optimized away
   17351      * [117]15945 Incorrect floating point optimization
   17352      * [118]15526 ftrapv aborts on 0 * (-1)
   17353      * [119]14690 Miscompiled POOMA tests
   17354      * [120]15112 GCC generates code to write to unchanging memory
   17355 
   17356     Preprocessor
   17357 
   17358      * [121]15067 Minor glitch in the source of cpp
   17359 
   17360     Main driver program bugs
   17361 
   17362      * [122]1963 collect2 interprets -oldstyle_liblookup as -o
   17363        ldstyle_liblookup
   17364 
   17365     x86-specific (Intel/AMD)
   17366 
   17367      * [123]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
   17368        section}
   17369 
   17370     HPPA-specific
   17371 
   17372      * [124]14782 GCC produces an unaligned data access at -O2
   17373      * [125]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
   17374      * [126]15202 ICE in reload_cse_simplify_operands, in postreload.c
   17375 
   17376     IA64-specific
   17377 
   17378      * [127]14610 __float80 constants incorrectly emitted
   17379      * [128]14813 init_array sections are initialized in the wrong order
   17380      * [129]14857 GCC segfault on duplicated asm statement
   17381      * [130]15598 Gcc 3.4 ICE on valid code
   17382      * [131]15653 Gcc 3.4 ICE on valid code
   17383 
   17384     MIPS-specific
   17385 
   17386      * [132]15189 wrong filling of delay slot with -march=mips1 -G0
   17387        -mno-split-addresses -mno-explicit-relocs
   17388      * [133]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
   17389        2.14.91
   17390      * [134]16144 Bogus reference to __divdf3 when -O1
   17391      * [135]16176 Miscompilation of unaligned data in MIPS backend
   17392 
   17393     PowerPC-specific
   17394 
   17395      * [136]11591 ICE in gcc.dg/altivec-5.c
   17396      * [137]12028 powerpc-eabispe produces bad sCOND operation
   17397      * [138]14478 rs6000 geu/ltu patterns generate incorrect code
   17398      * [139]14567 long double and va_arg complex args
   17399      * [140]14715 Altivec stack layout may overlap gpr save with stack
   17400        temps
   17401      * [141]14902 (libstdc++) Stream checking functions fail when -pthread
   17402        option is used.
   17403      * [142]14924 Compiler ICE on valid code
   17404      * [143]14960 -maltivec affects vector return with -mabi=no-altivec
   17405      * [144]15106 vector varargs failure passing from altivec to
   17406        non-altivec code for -m32
   17407      * [145]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
   17408        half-word operation
   17409      * [146]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
   17410        and stvx
   17411      * [147]15662 Segmentation fault when an exception is thrown - even if
   17412        try and catch are specified
   17413 
   17414     s390-specific
   17415 
   17416      * [148]15054 Bad code due to overlapping stack temporaries
   17417 
   17418     SPARC-specific
   17419 
   17420      * [149]15783 ICE with union assignment in 64-bit mode
   17421      * [150]15626 GCC 3.4 emits "ld: warning: relocation error:
   17422        R_SPARC_UA32"
   17423 
   17424     x86-64-specific
   17425 
   17426      * [151]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
   17427      * [152]14723 Backported -march=nocona from mainline
   17428      * [153]15290 __float128 failed to pass to function properly
   17429 
   17430     Cygwin/Mingw32-specific
   17431 
   17432      * [154]15250 Option -mms-bitfields support on GCC 3.4 is not
   17433        conformant to MS layout
   17434      * [155]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
   17435        worker on windows32 targets
   17436 
   17437     Bugs specific to embedded processors
   17438 
   17439      * [156]8309 [m68k] -m5200 produces erroneous SImode set of short
   17440        varaible on stack
   17441      * [157]13250 [SH] Gcc code for rotation clobbers the register, but
   17442        gcc continues to use the register as if it was not clobbered
   17443      * [158]13803 [coldfire] movqi operand constraints too restrictivefor
   17444        TARGET_COLDFIRE
   17445      * [159]14093 [SH] ICE for code when using -mhitachi option in SH
   17446      * [160]14457 [m6811hc] ICE with simple c++ source
   17447      * [161]14542 [m6811hc] ICE on simple source
   17448      * [162]15100 [SH] cc1plus got hang-up on
   17449        libstdc++-v3/testsuite/abi_check.cc
   17450      * [163]15296 [CRIS] Delayed branch scheduling causing invalid code on
   17451        cris-*
   17452      * [164]15396 [SH] ICE with -O2 -fPIC
   17453      * [165]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
   17454        ColdFire
   17455 
   17456     Testsuite problems (compiler not affected)
   17457 
   17458      * [166]11610 libstdc++ testcases 27_io/* don't work properly remotely
   17459      * [167]15488 (libstdc++) possibly insufficient file permissions for
   17460        executing test suite
   17461      * [168]15489 (libstdc++) testsuite_files determined incorrectly
   17462 
   17463     Documentation bugs
   17464 
   17465      * [169]13928 (libstdc++) no whatis info in some man pages generated
   17466        by doxygen
   17467      * [170]14150 Ada documentation out of date
   17468      * [171]14949 (c++) Need to document method visibility changes
   17469      * [172]15123 libstdc++-doc: Allocators.3 manpage is empty
   17470      __________________________________________________________________
   17471 
   17472 [173]GCC 3.4.2
   17473 
   17474   Bug Fixes
   17475 
   17476    This section lists the problem reports (PRs) from GCC's bug tracking
   17477    system that are known to be fixed in the 3.4.2 release. This list might
   17478    not be complete (that is, it is possible that some PRs that have been
   17479    fixed are not listed here).
   17480 
   17481     Bootstrap failures and issues
   17482 
   17483      * [174]16469 [mips-sgi-irix5.3] bootstrap fails in
   17484        libstdc++-v3/testsuite
   17485      * [175]16344 [hppa-linux-gnu] libstdc++'s PCH built by
   17486        profiledbootstrap does not work with the built compiler
   17487      * [176]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
   17488 
   17489     Multi-platform internal compiler errors (ICEs)
   17490 
   17491      * [177]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
   17492        cp_parser_class_specifier, in cp/parser.c
   17493      * [178]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   17494      * [179]15461 (c++) ICE due to NRV and inlining
   17495      * [180]15890 (c++) ICE in c_expand_expr, in c-common.c
   17496      * [181]16180 ICE: segmentation fault in RTL optimization
   17497      * [182]16224 (c++) ICE in write_unscoped_name (template/namespace)
   17498      * [183]16408 ICE: in delete_insn, in cfgrtl.c
   17499      * [184]16529 (c++) ICE for: namespace-alias shall not be declared as
   17500        the name of any other entity
   17501      * [185]16698 (c++) ICE with exceptions and declaration of __cxa_throw
   17502      * [186]16706 (c++) ICE in finish_member_declaration, in
   17503        cp/semantics.c
   17504      * [187]16810 (c++) Legal C++ program with cast gives ICE in
   17505        build_ptrmemfunc
   17506      * [188]16851 (c++) ICE when throwing a comma expression
   17507      * [189]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
   17508      * [190]16904 (c++) ICE in finish_class_member_access_expr, in
   17509        cp/typeck.c
   17510      * [191]16905 (c++) ICE (segfault) with exceptions
   17511      * [192]16964 (c++) ICE in cp_parser_class_specifier due to
   17512        redefinition
   17513      * [193]17068 (c++) ICE: tree check: expected class 'd', have 'x'
   17514        (identifier_node) in dependent_template_p, in cp/pt.c
   17515 
   17516     Preprocessor bugs
   17517 
   17518      * [194]16366 Preprocessor option -remap causes memory corruption
   17519 
   17520     Optimization
   17521 
   17522      * [195]15345 unreferenced nested inline functions not optimized away
   17523      * [196]16590 Incorrect execution when compiling with -O2
   17524      * [197]16693 Bitwise AND is lost when used within a cast to an enum
   17525        of the same precision
   17526      * [198]17078 Jump into if(0) substatement fails
   17527 
   17528     Problems in generated debug information
   17529 
   17530      * [199]13956 incorrect stabs for nested local variables
   17531 
   17532     C front end bugs
   17533 
   17534      * [200]16684 GCC should not warn about redundant redeclarations of
   17535        built-ins
   17536 
   17537     C++ compiler and library
   17538 
   17539      * [201]12658 Thread safety problems in locale::global() and
   17540        locale::locale()
   17541      * [202]13092 g++ accepts invalid pointer-to-member conversion
   17542      * [203]15320 Excessive memory consumption
   17543      * [204]16246 Incorrect template argument deduction
   17544      * [205]16273 Memory exhausted when using nested classes and virtual
   17545        functions
   17546      * [206]16401 ostringstream in gcc 3.4.x very slow for big data
   17547      * [207]16411 undefined reference to
   17548        __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
   17549        >::file()
   17550      * [208]16489 G++ incorrectly rejects use of a null constant integral
   17551        expression as a null constant pointer
   17552      * [209]16618 offsetof fails with constant member
   17553      * [210]16637 syntax error reported for valid input code
   17554      * [211]16717 __attribute__((constructor)) broken in C++
   17555      * [212]16813 compiler error in DEBUG version of range insertion
   17556        std::map::insert
   17557      * [213]16853 pointer-to-member initialization from incompatible one
   17558        accepted
   17559      * [214]16889 ambiguity is not detected
   17560      * [215]16959 Segmentation fault in ios_base::sync_with_stdio
   17561 
   17562     Java compiler and library
   17563 
   17564      * [216]7587 direct threaded interpreter not thread-safe
   17565      * [217]16473 ServerSocket accept() leaks file descriptors
   17566      * [218]16478 Hash synchronization deadlock with finalizers
   17567 
   17568     Alpha-specific
   17569 
   17570      * [219]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
   17571      * [220]16974 could not split insn (ice in final_scan_insn, in
   17572        final.c)
   17573 
   17574     x86-specific
   17575 
   17576      * [221]16298 ICE in output_operand
   17577      * [222]17113 ICE with SSE2 intrinsics
   17578 
   17579     x86-64 specific
   17580 
   17581      * [223]14697 libstdc++ couldn't find 32bit libgcc_s
   17582 
   17583     MIPS-specific
   17584 
   17585      * [224]15869 [mips64] No NOP after LW (with -mips1 -O0)
   17586      * [225]16325 [mips64] value profiling clobbers gp on mips
   17587      * [226]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
   17588        char[]s
   17589      * [227]16380 [mips64] Use of uninitialised register after dbra
   17590        conversion
   17591      * [228]16407 [mips64] Unaligned access to local variables
   17592      * [229]16643 [mips64] verify_local_live_at_start ICE after
   17593        crossjumping & cfgcleanup
   17594 
   17595     ARM-specific
   17596 
   17597      * [230]15927 THUMB -O2: strength-reduced iteration variable ends up
   17598        off by 1
   17599      * [231]15948 THUMB: ICE with non-commutative cbranch
   17600      * [232]17019 THUMB: bad switch statement in md code for
   17601        addsi3_cbranch_scratch
   17602 
   17603     IA64-specific
   17604 
   17605      * [233]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
   17606        (-mtune=merced)
   17607      * [234]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
   17608        (-mtune=itanium)
   17609      * [235]16278 Gcc failed to build Linux kernel with -mtune=merced
   17610      * [236]16414 ICE on valid code: typo in comparison of asm_noperands
   17611        result
   17612      * [237]16445 ICE on valid code: don't count ignored insns
   17613      * [238]16490 ICE (segfault) while compiling with -fprofile-use
   17614      * [239]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
   17615 
   17616     PowerPC-specific
   17617 
   17618      * [240]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
   17619      * [241]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
   17620        issue)
   17621 
   17622     SPARC-specific
   17623 
   17624      * [242]16199 ICE while compiling apache 2.0.49
   17625      * [243]16416 -m64 doesn't imply -mcpu=v9 anymore
   17626      * [244]16430 ICE when returning non-C aggregates larger than 16 bytes
   17627 
   17628     Bugs specific to embedded processors
   17629 
   17630      * [245]16379 [m32r] can't output large model function call of memcpy
   17631      * [246]17093 [m32r] ICE with -msdata=use -O0
   17632      * [247]17119 [m32r] ICE at switch case 0x8000
   17633 
   17634     DJGPP-specific
   17635 
   17636      * [248]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
   17637 
   17638     Alpha Tru64-specific
   17639 
   17640      * [249]16210 libstdc++ gratuitously omits "long long" I/O
   17641 
   17642     Testsuite, documentation issues (compiler is not affected):
   17643 
   17644      * [250]15488 (libstdc++) possibly insufficient file permissions for
   17645        executing test suite
   17646      * [251]16250 ada/doctools runs makeinfo even in release tarball
   17647      __________________________________________________________________
   17648 
   17649 [252]GCC 3.4.3
   17650 
   17651    This is the [253]list of problem reports (PRs) from GCC's bug tracking
   17652    system that are known to be fixed in the 3.4.3 release. This list might
   17653    not be complete (that is, it is possible that some PRs that have been
   17654    fixed are not listed here).
   17655 
   17656     Bootstrap failures
   17657 
   17658      * [254]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
   17659      * [255]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
   17660        when undeclared
   17661 
   17662     Internal compiler errors (ICEs) affecting multiple platforms
   17663 
   17664      * [256]13948 (java) GCJ segmentation fault while compiling GL4Java
   17665        .class files
   17666      * [257]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   17667      * [258]16301 (c++) ICE when "strong" attribute is attached to a using
   17668        directive
   17669      * [259]16566 ICE with flexible arrays
   17670      * [260]17023 ICE with nested functions in parameter declaration
   17671      * [261]17027 ICE with noreturn function in loop at -O2
   17672      * [262]17524 ICE in grokdeclarator, in cp/decl.c
   17673      * [263]17826 (c++) ICE in cp_tree_equal
   17674 
   17675     C and optimization bugs
   17676 
   17677      * [264]15526 -ftrapv aborts on 0 * (-1)
   17678      * [265]16999 #ident stopped working
   17679      * [266]17503 quadratic behaviour in invalid_mode_change_p
   17680      * [267]17581 Long long arithmetic fails inside a switch/case
   17681        statement when compiled with -O2
   17682      * [268]18129 -fwritable-strings doesn't work
   17683 
   17684     C++ compiler and library bugs
   17685 
   17686      * [269]10975 incorrect initial ostringstream::tellp()
   17687      * [270]11722 Unbuffered filebuf::sgetn is slow
   17688      * [271]14534 Unrecognizing static function as a template parameter
   17689        when its return value is also templated
   17690      * [272]15172 Copy constructor optimization in aggregate
   17691        initialization
   17692      * [273]15786 Bad error message for frequently occuring error.
   17693      * [274]16162 Rejects valid member-template-definition
   17694      * [275]16612 empty basic_strings can't live in shared memory
   17695      * [276]16715 std::basic_iostream is instantiated when used, even
   17696        though instantiations are already contained in libstdc++
   17697      * [277]16848 code in /ext/demangle.h appears broken
   17698      * [278]17132 GCC fails to eliminate function template specialization
   17699        when argument deduction fails
   17700      * [279]17259 One more _S_leaf incorrectly qualified with _RopeRep::
   17701        in ropeimpl.h
   17702      * [280]17327 use of `enumeral_type' in template type unification
   17703      * [281]17393 "unused variable '._0'" warning with -Wall
   17704      * [282]17501 Confusion with member templates
   17705      * [283]17537 g++ not passing -lstdc++ to linker when all command line
   17706        arguments are libraries
   17707      * [284]17585 usage of unqualified name of static member from within
   17708        class not allowed
   17709      * [285]17821 Poor diagnostic for using "." instead of "->"
   17710      * [286]17829 wrong error: call of overloaded function is ambiguous
   17711      * [287]17851 Misleading diagnostic for invalid function declarations
   17712        with undeclared types
   17713      * [288]17976 Destructor is called twice
   17714      * [289]18020 rejects valid definition of enum value in template
   17715      * [290]18093 bogus conflict in namespace aliasing
   17716      * [291]18140 C++ parser bug when using >> in templates
   17717 
   17718     Fortran
   17719 
   17720      * [292]17541 data statements with double precision constants fail
   17721 
   17722     x86-specific
   17723 
   17724      * [293]17853 -O2 ICE for MMX testcase
   17725 
   17726     SPARC-specific
   17727 
   17728      * [294]17245 ICE compiling gsl-1.5 statistics/lag1.c
   17729 
   17730     Darwin-specific
   17731 
   17732      * [295]17167 FATAL:Symbol L_foo$stub already defined.
   17733 
   17734     AIX-specific
   17735 
   17736      * [296]17277 could not catch an exception when specified -maix64
   17737 
   17738     Solaris-specific
   17739 
   17740      * [297]17505 <cmath> calls acosf(), ceilf(), and other functions
   17741        missing from system libraries
   17742 
   17743     HP/UX specific:
   17744 
   17745      * [298]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
   17746 
   17747     ARM-specific
   17748 
   17749      * [299]17384 ICE with mode attribute on structures
   17750 
   17751     MIPS-specific
   17752 
   17753      * [300]17770 No NOP after LWL with -mips1
   17754 
   17755     Other embedded target specific
   17756 
   17757      * [301]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
   17758      * [302]14064 [avr-elf] -fdata-sections triggers ICE
   17759      * [303]14678 [m68hc11-elf] gcc ICE
   17760      * [304]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
   17761      * [305]15790 [i686-coff] Alignment error building gcc with i686-coff
   17762        target
   17763      * [306]15886 [SH] Miscompilation with -O2 -fPIC
   17764      * [307]16884 [avr-elf] [fweb related] bug while initializing
   17765        variables
   17766 
   17767     Bugs relating to debugger support
   17768 
   17769      * [308]13841 missing debug info for _Complex function arguments
   17770      * [309]15860 [big-endian targets] No DW_AT_location debug info is
   17771        emitted for formal arguments to a function that uses "register"
   17772        qualifiers
   17773 
   17774     Testsuite issues (compiler not affected)
   17775 
   17776      * [310]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
   17777      * [311]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
   17778      * [312]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
   17779        testsuite
   17780 
   17781     Documentation
   17782 
   17783      * [313]15498 typo in gcc manual: non-existing locale example en_UK,
   17784        should be en_GB
   17785      * [314]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
   17786        document broken shell
   17787      * [315]16406 USE_LD_AS_NEEDED undocumented
   17788      __________________________________________________________________
   17789 
   17790 [316]GCC 3.4.4
   17791 
   17792    This is the [317]list of problem reports (PRs) from GCC's bug tracking
   17793    system that are known to be fixed in the 3.4.4 release. This list might
   17794    not be complete (that is, it is possible that some PRs that have been
   17795    fixed are not listed here).
   17796      __________________________________________________________________
   17797 
   17798 [318]GCC 3.4.5
   17799 
   17800    This is the [319]list of problem reports (PRs) from GCC's bug tracking
   17801    system that are known to be fixed in the 3.4.5 release. This list might
   17802    not be complete (that is, it is possible that some PRs that have been
   17803    fixed are not listed here).
   17804 
   17805     Bootstrap issues
   17806 
   17807      * [320]24688 sco_math fixincl breaks math.h
   17808 
   17809     C compiler bugs
   17810 
   17811      * [321]17188 struct Foo { } redefinition
   17812      * [322]20187 wrong code for ((unsigned char)(unsigned long
   17813        long)((a?a:1)&(a*b)))?0:1)
   17814      * [323]21873 infinite warning loop on bad array initializer
   17815      * [324]21899 enum definition accepts values to be overriden
   17816      * [325]22061 ICE in find_function_data, in function.c
   17817      * [326]22308 Failure to diagnose violation of constraint 6.516p2
   17818      * [327]22458 ICE on missing brace
   17819      * [328]22589 ICE casting to long long
   17820      * [329]24101 Segfault with preprocessed source
   17821 
   17822     C++ compiler and library bugs
   17823 
   17824      * [330]10611 operations on vector mode not recognized in C++
   17825      * [331]13377 unexpected behavior of namespace usage directive
   17826      * [332]16002 Strange error message with new parser
   17827      * [333]17413 local classes as template argument
   17828      * [334]17609 spurious error message after using keyword
   17829      * [335]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
   17830      * [336]18124 ICE with invalid template template parameter
   17831      * [337]18155 typedef in template declaration not rejected
   17832      * [338]18177 ICE with const_cast for undeclared variable
   17833      * [339]18368 C++ error message regression
   17834      * [340]16378 ICE when returning a copy of a packed member
   17835      * [341]18466 int ::i; accepted
   17836      * [342]18512 ICE on invalid usage of template base class
   17837      * [343]18454 ICE when returning undefined type
   17838      * [344]18738 typename not allowed with non-dependent qualified name
   17839      * [345]18803 rejects access to operator() in template
   17840      * [346]19004 ICE in uses_template_parms, in cp/pt.c
   17841      * [347]19208 Spurious error about variably modified type
   17842      * [348]18253 bad error message / ICE for invalid template parameter
   17843      * [349]19608 ICE after friend function definition in local class
   17844      * [350]19884 ICE on explicit instantiation of a non-template
   17845        constructor
   17846      * [351]20153 ICE when C++ template function contains anonymous union
   17847      * [352]20563 Infinite loop in diagnostic (and ice after error
   17848        message)
   17849      * [353]20789 ICE with incomplete type in template
   17850      * [354]21336 Internal compiler error when using custom new operators
   17851      * [355]21768 ICE in error message due to violation of coding
   17852        conventions
   17853      * [356]21853 constness of pointer to data member ignored
   17854      * [357]21903 Default argument of template function causes a
   17855        compile-time error
   17856      * [358]21983 multiple diagnostics
   17857      * [359]21987 New testsuite failure
   17858        g++.dg/warn/conversion-function-1.C
   17859      * [360]22153 ICE on invalid template specialization
   17860      * [361]22172 Internal compiler error, seg fault.
   17861      * [362]21286 filebuf::xsgetn vs pipes
   17862      * [363]22233 ICE with wrong number of template parameters
   17863      * [364]22508 ICE after invalid operator new
   17864      * [365]22545 ICE with pointer to class member & user defined
   17865        conversion operator
   17866      * [366]23528 Wrong default allocator in ext/hash_map
   17867      * [367]23550 char_traits requirements/1.cc test bad math
   17868      * [368]23586 Bad diagnostic for invalid namespace-name
   17869      * [369]23624 ICE in invert_truthvalue, in fold-const.c
   17870      * [370]23639 Bad error message: not a member of '<declaration error>'
   17871      * [371]23797 ICE on typename outside template
   17872      * [372]23965 Bogus error message: no matching function for call to
   17873        'foo(<type error>)'
   17874      * [373]24052 &#`label_decl' not supported by dump_expr#<expression
   17875        error>
   17876      * [374]24580 virtual base class cause exception not to be caught
   17877 
   17878     Problems in generated debug information
   17879 
   17880      * [375]24267 Bad DWARF for altivec vectors
   17881 
   17882     Optimizations issues
   17883 
   17884      * [376]17810 ICE in verify_local_live_at_start
   17885      * [377]17860 Wrong generated code for loop with varying bound
   17886      * [378]21709 ICE on compile-time complex NaN
   17887      * [379]21964 broken tail call at -O2 or more
   17888      * [380]22167 Strange optimization bug when using -Os
   17889      * [381]22619 Compilation failure for real_const_1.f and
   17890        real_const_2.f90
   17891      * [382]23241 Invalid code generated for comparison of uchar to 255
   17892      * [383]23478 Miscompilation due to reloading of a var that is also
   17893        used in EH pad
   17894      * [384]24470 segmentation fault in cc1plus when compiling with -O
   17895      * [385]24950 ICE in operand_subword_force
   17896 
   17897     Precompiled headers problems
   17898 
   17899      * [386]14400 Cannot compile qt-x11-free-3.3.0
   17900      * [387]14940 PCH largefile test fails on various platforms
   17901 
   17902     Preprocessor bugs
   17903 
   17904      * [388]20239 ICE on empty preprocessed input
   17905      * [389]15220 "gcc -E -MM -MG" reports missing system headers in
   17906        source directory
   17907 
   17908     Testsuite issues
   17909 
   17910      * [390]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
   17911        i686-pc-linux-gnu
   17912 
   17913     Alpha specific
   17914 
   17915      * [391]21888 bootstrap failure with linker relaxation enabled
   17916 
   17917     ARM specific
   17918 
   17919      * [392]15342 [arm-linux]: ICE in verify_local_live_at_start
   17920      * [393]23985 Memory aliasing information incorrect in inlined memcpy
   17921 
   17922     ColdFile specific
   17923 
   17924      * [394]16719 Illegal move of byte into address register causes
   17925        compiler to ICE
   17926 
   17927     HPPA specific
   17928 
   17929      * [395]21723 ICE while building libgfortran
   17930      * [396]21841 -mhp-ld/-mgnu-ld documentation
   17931 
   17932     IA-64 specific
   17933 
   17934      * [397]23644 IA-64 hardware models and configuration options
   17935        documentation error
   17936      * [398]24718 Shared libgcc not used for linking by default
   17937 
   17938     M68000 specific
   17939 
   17940      * [399]18421 ICE in reload_cse_simplify_operands, in postreload.c
   17941 
   17942     MIPS specific
   17943 
   17944      * [400]20621 ICE in change_address_1, in emit-rtl.c
   17945 
   17946     PowerPC and PowerPC64 specific
   17947 
   17948      * [401]18583 error on valid code: const
   17949        __attribute__((altivec(vector__))) doesn't work in arrays
   17950      * [402]20191 ICE in reload_cse_simplify_operands
   17951      * [403]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
   17952      * [404]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
   17953      * [405]23404 gij trashes args of functions with more than 8 fp args
   17954      * [406]23539 C & C++ compiler generating misaligned references
   17955        regardless of compiler flags
   17956      * [407]24102 floatdisf2_internal2 broken
   17957      * [408]24465 -mminimal-toc miscompilation of __thread vars
   17958 
   17959     Solaris specific
   17960 
   17961      * [409]19933 Problem with define of HUGE_VAL in math_c99
   17962      * [410]21889 Native Solaris assembler cannot grok DTP-relative debug
   17963        symbols
   17964 
   17965     SPARC specific
   17966 
   17967      * [411]19300 PCH failures on sparc-linux
   17968      * [412]20301 Assembler labels have a leading "-"
   17969      * [413]20673 C PCH testsuite assembly comparison failure
   17970 
   17971     x86 and x86_64 specific
   17972 
   17973      * [414]18582 ICE with arrays of type V2DF
   17974      * [415]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
   17975        -fsched2-use-traces
   17976      * [416]21716 ICE in reg-stack.c's swap_rtx_condition
   17977      * [417]24315 amd64 fails -fpeephole2
   17978      __________________________________________________________________
   17979 
   17980 [418]GCC 3.4.6
   17981 
   17982    This is the [419]list of problem reports (PRs) from GCC's bug tracking
   17983    system that are known to be fixed in the 3.4.6 release. This list might
   17984    not be complete (that is, it is possible that some PRs that have been
   17985    fixed are not listed here).
   17986 
   17987 
   17988     For questions related to the use of GCC, please consult these web
   17989     pages and the [420]GCC manuals. If that fails, the
   17990     [421]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17991     web pages and the development of GCC are welcome on our developer
   17992     list at [422]gcc (a] gcc.gnu.org. All of [423]our lists have public
   17993     archives.
   17994 
   17995    Copyright (C) [424]Free Software Foundation, Inc. Verbatim copying and
   17996    distribution of this entire article is permitted in any medium,
   17997    provided this notice is preserved.
   17998 
   17999    These pages are [425]maintained by the GCC team. Last modified
   18000    2025-01-31.
   18001 
   18002 References
   18003 
   18004    1. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   18005    2. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   18006    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   18007    4. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   18008    5. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   18009    6. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   18010    7. https://www.boost.org/
   18011    8. https://gcc.gnu.org/PR11953
   18012    9. https://gcc.gnu.org/PR8361
   18013   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
   18014   11. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   18015   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
   18016   13. https://gcc.gnu.org/bugs/#cxx_rvalbind
   18017   14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   18018   15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   18019   16. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   18020   17. https://www.gnu.org/software/classpath/
   18021   18. https://www.eclipse.org/
   18022   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
   18023   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
   18024   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   18025   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
   18026   23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   18027   24. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   18028   25. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
   18029   26. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   18030   27. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   18031   28. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.0
   18032   29. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
   18033   30. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.1
   18034   31. https://gcc.gnu.org/PR10129
   18035   32. https://gcc.gnu.org/PR14576
   18036   33. https://gcc.gnu.org/PR14760
   18037   34. https://gcc.gnu.org/PR14671
   18038   35. https://gcc.gnu.org/PR15093
   18039   36. https://gcc.gnu.org/PR15178
   18040   37. https://gcc.gnu.org/PR12753
   18041   38. https://gcc.gnu.org/PR13985
   18042   39. https://gcc.gnu.org/PR14810
   18043   40. https://gcc.gnu.org/PR14883
   18044   41. https://gcc.gnu.org/PR15044
   18045   42. https://gcc.gnu.org/PR15057
   18046   43. https://gcc.gnu.org/PR15064
   18047   44. https://gcc.gnu.org/PR15142
   18048   45. https://gcc.gnu.org/PR15159
   18049   46. https://gcc.gnu.org/PR15165
   18050   47. https://gcc.gnu.org/PR15193
   18051   48. https://gcc.gnu.org/PR15209
   18052   49. https://gcc.gnu.org/PR15227
   18053   50. https://gcc.gnu.org/PR15285
   18054   51. https://gcc.gnu.org/PR15299
   18055   52. https://gcc.gnu.org/PR15329
   18056   53. https://gcc.gnu.org/PR15550
   18057   54. https://gcc.gnu.org/PR15554
   18058   55. https://gcc.gnu.org/PR15640
   18059   56. https://gcc.gnu.org/PR15666
   18060   57. https://gcc.gnu.org/PR15696
   18061   58. https://gcc.gnu.org/PR15701
   18062   59. https://gcc.gnu.org/PR15761
   18063   60. https://gcc.gnu.org/PR15829
   18064   61. https://gcc.gnu.org/PR14538
   18065   62. https://gcc.gnu.org/PR12391
   18066   63. https://gcc.gnu.org/PR14649
   18067   64. https://gcc.gnu.org/PR15004
   18068   65. https://gcc.gnu.org/PR15749
   18069   66. https://gcc.gnu.org/PR10646
   18070   67. https://gcc.gnu.org/PR12077
   18071   68. https://gcc.gnu.org/PR13598
   18072   69. https://gcc.gnu.org/PR14211
   18073   70. https://gcc.gnu.org/PR14220
   18074   71. https://gcc.gnu.org/PR14245
   18075   72. https://gcc.gnu.org/PR14340
   18076   73. https://gcc.gnu.org/PR14600
   18077   74. https://gcc.gnu.org/PR14668
   18078   75. https://gcc.gnu.org/PR14775
   18079   76. https://gcc.gnu.org/PR14821
   18080   77. https://gcc.gnu.org/PR14930
   18081   78. https://gcc.gnu.org/PR14932
   18082   79. https://gcc.gnu.org/PR14950
   18083   80. https://gcc.gnu.org/PR14962
   18084   81. https://gcc.gnu.org/PR14975
   18085   82. https://gcc.gnu.org/PR15002
   18086   83. https://gcc.gnu.org/PR15025
   18087   84. https://gcc.gnu.org/PR15046
   18088   85. https://gcc.gnu.org/PR15069
   18089   86. https://gcc.gnu.org/PR15074
   18090   87. https://gcc.gnu.org/PR15083
   18091   88. https://gcc.gnu.org/PR15096
   18092   89. https://gcc.gnu.org/PR15287
   18093   90. https://gcc.gnu.org/PR15317
   18094   91. https://gcc.gnu.org/PR15337
   18095   92. https://gcc.gnu.org/PR15361
   18096   93. https://gcc.gnu.org/PR15412
   18097   94. https://gcc.gnu.org/PR15427
   18098   95. https://gcc.gnu.org/PR15471
   18099   96. https://gcc.gnu.org/PR15503
   18100   97. https://gcc.gnu.org/PR15507
   18101   98. https://gcc.gnu.org/PR15542
   18102   99. https://gcc.gnu.org/PR15565
   18103  100. https://gcc.gnu.org/PR15625
   18104  101. https://gcc.gnu.org/PR15629
   18105  102. https://gcc.gnu.org/PR15742
   18106  103. https://gcc.gnu.org/PR15775
   18107  104. https://gcc.gnu.org/PR15821
   18108  105. https://gcc.gnu.org/PR15862
   18109  106. https://gcc.gnu.org/PR15875
   18110  107. https://gcc.gnu.org/PR15877
   18111  108. https://gcc.gnu.org/PR15947
   18112  109. https://gcc.gnu.org/PR16020
   18113  110. https://gcc.gnu.org/PR16154
   18114  111. https://gcc.gnu.org/PR16174
   18115  112. https://gcc.gnu.org/PR14315
   18116  113. https://gcc.gnu.org/PR15151
   18117  114. https://gcc.gnu.org/PR7993
   18118  115. https://gcc.gnu.org/PR15228
   18119  116. https://gcc.gnu.org/PR15345
   18120  117. https://gcc.gnu.org/PR15945
   18121  118. https://gcc.gnu.org/PR15526
   18122  119. https://gcc.gnu.org/PR14690
   18123  120. https://gcc.gnu.org/PR15112
   18124  121. https://gcc.gnu.org/PR15067
   18125  122. https://gcc.gnu.org/PR1963
   18126  123. https://gcc.gnu.org/PR15717
   18127  124. https://gcc.gnu.org/PR14782
   18128  125. https://gcc.gnu.org/PR14828
   18129  126. https://gcc.gnu.org/PR15202
   18130  127. https://gcc.gnu.org/PR14610
   18131  128. https://gcc.gnu.org/PR14813
   18132  129. https://gcc.gnu.org/PR14857
   18133  130. https://gcc.gnu.org/PR15598
   18134  131. https://gcc.gnu.org/PR15653
   18135  132. https://gcc.gnu.org/PR15189
   18136  133. https://gcc.gnu.org/PR15331
   18137  134. https://gcc.gnu.org/PR16144
   18138  135. https://gcc.gnu.org/PR16176
   18139  136. https://gcc.gnu.org/PR11591
   18140  137. https://gcc.gnu.org/PR12028
   18141  138. https://gcc.gnu.org/PR14478
   18142  139. https://gcc.gnu.org/PR14567
   18143  140. https://gcc.gnu.org/PR14715
   18144  141. https://gcc.gnu.org/PR14902
   18145  142. https://gcc.gnu.org/PR14924
   18146  143. https://gcc.gnu.org/PR14960
   18147  144. https://gcc.gnu.org/PR15106
   18148  145. https://gcc.gnu.org/PR16026
   18149  146. https://gcc.gnu.org/PR15191
   18150  147. https://gcc.gnu.org/PR15662
   18151  148. https://gcc.gnu.org/PR15054
   18152  149. https://gcc.gnu.org/PR15783
   18153  150. https://gcc.gnu.org/PR15626
   18154  151. https://gcc.gnu.org/PR14326
   18155  152. https://gcc.gnu.org/PR14723
   18156  153. https://gcc.gnu.org/PR15290
   18157  154. https://gcc.gnu.org/PR15250
   18158  155. https://gcc.gnu.org/PR15551
   18159  156. https://gcc.gnu.org/PR8309
   18160  157. https://gcc.gnu.org/PR13250
   18161  158. https://gcc.gnu.org/PR13803
   18162  159. https://gcc.gnu.org/PR14093
   18163  160. https://gcc.gnu.org/PR14457
   18164  161. https://gcc.gnu.org/PR14542
   18165  162. https://gcc.gnu.org/PR15100
   18166  163. https://gcc.gnu.org/PR15296
   18167  164. https://gcc.gnu.org/PR15396
   18168  165. https://gcc.gnu.org/PR15782
   18169  166. https://gcc.gnu.org/PR11610
   18170  167. https://gcc.gnu.org/PR15488
   18171  168. https://gcc.gnu.org/PR15489
   18172  169. https://gcc.gnu.org/PR13928
   18173  170. https://gcc.gnu.org/PR14150
   18174  171. https://gcc.gnu.org/PR14949
   18175  172. https://gcc.gnu.org/PR15123
   18176  173. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.2
   18177  174. https://gcc.gnu.org/PR16469
   18178  175. https://gcc.gnu.org/PR16344
   18179  176. https://gcc.gnu.org/PR16842
   18180  177. https://gcc.gnu.org/PR12608
   18181  178. https://gcc.gnu.org/PR14492
   18182  179. https://gcc.gnu.org/PR15461
   18183  180. https://gcc.gnu.org/PR15890
   18184  181. https://gcc.gnu.org/PR16180
   18185  182. https://gcc.gnu.org/PR16224
   18186  183. https://gcc.gnu.org/PR16408
   18187  184. https://gcc.gnu.org/PR16529
   18188  185. https://gcc.gnu.org/PR16698
   18189  186. https://gcc.gnu.org/PR16706
   18190  187. https://gcc.gnu.org/PR16810
   18191  188. https://gcc.gnu.org/PR16851
   18192  189. https://gcc.gnu.org/PR16870
   18193  190. https://gcc.gnu.org/PR16904
   18194  191. https://gcc.gnu.org/PR16905
   18195  192. https://gcc.gnu.org/PR16964
   18196  193. https://gcc.gnu.org/PR17068
   18197  194. https://gcc.gnu.org/PR16366
   18198  195. https://gcc.gnu.org/PR15345
   18199  196. https://gcc.gnu.org/PR16590
   18200  197. https://gcc.gnu.org/PR16693
   18201  198. https://gcc.gnu.org/PR17078
   18202  199. https://gcc.gnu.org/PR13956
   18203  200. https://gcc.gnu.org/PR16684
   18204  201. https://gcc.gnu.org/PR12658
   18205  202. https://gcc.gnu.org/PR13092
   18206  203. https://gcc.gnu.org/PR15320
   18207  204. https://gcc.gnu.org/PR16246
   18208  205. https://gcc.gnu.org/PR16273
   18209  206. https://gcc.gnu.org/PR16401
   18210  207. https://gcc.gnu.org/PR16411
   18211  208. https://gcc.gnu.org/PR16489
   18212  209. https://gcc.gnu.org/PR16618
   18213  210. https://gcc.gnu.org/PR16637
   18214  211. https://gcc.gnu.org/PR16717
   18215  212. https://gcc.gnu.org/PR16813
   18216  213. https://gcc.gnu.org/PR16853
   18217  214. https://gcc.gnu.org/PR16889
   18218  215. https://gcc.gnu.org/PR16959
   18219  216. https://gcc.gnu.org/PR7587
   18220  217. https://gcc.gnu.org/PR16473
   18221  218. https://gcc.gnu.org/PR16478
   18222  219. https://gcc.gnu.org/PR10695
   18223  220. https://gcc.gnu.org/PR16974
   18224  221. https://gcc.gnu.org/PR16298
   18225  222. https://gcc.gnu.org/PR17113
   18226  223. https://gcc.gnu.org/PR14697
   18227  224. https://gcc.gnu.org/PR15869
   18228  225. https://gcc.gnu.org/PR16325
   18229  226. https://gcc.gnu.org/PR16357
   18230  227. https://gcc.gnu.org/PR16380
   18231  228. https://gcc.gnu.org/PR16407
   18232  229. https://gcc.gnu.org/PR16643
   18233  230. https://gcc.gnu.org/PR15927
   18234  231. https://gcc.gnu.org/PR15948
   18235  232. https://gcc.gnu.org/PR17019
   18236  233. https://gcc.gnu.org/PR16130
   18237  234. https://gcc.gnu.org/PR16142
   18238  235. https://gcc.gnu.org/PR16278
   18239  236. https://gcc.gnu.org/PR16414
   18240  237. https://gcc.gnu.org/PR16445
   18241  238. https://gcc.gnu.org/PR16490
   18242  239. https://gcc.gnu.org/PR16683
   18243  240. https://gcc.gnu.org/PR16195
   18244  241. https://gcc.gnu.org/PR16239
   18245  242. https://gcc.gnu.org/PR16199
   18246  243. https://gcc.gnu.org/PR16416
   18247  244. https://gcc.gnu.org/PR16430
   18248  245. https://gcc.gnu.org/PR16379
   18249  246. https://gcc.gnu.org/PR17093
   18250  247. https://gcc.gnu.org/PR17119
   18251  248. https://gcc.gnu.org/PR15928
   18252  249. https://gcc.gnu.org/PR16210
   18253  250. https://gcc.gnu.org/PR15488
   18254  251. https://gcc.gnu.org/PR16250
   18255  252. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.3
   18256  253. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
   18257  254. https://gcc.gnu.org/PR17369
   18258  255. https://gcc.gnu.org/PR17850
   18259  256. https://gcc.gnu.org/PR13948
   18260  257. https://gcc.gnu.org/PR14492
   18261  258. https://gcc.gnu.org/PR16301
   18262  259. https://gcc.gnu.org/PR16566
   18263  260. https://gcc.gnu.org/PR17023
   18264  261. https://gcc.gnu.org/PR17027
   18265  262. https://gcc.gnu.org/PR17524
   18266  263. https://gcc.gnu.org/PR17826
   18267  264. https://gcc.gnu.org/PR15526
   18268  265. https://gcc.gnu.org/PR16999
   18269  266. https://gcc.gnu.org/PR17503
   18270  267. https://gcc.gnu.org/PR17581
   18271  268. https://gcc.gnu.org/PR18129
   18272  269. https://gcc.gnu.org/PR10975
   18273  270. https://gcc.gnu.org/PR11722
   18274  271. https://gcc.gnu.org/PR14534
   18275  272. https://gcc.gnu.org/PR15172
   18276  273. https://gcc.gnu.org/PR15786
   18277  274. https://gcc.gnu.org/PR16162
   18278  275. https://gcc.gnu.org/PR16612
   18279  276. https://gcc.gnu.org/PR16715
   18280  277. https://gcc.gnu.org/PR16848
   18281  278. https://gcc.gnu.org/PR17132
   18282  279. https://gcc.gnu.org/PR17259
   18283  280. https://gcc.gnu.org/PR17327
   18284  281. https://gcc.gnu.org/PR17393
   18285  282. https://gcc.gnu.org/PR17501
   18286  283. https://gcc.gnu.org/PR17537
   18287  284. https://gcc.gnu.org/PR17585
   18288  285. https://gcc.gnu.org/PR17821
   18289  286. https://gcc.gnu.org/PR17829
   18290  287. https://gcc.gnu.org/PR17851
   18291  288. https://gcc.gnu.org/PR17976
   18292  289. https://gcc.gnu.org/PR18020
   18293  290. https://gcc.gnu.org/PR18093
   18294  291. https://gcc.gnu.org/PR18140
   18295  292. https://gcc.gnu.org/PR17541
   18296  293. https://gcc.gnu.org/PR17853
   18297  294. https://gcc.gnu.org/PR17245
   18298  295. https://gcc.gnu.org/PR17167
   18299  296. https://gcc.gnu.org/PR17277
   18300  297. https://gcc.gnu.org/PR17505
   18301  298. https://gcc.gnu.org/PR17684
   18302  299. https://gcc.gnu.org/PR17384
   18303  300. https://gcc.gnu.org/PR17770
   18304  301. https://gcc.gnu.org/PR11476
   18305  302. https://gcc.gnu.org/PR14064
   18306  303. https://gcc.gnu.org/PR14678
   18307  304. https://gcc.gnu.org/PR15583
   18308  305. https://gcc.gnu.org/PR15790
   18309  306. https://gcc.gnu.org/PR15886
   18310  307. https://gcc.gnu.org/PR16884
   18311  308. https://gcc.gnu.org/PR13841
   18312  309. https://gcc.gnu.org/PR15860
   18313  310. https://gcc.gnu.org/PR17465
   18314  311. https://gcc.gnu.org/PR17469
   18315  312. https://gcc.gnu.org/PR18138
   18316  313. https://gcc.gnu.org/PR15498
   18317  314. https://gcc.gnu.org/PR15747
   18318  315. https://gcc.gnu.org/PR16406
   18319  316. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.4
   18320  317. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
   18321  318. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.5
   18322  319. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
   18323  320. https://gcc.gnu.org/PR24688
   18324  321. https://gcc.gnu.org/PR17188
   18325  322. https://gcc.gnu.org/PR20187
   18326  323. https://gcc.gnu.org/PR21873
   18327  324. https://gcc.gnu.org/PR21899
   18328  325. https://gcc.gnu.org/PR22061
   18329  326. https://gcc.gnu.org/PR22208
   18330  327. https://gcc.gnu.org/PR22458
   18331  328. https://gcc.gnu.org/PR22589
   18332  329. https://gcc.gnu.org/PR24101
   18333  330. https://gcc.gnu.org/PR10611
   18334  331. https://gcc.gnu.org/PR13377
   18335  332. https://gcc.gnu.org/PR16002
   18336  333. https://gcc.gnu.org/PR17413
   18337  334. https://gcc.gnu.org/PR17609
   18338  335. https://gcc.gnu.org/PR17618
   18339  336. https://gcc.gnu.org/PR18124
   18340  337. https://gcc.gnu.org/PR18155
   18341  338. https://gcc.gnu.org/PR18177
   18342  339. https://gcc.gnu.org/PR18368
   18343  340. https://gcc.gnu.org/PR18378
   18344  341. https://gcc.gnu.org/PR18466
   18345  342. https://gcc.gnu.org/PR18512
   18346  343. https://gcc.gnu.org/PR18545
   18347  344. https://gcc.gnu.org/PR18738
   18348  345. https://gcc.gnu.org/PR18803
   18349  346. https://gcc.gnu.org/PR19004
   18350  347. https://gcc.gnu.org/PR19208
   18351  348. https://gcc.gnu.org/PR19253
   18352  349. https://gcc.gnu.org/PR19608
   18353  350. https://gcc.gnu.org/PR19884
   18354  351. https://gcc.gnu.org/PR20153
   18355  352. https://gcc.gnu.org/PR20563
   18356  353. https://gcc.gnu.org/PR20789
   18357  354. https://gcc.gnu.org/PR21336
   18358  355. https://gcc.gnu.org/PR21768
   18359  356. https://gcc.gnu.org/PR21853
   18360  357. https://gcc.gnu.org/PR21903
   18361  358. https://gcc.gnu.org/PR21983
   18362  359. https://gcc.gnu.org/PR21987
   18363  360. https://gcc.gnu.org/PR22153
   18364  361. https://gcc.gnu.org/PR22172
   18365  362. https://gcc.gnu.org/PR21286
   18366  363. https://gcc.gnu.org/PR22233
   18367  364. https://gcc.gnu.org/PR22508
   18368  365. https://gcc.gnu.org/PR22545
   18369  366. https://gcc.gnu.org/PR23528
   18370  367. https://gcc.gnu.org/PR23550
   18371  368. https://gcc.gnu.org/PR23586
   18372  369. https://gcc.gnu.org/PR23624
   18373  370. https://gcc.gnu.org/PR23639
   18374  371. https://gcc.gnu.org/PR23797
   18375  372. https://gcc.gnu.org/PR23965
   18376  373. https://gcc.gnu.org/PR24052
   18377  374. https://gcc.gnu.org/PR24580
   18378  375. https://gcc.gnu.org/PR24267
   18379  376. https://gcc.gnu.org/PR17810
   18380  377. https://gcc.gnu.org/PR17860
   18381  378. https://gcc.gnu.org/PR21709
   18382  379. https://gcc.gnu.org/PR21964
   18383  380. https://gcc.gnu.org/PR22167
   18384  381. https://gcc.gnu.org/PR22619
   18385  382. https://gcc.gnu.org/PR23241
   18386  383. https://gcc.gnu.org/PR23478
   18387  384. https://gcc.gnu.org/PR24470
   18388  385. https://gcc.gnu.org/PR24950
   18389  386. https://gcc.gnu.org/PR14400
   18390  387. https://gcc.gnu.org/PR14940
   18391  388. https://gcc.gnu.org/PR20239
   18392  389. https://gcc.gnu.org/PR15220
   18393  390. https://gcc.gnu.org/PR19275
   18394  391. https://gcc.gnu.org/PR21888
   18395  392. https://gcc.gnu.org/PR15342
   18396  393. https://gcc.gnu.org/PR23985
   18397  394. https://gcc.gnu.org/PR16719
   18398  395. https://gcc.gnu.org/PR21723
   18399  396. https://gcc.gnu.org/PR21841
   18400  397. https://gcc.gnu.org/PR23644
   18401  398. https://gcc.gnu.org/PR24718
   18402  399. https://gcc.gnu.org/PR18421
   18403  400. https://gcc.gnu.org/PR20621
   18404  401. https://gcc.gnu.org/PR18583
   18405  402. https://gcc.gnu.org/PR20191
   18406  403. https://gcc.gnu.org/PR22083
   18407  404. https://gcc.gnu.org/PR23070
   18408  405. https://gcc.gnu.org/PR23404
   18409  406. https://gcc.gnu.org/PR23539
   18410  407. https://gcc.gnu.org/PR24102
   18411  408. https://gcc.gnu.org/PR24465
   18412  409. https://gcc.gnu.org/PR19933
   18413  410. https://gcc.gnu.org/PR21889
   18414  411. https://gcc.gnu.org/PR19300
   18415  412. https://gcc.gnu.org/PR20301
   18416  413. https://gcc.gnu.org/PR20673
   18417  414. https://gcc.gnu.org/PR18582
   18418  415. https://gcc.gnu.org/PR19340
   18419  416. https://gcc.gnu.org/PR21716
   18420  417. https://gcc.gnu.org/PR24315
   18421  418. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.6
   18422  419. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
   18423  420. https://gcc.gnu.org/onlinedocs/
   18424  421. mailto:gcc-help (a] gcc.gnu.org
   18425  422. mailto:gcc (a] gcc.gnu.org
   18426  423. https://gcc.gnu.org/lists.html
   18427  424. https://www.fsf.org/
   18428  425. https://gcc.gnu.org/about.html
   18429 ======================================================================
   18430 http://gcc.gnu.org/gcc-3.3/index.html
   18431 
   18432                              GCC 3.3 Release Series
   18433 
   18434    (This release series is no longer supported.)
   18435 
   18436    May 03, 2005
   18437 
   18438    The [1]GNU project and the GCC developers are pleased to announce the
   18439    release of GCC 3.3.6.
   18440 
   18441    This release is a bug-fix release, containing fixes for regressions in
   18442    GCC 3.3.5 relative to previous releases of GCC.
   18443 
   18444    This release is the last of the series 3.3.x.
   18445 
   18446    The GCC 3.3 release series includes numerous [2]new features,
   18447    improvements, bug fixes, and other changes, thanks to an [3]amazing
   18448    group of volunteers.
   18449 
   18450 Release History
   18451 
   18452    GCC 3.3.6
   18453           May 3, 2005 ([4]changes)
   18454 
   18455    GCC 3.3.5
   18456           September 30, 2004 ([5]changes)
   18457 
   18458    GCC 3.3.4
   18459           May 31, 2004 ([6]changes)
   18460 
   18461    GCC 3.3.3
   18462           February 14, 2004 ([7]changes)
   18463 
   18464    GCC 3.3.2
   18465           October 16, 2003 ([8]changes)
   18466 
   18467    GCC 3.3.1
   18468           August 8, 2003 ([9]changes)
   18469 
   18470    GCC 3.3
   18471           May 14, 2003 ([10]changes)
   18472 
   18473 References and Acknowledgements
   18474 
   18475    GCC used to stand for the GNU C Compiler, but since the compiler
   18476    supports several other languages aside from C, it now stands for the
   18477    GNU Compiler Collection.
   18478 
   18479    A list of [11]successful builds is updated as new information becomes
   18480    available.
   18481 
   18482    The GCC developers would like to thank the numerous people that have
   18483    contributed new features, improvements, bug fixes, and other changes as
   18484    well as test results to GCC. This [12]amazing group of volunteers is
   18485    what makes GCC successful.
   18486 
   18487    For additional information about GCC please refer to the [13]GCC
   18488    project web site or contact the [14]GCC development mailing list.
   18489 
   18490    To obtain GCC please use [15]our mirror sites, or our CVS server.
   18491 
   18492 
   18493     For questions related to the use of GCC, please consult these web
   18494     pages and the [16]GCC manuals. If that fails, the
   18495     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18496     web pages and the development of GCC are welcome on our developer
   18497     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   18498     archives.
   18499 
   18500    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   18501    distribution of this entire article is permitted in any medium,
   18502    provided this notice is preserved.
   18503 
   18504    These pages are [21]maintained by the GCC team. Last modified
   18505    2022-10-26.
   18506 
   18507 References
   18508 
   18509    1. http://www.gnu.org/
   18510    2. https://gcc.gnu.org/gcc-3.3/changes.html
   18511    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18512    4. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   18513    5. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
   18514    6. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
   18515    7. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.3
   18516    8. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.2
   18517    9. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
   18518   10. https://gcc.gnu.org/gcc-3.3/changes.html
   18519   11. https://gcc.gnu.org/gcc-3.3/buildstat.html
   18520   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18521   13. https://gcc.gnu.org/index.html
   18522   14. mailto:gcc (a] gcc.gnu.org
   18523   15. https://gcc.gnu.org/mirrors.html
   18524   16. https://gcc.gnu.org/onlinedocs/
   18525   17. mailto:gcc-help (a] gcc.gnu.org
   18526   18. mailto:gcc (a] gcc.gnu.org
   18527   19. https://gcc.gnu.org/lists.html
   18528   20. https://www.fsf.org/
   18529   21. https://gcc.gnu.org/about.html
   18530 ======================================================================
   18531 http://gcc.gnu.org/gcc-3.3/changes.html
   18532 
   18533                              GCC 3.3 Release Series
   18534                         Changes, New Features, and Fixes
   18535 
   18536    The latest release in the 3.3 release series is [1]GCC 3.3.6.
   18537 
   18538 Caveats
   18539 
   18540      * The preprocessor no longer accepts multi-line string literals. They
   18541        were deprecated in 3.0, 3.1, and 3.2.
   18542      * The preprocessor no longer supports the -A- switch when appearing
   18543        alone. -A- followed by an assertion is still supported.
   18544      * Support for all the systems [2]obsoleted in GCC 3.1 has been
   18545        removed from GCC 3.3. See below for a [3]list of systems which are
   18546        obsoleted in this release.
   18547      * Checking for null format arguments has been decoupled from the rest
   18548        of the format checking mechanism. Programs which use the format
   18549        attribute may regain this functionality by using the new [4]nonnull
   18550        function attribute. Note that all functions for which GCC has a
   18551        built-in format attribute, an appropriate built-in nonnull
   18552        attribute is also applied.
   18553      * The DWARF (version 1) debugging format has been deprecated and will
   18554        be removed in a future version of GCC. Version 2 of the DWARF
   18555        debugging format will continue to be supported for the foreseeable
   18556        future.
   18557      * The C and Objective-C compilers no longer accept the "Naming Types"
   18558        extension (typedef foo = bar); it was already unavailable in C++.
   18559        Code which uses it will need to be changed to use the "typeof"
   18560        extension instead: typedef typeof(bar) foo. (We have removed this
   18561        extension without a period of deprecation because it has caused the
   18562        compiler to crash since version 3.0 and no one noticed until very
   18563        recently. Thus we conclude it is not in widespread use.)
   18564      * The -traditional C compiler option has been removed. It was
   18565        deprecated in 3.1 and 3.2. (Traditional preprocessing remains
   18566        available.) The <varargs.h> header, used for writing variadic
   18567        functions in traditional C, still exists but will produce an error
   18568        message if used.
   18569      * GCC 3.3.1 automatically places zero-initialized variables in the
   18570        .bss section on some operating systems. Versions of GNU Emacs up to
   18571        (and including) 21.3 will not work correctly when using this
   18572        optimization; you can use -fno-zero-initialized-in-bss to disable
   18573        it.
   18574 
   18575 General Optimizer Improvements
   18576 
   18577      * A new scheme for accurately describing processor pipelines, the
   18578        [5]DFA scheduler, has been added.
   18579      * Pavel Nejedly, Charles University Prague, has contributed new file
   18580        format used by the edge coverage profiler (-fprofile-arcs).
   18581        The new format is robust and diagnoses common mistakes where
   18582        profiles from different versions (or compilations) of the program
   18583        are combined resulting in nonsensical profiles and slow code to
   18584        produced with profile feedback. Additionally this format allows
   18585        extra data to be gathered. Currently, overall statistics are
   18586        produced helping optimizers to identify hot spots of a program
   18587        globally replacing the old intra-procedural scheme and resulting in
   18588        better code. Note that the gcov tool from older GCC versions will
   18589        not be able to parse the profiles generated by GCC 3.3 and vice
   18590        versa.
   18591      * Jan Hubicka, SuSE Labs, has contributed a new superblock formation
   18592        pass enabled using -ftracer. This pass simplifies the control flow
   18593        of functions allowing other optimizations to do better job.
   18594        He also contributed the function reordering pass
   18595        (-freorder-functions) to optimize function placement using profile
   18596        feedback.
   18597 
   18598 New Languages and Language specific improvements
   18599 
   18600   C/ObjC/C++
   18601 
   18602      * The preprocessor now accepts directives within macro arguments. It
   18603        processes them just as if they had not been within macro arguments.
   18604      * The separate ISO and traditional preprocessors have been completely
   18605        removed. The front end handles either type of preprocessed output
   18606        if necessary.
   18607      * In C99 mode preprocessor arithmetic is done in the precision of the
   18608        target's intmax_t, as required by that standard.
   18609      * The preprocessor can now copy comments inside macros to the output
   18610        file when the macro is expanded. This feature, enabled using the
   18611        -CC option, is intended for use by applications which place
   18612        metadata or directives inside comments, such as lint.
   18613      * The method of constructing the list of directories to be searched
   18614        for header files has been revised. If a directory named by a -I
   18615        option is a standard system include directory, the option is
   18616        ignored to ensure that the default search order for system
   18617        directories and the special treatment of system header files are
   18618        not defeated.
   18619      * A few more [6]ISO C99 features now work correctly.
   18620      * A new function attribute, nonnull, has been added which allows
   18621        pointer arguments to functions to be specified as requiring a
   18622        non-null value. The compiler currently uses this information to
   18623        issue a warning when it detects a null value passed in such an
   18624        argument slot.
   18625      * A new type attribute, may_alias, has been added. Accesses to
   18626        objects with types with this attribute are not subjected to
   18627        type-based alias analysis, but are instead assumed to be able to
   18628        alias any other type of objects, just like the char type.
   18629 
   18630   C++
   18631 
   18632      * Type based alias analysis has been implemented for C++ aggregate
   18633        types.
   18634 
   18635   Objective-C
   18636 
   18637      * Generate an error if Objective-C objects are passed by value in
   18638        function and method calls.
   18639      * When -Wselector is used, check the whole list of selectors at the
   18640        end of compilation, and emit a warning if a @selector() is not
   18641        known.
   18642      * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime.
   18643      * No longer need to include objc/objc-class.h to compile self calls
   18644        in class methods (NeXT runtime only).
   18645      * New -Wundeclared-selector option.
   18646      * Removed selector bloating which was causing object files to be 10%
   18647        bigger on average (GNU runtime only).
   18648      * Using at run time @protocol() objects has been fixed in certain
   18649        situations (GNU runtime only).
   18650      * Type checking has been fixed and improved in many situations
   18651        involving protocols.
   18652 
   18653   Java
   18654 
   18655      * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK
   18656        1.4) API.
   18657      * The JDK 1.4 assert facility has been implemented.
   18658      * The bytecode interpreter is now direct threaded and thus faster.
   18659 
   18660   Fortran
   18661 
   18662      * Fortran improvements are listed in [7]the Fortran documentation.
   18663 
   18664   Ada
   18665 
   18666      * Ada tasking now works with glibc 2.3.x threading libraries.
   18667 
   18668 New Targets and Target Specific Improvements
   18669 
   18670      * The following changes have been made to the HP-PA port:
   18671           + The port now defaults to scheduling for the PA8000 series of
   18672             processors.
   18673           + Scheduling support for the PA7300 processor has been added.
   18674           + The 32-bit port now supports weak symbols under HP-UX 11.
   18675           + The handling of initializers and finalizers has been improved
   18676             under HP-UX 11. The 64-bit port no longer uses collect2.
   18677           + Dwarf2 EH support has been added to the 32-bit GNU/Linux port.
   18678           + ABI fixes to correct the passing of small structures by value.
   18679      * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to
   18680        use the DFA processor pipeline description.
   18681      * The following NetBSD configurations for the SuperH processor family
   18682        have been added:
   18683           + SH3, big-endian, sh-*-netbsdelf*
   18684           + SH3, little-endian, shle-*-netbsdelf*
   18685           + SH5, SHmedia, big-endian, 32-bit default, sh5-*-netbsd*
   18686           + SH5, SHmedia, little-endian, 32-bit default, sh5le-*-netbsd*
   18687           + SH5, SHmedia, big-endian, 64-bit default, sh64-*-netbsd*
   18688           + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd*
   18689      * The following changes have been made to the IA-32/x86-64 port:
   18690           + SSE2 and 3dNOW! intrinsics are now supported.
   18691           + Support for thread local storage has been added to the IA-32
   18692             and x86-64 ports.
   18693           + The x86-64 port has been significantly improved.
   18694      * The following changes have been made to the MIPS port:
   18695           + All configurations now accept the -mabi switch. Note that you
   18696             will need appropriate multilibs for this option to work
   18697             properly.
   18698           + ELF configurations will always pass an ABI flag to the
   18699             assembler, except when the MIPS EABI is selected.
   18700           + -mabi=64 no longer selects MIPS IV code.
   18701           + The -mcpu option, which was deprecated in 3.1 and 3.2, has
   18702             been removed from this release.
   18703           + -march now changes the core ISA level. In previous releases,
   18704             it would change the use of processor-specific extensions, but
   18705             would leave the core ISA unchanged. For example, mips64-elf
   18706             -march=r8000 will now generate MIPS IV code.
   18707           + Under most configurations, -mipsN now acts as a synonym for
   18708             -march.
   18709           + There are some new preprocessor macros to describe the -march
   18710             and -mtune settings. See the documentation of those options
   18711             for details.
   18712           + Support for the NEC VR-Series processors has been added. This
   18713             includes the 54xx, 5500, and 41xx series.
   18714           + Support for the Sandcraft sr71k processor has been added.
   18715      * The following changes have been made to the S/390 port:
   18716           + Support to build the Java runtime libraries has been added.
   18717             Java is now enabled by default on s390-*-linux* and
   18718             s390x-*-linux* targets.
   18719           + Multilib support for the s390x-*-linux* target has been added;
   18720             this allows to build 31-bit binaries using the -m31 option.
   18721           + Support for thread local storage has been added.
   18722           + Inline assembler code may now use the 'Q' constraint to
   18723             specify memory operands without index register.
   18724           + Various platform-specific performance improvements have been
   18725             implemented; in particular, the compiler now uses the BRANCH
   18726             ON COUNT family of instructions and makes more frequent use of
   18727             the TEST UNDER MASK family of instructions.
   18728      * The following changes have been made to the PowerPC port:
   18729           + Support for IBM Power4 processor added.
   18730           + Support for Motorola e500 SPE added.
   18731           + Support for AIX 5.2 added.
   18732           + Function and Data sections now supported on AIX.
   18733           + Sibcall optimizations added.
   18734      * The support for H8 Tiny is added to the H8/300 port with -mn.
   18735 
   18736 [8]Obsolete Systems
   18737 
   18738    Support for a number of older systems has been declared obsolete in GCC
   18739    3.3. Unless there is activity to revive them, the next release of GCC
   18740    will have their sources permanently removed.
   18741 
   18742    All configurations of the following processor architectures have been
   18743    declared obsolete:
   18744      * Matsushita MN10200, mn10200-*-*
   18745      * Motorola 88000, m88k-*-*
   18746      * IBM ROMP, romp-*-*
   18747 
   18748    Also, some individual systems have been obsoleted:
   18749      * Alpha
   18750           + Interix, alpha*-*-interix*
   18751           + Linux libc1, alpha*-*-linux*libc1*
   18752           + Linux ECOFF, alpha*-*-linux*ecoff*
   18753      * ARM
   18754           + Generic a.out, arm*-*-aout*
   18755           + Conix, arm*-*-conix*
   18756           + "Old ABI," arm*-*-oabi
   18757           + StrongARM/COFF, strongarm-*-coff*
   18758      * HPPA (PA-RISC)
   18759           + Generic OSF, hppa1.0-*-osf*
   18760           + Generic BSD, hppa1.0-*-bsd*
   18761           + HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
   18762           + HiUX, hppa*-*-hiux*
   18763           + Mach Lites, hppa*-*-lites*
   18764      * Intel 386 family
   18765           + Windows NT 3.x, i?86-*-win32
   18766      * MC68000 family
   18767           + HP systems, m68000-hp-bsd* and m68k-hp-bsd*
   18768           + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and
   18769             m68k-sun-mach*
   18770           + AT&T systems, m68000-att-sysv*
   18771           + Atari systems, m68k-atari-sysv*
   18772           + Motorola systems, m68k-motorola-sysv*
   18773           + NCR systems, m68k-ncr-sysv*
   18774           + Plexus systems, m68k-plexus-sysv*
   18775           + Commodore systems, m68k-cbm-sysv*
   18776           + Citicorp TTI, m68k-tti-*
   18777           + Unos, m68k-crds-unos*
   18778           + Concurrent RTU, m68k-ccur-rtu*
   18779           + Linux a.out, m68k-*-linux*aout*
   18780           + Linux libc1, m68k-*-linux*libc1*
   18781           + pSOS, m68k-*-psos*
   18782      * MIPS
   18783           + Generic ECOFF, mips*-*-ecoff*
   18784           + SINIX, mips-sni-sysv4
   18785           + Orion RTEMS, mips64orion-*-rtems*
   18786      * National Semiconductor 32000
   18787           + OpenBSD, ns32k-*-openbsd*
   18788      * POWER (aka RS/6000) and PowerPC
   18789           + AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
   18790           + Bull BOSX, rs6000-bull-bosx
   18791           + Generic Mach, rs6000-*-mach*
   18792           + Generic SysV, powerpc*-*-sysv*
   18793           + Linux libc1, powerpc*-*-linux*libc1*
   18794      * Sun SPARC
   18795           + Generic a.out, sparc-*-aout*, sparclet-*-aout*,
   18796             sparclite-*-aout*, and sparc86x-*-aout*
   18797           + NetBSD a.out, sparc-*-netbsd*aout*
   18798           + Generic BSD, sparc-*-bsd*
   18799           + ChorusOS, sparc-*-chorusos*
   18800           + Linux a.out, sparc-*-linux*aout*
   18801           + Linux libc1, sparc-*-linux*libc1*
   18802           + LynxOS, sparc-*-lynxos*
   18803           + Solaris on HAL hardware, sparc-hal-solaris2*
   18804           + SunOS versions 3 and 4, sparc-*-sunos[34]*
   18805      * NEC V850
   18806           + RTEMS, v850-*-rtems*
   18807      * VAX
   18808           + VMS, vax-*-vms*
   18809 
   18810 Documentation improvements
   18811 
   18812 Other significant improvements
   18813 
   18814      * Almost all front-end dependencies in the compiler have been
   18815        separated out into a set of language hooks. This should make adding
   18816        a new front end clearer and easier.
   18817      * One effect of removing the separate preprocessor is a small
   18818        increase in the robustness of the compiler in general, and the
   18819        maintainability of target descriptions. Previously target-specific
   18820        built-in macros and others, such as __FAST_MATH__, had to be
   18821        handled with so-called specs that were hard to maintain. Often they
   18822        would fail to behave properly when conflicting options were
   18823        supplied on the command line, and define macros in the user's
   18824        namespace even when strict ISO compliance was requested.
   18825        Integrating the preprocessor has cleanly solved these issues.
   18826      * The Makefile suite now supports redirection of make install by
   18827        means of the variable DESTDIR.
   18828      __________________________________________________________________
   18829 
   18830 GCC 3.3
   18831 
   18832    Detailed release notes for the GCC 3.3 release follow.
   18833 
   18834   Bug Fixes
   18835 
   18836     bootstrap failures
   18837 
   18838      * [9]10140 cross compiler build failures: missing __mempcpy (DUP:
   18839        [10]10198,[11]10338)
   18840 
   18841     Internal compiler errors (multi-platform)
   18842 
   18843      * [12]3581 large string causes segmentation fault in cc1
   18844      * [13]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
   18845      * [14]5533 (c++) ICE when processing std::accumulate(begin, end,
   18846        init, invalid_op)
   18847      * [15]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
   18848      * [16]6412 (c++) ICE in retrieve_specialization
   18849      * [17]6620 (c++) partial template specialization causes an ICE
   18850        (segmentation fault)
   18851      * [18]6663 (c++) ICE with attribute aligned
   18852      * [19]7068 ICE with incomplete types
   18853      * [20]7083 (c++) ICE using -gstabs with dodgy class derivation
   18854      * [21]7647 (c++) ICE when data member has the name of the enclosing
   18855        class
   18856      * [22]7675 ICE in fixup_var_refs_1
   18857      * [23]7718 'complex' template instantiation causes ICE
   18858      * [24]8116 (c++) ICE in member template function
   18859      * [25]8358 (ada) Ada compiler accesses freed memory, crashes
   18860      * [26]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
   18861        fault
   18862      * [27]8564 (c++) ICE in find_function_data, in function.c
   18863      * [28]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
   18864      * [29]8766 (c++) ICE after failed initialization of static template
   18865        variable
   18866      * [30]8803 ICE in instantiate_virtual_regs_1, in function.c
   18867      * [31]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
   18868      * [32]8906 (c++) ICE (Segmentation fault) when parsing nested-class
   18869        definition
   18870      * [33]9216 (c++) ICE on missing template parameter
   18871      * [34]9261 (c++) ICE in arg_assoc, in cp/decl2.c
   18872      * [35]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
   18873        loop
   18874      * [36]9429 (c++) ICE in template instantiation with a pointered new
   18875        operator
   18876      * [37]9516 Internal error when using a big array
   18877      * [38]9600 (c++) ICE with typedefs in template class
   18878      * [39]9629 (c++) virtual inheritance segfault
   18879      * [40]9672 (c++) ICE: Error reporting routines re-entered
   18880      * [41]9749 (c++) ICE in write_expression on invalid function
   18881        prototype
   18882      * [42]9794 (fortran) ICE: floating point exception during constant
   18883        folding
   18884      * [43]9829 (c++) Missing colon in nested namespace usage causes ICE
   18885      * [44]9916 (c++) ICE with noreturn function in ?: statement
   18886      * [45]9936 ICE with local function and variable-length 2d array
   18887      * [46]10262 (c++) cc1plus crashes with large generated code
   18888      * [47]10278 (c++) ICE in parser for invalid code
   18889      * [48]10446 (c++) ICE on definition of nonexistent member function of
   18890        nested class in a class template
   18891      * [49]10451 (c++) ICE in grokdeclarator on spurious mutable
   18892        declaration
   18893      * [50]10506 (c++) ICE in build_new at cp/init.c with
   18894        -fkeep-inline-functions and multiple inheritance
   18895      * [51]10549 (c++) ICE in store_bit_field on bitfields that exceed the
   18896        precision of the declared type
   18897 
   18898     Optimization bugs
   18899 
   18900      * [52]2001 Inordinately long compile times in reload CSE regs
   18901      * [53]2391 Exponential compilation time explosion in combine
   18902      * [54]2960 Duplicate loop conditions even with -Os
   18903      * [55]4046 redundant conditional branch
   18904      * [56]6405 Loop-unrolling related performance regressions
   18905      * [57]6798 very long compile time with large case-statement
   18906      * [58]6871 const objects shouldn't be moved to .bss
   18907      * [59]6909 problem w/ -Os on modified loop-2c.c test case
   18908      * [60]7189 gcc -O2 -Wall does not print ``control reaches end of
   18909        non-void function'' warning
   18910      * [61]7642 optimization problem with signbit()
   18911      * [62]8634 incorrect code for inlining of memcpy under -O2
   18912      * [63]8750 Cygwin prolog generation erroneously emitting __alloca as
   18913        regular function call
   18914 
   18915     C front end
   18916 
   18917      * [64]2161 long if-else cascade overflows parser stack
   18918      * [65]4319 short accepted on typedef'd char
   18919      * [66]8602 incorrect line numbers in warning messages when using
   18920        inline functions
   18921      * [67]9177 -fdump-translation-unit: C front end deletes function_decl
   18922        AST nodes and breaks debugging dumps
   18923      * [68]9853 miscompilation of non-constant structure initializer
   18924 
   18925     c++ compiler and library
   18926 
   18927      * [69]45 legal template specialization code is rejected (DUP:
   18928        [70]3784)
   18929      * [71]764 lookup failure: friend operator and dereferencing a pointer
   18930        and templates (DUP: [72]5116)
   18931      * [73]2862 gcc accepts invalid explicit instantiation syntax (DUP:
   18932        2863)
   18933      * [74]3663 G++ doesn't check access control during template
   18934        instantiation
   18935      * [75]3797 gcc fails to emit explicit specialization of a template
   18936        member
   18937      * [76]3948 Two destructors are called when no copy destructor is
   18938        defined (ABI change)
   18939      * [77]4137 Conversion operator within template is not accepted
   18940      * [78]4361 bogus ambiguity taking the address of a member template
   18941      * [79]4802 g++ accepts illegal template code (access to private
   18942        member; DUP: [80]5837)
   18943      * [81]4803 inline function is used but never defined, and g++ does
   18944        not object
   18945      * [82]5094 Partial specialization cannot be friend?
   18946      * [83]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
   18947      * [84]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
   18948        time
   18949      * [85]7015 certain __asm__ constructs rejected
   18950      * [86]7086 compile time regression (quadratic behavior in
   18951        fixup_var_refs)
   18952      * [87]7099 G++ doesn't set the noreturn attribute on std::exit and
   18953        std::abort
   18954      * [88]7247 copy constructor missing when inlining enabled (invalid
   18955        optimization?)
   18956      * [89]7441 string array initialization compilation time regression
   18957        from seconds to minutes
   18958      * [90]7768 __PRETTY_FUNCTION__ for template destructor is wrong
   18959      * [91]7804 bad printing of floating point constant in warning message
   18960      * [92]8099 Friend classes and template specializations
   18961      * [93]8117 member function pointers and multiple inheritance
   18962      * [94]8205 using declaration and multiple inheritance
   18963      * [95]8645 unnecessary non-zero checks in stl_tree.h
   18964      * [96]8724 explicit destructor call for incomplete class allowed
   18965      * [97]8805 compile time regression with many member variables
   18966      * [98]8691 -O3 and -fno-implicit-templates are incompatible
   18967      * [99]8700 unhelpful error message for binding temp to reference
   18968      * [100]8724 explicit destructor call for incomplete class allowed
   18969      * [101]8949 numeric_limits<>::denorm_min() and is_iec559 problems
   18970      * [102]9016 Failure to consistently constant fold "constant" C++
   18971        objects
   18972      * [103]9053 g++ confused about ambiguity of overloaded function
   18973        templates
   18974      * [104]9152 undefined virtual thunks
   18975      * [105]9182 basic_filebuf<> does not report errors in codecvt<>::out
   18976      * [106]9297 data corruption due to codegen bug (when copying.)
   18977      * [107]9318 i/ostream::operator>>/<<(streambuf*) broken
   18978      * [108]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
   18979      * [109]9400 bogus -Wshadow warning: shadowed declaration of this in
   18980        local classes
   18981      * [110]9424 i/ostream::operator>>/<<(streambuf*) drops characters
   18982      * [111]9425 filebuf::pbackfail broken (DUP: [112]9439)
   18983      * [113]9474 GCC freezes in compiling a weird code mixing <iostream>
   18984        and <iostream.h>
   18985      * [114]9548 Incorrect results from setf(ios::fixed) and precision(-1)
   18986        [115][DR 231]
   18987      * [116]9555 ostream inserters fail to set badbit on exception
   18988      * [117]9561 ostream inserters rethrow exception of wrong type
   18989      * [118]9563 ostream::sentry returns true after a failed preparation
   18990      * [119]9582 one-definition rule violation in std::allocator
   18991      * [120]9622 __PRETTY_FUNCTION__ incorrect in template destructors
   18992      * [121]9683 bug in initialization chains for static const variables
   18993        from template classes
   18994      * [122]9791 -Woverloaded-virtual reports hiding of destructor
   18995      * [123]9817 collate::compare doesn't handle nul characters
   18996      * [124]9825 filebuf::sputbackc breaks sbumpc
   18997      * [125]9826 operator>>(basic_istream, basic_string) fails to compile
   18998        with custom traits
   18999      * [126]9924 Multiple using statements for builtin functions not
   19000        allowed
   19001      * [127]9946 destructor is not called for temporary object
   19002      * [128]9964 filebuf::close() sometimes fails to close file
   19003      * [129]9988 filebuf::overflow writes EOF to file
   19004      * [130]10033 optimization breaks polymorphic references w/ typeid
   19005        operator
   19006      * [131]10097 filebuf::underflow drops characters
   19007      * [132]10132 filebuf destructor can throw exceptions
   19008      * [133]10180 gcc fails to warn about non-inlined function
   19009      * [134]10199 method parametrized by template does not work everywhere
   19010      * [135]10300 use of array-new (nothrow) in segfaults on NULL return
   19011      * [136]10427 Stack corruption with variable-length automatic arrays
   19012        and virtual destructors
   19013      * [137]10503 Compilation never stops in fixed_type_or_null
   19014 
   19015     Objective-C
   19016 
   19017      * [138]5956 selectors aren't matched properly when added to the
   19018        selector table
   19019 
   19020     Fortran compiler and library
   19021 
   19022      * [139]1832 list directed i/o overflow hangs, -fbounds-check doesn't
   19023        detect
   19024      * [140]3924 g77 generates code that is rejected by GAS if COFF debug
   19025        info requested
   19026      * [141]5634 doc: explain that configure --prefix=~/... does not work
   19027      * [142]6367 multiple repeat counts confuse namelist read into array
   19028      * [143]6491 Logical operations error on logicals when using
   19029        -fugly-logint
   19030      * [144]6742 Generation of C++ Prototype for FORTRAN and extern "C"
   19031      * [145]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
   19032        on irix6.5
   19033      * [146]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
   19034        assume a direct access file
   19035      * [147]7278 g77 "bug"; the executable misbehaves (with -O2
   19036        -fno-automatic)
   19037      * [148]7384 DATE_AND_TIME milliseconds field inactive on Windows
   19038      * [149]7388 Incorrect output with 0-based array of characters
   19039      * [150]8587 Double complex zero ** double precision number -> NaN
   19040        instead of zero
   19041      * [151]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
   19042        unknown register name line-length-none
   19043      * [152]10197 Direct access files not unformatted by default
   19044 
   19045     Java compiler and library
   19046 
   19047      * [153]6005 gcj fails to build rhug on alpha
   19048      * [154]6389 System.getProperty("") should always throw an
   19049        IllegalArgumentException
   19050      * [155]6576 java.util.ResourceBundle.getResource ignores locale
   19051      * [156]6652 new java.io.File("").getCanonicalFile() throws exception
   19052      * [157]7060 getMethod() doesn't search super interface
   19053      * [158]7073 bytecode interpreter gives wrong answer for interface
   19054        getSuperclass()
   19055      * [159]7180 possible bug in
   19056        javax.naming.spi.NamingManager.getPlusPath()
   19057      * [160]7416 java.security startup refs "GNU libgcj.security"
   19058      * [161]7570 Runtime.exec with null envp: child doesn't inherit parent
   19059        env (DUP: [162]7578)
   19060      * [163]7611 Internal error while compiling libjava with -O
   19061      * [164]7709 NullPointerException in _Jv_ResolvePoolEntry
   19062      * [165]7766 ZipInputStream.available returns 0 immediately after
   19063        construction
   19064      * [166]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
   19065      * [167]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
   19066      * [168]8142 '$' in class names vs. dlopen 'dynamic string tokens'
   19067      * [169]8234 ZipInputStream chokes when InputStream.read() returns
   19068        small chunks
   19069      * [170]8415 reflection bug: exception info for Method
   19070      * [171]8481 java.Random.nextInt(int) may return negative
   19071      * [172]8593 Error reading GZIPped files with BufferedReader
   19072      * [173]8759 java.beans.Introspector has no flushCaches() or
   19073        flushFromCaches() methods
   19074      * [174]8997 spin() calls Thread.sleep
   19075      * [175]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
   19076        instead of the root content of C:
   19077      * [176]9254 java::lang::Object::wait(), threads-win32.cc returns
   19078        wrong return codes
   19079      * [177]9271 Severe bias in java.security.SecureRandom
   19080 
   19081     Ada compiler and library
   19082 
   19083      * [178]6767 make gnatlib-shared fails on -laddr2line
   19084      * [179]9911 gnatmake fails to link when GCC configured with
   19085        --with-sjlj-exceptions=yes
   19086      * [180]10020 Can't bootstrap gcc on AIX with Ada enabled
   19087      * [181]10546 Ada tasking not working on Red Hat 9
   19088 
   19089     preprocessor
   19090 
   19091      * [182]7029 preprocessor should ignore #warning with -M
   19092 
   19093     ARM-specific
   19094 
   19095      * [183]2903 [arm] Optimization bug with long long arithmetic
   19096      * [184]7873 arm-linux-gcc fails when assigning address to a bit field
   19097 
   19098     FreeBSD-specific
   19099 
   19100      * [185]7680 float functions undefined in math.h/cmath with #define
   19101        _XOPEN_SOURCE
   19102 
   19103     HP-UX or HP-PA-specific
   19104 
   19105      * [186]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
   19106      * [187]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
   19107        fputc_unlocked
   19108      * [188]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
   19109 
   19110     m68hc11-specific
   19111 
   19112      * [189]6744 Bad assembler code generated: reference to pseudo
   19113        register z
   19114      * [190]7361 Internal compiler error in reload_cse_simplify_operands,
   19115        in reload1.c
   19116 
   19117     MIPS-specific
   19118 
   19119      * [191]9496 [mips-linux] bug in optimizer?
   19120 
   19121     PowerPC-specific
   19122 
   19123      * [192]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
   19124        space
   19125      * [193]8480 reload ICEs for LAPACK code on powerpc64-linux
   19126      * [194]8784 [AIX] Internal compiler error in simplify_gen_subreg
   19127      * [195]10315 [powerpc] ICE: in extract_insn, in recog.c
   19128 
   19129     SPARC-specific
   19130 
   19131      * [196]10267 (documentation) Wrong build instructions for
   19132        *-*-solaris2*
   19133 
   19134     x86-specific (Intel/AMD)
   19135 
   19136      * [197]7916 ICE in instantiate_virtual_register_1
   19137      * [198]7926 (c++) i486 instructions in header files make c++ programs
   19138        crash on i386
   19139      * [199]8555 ICE in gen_split_1231
   19140      * [200]8994 ICE with -O -march=pentium4
   19141      * [201]9426 ICE with -fssa -funroll-loops -fprofile-arcs
   19142      * [202]9806 ICE in inline assembly with -fPIC flag
   19143      * [203]10077 gcc -msse2 generates movd to move dwords between xmm
   19144        regs
   19145      * [204]10233 64-bit comparison only comparing bottom 32-bits
   19146      * [205]10286 type-punning doesn't work with __m64 and -O
   19147      * [206]10308 [x86] ICE with -O -fgcse or -O2
   19148      __________________________________________________________________
   19149 
   19150 [207]GCC 3.3.1
   19151 
   19152   Bug Fixes
   19153 
   19154    This section lists the problem reports (PRs) from GCC's bug tracking
   19155    system that are known to be fixed in the 3.3.1 release. This list might
   19156    not be complete (that is, it is possible that some PRs that have been
   19157    fixed are not listed here).
   19158 
   19159     Bootstrap failures
   19160 
   19161      * [208]11272 [Solaris] make bootstrap fails while building libstdc++
   19162 
   19163     Internal compiler errors (multi-platform)
   19164 
   19165      * [209]5754 ICE on invalid nested template class
   19166      * [210]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
   19167        and --enable-checking
   19168      * [211]6949 (c++) ICE in tsubst_decl, in cp/pt.c
   19169      * [212]7053 (c++) ICE when declaring a function already defined as a
   19170        friend method of a template class
   19171      * [213]8164 (c++) ICE when using different const expressions as
   19172        template parameter
   19173      * [214]8384 (c++) ICE in is_base_type, in dwarf2out.c
   19174      * [215]9559 (c++) ICE with invalid initialization of a static const
   19175      * [216]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
   19176        when redeclaring a static member variable
   19177      * [217]9864 (fortran) ICE in add_abstract_origin_attribute, in
   19178        dwarfout.c with -g -O -finline-functions
   19179      * [218]10432 (c++) ICE in poplevel, in cp/decl.c
   19180      * [219]10475 ICE in subreg_highpart_offset for code with long long
   19181      * [220]10635 (c++) ICE when dereferencing an incomplete type casted
   19182        from a void pointer
   19183      * [221]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
   19184        instantiating static member variables
   19185      * [222]10700 ICE in copy_to_mode_reg on 64-bit targets
   19186      * [223]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
   19187      * [224]10796 (c++) ICE when defining an enum with two values: -1 and
   19188        MAX_INT_64BIT
   19189      * [225]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
   19190        sched.c
   19191      * [226]10939 (c++) ICE with template code
   19192      * [227]10956 (c++) ICE when specializing a template member function
   19193        of a template class, in tsubst, in cp/pt.c
   19194      * [228]11041 (c++) ICE: const myclass &x = *x; (when operator*()
   19195        defined)
   19196      * [229]11059 (c++) ICE with empty union
   19197      * [230]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
   19198        -O2 -fnon-call-exceptions
   19199      * [231]11105 (c++) ICE in mangle_conv_op_name_for_type
   19200      * [232]11149 (c++) ICE on error when instantiation with call function
   19201        of a base type
   19202      * [233]11228 (c++) ICE on new-expression using array operator new and
   19203        default-initialization
   19204      * [234]11282 (c++) Infinite memory usage after syntax error
   19205      * [235]11301 (fortran) ICE with -fno-globals
   19206      * [236]11308 (c++) ICE when using an enum type name as if it were a
   19207        class or namespace
   19208      * [237]11473 (c++) ICE with -gstabs when empty struct inherits from
   19209        an empty struct
   19210      * [238]11503 (c++) ICE when instantiating template with ADDR_EXPR
   19211      * [239]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
   19212        template member functions
   19213 
   19214     Optimization bugs
   19215 
   19216      * [240]11198 -O2 -frename-registers generates wrong code (aliasing
   19217        problem)
   19218      * [241]11304 Wrong code production with -fomit-frame-pointer
   19219      * [242]11381 volatile memory access optimized away
   19220      * [243]11536 [strength-reduce] -O2 optimization produces wrong code
   19221      * [244]11557 constant folding bug generates wrong code
   19222 
   19223     C front end
   19224 
   19225      * [245]5897 No warning for statement after return
   19226      * [246]11279 DWARF-2 output mishandles large enums
   19227 
   19228     Preprocessor bugs
   19229 
   19230      * [247]11022 no warning for non-compatible macro redefinition
   19231 
   19232     C++ compiler and library
   19233 
   19234      * [248]2330 static_cast<>() to a private base is allowed
   19235      * [249]5388 Incorrect message "operands to ?: have different types"
   19236      * [250]5390 Libiberty fails to demangle multi-digit template
   19237        parameters
   19238      * [251]7877 Incorrect parameter passing to specializations of member
   19239        function templates
   19240      * [252]9393 Anonymous namespaces and compiling the same file twice
   19241      * [253]10032 -pedantic converts some errors to warnings
   19242      * [254]10468 const typeof(x) is non-const, but only in templates
   19243      * [255]10527 confused error message with "new int()" parameter
   19244        initializer
   19245      * [256]10679 parameter MIN_INLINE_INSNS is not honored
   19246      * [257]10682 gcc chokes on a typedef for an enum inside a class
   19247        template
   19248      * [258]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
   19249        0.
   19250      * [259]10845 template member function (with nested template as
   19251        parameter) cannot be called anymore if another unrelated template
   19252        member function is defined
   19253      * [260]10849 Cannot define an out-of-class specialization of a
   19254        private nested template class
   19255      * [261]10888 Suppress -Winline warnings for system headers
   19256      * [262]10929 -Winline warns about functions for which no definition
   19257        is visible
   19258      * [263]10931 valid conversion static_cast<const unsigned
   19259        int&>(lvalue-of-type-int) is rejected
   19260      * [264]10940 Bad code with explicit specialization
   19261      * [265]10968 If member function implicitly instantiated, explicit
   19262        instantiation of class fails to instantiate it
   19263      * [266]10990 Cannot convert with dynamic_cast<> to a private base
   19264        class from within a member function
   19265      * [267]11039 Bad interaction between implicit typename deprecation
   19266        and friendship
   19267      * [268]11062 (libstdc++) avoid __attribute__ ((unused)); say
   19268        "__unused__" instead
   19269      * [269]11095 C++ iostream manipulator causes segfault when called
   19270        with negative argument
   19271      * [270]11098 g++ doesn't emit complete debugging information for
   19272        local variables in destructors
   19273      * [271]11137 GNU/Linux shared library constructors not called unless
   19274        there's one global object
   19275      * [272]11154 spurious ambiguity report for template class
   19276        specialization
   19277      * [273]11329 Compiler cannot find user defined implicit typecast
   19278      * [274]11332 Spurious error with casts in ?: expression
   19279      * [275]11431 static_cast behavior with subclasses when default
   19280        constructor available
   19281      * [276]11528 money_get facet does not accept "$.00" as valid
   19282      * [277]11546 Type lookup problems in out-of-line definition of a
   19283        class doubly nested from a template class
   19284      * [278]11567 C++ code containing templated member function with same
   19285        name as pure virtual member function results in linking failure
   19286      * [279]11645 Failure to deal with using and private inheritance
   19287 
   19288     Java compiler and library
   19289 
   19290      * [280]5179 Qualified static field access doesn't initialize its
   19291        class
   19292      * [281]8204 gcj -O2 to native reorders certain instructions
   19293        improperly
   19294      * [282]10838 java.io.ObjectInputStream syntax error
   19295      * [283]10886 The RMI registry that comes with GCJ does not work
   19296        correctly
   19297      * [284]11349 JNDI URL context factories not located correctly
   19298 
   19299     x86-specific (Intel/AMD)
   19300 
   19301      * [285]4823 ICE on inline assembly code
   19302      * [286]8878 miscompilation with -O and SSE
   19303      * [287]9815 (c++ library) atomicity.h - fails to compile with -O3
   19304        -masm=intel
   19305      * [288]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
   19306        in reload1.c
   19307      * [289]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
   19308      * [290]10673 ICE for x86-64 on freebsd libc vfprintf.c source
   19309      * [291]11044 [x86] out of range loop instructions for FP code on K6
   19310      * [292]11089 ICE: instantiate_virtual_regs_lossage while using SSE
   19311        built-ins
   19312      * [293]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
   19313        is used
   19314 
   19315     SPARC- or Solaris- specific
   19316 
   19317      * [294]9362 solaris 'as' dies when fed .s and "-gstabs"
   19318      * [295]10142 [SPARC64] gcc produces wrong code when passing
   19319        structures by value
   19320      * [296]10663 New configure check aborts with Sun tools.
   19321      * [297]10835 combinatorial explosion in scheduler on HyperSPARC
   19322      * [298]10876 ICE in calculate_giv_inc when building KDE
   19323      * [299]10955 wrong code at -O3 for structure argument in context of
   19324        structure return
   19325      * [300]11018 -mcpu=ultrasparc busts tar-1.13.25
   19326      * [301]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
   19327        Linux kernel
   19328 
   19329     ia64 specific
   19330 
   19331      * [302]10907 gcc violates the ia64 ABI (GP must be preserved)
   19332      * [303]11320 scheduler bug (in machine depended reorganization pass)
   19333      * [304]11599 bug with conditional and __builtin_prefetch
   19334 
   19335     PowerPC specific
   19336 
   19337      * [305]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
   19338        during loop)
   19339      * [306]10871 error in rs6000_stack_info save_size computation
   19340      * [307]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
   19341        cures it
   19342 
   19343     m68k-specific
   19344 
   19345      * [308]7594 [m68k] ICE on legal code associated with simplify-rtx
   19346      * [309]10557 [m68k] ICE in subreg_offset_representable_p
   19347      * [310]11054 [m68k] ICE in reg_overlap_mentioned_p
   19348 
   19349     ARM-specific
   19350 
   19351      * [311]10834 [arm] GCC 3.3 still generates incorrect instructions for
   19352        functions with __attribute__ ((interrupt ("IRQ")))
   19353      * [312]10842 [arm] Clobbered link register is copied to pc under
   19354        certain circumstances
   19355      * [313]11052 [arm] noce_process_if_block() can lose REG_INC notes
   19356      * [314]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
   19357        (3.4)
   19358 
   19359     MIPS-specific
   19360 
   19361      * [315]11084 ICE in propagate_one_insn, in flow.c
   19362 
   19363     SH-specific
   19364 
   19365      * [316]10331 can't compile c++ part of gcc cross compiler for sh-elf
   19366      * [317]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
   19367      * [318]11096 i686-linux to sh-linux cross compiler fails to compile
   19368        C++ files
   19369 
   19370     GNU/Linux (or Hurd?) specific
   19371 
   19372      * [319]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
   19373 
   19374     UnixWare specific
   19375 
   19376      * [320]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
   19377        7.1.1
   19378 
   19379     Cygwin (or mingw) specific
   19380 
   19381      * [321]5287 ICE with dllimport attribute
   19382      * [322]10148 [MingW/CygWin] Compiler dumps core
   19383 
   19384     DJGPP specific
   19385 
   19386      * [323]8787 GCC fails to emit .intel_syntax when invoked with
   19387        -masm=intel on DJGPP
   19388 
   19389     Darwin (and MacOS X) specific
   19390 
   19391      * [324]10900 trampolines crash
   19392 
   19393     Documentation
   19394 
   19395      * [325]1607 (c++) Format attributes on methods undocumented
   19396      * [326]4252 Invalid option `-fdump-translation-unit'
   19397      * [327]4490 Clarify restrictions on -m96bit-long-double,
   19398        -m128bit-long-double
   19399      * [328]10355 document an issue with regparm attribute on some systems
   19400        (e.g. Solaris)
   19401      * [329]10726 (fortran) Documentation for function "IDate Intrinsic
   19402        (Unix)" is wrong
   19403      * [330]10805 document bug in old version of Sun assembler
   19404      * [331]10815 warn against GNU binutils on AIX
   19405      * [332]10877 document need for newer binutils on i?86-*-linux-gnu
   19406      * [333]11280 Manual incorrect with respect to -freorder-blocks
   19407      * [334]11466 Document -mlittle-endian and its restrictions for the
   19408        sparc64 port
   19409 
   19410     Testsuite bugs (compiler itself is not affected)
   19411 
   19412      * [335]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
   19413        report failure
   19414      * [336]10810 gcc-3.3 fails make check: buffer overrun in
   19415        test_demangle.c
   19416      __________________________________________________________________
   19417 
   19418 [337]GCC 3.3.2
   19419 
   19420   Bug Fixes
   19421 
   19422    This section lists the problem reports (PRs) from GCC's bug tracker
   19423    that are known to be fixed in the 3.3.2 release. This list might not be
   19424    complete (that is, it is possible that some PRs that have been fixed
   19425    are not listed here).
   19426 
   19427     Bootstrap failures and problems
   19428 
   19429      * [338]8336 [SCO5] bootstrap config still tries to use COFF options
   19430      * [339]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
   19431        --enable-threads=posix
   19432      * [340]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
   19433      * [341]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
   19434        7.1.1)
   19435      * [342]11687 xstormy16-elf build fails in libf2c
   19436      * [343]12263 [SGI IRIX] bootstrap fails during compile of
   19437        libf2c/libI77/backspace.c
   19438      * [344]12490 buffer overflow in scan-decls.c (during Solaris 9
   19439        fix-header processing)
   19440 
   19441     Internal compiler errors (multi-platform)
   19442 
   19443      * [345]7277 Casting integers to vector types causes ICE
   19444      * [346]7939 (c++) ICE on invalid function template specialization
   19445      * [347]11063 (c++) ICE on parsing initialization list of const array
   19446        member
   19447      * [348]11207 ICE with negative index in array element designator
   19448      * [349]11522 (fortran) g77 dwarf-2 ICE in
   19449        add_abstract_origin_attribute
   19450      * [350]11595 (c++) ICE on duplicate label definition
   19451      * [351]11646 (c++) ICE in commit_one_edge_insertion with
   19452        -fnon-call-exceptions -fgcse -O
   19453      * [352]11665 ICE in struct initializer when taking address
   19454      * [353]11852 (c++) ICE with bad struct initializer.
   19455      * [354]11878 (c++) ICE in cp_expr_size
   19456      * [355]11883 ICE with any -O on mercury-generated C code
   19457      * [356]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
   19458        cp/typeck2.c when applying typeid operator to template template
   19459        parameter
   19460      * [357]12146 ICE in lookup_template_function, in cp/pt.c
   19461      * [358]12215 ICE in make_label_edge with -fnon-call-exceptions
   19462        -fno-gcse -O2
   19463      * [359]12369 (c++) ICE with templates and friends
   19464      * [360]12446 ICE in emit_move_insn on complicated array reference
   19465      * [361]12510 ICE in final_scan_insn
   19466      * [362]12544 ICE with large parameters used in nested functions
   19467 
   19468     C and optimization bugs
   19469 
   19470      * [363]9862 spurious warnings with -W -finline-functions
   19471      * [364]10962 lookup_field is a linear search on a linked list (can be
   19472        slow if large struct)
   19473      * [365]11370 -Wunreachable-code gives false complaints
   19474      * [366]11637 invalid assembly with -fnon-call-exceptions
   19475      * [367]11885 Problem with bitfields in packed structs
   19476      * [368]12082 Inappropriate unreachable code warnings
   19477      * [369]12180 Inline optimization fails for variadic function
   19478      * [370]12340 loop unroller + gcse produces wrong code
   19479 
   19480     C++ compiler and library
   19481 
   19482      * [371]3907 nested template parameter collides with member name
   19483      * [372]5293 confusing message when binding a temporary to a reference
   19484      * [373]5296 [DR115] Pointers to functions and to template functions
   19485        behave differently in deduction
   19486      * [374]7939 ICE on function template specialization
   19487      * [375]8656 Unable to assign function with __attribute__ and pointer
   19488        return type to an appropriate variable
   19489      * [376]10147 Confusing error message for invalid template function
   19490        argument
   19491      * [377]11400 std::search_n() makes assumptions about Size parameter
   19492      * [378]11409 issues with using declarations, overloading, and
   19493        built-in functions
   19494      * [379]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
   19495        multiple bits in mask
   19496      * [380]11786 operator() call on variable in other namespace not
   19497        recognized
   19498      * [381]11867 static_cast ignores ambiguity
   19499      * [382]11928 bug with conversion operators that are typedefs
   19500      * [383]12114 Uninitialized memory accessed in dtor
   19501      * [384]12163 static_cast + explicit constructor regression
   19502      * [385]12181 Wrong code with comma operator and c++
   19503      * [386]12236 regparm and fastcall messes up parameters
   19504      * [387]12266 incorrect instantiation of unneeded template during
   19505        overload resolution
   19506      * [388]12296 istream::peek() doesn't set eofbit
   19507      * [389]12298 [sjlj exceptions] Stack unwind destroys
   19508        not-yet-constructed object
   19509      * [390]12369 ICE with templates and friends
   19510      * [391]12337 apparently infinite loop in g++
   19511      * [392]12344 stdcall attribute ignored if function returns a pointer
   19512      * [393]12451 missing(late) class forward declaration in cxxabi.h
   19513      * [394]12486 g++ accepts invalid use of a qualified name
   19514 
   19515     x86 specific (Intel/AMD)
   19516 
   19517      * [395]8869 [x86 MMX] ICE with const variable optimization and MMX
   19518        builtins
   19519      * [396]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
   19520        -O2
   19521      * [397]11689 g++3.3 emits un-assembleable code for k6 architecture
   19522      * [398]12116 [k6] Invalid assembly output values with X-MAME code
   19523      * [399]12070 ICE converting between double and long double with
   19524        -msoft-float
   19525 
   19526     ia64-specific
   19527 
   19528      * [400]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
   19529      * [401]11535 __builtin_return_address may not work on ia64
   19530      * [402]11693 [ia64] ICE in gen_nop_type
   19531      * [403]12224 [ia64] Thread-local storage doesn't work
   19532 
   19533     PowerPC-specific
   19534 
   19535      * [404]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
   19536        kernel
   19537      * [405]11319 loop miscompiled on ppc32
   19538      * [406]11949 ICE Compiler segfault with ffmpeg -maltivec code
   19539 
   19540     SPARC-specific
   19541 
   19542      * [407]11662 wrong code for expr. with cast to long long and
   19543        exclusive or
   19544      * [408]11965 invalid assembler code for a shift < 32 operation
   19545      * [409]12301 (c++) stack corruption when a returned expression throws
   19546        an exception
   19547 
   19548     Alpha-specific
   19549 
   19550      * [410]11717 [alpha-linux] unrecognizable insn compiling for.c of
   19551        kernel 2.4.22-pre8
   19552 
   19553     HPUX-specific
   19554 
   19555      * [411]11313 problem with #pragma weak and static inline functions
   19556      * [412]11712 __STDC_EXT__ not defined for C++ by default anymore?
   19557 
   19558     Solaris specific
   19559 
   19560      * [413]12166 Profiled programs crash if PROFDIR is set
   19561 
   19562     Solaris-x86 specific
   19563 
   19564      * [414]12101 i386 Solaris no longer works with GNU as?
   19565 
   19566     Miscellaneous embedded target-specific bugs
   19567 
   19568      * [415]10988 [m32r-elf] wrong blockmove code with -O3
   19569      * [416]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
   19570        -O2
   19571      * [417]11902 [sh4] spec file improperly inserts rpath even when none
   19572        needed
   19573      * [418]11903 [sh4] -pthread fails to link due to error in spec file
   19574        on sh4
   19575      __________________________________________________________________
   19576 
   19577 [419]GCC 3.3.3
   19578 
   19579   Minor features
   19580 
   19581    In addition to the bug fixes documented below, this release contains
   19582    few minor features such as:
   19583      * Support for --with-sysroot
   19584      * Support for automatic detection of executable stacks
   19585      * Support for SSE3 instructions
   19586      * Support for thread local storage debugging under GDB on S390
   19587 
   19588   Bug Fixes
   19589 
   19590    This section lists the problem reports (PRs) from GCC's bug tracker
   19591    that are known to be fixed in the 3.3.3 release. This list might not be
   19592    complete (that is, it is possible that some PRs that have been fixed
   19593    are not listed here).
   19594 
   19595     Bootstrap failures and issues
   19596 
   19597      * [420]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
   19598      * [421]12399 boehm-gc fails (when building a cross compiler): libtool
   19599        unable to infer tagged configuration
   19600      * [422]13068 mklibgcc.in doesn't handle multi-level multilib
   19601        subdirectories properly
   19602 
   19603     Internal compiler errors (multi-platform)
   19604 
   19605      * [423]10060 ICE (stack overflow) on huge file (300k lines) due to
   19606        recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
   19607      * [424]10555 (c++) ICE on undefined template argument
   19608      * [425]10706 (c++) ICE in mangle_class_name_for_template
   19609      * [426]11496 (fortran) error in flow_loops_find when -funroll-loops
   19610        active
   19611      * [427]11741 ICE in pre_insert_copy_insn, in gcse.c
   19612      * [428]12440 GCC crashes during compilation of quicktime4linux 2.0.0
   19613      * [429]12632 (fortran) -fbounds-check ICE
   19614      * [430]12712 (c++) ICE on short legit C++ code fragment with gcc
   19615        3.3.2
   19616      * [431]12726 (c++) ICE (segfault) on trivial code
   19617      * [432]12890 (c++) ICE on compilation of class with throwing method
   19618      * [433]12900 (c++) ICE in rtl_verify_flow_info_1
   19619      * [434]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
   19620        correct code with -O2 -fno-force-mem
   19621      * [435]13289 (c++) ICE in regenerate_decl_from_template on recursive
   19622        template
   19623      * [436]13318 ICE: floating point exception in the loop optimizer
   19624      * [437]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
   19625        except.c
   19626      * [438]13574 (c++) invalid array default initializer in class lets
   19627        gcc consume all memory and die
   19628      * [439]13475 ICE on SIMD variables with partial value initialization
   19629      * [440]13797 (c++) ICE on invalid template parameter
   19630      * [441]13824 (java) gcj SEGV with simple .java program
   19631 
   19632     C and optimization bugs
   19633 
   19634      * [442]8776 loop invariants are not removed (most likely)
   19635      * [443]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
   19636        strncmp by memcmp
   19637      * [444]11350 undefined labels with -Os -fPIC
   19638      * [445]12826 Optimizer removes reference through volatile pointer
   19639      * [446]12500 stabs debug info: void no longer a predefined / builtin
   19640        type
   19641      * [447]12941 builtin-bitops-1.c miscompilation (latent bug)
   19642      * [448]12953 tree inliner bug (in inline_forbidden_p) and fix
   19643      * [449]13041 linux-2.6/sound/core/oss/rate.c miscompiled
   19644      * [450]13507 spurious printf format warning
   19645      * [451]13382 Type information for const pointer disappears during
   19646        optimization.
   19647      * [452]13394 noreturn attribute ignored on recursive invokation
   19648      * [453]13400 Compiled code crashes storing to read-only location
   19649      * [454]13521 Endless loop in calculate_global_regs_live
   19650 
   19651     C++ compiler and library
   19652 
   19653    Some of the bug fixes in this list were made to implement decisions
   19654    that the ISO C++ standards committee has made concerning several defect
   19655    reports (DRs). Links in the list below point to detailed discussion of
   19656    the relevant defect report.
   19657      * [455]2094 unimplemented: use of `ptrmem_cst' in template type
   19658        unification
   19659      * [456]2294 using declaration confusion
   19660      * [457]5050 template instantiation depth exceeds limit: recursion
   19661        problem?
   19662      * [458]9371 Bad exception handling in
   19663        i/ostream::operator>>/<<(streambuf*)
   19664      * [459]9546 bad exception handling in ostream members
   19665      * [460]10081 basic_ios::_M_cache_locale leaves NULL members in the
   19666        face of unknown locales
   19667      * [461]10093 [462][DR 61] Setting failbit in exceptions doesn't work
   19668      * [463]10095 istream::operator>>(int&) sets ios::badbit when
   19669        ios::failbit is set.
   19670      * [464]11554 Warning about reordering of initializers doesn't mention
   19671        location of constructor
   19672      * [465]12297 istream::sentry::sentry() handles eof() incorrectly.
   19673      * [466]12352 Exception safety problems in src/localename.cc
   19674      * [467]12438 Memory leak in locale::combine()
   19675      * [468]12540 Memory leak in locale::locale(const char*)
   19676      * [469]12594 DRs [470]60 [TC] and [471]63 [TC] not implemented
   19677      * [472]12657 Resolution of [473]DR 292 (WP) still unimplemented
   19678      * [474]12696 memory eating infinite loop in diagnostics (error
   19679        recovery problem)
   19680      * [475]12815 Code compiled with optimization behaves unexpectedly
   19681      * [476]12862 Conflicts between typedefs/enums and namespace member
   19682        declarations
   19683      * [477]12926 Wrong value after assignment in initialize list using
   19684        bit-fields
   19685      * [478]12967 Resolution of [479]DR 300 [WP] still unimplemented
   19686      * [480]12971 Resolution of [481]DR 328 [WP] still unimplemented
   19687      * [482]13007 basic_streambuf::pubimbue, imbue wrong
   19688      * [483]13009 Implicitly-defined assignment operator writes to wrong
   19689        memory
   19690      * [484]13057 regparm attribute not applied to destructor
   19691      * [485]13070 -Wformat option ignored in g++
   19692      * [486]13081 forward template declarations in <complex> let inlining
   19693        fail
   19694      * [487]13239 Assertion does not seem to work correctly anymore
   19695      * [488]13262 "xxx is private within this context" when initializing a
   19696        self-contained template class
   19697      * [489]13290 simple typo in concept checking for std::generate_n
   19698      * [490]13323 Template code does not compile in presence of typedef
   19699      * [491]13369 __verify_grouping (and __add_grouping?) not correct
   19700      * [492]13371 infinite loop with packed struct and inlining
   19701      * [493]13445 Template argument replacement "dereferences" a typedef
   19702      * [494]13461 Fails to access protected-ctor from public constant
   19703      * [495]13462 Non-standard-conforming type set::pointer
   19704      * [496]13478 gcc uses wrong constructor to initialize a const
   19705        reference
   19706      * [497]13544 "conflicting types" for enums in different scopes
   19707      * [498]13650 string::compare should not (always) use
   19708        traits_type::length()
   19709      * [499]13683 bogus warning about passing non-PODs through ellipsis
   19710      * [500]13688 Derived class is denied access to protected base class
   19711        member class
   19712      * [501]13774 Member variable cleared in virtual multiple inheritance
   19713        class
   19714      * [502]13884 Protect sstream.tcc from extern template use
   19715 
   19716     Java compiler and library
   19717 
   19718      * [503]10746 [win32] garbage collection crash in GCJ
   19719 
   19720     Objective-C compiler and library
   19721 
   19722      * [504]11433 Crash due to dereferencing null pointer when querying
   19723        protocol
   19724 
   19725     Fortran compiler and library
   19726 
   19727      * [505]12633 logical expression gives incorrect result with
   19728        -fugly-logint option
   19729      * [506]13037 [gcse-lm] g77 generates incorrect code
   19730      * [507]13213 Hex constant problem when compiling with -fugly-logint
   19731        and -ftypeless-boz
   19732 
   19733     x86-specific (Intel/AMD)
   19734 
   19735      * [508]4490 ICE with -m128bit-long-double
   19736      * [509]12292 [x86_64] ICE: RTL check: expected code `const_int', have
   19737        `reg' in make_field_assignment, in combine.c
   19738      * [510]12441 ICE: can't find a register to spill
   19739      * [511]12943 array static-init failure under -fpic, -fPIC
   19740      * [512]13608 Incorrect code with -O3 -ffast-math
   19741 
   19742     PowerPC-specific
   19743 
   19744      * [513]11598 testcase gcc.dg/20020118-1.c fails runtime check of
   19745        __attribute__((aligned(16)))
   19746      * [514]11793 ICE in extract_insn, in recog.c (const_vector's)
   19747      * [515]12467 vmsumubm emitted when vmsummbm appropriate (typo in
   19748        altivec.md)
   19749      * [516]12537 g++ generates writeable text sections
   19750 
   19751     SPARC-specific
   19752 
   19753      * [517]12496 wrong result for __atomic_add(&value, -1) when using -O0
   19754        -m64
   19755      * [518]12865 mprotect call to make trampoline executable may fail
   19756      * [519]13354 ICE in sparc_emit_set_const32
   19757 
   19758     ARM-specific
   19759 
   19760      * [520]10467 [arm] ICE in pre_insert_copy_insn,
   19761 
   19762     ia64-specific
   19763 
   19764      * [521]11226 ICE passing struct arg with two floats
   19765      * [522]11227 ICE for _Complex float, _Complex long double args
   19766      * [523]12644 GCC 3.3.2 fails to compile glibc on ia64
   19767      * [524]13149 build gcc-3.3.2 1305 error:unrecognizable insn
   19768      * Various fixes for libunwind
   19769 
   19770     Alpha-specific
   19771 
   19772      * [525]12654 Incorrect comparison code generated for Alpha
   19773      * [526]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
   19774      * [527]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
   19775 
   19776     HPPA-specific
   19777 
   19778      * [528]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
   19779      * [529]12158 [hppa] compilation does not terminate at -O1
   19780 
   19781     S390-specific
   19782 
   19783      * [530]11992 Wrong built-in code for memcmp with length 1<<24: only
   19784        (1<<24)-1 possible for CLCL-Instruction
   19785 
   19786     SH-specific
   19787 
   19788      * [531]9365 segfault in gen_far_branch (config/sh/sh.c)
   19789      * [532]10392 optimizer generates faulty array indexing
   19790      * [533]11322 SH profiler outputs multiple definitions of symbol
   19791      * [534]13069 gcc/config/sh/rtems.h broken
   19792      * [535]13302 Putting a va_list in a struct causes seg fault
   19793      * [536]13585 Incorrect optimization of call to sfunc
   19794      * Fix inappropriately exported libgcc functions from the shared
   19795        library
   19796 
   19797     Other embedded target specific
   19798 
   19799      * [537]8916 [mcore] unsigned char assign gets hosed.
   19800      * [538]11576 [h8300] ICE in change_address_1, in emit-rtl.c
   19801      * [539]13122 [h8300] local variable gets corrupted by function call
   19802        when -fomit-frame-pointer is given
   19803      * [540]13256 [cris] strict_low_part mistreated in delay slots
   19804      * [541]13373 [mcore] optimization with -frerun-cse-after-loop
   19805        -fexpensive-optimizations produces wrong code on mcore
   19806 
   19807     GNU HURD-specific
   19808 
   19809      * [542]12561 gcc/config/t-gnu needs updating to work with
   19810        --with-sysroot
   19811 
   19812     Tru64 Unix specific
   19813 
   19814      * [543]6243 testsuite fails almost all tests due to no libintl in
   19815        LD_LIBRARY_PATH during test.
   19816      * [544]11397 weak aliases broken on Tru64 UNIX
   19817 
   19818     AIX-specific
   19819 
   19820      * [545]12505 build failure due to defines of uchar in cpphash.h and
   19821        sys/types.h
   19822      * [546]13150 WEAK symbols not exported by collect2
   19823 
   19824     IRIX-specific
   19825 
   19826      * [547]12666 fixincludes problem on IRIX 6.5.19m
   19827 
   19828     Solaris-specific
   19829 
   19830      * [548]12969 Including sys/byteorder.h breaks configure checks
   19831 
   19832     Testsuite problems (compiler is not affected)
   19833 
   19834      * [549]10819 testsuite creates CR+LF on compiler version lines in
   19835        test summary files
   19836      * [550]11612 abi_check not finding correct libgcc_s.so.1
   19837 
   19838     Miscellaneous
   19839 
   19840      * [551]13211 using -###, incorrect warnings about unused linker file
   19841        are produced
   19842      __________________________________________________________________
   19843 
   19844 [552]GCC 3.3.4
   19845 
   19846    This is the [553]list of problem reports (PRs) from GCC's bug tracking
   19847    system that are known to be fixed in the 3.3.4 release. This list might
   19848    not be complete (that is, it is possible that some PRs that have been
   19849    fixed are not listed here).
   19850      __________________________________________________________________
   19851 
   19852 [554]GCC 3.3.5
   19853 
   19854    This is the [555]list of problem reports (PRs) from GCC's bug tracking
   19855    system that are known to be fixed in the 3.3.5 release. This list might
   19856    not be complete (that is, it is possible that some PRs that have been
   19857    fixed are not listed here).
   19858      __________________________________________________________________
   19859 
   19860 [556]GCC 3.3.6
   19861 
   19862    This is the [557]list of problem reports (PRs) from GCC's bug tracking
   19863    system that are known to be fixed in the 3.3.6 release. This list might
   19864    not be complete (that is, it is possible that some PRs that have been
   19865    fixed are not listed here).
   19866 
   19867 
   19868     For questions related to the use of GCC, please consult these web
   19869     pages and the [558]GCC manuals. If that fails, the
   19870     [559]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   19871     web pages and the development of GCC are welcome on our developer
   19872     list at [560]gcc (a] gcc.gnu.org. All of [561]our lists have public
   19873     archives.
   19874 
   19875    Copyright (C) [562]Free Software Foundation, Inc. Verbatim copying and
   19876    distribution of this entire article is permitted in any medium,
   19877    provided this notice is preserved.
   19878 
   19879    These pages are [563]maintained by the GCC team. Last modified
   19880    2025-06-05.
   19881 
   19882 References
   19883 
   19884    1. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   19885    2. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   19886    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   19887    4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
   19888    5. https://gcc.gnu.org/news/dfa.html
   19889    6. https://gcc.gnu.org/projects/c-status.html
   19890    7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
   19891    8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   19892    9. https://gcc.gnu.org/PR10140
   19893   10. https://gcc.gnu.org/PR10198
   19894   11. https://gcc.gnu.org/PR10338
   19895   12. https://gcc.gnu.org/PR3581
   19896   13. https://gcc.gnu.org/PR4382
   19897   14. https://gcc.gnu.org/PR5533
   19898   15. https://gcc.gnu.org/PR6387
   19899   16. https://gcc.gnu.org/PR6412
   19900   17. https://gcc.gnu.org/PR6620
   19901   18. https://gcc.gnu.org/PR6663
   19902   19. https://gcc.gnu.org/PR7068
   19903   20. https://gcc.gnu.org/PR7083
   19904   21. https://gcc.gnu.org/PR7647
   19905   22. https://gcc.gnu.org/PR7675
   19906   23. https://gcc.gnu.org/PR7718
   19907   24. https://gcc.gnu.org/PR8116
   19908   25. https://gcc.gnu.org/PR8358
   19909   26. https://gcc.gnu.org/PR8511
   19910   27. https://gcc.gnu.org/PR8564
   19911   28. https://gcc.gnu.org/PR8660
   19912   29. https://gcc.gnu.org/PR8766
   19913   30. https://gcc.gnu.org/PR8803
   19914   31. https://gcc.gnu.org/PR8846
   19915   32. https://gcc.gnu.org/PR8906
   19916   33. https://gcc.gnu.org/PR9216
   19917   34. https://gcc.gnu.org/PR9261
   19918   35. https://gcc.gnu.org/PR9263
   19919   36. https://gcc.gnu.org/PR9429
   19920   37. https://gcc.gnu.org/PR9516
   19921   38. https://gcc.gnu.org/PR9600
   19922   39. https://gcc.gnu.org/PR9629
   19923   40. https://gcc.gnu.org/PR9672
   19924   41. https://gcc.gnu.org/PR9749
   19925   42. https://gcc.gnu.org/PR9794
   19926   43. https://gcc.gnu.org/PR9829
   19927   44. https://gcc.gnu.org/PR9916
   19928   45. https://gcc.gnu.org/PR9936
   19929   46. https://gcc.gnu.org/PR10262
   19930   47. https://gcc.gnu.org/PR10278
   19931   48. https://gcc.gnu.org/PR10446
   19932   49. https://gcc.gnu.org/PR10451
   19933   50. https://gcc.gnu.org/PR10506
   19934   51. https://gcc.gnu.org/PR10549
   19935   52. https://gcc.gnu.org/PR2001
   19936   53. https://gcc.gnu.org/PR2391
   19937   54. https://gcc.gnu.org/PR2960
   19938   55. https://gcc.gnu.org/PR4046
   19939   56. https://gcc.gnu.org/PR6405
   19940   57. https://gcc.gnu.org/PR6798
   19941   58. https://gcc.gnu.org/PR6871
   19942   59. https://gcc.gnu.org/PR6909
   19943   60. https://gcc.gnu.org/PR7189
   19944   61. https://gcc.gnu.org/PR7642
   19945   62. https://gcc.gnu.org/PR8634
   19946   63. https://gcc.gnu.org/PR8750
   19947   64. https://gcc.gnu.org/PR2161
   19948   65. https://gcc.gnu.org/PR4319
   19949   66. https://gcc.gnu.org/PR8602
   19950   67. https://gcc.gnu.org/PR9177
   19951   68. https://gcc.gnu.org/PR9853
   19952   69. https://gcc.gnu.org/PR45
   19953   70. https://gcc.gnu.org/PR3784
   19954   71. https://gcc.gnu.org/PR764
   19955   72. https://gcc.gnu.org/PR5116
   19956   73. https://gcc.gnu.org/PR2862
   19957   74. https://gcc.gnu.org/PR3663
   19958   75. https://gcc.gnu.org/PR3797
   19959   76. https://gcc.gnu.org/PR3948
   19960   77. https://gcc.gnu.org/PR4137
   19961   78. https://gcc.gnu.org/PR4361
   19962   79. https://gcc.gnu.org/PR4802
   19963   80. https://gcc.gnu.org/PR5837
   19964   81. https://gcc.gnu.org/PR4803
   19965   82. https://gcc.gnu.org/PR5094
   19966   83. https://gcc.gnu.org/PR5730
   19967   84. https://gcc.gnu.org/PR6713
   19968   85. https://gcc.gnu.org/PR7015
   19969   86. https://gcc.gnu.org/PR7086
   19970   87. https://gcc.gnu.org/PR7099
   19971   88. https://gcc.gnu.org/PR7247
   19972   89. https://gcc.gnu.org/PR7441
   19973   90. https://gcc.gnu.org/PR7768
   19974   91. https://gcc.gnu.org/PR7804
   19975   92. https://gcc.gnu.org/PR8099
   19976   93. https://gcc.gnu.org/PR8117
   19977   94. https://gcc.gnu.org/PR8205
   19978   95. https://gcc.gnu.org/PR8645
   19979   96. https://gcc.gnu.org/PR8724
   19980   97. https://gcc.gnu.org/PR8805
   19981   98. https://gcc.gnu.org/PR8691
   19982   99. https://gcc.gnu.org/PR8700
   19983  100. https://gcc.gnu.org/PR8724
   19984  101. https://gcc.gnu.org/PR8949
   19985  102. https://gcc.gnu.org/PR9016
   19986  103. https://gcc.gnu.org/PR9053
   19987  104. https://gcc.gnu.org/PR9152
   19988  105. https://gcc.gnu.org/PR9182
   19989  106. https://gcc.gnu.org/PR9297
   19990  107. https://gcc.gnu.org/PR9318
   19991  108. https://gcc.gnu.org/PR9320
   19992  109. https://gcc.gnu.org/PR9400
   19993  110. https://gcc.gnu.org/PR9424
   19994  111. https://gcc.gnu.org/PR9425
   19995  112. https://gcc.gnu.org/PR9439
   19996  113. https://gcc.gnu.org/PR9474
   19997  114. https://gcc.gnu.org/PR9548
   19998  115. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
   19999  116. https://gcc.gnu.org/PR9555
   20000  117. https://gcc.gnu.org/PR9561
   20001  118. https://gcc.gnu.org/PR9563
   20002  119. https://gcc.gnu.org/PR9582
   20003  120. https://gcc.gnu.org/PR9622
   20004  121. https://gcc.gnu.org/PR9683
   20005  122. https://gcc.gnu.org/PR9791
   20006  123. https://gcc.gnu.org/PR9817
   20007  124. https://gcc.gnu.org/PR9825
   20008  125. https://gcc.gnu.org/PR9826
   20009  126. https://gcc.gnu.org/PR9924
   20010  127. https://gcc.gnu.org/PR9946
   20011  128. https://gcc.gnu.org/PR9964
   20012  129. https://gcc.gnu.org/PR9988
   20013  130. https://gcc.gnu.org/PR10033
   20014  131. https://gcc.gnu.org/PR10097
   20015  132. https://gcc.gnu.org/PR10132
   20016  133. https://gcc.gnu.org/PR10180
   20017  134. https://gcc.gnu.org/PR10199
   20018  135. https://gcc.gnu.org/PR10300
   20019  136. https://gcc.gnu.org/PR10427
   20020  137. https://gcc.gnu.org/PR10503
   20021  138. https://gcc.gnu.org/PR5956
   20022  139. https://gcc.gnu.org/PR1832
   20023  140. https://gcc.gnu.org/PR3924
   20024  141. https://gcc.gnu.org/PR5634
   20025  142. https://gcc.gnu.org/PR6367
   20026  143. https://gcc.gnu.org/PR6491
   20027  144. https://gcc.gnu.org/PR6742
   20028  145. https://gcc.gnu.org/PR7113
   20029  146. https://gcc.gnu.org/PR7236
   20030  147. https://gcc.gnu.org/PR7278
   20031  148. https://gcc.gnu.org/PR7384
   20032  149. https://gcc.gnu.org/PR7388
   20033  150. https://gcc.gnu.org/PR8587
   20034  151. https://gcc.gnu.org/PR9038
   20035  152. https://gcc.gnu.org/PR10197
   20036  153. https://gcc.gnu.org/PR6005
   20037  154. https://gcc.gnu.org/PR6389
   20038  155. https://gcc.gnu.org/PR6576
   20039  156. https://gcc.gnu.org/PR6652
   20040  157. https://gcc.gnu.org/PR7060
   20041  158. https://gcc.gnu.org/PR7073
   20042  159. https://gcc.gnu.org/PR7180
   20043  160. https://gcc.gnu.org/PR7416
   20044  161. https://gcc.gnu.org/PR7570
   20045  162. https://gcc.gnu.org/PR7578
   20046  163. https://gcc.gnu.org/PR7611
   20047  164. https://gcc.gnu.org/PR7709
   20048  165. https://gcc.gnu.org/PR7766
   20049  166. https://gcc.gnu.org/PR7785
   20050  167. https://gcc.gnu.org/PR7786
   20051  168. https://gcc.gnu.org/PR8142
   20052  169. https://gcc.gnu.org/PR8234
   20053  170. https://gcc.gnu.org/PR8415
   20054  171. https://gcc.gnu.org/PR8481
   20055  172. https://gcc.gnu.org/PR8593
   20056  173. https://gcc.gnu.org/PR8759
   20057  174. https://gcc.gnu.org/PR8997
   20058  175. https://gcc.gnu.org/PR9253
   20059  176. https://gcc.gnu.org/PR9254
   20060  177. https://gcc.gnu.org/PR9271
   20061  178. https://gcc.gnu.org/PR6767
   20062  179. https://gcc.gnu.org/PR9911
   20063  180. https://gcc.gnu.org/PR10020
   20064  181. https://gcc.gnu.org/PR10546
   20065  182. https://gcc.gnu.org/PR7029
   20066  183. https://gcc.gnu.org/PR2903
   20067  184. https://gcc.gnu.org/PR7873
   20068  185. https://gcc.gnu.org/PR7680
   20069  186. https://gcc.gnu.org/PR8705
   20070  187. https://gcc.gnu.org/PR9986
   20071  188. https://gcc.gnu.org/PR10056
   20072  189. https://gcc.gnu.org/PR6744
   20073  190. https://gcc.gnu.org/PR7361
   20074  191. https://gcc.gnu.org/PR9496
   20075  192. https://gcc.gnu.org/PR7067
   20076  193. https://gcc.gnu.org/PR8480
   20077  194. https://gcc.gnu.org/PR8784
   20078  195. https://gcc.gnu.org/PR10315
   20079  196. https://gcc.gnu.org/PR10267
   20080  197. https://gcc.gnu.org/PR7916
   20081  198. https://gcc.gnu.org/PR7926
   20082  199. https://gcc.gnu.org/PR8555
   20083  200. https://gcc.gnu.org/PR8994
   20084  201. https://gcc.gnu.org/PR9426
   20085  202. https://gcc.gnu.org/PR9806
   20086  203. https://gcc.gnu.org/PR10077
   20087  204. https://gcc.gnu.org/PR10233
   20088  205. https://gcc.gnu.org/PR10286
   20089  206. https://gcc.gnu.org/PR10308
   20090  207. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.1
   20091  208. https://gcc.gnu.org/PR11272
   20092  209. https://gcc.gnu.org/PR5754
   20093  210. https://gcc.gnu.org/PR6597
   20094  211. https://gcc.gnu.org/PR6949
   20095  212. https://gcc.gnu.org/PR7053
   20096  213. https://gcc.gnu.org/PR8164
   20097  214. https://gcc.gnu.org/PR8384
   20098  215. https://gcc.gnu.org/PR9559
   20099  216. https://gcc.gnu.org/PR9649
   20100  217. https://gcc.gnu.org/PR9864
   20101  218. https://gcc.gnu.org/PR10432
   20102  219. https://gcc.gnu.org/PR10475
   20103  220. https://gcc.gnu.org/PR10635
   20104  221. https://gcc.gnu.org/PR10661
   20105  222. https://gcc.gnu.org/PR10700
   20106  223. https://gcc.gnu.org/PR10712
   20107  224. https://gcc.gnu.org/PR10796
   20108  225. https://gcc.gnu.org/PR10890
   20109  226. https://gcc.gnu.org/PR10939
   20110  227. https://gcc.gnu.org/PR10956
   20111  228. https://gcc.gnu.org/PR11041
   20112  229. https://gcc.gnu.org/PR11059
   20113  230. https://gcc.gnu.org/PR11083
   20114  231. https://gcc.gnu.org/PR11105
   20115  232. https://gcc.gnu.org/PR11149
   20116  233. https://gcc.gnu.org/PR11228
   20117  234. https://gcc.gnu.org/PR11282
   20118  235. https://gcc.gnu.org/PR11301
   20119  236. https://gcc.gnu.org/PR11308
   20120  237. https://gcc.gnu.org/PR11473
   20121  238. https://gcc.gnu.org/PR11503
   20122  239. https://gcc.gnu.org/PR11513
   20123  240. https://gcc.gnu.org/PR11198
   20124  241. https://gcc.gnu.org/PR11304
   20125  242. https://gcc.gnu.org/PR11381
   20126  243. https://gcc.gnu.org/PR11536
   20127  244. https://gcc.gnu.org/PR11557
   20128  245. https://gcc.gnu.org/PR5897
   20129  246. https://gcc.gnu.org/PR11279
   20130  247. https://gcc.gnu.org/PR11022
   20131  248. https://gcc.gnu.org/PR2330
   20132  249. https://gcc.gnu.org/PR5388
   20133  250. https://gcc.gnu.org/PR5390
   20134  251. https://gcc.gnu.org/PR7877
   20135  252. https://gcc.gnu.org/PR9393
   20136  253. https://gcc.gnu.org/PR10032
   20137  254. https://gcc.gnu.org/PR10468
   20138  255. https://gcc.gnu.org/PR10527
   20139  256. https://gcc.gnu.org/PR10679
   20140  257. https://gcc.gnu.org/PR10682
   20141  258. https://gcc.gnu.org/PR10689
   20142  259. https://gcc.gnu.org/PR10845
   20143  260. https://gcc.gnu.org/PR10849
   20144  261. https://gcc.gnu.org/PR10888
   20145  262. https://gcc.gnu.org/PR10929
   20146  263. https://gcc.gnu.org/PR10931
   20147  264. https://gcc.gnu.org/PR10940
   20148  265. https://gcc.gnu.org/PR10968
   20149  266. https://gcc.gnu.org/PR10990
   20150  267. https://gcc.gnu.org/PR11039
   20151  268. https://gcc.gnu.org/PR11062
   20152  269. https://gcc.gnu.org/PR11095
   20153  270. https://gcc.gnu.org/PR11098
   20154  271. https://gcc.gnu.org/PR11137
   20155  272. https://gcc.gnu.org/PR11154
   20156  273. https://gcc.gnu.org/PR11329
   20157  274. https://gcc.gnu.org/PR11332
   20158  275. https://gcc.gnu.org/PR11431
   20159  276. https://gcc.gnu.org/PR11528
   20160  277. https://gcc.gnu.org/PR11546
   20161  278. https://gcc.gnu.org/PR11567
   20162  279. https://gcc.gnu.org/PR11645
   20163  280. https://gcc.gnu.org/PR5179
   20164  281. https://gcc.gnu.org/PR8204
   20165  282. https://gcc.gnu.org/PR10838
   20166  283. https://gcc.gnu.org/PR10886
   20167  284. https://gcc.gnu.org/PR11349
   20168  285. https://gcc.gnu.org/PR4823
   20169  286. https://gcc.gnu.org/PR8878
   20170  287. https://gcc.gnu.org/PR9815
   20171  288. https://gcc.gnu.org/PR10402
   20172  289. https://gcc.gnu.org/PR10504
   20173  290. https://gcc.gnu.org/PR10673
   20174  291. https://gcc.gnu.org/PR11044
   20175  292. https://gcc.gnu.org/PR11089
   20176  293. https://gcc.gnu.org/PR11420
   20177  294. https://gcc.gnu.org/PR9362
   20178  295. https://gcc.gnu.org/PR10142
   20179  296. https://gcc.gnu.org/PR10663
   20180  297. https://gcc.gnu.org/PR10835
   20181  298. https://gcc.gnu.org/PR10876
   20182  299. https://gcc.gnu.org/PR10955
   20183  300. https://gcc.gnu.org/PR11018
   20184  301. https://gcc.gnu.org/PR11556
   20185  302. https://gcc.gnu.org/PR10907
   20186  303. https://gcc.gnu.org/PR11320
   20187  304. https://gcc.gnu.org/PR11599
   20188  305. https://gcc.gnu.org/PR9745
   20189  306. https://gcc.gnu.org/PR10871
   20190  307. https://gcc.gnu.org/PR11440
   20191  308. https://gcc.gnu.org/PR7594
   20192  309. https://gcc.gnu.org/PR10557
   20193  310. https://gcc.gnu.org/PR11054
   20194  311. https://gcc.gnu.org/PR10834
   20195  312. https://gcc.gnu.org/PR10842
   20196  313. https://gcc.gnu.org/PR11052
   20197  314. https://gcc.gnu.org/PR11183
   20198  315. https://gcc.gnu.org/PR11084
   20199  316. https://gcc.gnu.org/PR10331
   20200  317. https://gcc.gnu.org/PR10413
   20201  318. https://gcc.gnu.org/PR11096
   20202  319. https://gcc.gnu.org/PR2873
   20203  320. https://gcc.gnu.org/PR3163
   20204  321. https://gcc.gnu.org/PR5287
   20205  322. https://gcc.gnu.org/PR10148
   20206  323. https://gcc.gnu.org/PR8787
   20207  324. https://gcc.gnu.org/PR10900
   20208  325. https://gcc.gnu.org/PR1607
   20209  326. https://gcc.gnu.org/PR4252
   20210  327. https://gcc.gnu.org/PR4490
   20211  328. https://gcc.gnu.org/PR10355
   20212  329. https://gcc.gnu.org/PR10726
   20213  330. https://gcc.gnu.org/PR10805
   20214  331. https://gcc.gnu.org/PR10815
   20215  332. https://gcc.gnu.org/PR10877
   20216  333. https://gcc.gnu.org/PR11280
   20217  334. https://gcc.gnu.org/PR11466
   20218  335. https://gcc.gnu.org/PR10737
   20219  336. https://gcc.gnu.org/PR10810
   20220  337. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.2
   20221  338. https://gcc.gnu.org/PR8336
   20222  339. https://gcc.gnu.org/PR9330
   20223  340. https://gcc.gnu.org/PR9631
   20224  341. https://gcc.gnu.org/PR9877
   20225  342. https://gcc.gnu.org/PR11687
   20226  343. https://gcc.gnu.org/PR12263
   20227  344. https://gcc.gnu.org/PR12490
   20228  345. https://gcc.gnu.org/PR7277
   20229  346. https://gcc.gnu.org/PR7939
   20230  347. https://gcc.gnu.org/PR11063
   20231  348. https://gcc.gnu.org/PR11207
   20232  349. https://gcc.gnu.org/PR11522
   20233  350. https://gcc.gnu.org/PR11595
   20234  351. https://gcc.gnu.org/PR11646
   20235  352. https://gcc.gnu.org/PR11665
   20236  353. https://gcc.gnu.org/PR11852
   20237  354. https://gcc.gnu.org/PR11878
   20238  355. https://gcc.gnu.org/PR11883
   20239  356. https://gcc.gnu.org/PR11991
   20240  357. https://gcc.gnu.org/PR12146
   20241  358. https://gcc.gnu.org/PR12215
   20242  359. https://gcc.gnu.org/PR12369
   20243  360. https://gcc.gnu.org/PR12446
   20244  361. https://gcc.gnu.org/PR12510
   20245  362. https://gcc.gnu.org/PR12544
   20246  363. https://gcc.gnu.org/PR9862
   20247  364. https://gcc.gnu.org/PR10962
   20248  365. https://gcc.gnu.org/PR11370
   20249  366. https://gcc.gnu.org/PR11637
   20250  367. https://gcc.gnu.org/PR11885
   20251  368. https://gcc.gnu.org/PR12082
   20252  369. https://gcc.gnu.org/PR12180
   20253  370. https://gcc.gnu.org/PR12340
   20254  371. https://gcc.gnu.org/PR3907
   20255  372. https://gcc.gnu.org/PR5293
   20256  373. https://gcc.gnu.org/PR5296
   20257  374. https://gcc.gnu.org/PR7939
   20258  375. https://gcc.gnu.org/PR8656
   20259  376. https://gcc.gnu.org/PR10147
   20260  377. https://gcc.gnu.org/PR11400
   20261  378. https://gcc.gnu.org/PR11409
   20262  379. https://gcc.gnu.org/PR11740
   20263  380. https://gcc.gnu.org/PR11786
   20264  381. https://gcc.gnu.org/PR11867
   20265  382. https://gcc.gnu.org/PR11928
   20266  383. https://gcc.gnu.org/PR12114
   20267  384. https://gcc.gnu.org/PR12163
   20268  385. https://gcc.gnu.org/PR12181
   20269  386. https://gcc.gnu.org/PR12236
   20270  387. https://gcc.gnu.org/PR12266
   20271  388. https://gcc.gnu.org/PR12296
   20272  389. https://gcc.gnu.org/PR12298
   20273  390. https://gcc.gnu.org/PR12369
   20274  391. https://gcc.gnu.org/PR12337
   20275  392. https://gcc.gnu.org/PR12344
   20276  393. https://gcc.gnu.org/PR12451
   20277  394. https://gcc.gnu.org/PR12486
   20278  395. https://gcc.gnu.org/PR8869
   20279  396. https://gcc.gnu.org/PR9786
   20280  397. https://gcc.gnu.org/PR11689
   20281  398. https://gcc.gnu.org/PR12116
   20282  399. https://gcc.gnu.org/PR12070
   20283  400. https://gcc.gnu.org/PR11184
   20284  401. https://gcc.gnu.org/PR11535
   20285  402. https://gcc.gnu.org/PR11693
   20286  403. https://gcc.gnu.org/PR12224
   20287  404. https://gcc.gnu.org/PR11087
   20288  405. https://gcc.gnu.org/PR11319
   20289  406. https://gcc.gnu.org/PR11949
   20290  407. https://gcc.gnu.org/PR11662
   20291  408. https://gcc.gnu.org/PR11965
   20292  409. https://gcc.gnu.org/PR12301
   20293  410. https://gcc.gnu.org/PR11717
   20294  411. https://gcc.gnu.org/PR11313
   20295  412. https://gcc.gnu.org/PR11712
   20296  413. https://gcc.gnu.org/PR12166
   20297  414. https://gcc.gnu.org/PR12101
   20298  415. https://gcc.gnu.org/PR10988
   20299  416. https://gcc.gnu.org/PR11805
   20300  417. https://gcc.gnu.org/PR11902
   20301  418. https://gcc.gnu.org/PR11903
   20302  419. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.3
   20303  420. https://gcc.gnu.org/PR11890
   20304  421. https://gcc.gnu.org/PR12399
   20305  422. https://gcc.gnu.org/PR13068
   20306  423. https://gcc.gnu.org/PR10060
   20307  424. https://gcc.gnu.org/PR10555
   20308  425. https://gcc.gnu.org/PR10706
   20309  426. https://gcc.gnu.org/PR11496
   20310  427. https://gcc.gnu.org/PR11741
   20311  428. https://gcc.gnu.org/PR12440
   20312  429. https://gcc.gnu.org/PR12632
   20313  430. https://gcc.gnu.org/PR12712
   20314  431. https://gcc.gnu.org/PR12726
   20315  432. https://gcc.gnu.org/PR12890
   20316  433. https://gcc.gnu.org/PR12900
   20317  434. https://gcc.gnu.org/PR13060
   20318  435. https://gcc.gnu.org/PR13289
   20319  436. https://gcc.gnu.org/PR13318
   20320  437. https://gcc.gnu.org/PR13392
   20321  438. https://gcc.gnu.org/PR13574
   20322  439. https://gcc.gnu.org/PR13475
   20323  440. https://gcc.gnu.org/PR13797
   20324  441. https://gcc.gnu.org/PR13824
   20325  442. https://gcc.gnu.org/PR8776
   20326  443. https://gcc.gnu.org/PR10339
   20327  444. https://gcc.gnu.org/PR11350
   20328  445. https://gcc.gnu.org/PR12826
   20329  446. https://gcc.gnu.org/PR12500
   20330  447. https://gcc.gnu.org/PR12941
   20331  448. https://gcc.gnu.org/PR12953
   20332  449. https://gcc.gnu.org/PR13041
   20333  450. https://gcc.gnu.org/PR13507
   20334  451. https://gcc.gnu.org/PR13382
   20335  452. https://gcc.gnu.org/PR13394
   20336  453. https://gcc.gnu.org/PR13400
   20337  454. https://gcc.gnu.org/PR13521
   20338  455. https://gcc.gnu.org/PR2094
   20339  456. https://gcc.gnu.org/PR2294
   20340  457. https://gcc.gnu.org/PR5050
   20341  458. https://gcc.gnu.org/PR9371
   20342  459. https://gcc.gnu.org/PR9546
   20343  460. https://gcc.gnu.org/PR10081
   20344  461. https://gcc.gnu.org/PR10093
   20345  462. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
   20346  463. https://gcc.gnu.org/PR10095
   20347  464. https://gcc.gnu.org/PR11554
   20348  465. https://gcc.gnu.org/PR12297
   20349  466. https://gcc.gnu.org/PR12352
   20350  467. https://gcc.gnu.org/PR12438
   20351  468. https://gcc.gnu.org/PR12540
   20352  469. https://gcc.gnu.org/PR12594
   20353  470. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
   20354  471. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
   20355  472. https://gcc.gnu.org/PR12657
   20356  473. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
   20357  474. https://gcc.gnu.org/PR12696
   20358  475. https://gcc.gnu.org/PR12815
   20359  476. https://gcc.gnu.org/PR12862
   20360  477. https://gcc.gnu.org/PR12926
   20361  478. https://gcc.gnu.org/PR12967
   20362  479. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
   20363  480. https://gcc.gnu.org/PR12971
   20364  481. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
   20365  482. https://gcc.gnu.org/PR13007
   20366  483. https://gcc.gnu.org/PR13009
   20367  484. https://gcc.gnu.org/PR13057
   20368  485. https://gcc.gnu.org/PR13070
   20369  486. https://gcc.gnu.org/PR13081
   20370  487. https://gcc.gnu.org/PR13239
   20371  488. https://gcc.gnu.org/PR13262
   20372  489. https://gcc.gnu.org/PR13290
   20373  490. https://gcc.gnu.org/PR13323
   20374  491. https://gcc.gnu.org/PR13369
   20375  492. https://gcc.gnu.org/PR13371
   20376  493. https://gcc.gnu.org/PR13445
   20377  494. https://gcc.gnu.org/PR13461
   20378  495. https://gcc.gnu.org/PR13462
   20379  496. https://gcc.gnu.org/PR13478
   20380  497. https://gcc.gnu.org/PR13544
   20381  498. https://gcc.gnu.org/PR13650
   20382  499. https://gcc.gnu.org/PR13683
   20383  500. https://gcc.gnu.org/PR13688
   20384  501. https://gcc.gnu.org/PR13774
   20385  502. https://gcc.gnu.org/PR13884
   20386  503. https://gcc.gnu.org/PR10746
   20387  504. https://gcc.gnu.org/PR11433
   20388  505. https://gcc.gnu.org/PR12633
   20389  506. https://gcc.gnu.org/PR13037
   20390  507. https://gcc.gnu.org/PR13213
   20391  508. https://gcc.gnu.org/PR4490
   20392  509. https://gcc.gnu.org/PR12292
   20393  510. https://gcc.gnu.org/PR12441
   20394  511. https://gcc.gnu.org/PR12943
   20395  512. https://gcc.gnu.org/PR13608
   20396  513. https://gcc.gnu.org/PR11598
   20397  514. https://gcc.gnu.org/PR11793
   20398  515. https://gcc.gnu.org/PR12467
   20399  516. https://gcc.gnu.org/PR12537
   20400  517. https://gcc.gnu.org/PR12496
   20401  518. https://gcc.gnu.org/PR12865
   20402  519. https://gcc.gnu.org/PR13354
   20403  520. https://gcc.gnu.org/PR10467
   20404  521. https://gcc.gnu.org/PR11226
   20405  522. https://gcc.gnu.org/PR11227
   20406  523. https://gcc.gnu.org/PR12644
   20407  524. https://gcc.gnu.org/PR13149
   20408  525. https://gcc.gnu.org/PR12654
   20409  526. https://gcc.gnu.org/PR12965
   20410  527. https://gcc.gnu.org/PR13031
   20411  528. https://gcc.gnu.org/PR11634
   20412  529. https://gcc.gnu.org/PR12158
   20413  530. https://gcc.gnu.org/PR11992
   20414  531. https://gcc.gnu.org/PR9365
   20415  532. https://gcc.gnu.org/PR10392
   20416  533. https://gcc.gnu.org/PR11322
   20417  534. https://gcc.gnu.org/PR13069
   20418  535. https://gcc.gnu.org/PR13302
   20419  536. https://gcc.gnu.org/PR13585
   20420  537. https://gcc.gnu.org/PR8916
   20421  538. https://gcc.gnu.org/PR11576
   20422  539. https://gcc.gnu.org/PR13122
   20423  540. https://gcc.gnu.org/PR13256
   20424  541. https://gcc.gnu.org/PR13373
   20425  542. https://gcc.gnu.org/PR12561
   20426  543. https://gcc.gnu.org/PR6243
   20427  544. https://gcc.gnu.org/PR11397
   20428  545. https://gcc.gnu.org/PR12505
   20429  546. https://gcc.gnu.org/PR13150
   20430  547. https://gcc.gnu.org/PR12666
   20431  548. https://gcc.gnu.org/PR12969
   20432  549. https://gcc.gnu.org/PR10819
   20433  550. https://gcc.gnu.org/PR11612
   20434  551. https://gcc.gnu.org/PR13211
   20435  552. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.4
   20436  553. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
   20437  554. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.5
   20438  555. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
   20439  556. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.6
   20440  557. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
   20441  558. https://gcc.gnu.org/onlinedocs/
   20442  559. mailto:gcc-help (a] gcc.gnu.org
   20443  560. mailto:gcc (a] gcc.gnu.org
   20444  561. https://gcc.gnu.org/lists.html
   20445  562. https://www.fsf.org/
   20446  563. https://gcc.gnu.org/about.html
   20447 ======================================================================
   20448 http://gcc.gnu.org/gcc-3.2/index.html
   20449 
   20450                              GCC 3.2 Release Series
   20451 
   20452    (This release series is no longer supported.)
   20453 
   20454    April 25, 2003
   20455 
   20456    The [1]GNU project and the GCC developers are pleased to announce the
   20457    release of GCC 3.2.3.
   20458 
   20459    The purpose of the GCC 3.2 release series is to provide a stable
   20460    platform for OS distributors to use building their next releases. A
   20461    primary objective was to stabilize the C++ ABI; we believe that the
   20462    interface to the compiler and the C++ standard library are now
   20463    relatively stable.
   20464 
   20465    Be aware that C++ code compiled by GCC 3.2.x will (in general) not
   20466    interoperate with code compiled by GCC 3.1.1 or earlier.
   20467 
   20468    Please refer to our [2]detailed list of news, caveats, and bug-fixes
   20469    for further information.
   20470 
   20471 Release History
   20472 
   20473    GCC 3.2.3
   20474           April 25, 2003 ([3]changes)
   20475 
   20476    GCC 3.2.2
   20477           February 5, 2003 ([4]changes)
   20478 
   20479    GCC 3.2.1
   20480           November 19, 2002 ([5]changes)
   20481 
   20482    GCC 3.2
   20483           August 14, 2002 ([6]changes)
   20484 
   20485 References and Acknowledgements
   20486 
   20487    GCC used to stand for the GNU C Compiler, but since the compiler
   20488    supports several other languages aside from C, it now stands for the
   20489    GNU Compiler Collection.
   20490 
   20491    A list of [7]successful builds is updated as new information becomes
   20492    available.
   20493 
   20494    The GCC developers would like to thank the numerous people that have
   20495    contributed new features, improvements, bug fixes, and other changes as
   20496    well as test results to GCC. This [8]amazing group of volunteers is
   20497    what makes GCC successful.
   20498 
   20499    For additional information about GCC please refer to the [9]GCC project
   20500    web site or contact the [10]GCC development mailing list.
   20501 
   20502    To obtain GCC please use [11]our mirror sites, or our CVS server.
   20503 
   20504 
   20505     For questions related to the use of GCC, please consult these web
   20506     pages and the [12]GCC manuals. If that fails, the
   20507     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20508     web pages and the development of GCC are welcome on our developer
   20509     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
   20510     archives.
   20511 
   20512    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
   20513    distribution of this entire article is permitted in any medium,
   20514    provided this notice is preserved.
   20515 
   20516    These pages are [17]maintained by the GCC team. Last modified
   20517    2022-10-26.
   20518 
   20519 References
   20520 
   20521    1. http://www.gnu.org/
   20522    2. https://gcc.gnu.org/gcc-3.2/changes.html
   20523    3. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   20524    4. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.2
   20525    5. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
   20526    6. https://gcc.gnu.org/gcc-3.2/changes.html#3.2
   20527    7. https://gcc.gnu.org/gcc-3.2/buildstat.html
   20528    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20529    9. https://gcc.gnu.org/index.html
   20530   10. mailto:gcc (a] gcc.gnu.org
   20531   11. https://gcc.gnu.org/mirrors.html
   20532   12. https://gcc.gnu.org/onlinedocs/
   20533   13. mailto:gcc-help (a] gcc.gnu.org
   20534   14. mailto:gcc (a] gcc.gnu.org
   20535   15. https://gcc.gnu.org/lists.html
   20536   16. https://www.fsf.org/
   20537   17. https://gcc.gnu.org/about.html
   20538 ======================================================================
   20539 http://gcc.gnu.org/gcc-3.2/changes.html
   20540 
   20541                              GCC 3.2 Release Series
   20542                         Changes, New Features, and Fixes
   20543 
   20544    The latest release in the 3.2 release series is [1]GCC 3.2.3.
   20545 
   20546 Caveats and New Features
   20547 
   20548   Caveats
   20549 
   20550      * The C++ compiler does not correctly zero-initialize
   20551        pointers-to-data members. You must explicitly initialize them. For
   20552        example: int S::*m(0); will work, but depending on
   20553        default-initialization to zero will not work. This bug cannot be
   20554        fixed in GCC 3.2 without inducing unacceptable risks. It will be
   20555        fixed in GCC 3.3.
   20556      * This GCC release is based on the GCC 3.1 sourcebase, and thus has
   20557        all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
   20558        a number of C++ ABI fixes which make its C++ compiler generate
   20559        binary code which is incompatible with the C++ compilers found in
   20560        earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
   20561 
   20562   Frontend Enhancements
   20563 
   20564     C/C++/Objective-C
   20565 
   20566      * The method of constructing the list of directories to be searched
   20567        for header files has been revised. If a directory named by a -I
   20568        option is a standard system include directory, the option is
   20569        ignored to ensure that the default search order for system
   20570        directories and the special treatment of system header files are
   20571        not defeated.
   20572      * The C and Objective-C compilers no longer accept the "Naming Types"
   20573        extension (typedef foo = bar); it was already unavailable in C++.
   20574        Code which uses it will need to be changed to use the "typeof"
   20575        extension instead: typedef typeof(bar) foo. (We have removed this
   20576        extension without a period of deprecation because it has caused the
   20577        compiler to crash since version 3.0 and no one noticed until very
   20578        recently. Thus we conclude it is not in widespread use.)
   20579 
   20580     C++
   20581 
   20582      * GCC 3.2 fixed several differences between the C++ ABI implemented
   20583        in GCC and the multi-vendor standard, but more have been found
   20584        since the release. 3.2.1 adds a new warning, -Wabi, to warn about
   20585        code which is affected by these bugs. We will fix these bugs in
   20586        some future release, once we are confident that all have been
   20587        found; until then, it is our intention to make changes to the ABI
   20588        only if they are necessary for correct compilation of C++, as
   20589        opposed to conformance to the ABI documents.
   20590      * For details on how to build an ABI compliant compiler for GNU/Linux
   20591        systems, check the [3]common C++ ABI page.
   20592 
   20593   New Targets and Target Specific Improvements
   20594 
   20595     IA-32
   20596 
   20597      * Fixed a number of bugs in SSE and MMX intrinsics.
   20598      * Fixed common compiler crashes with SSE instruction set enabled
   20599        (implied by -march=pentium3, pentium4, athlon-xp)
   20600      * __m128 and __m128i is not 128bit aligned when used in structures.
   20601 
   20602     x86-64
   20603 
   20604      * A bug whereby the compiler could generate bad code for bzero has
   20605        been fixed.
   20606      * ABI fixes (implying ABI incompatibilities with previous version in
   20607        some corner cases)
   20608      * Fixed prefetch code generation
   20609      __________________________________________________________________
   20610 
   20611 [4]GCC 3.2.3
   20612 
   20613    3.2.3 is a bug fix release only; there are no new features that were
   20614    not present in GCC 3.2.2.
   20615 
   20616   Bug Fixes
   20617 
   20618    This section lists the problem reports (PRs) from GCC's bug tracking
   20619    system that are known to be fixed in the 3.2.3 release. This list might
   20620    not be complete (that is, it is possible that some PRs that have been
   20621    fixed are not listed here), and some of the titles have been changed to
   20622    make them more clear.
   20623 
   20624     Internal Compiler Errors (multi-platform)
   20625 
   20626      * [5]3782: (c++) -quiet -fstats produces a segmentation fault in
   20627        cc1plus
   20628      * [6]6440: (c++) template specializations cause ICE
   20629      * [7]7050: (c++) ICE on: (i ? get_string() : throw)
   20630      * [8]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
   20631      * [9]7982: (c++) ICE due to infinite recursion (using STL set)
   20632      * [10]8068: exceedingly high (infinite) memory usage
   20633      * [11]8178: ICE with __builtin_ffs
   20634      * [12]8396: ICE in copy_to_mode_reg, in explow.c
   20635      * [13]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
   20636      * [14]9768: ICE when optimizing inline code at -O2
   20637      * [15]9798: (c++) Infinite recursion (segfault) in
   20638        cp/decl.c:push_using_directive with recursive using directives
   20639      * [16]9799: mismatching structure initializer with nested flexible
   20640        array member: ICE
   20641      * [17]9928: ICE on duplicate enum declaration
   20642      * [18]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
   20643        sparc, alpha)
   20644      * [19]10352: ICE in find_reloads_toplev
   20645      * [20]10336: ICE with -Wunreachable-code
   20646 
   20647     C/optimizer bugs:
   20648 
   20649      * [21]8224: Incorrect joining of signed and unsigned division
   20650      * [22]8613: -O2 produces wrong code with builtin strlen and
   20651        postincrements
   20652      * [23]8828: gcc reports some code is unreachable when it is not
   20653      * [24]9226: GCSE breaking argument passing
   20654      * [25]9853: miscompilation of non-constant structure initializer
   20655      * [26]9797: C99-style struct initializers are miscompiled
   20656      * [27]9967: Some standard C function calls should not be replaced
   20657        when optimizing for size
   20658      * [28]10116: ce2: invalid merge of join_bb in the context of switch
   20659        statements
   20660      * [29]10171: wrong code for inlined function
   20661      * [30]10175: -Wunreachable-code doesn't work for single lines
   20662 
   20663     C++ compiler and library:
   20664 
   20665      * [31]8316: Confusing diagnostic for code that misuses conversion
   20666        operators
   20667      * [32]9169: filebuf output fails if codecvt<>::out returns noconv
   20668      * [33]9420: incomplete type incorrectly reported
   20669      * [34]9459: typeof in return type specification of template not
   20670        supported
   20671      * [35]9507: filebuf::open handles ios_base::ate incorrectly
   20672      * [36]9538: Out-of-bounds memory access in streambuf::sputbackc
   20673      * [37]9602: Total confusion about template/friend/virtual/abstract
   20674      * [38]9993: destructor not called for local object created within and
   20675        returned from infinite loop
   20676      * [39]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
   20677        system
   20678 
   20679     Java compiler and library:
   20680 
   20681      * [40]9652: libgcj build fails on irix6.5.1[78]
   20682      * [41]10144: gas on solaris complains about bad .stabs lines for
   20683        java, native as unaffected
   20684 
   20685     x86-specific (Intel/AMD):
   20686 
   20687      * [42]8746: gcc miscompiles Linux kernel ppa driver on x86
   20688      * [43]9888: -mcpu=k6 -Os produces out of range loop instructions
   20689      * [44]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
   20690        failed
   20691      * [45]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
   20692        failed
   20693 
   20694     SPARC-specific:
   20695 
   20696      * [46]7784: [Sparc] ICE in extract_insn, in recog.c
   20697      * [47]7796: sparc extra failure with -m64 on execute/930921-1.c in
   20698        unroll.c
   20699      * [48]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
   20700      * [49]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
   20701        execute/loop-2d.c
   20702      * [50]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
   20703      * [51]9414: Scheduling bug on Ultrasparc
   20704      * [52]10067: GCC-3.2.2 outputs invalid asm on sparc64
   20705 
   20706     m68k-specific:
   20707 
   20708      * [53]7248: broken "inclusive or" code
   20709      * [54]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
   20710 
   20711     PowerPC-specific:
   20712 
   20713      * [55]9732: Wrong code with -O2 -fPIC
   20714      * [56]10073: ICE: powerpc cannot split insn
   20715 
   20716     Alpha-specific:
   20717 
   20718      * [57]7702: optimization problem on a DEC alpha under OSF1
   20719      * [58]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
   20720 
   20721     HP-specific:
   20722 
   20723      * [59]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
   20724      * [60]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
   20725        (missing symbol)
   20726      * [61]10271: Floating point args don't get reloaded across function
   20727        calls with -O2
   20728 
   20729     MIPS specific:
   20730 
   20731      * [62]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
   20732        compile/920501-4.c
   20733 
   20734     CRIS specific:
   20735 
   20736      * [63]10377: gcc-3.2.2 creates bad assembler code for cris
   20737 
   20738     Miscellaneous and minor bugs:
   20739 
   20740      * [64]6955: collect2 says "core dumped" when there is no core
   20741      __________________________________________________________________
   20742 
   20743 [65]GCC 3.2.2
   20744 
   20745    Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
   20746    install by means of the DESTDIR variable. Parts of the GCC tree have
   20747    featured that support long before, but now it is available even from
   20748    the top level.
   20749 
   20750    Other than that, GCC 3.2.2 is a bug fix release only; there are no new
   20751    features that were not present in GCC 3.2.1.
   20752 
   20753   Bug Fixes
   20754 
   20755    On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
   20756    functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
   20757    with FreeBSD 5.0 does not have this problem), Interix, a.out-based
   20758    GNU/Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI
   20759    change, and thus restores ABI-compatibility with previous releases
   20760    (except GCC 3.2.1) on these platforms.
   20761 
   20762    This section lists the problem reports (PRs) from GCC's bug tracking
   20763    system that are known to be fixed in the 3.2.2 release. This list might
   20764    not be complete (that is, it is possible that some PRs that have been
   20765    fixed are not listed here) and some of the titles have been changed to
   20766    make them more clear.
   20767 
   20768     Internal Compiler Errors (multi-platform)
   20769 
   20770      * [66]5919: (c++) ICE when passing variable array to template
   20771        function
   20772      * [67]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
   20773      * [68]7507: ICE with -O2 when address of called function is a
   20774        complicated expression
   20775      * [69]7622: ICE with nested inline functions if function's address is
   20776        taken
   20777      * [70]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
   20778        [71]9258)
   20779      * [72]8031: (c++) ICE in code comparing typeids and casting from
   20780        virtual base
   20781      * [73]8275: ICE in simplify_subreg
   20782      * [74]8332: (c++) builtin strlen/template interaction causes ICE
   20783      * [75]8372: (c++) ICE on explicit call of destructor
   20784      * [76]8439: (c, not c++) empty struct causes ICE
   20785      * [77]8442: (c++) ICE with nested template classes
   20786      * [78]8518: ICE when compiling mplayer ("extern inline" issue)
   20787      * [79]8615: (c++) ICE with out-of-range character constant template
   20788        argument
   20789      * [80]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
   20790      * [81]8799: (c++) ICE: error reporting routines re-entered
   20791      * [82]9328: (c++) ICE with typeof(X) for overloaded X
   20792      * [83]9465: (preprocessor) cpp -traditional ICE on null bytes
   20793 
   20794     C++ (compiler and library) bugs
   20795 
   20796      * [84]47: scoping in nested classes is broken
   20797      * [85]6745: problems with iostream rdbuf() member function
   20798      * [86]8214: conversion from const char* const to char* sometimes
   20799        accepted illegally
   20800      * [87]8493: builtin strlen and overload resolution (same bug as
   20801        [88]8332)
   20802      * [89]8503: strange behaviour of function types
   20803      * [90]8727: compiler confused by inheritance from an anonymous struct
   20804      * [91]7445: poor performance of std::locale::classic() in
   20805        multi-threaded applications
   20806      * [92]8230: mishandling of overflow in vector<T>::resize
   20807      * [93]8399: sync_with_stdio(false) breaks unformatted input
   20808      * [94]8662: illegal access of private member of unnamed class is
   20809        accepted
   20810      * [95]8707: "make distclean" fails in libstdc++-v3 directory
   20811      * [96]8708: __USE_MALLOC doesn't work
   20812      * [97]8790: Use of non-thread-safe strtok in src/localename.cc
   20813      * [98]8887: Bug in date formats with --enable-clocale=generic
   20814      * [99]9076: Call Frame Instructions are not handled correctly during
   20815        unwind operation
   20816      * [100]9151: std::setprecision limited to 16 digits when outputting a
   20817        double to a stream
   20818      * [101]9168: codecvt<char, char, mbstate_t> overwrites output buffers
   20819      * [102]9269: libstdc++ headers: explicit specialization of function
   20820        must precede its first use
   20821      * [103]9322: return value of basic_streambuf<>::getloc affected by
   20822        locale::global
   20823      * [104]9433: segfault in runtime support for dynamic_cast
   20824 
   20825     C and optimizer bugs
   20826 
   20827      * [105]8032: GCC incorrectly initializes static structs that have
   20828        flexible arrays
   20829      * [106]8639: simple arithmetic expression broken
   20830      * [107]8794: optimization improperly eliminates certain expressions
   20831      * [108]8832: traditional "asm volatile" code is illegally optimized
   20832      * [109]8988: loop optimizer bug: with -O2, code is generated that
   20833        segfaults (found on i386, bug present for all platforms)
   20834      * [110]9492: structure copy clobbers subsequent stores to structure
   20835 
   20836     Objective-C bugs
   20837 
   20838      * [111]9267: Objective-C parser won't build with newer bison versions
   20839        (e.g. 1.875)
   20840 
   20841     Ada bugs
   20842 
   20843      * [112]8344: Ada build problem due to conflict between gcc/final.o,
   20844        gcc/ada/final.o
   20845 
   20846     Preprocessor bugs
   20847 
   20848      * [113]8524: _Pragma within macros is improperly expanded
   20849      * [114]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
   20850        -fshort-wchar
   20851 
   20852     ARM-specific
   20853 
   20854      * [115]9090: arm ICE with >= -O2; regression from gcc-2.95
   20855 
   20856     x86-specific (Intel/AMD)
   20857 
   20858      * [116]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
   20859      * [117]8599: loop unroll bug with -march=k6-3
   20860      * [118]9506: ABI breakage in structure return (affects BSD and
   20861        Cygwin, but not GNU/Linux)
   20862 
   20863     FreeBSD 5.0 specific
   20864 
   20865      * [119]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
   20866 
   20867     RTEMS-specific
   20868 
   20869      * [120]9292: hppa1.1-rtems configurery problems
   20870      * [121]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
   20871      * [122]9295: [mips-rtems] config/mips/rtems.h init/fini issue
   20872      * [123]9296: gthr-rtems regression
   20873      * [124]9316: powerpc-rtems: extending multilibs
   20874 
   20875     HP-PA specific
   20876 
   20877      * [125]9493: ICE with -O2 when building a simple function
   20878 
   20879     Documentation
   20880 
   20881      * [126]7341: hyperlink to gcov in GCC documentation doesn't work
   20882      * [127]8947: Please add a warning about "-malign-double" in docs
   20883      * [128]7448, [129]8882: typo cleanups
   20884      __________________________________________________________________
   20885 
   20886 [130]GCC 3.2.1
   20887 
   20888    3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
   20889    generates code that is known not to be binary-compatible with the
   20890    vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included
   20891    in the distribution, for details.
   20892 
   20893    This release also removes an old GCC extension, "naming types", and the
   20894    documentation now directs users to use a different GCC extension,
   20895    __typeof__, instead. The feature had evidently been broken for a while.
   20896 
   20897    Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and
   20898    the new warning there are no new features that were not present in GCC
   20899    3.2.
   20900 
   20901    In addition, the previous fix for [131]PR 7445 (poor performance of
   20902    std::locale::classic() in multi-threaded applications) was reverted
   20903    ("unfixed"), because the "fix" was not thread-safe.
   20904 
   20905   Bug Fixes
   20906 
   20907    This section lists the problem reports (PRs) from GCC's bug tracking
   20908    system that are known to be fixed in the 3.2.1 release. This list might
   20909    not be complete (that is, it is possible that some PRs that have been
   20910    fixed are not listed here). As you can see, the number of bug fixes is
   20911    quite large, so it is strongly recommended that users of earlier GCC
   20912    3.x releases upgrade to GCC 3.2.1.
   20913 
   20914     Internal Compiler Errors (multi-platform)
   20915 
   20916      * [132]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
   20917      * [133]5661: (c++) ICE instantiating template on array of unknown
   20918        size (bad code)
   20919      * [134]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
   20920        64-bit platforms
   20921      * [135]6994: (c++) ICE in find_function_data
   20922      * [136]7150: preprocessor: GCC -dM -E gives an ICE
   20923      * [137]7160: ICE when optimizing branches without a return value
   20924      * [138]7228: (c++) ICE when using member template and template
   20925        function
   20926      * [139]7266: (c++) ICE with -pedantic on missing typename
   20927      * [140]7353: ICE from use of "Naming Types" extension, see above
   20928      * [141]7411: ICE in instantiate_virtual_regs_1, in function.c
   20929      * [142]7478: (c++) ICE on static_cast inside template
   20930      * [143]7526: preprocessor core dump when _Pragma implies #pragma
   20931        dependency
   20932      * [144]7721: (c++) ICE on simple (but incorrect) template ([145]7803
   20933        is a duplicate)
   20934      * [146]7754: (c++) ICE on union with template parameter
   20935      * [147]7788: (c++) redeclaring a definition as an incomplete class
   20936        causes ICE
   20937      * [148]8031: (c++) ICE in comptypes, in cp/typeck.c
   20938      * [149]8055: preprocessor dies with SIG11 when building FreeBSD
   20939        kernel
   20940      * [150]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
   20941        variables
   20942      * [151]8134: (c++) ICE in force_store_init_value on legal code
   20943      * [152]8149: (c++) ICE on incomplete type
   20944      * [153]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
   20945        initialization
   20946 
   20947     C++ (compiler and library) bugs
   20948 
   20949      * [154]5607: No pointer adjustment in covariant return types
   20950      * [155]6579: Infinite loop with statement expressions in member
   20951        initialization
   20952      * [156]6803: Default copy constructor bug in GCC 3.1
   20953      * [157]7176: g++ confused by friend and static member with same name
   20954      * [158]7188: Segfault with template class and recursive (incorrect)
   20955        initializer list
   20956      * [159]7306: Regression: GCC 3.x fails to compile code with virtual
   20957        inheritance if a method has a variable number of arguments
   20958      * [160]7461: ctype<char>::classic_table() returns offset array on
   20959        Cygwin
   20960      * [161]7524: f(const float arg[3]) fails
   20961      * [162]7584: Erroneous ambiguous base error on using declaration
   20962      * [163]7676: Member template overloading problem
   20963      * [164]7679: infinite loop when a right parenthesis is missing
   20964      * [165]7811: default locale not taken from environment
   20965      * [166]7961: compare( char *) implemented incorrectly in
   20966        basic_string<>
   20967      * [167]8071: basic_ostream::operator<<(streambuf*) loops forever if
   20968        streambuf::underflow() leaves gptr() NULL (dups: [168]8127,
   20969        [169]6745)
   20970      * [170]8096: deque::at() throws std::range_error instead of
   20971        std::out_of_range
   20972      * [171]8127: cout << cin.rdbuf() infinite loop
   20973      * [172]8218: Excessively large memory consumed for classes with large
   20974        array members
   20975      * [173]8287: GCC 3.2: Destructor called for non-constructed local
   20976        object
   20977      * [174]8347: empty vector range used in string construction causes
   20978        core dump
   20979      * [175]8348: fail() flag is set in istringstream when eof() flag is
   20980        set
   20981      * [176]8391: regression: infinite loop in cp/decl2.c(finish_file)
   20982 
   20983     C and optimizer bugs
   20984 
   20985      * [177]6627: -fno-align-functions doesn't seem to disable function
   20986        alignment
   20987      * [178]6631: life_analysis misoptimizes code to initialize fields of
   20988        a structure
   20989      * [179]7102: unsigned char division results in floating exception
   20990      * [180]7120: Run once loop should *always* be unrolled
   20991        (pessimization)
   20992      * [181]7209: Bug involving array referencing and ?: operator
   20993      * [182]7515: invalid inlining of global function with -O3
   20994      * [183]7814: incorrect scheduling for glibc-2.2.92 strcpy test
   20995      * [184]8467: bug in sibling call optimization
   20996 
   20997     Preprocessor bugs
   20998 
   20999      * [185]4890: incorrect line markers from the traditional preprocessor
   21000      * [186]7357: -M option omits system headers files (making it the same
   21001        as -MM)
   21002      * [187]7358: Changes to Sun's make Dependencies
   21003      * [188]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
   21004        C headers
   21005      * [189]7862: Interrupting GCC -MD removes .d file but not .o
   21006      * [190]8190: Failed compilation deletes -MD dependency file
   21007      * [191]8524: _Pragma within macro is improperly expanded
   21008 
   21009     x86 specific (Intel/AMD)
   21010 
   21011      * [192]5351: (i686-only) function pass-by-value structure copy
   21012        corrupts stack ([193]7591 is a duplicate)
   21013      * [194]6845, [195]7034, [196]7124, [197]7174: ICE's with
   21014        -march=pentium3/pentium2/athlon (these are all the same underlying
   21015        bug, in MMX register use)
   21016      * [198]7134, [199]7375, [200]7390: ICE with -march=athlon (maybe same
   21017        as above?)
   21018      * [201]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
   21019      * [202]6981: wrong code in 64-bit manipulation on x86
   21020      * [203]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
   21021        macro
   21022      * [204]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
   21023        intrinsics are broken
   21024      * [205]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
   21025        -march=pentium4
   21026      * [206]7693: Typo in i386 mmintrin.h header
   21027      * [207]7723: ICE - Pentium3 sse - GCC 3.2
   21028      * [208]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
   21029      * [209]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
   21030 
   21031     PowerPC specific
   21032 
   21033      * [210]5967: GCC bug when profiling nested functions on powerpc
   21034      * [211]6984: wrong code generated with -O2, -O3, -Os for do-while
   21035        loop on PowerPC
   21036      * [212]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
   21037      * [213]7130: miscompiled code for GCC-3.1 on
   21038        powerpc-unknown-linux-gnu with -funroll-all-loops
   21039      * [214]7133: PowerPC ICE: unrecognizable insn
   21040      * [215]7380: ICE in extract_insn, at recog.c:2148
   21041      * [216]8252: ICE on Altivec code with optimization turned on
   21042      * [217]8451: Altivec ICE in GCC 3.2
   21043 
   21044     HP/PA specific
   21045 
   21046      * [218]7250: __ashrdi3 returns wrong value on 32 bit hppa
   21047 
   21048     SPARC specific
   21049 
   21050      * [219]6668: when using --disable-multilib, libgcc_s.so is installed
   21051        in the wrong place on sparc-solaris
   21052      * [220]7151: ICE when compiling for UltraSPARC
   21053      * [221]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
   21054        double and -O1
   21055      * [222]7842: [REGRESSION] SPARC code gen bug
   21056 
   21057     ARM specific
   21058 
   21059      * [223]7856: [arm] invalid offset in constant pool reference
   21060      * [224]7967: optimization produces wrong code (ARM)
   21061 
   21062     Alpha specific
   21063 
   21064      * [225]7374: __builtin_fabsl broken on alpha
   21065 
   21066     IBM s390 specific
   21067 
   21068      * [226]7370: ICE in fixup_var_refs_1 on s390x
   21069      * [227]7409: loop optimization bug on s390x-linux-gnu
   21070      * [228]8232: s390x: ICE when using bcmp with int length argument
   21071 
   21072     SCO specific
   21073 
   21074      * [229]7623: SCO OpenServer build fails with machmode.def: undefined
   21075        symbol: BITS_PER_UNIT
   21076 
   21077     m68k/Coldfire specific
   21078 
   21079      * [230]8314: crtbegin, crtend need to be multilib'ed for this
   21080        platform
   21081 
   21082     Documentation
   21083 
   21084      * [231]761: Document some undocumented options
   21085      * [232]5610: Fix documentation about invoking SSE instructions
   21086        (-mfpmath=sse)
   21087      * [233]7484: List -Wmissing-declarations as C-only option
   21088      * [234]7531: -mcmodel not documented for x86-64
   21089      * [235]8120: Update documentation of bad use of ##
   21090      __________________________________________________________________
   21091 
   21092 [236]GCC 3.2
   21093 
   21094    3.2 is a small bug fix release, but there is a change to the
   21095    application binary interface (ABI), hence the change to the second part
   21096    of the version number.
   21097 
   21098    The main purpose of the 3.2 release is to correct a couple of problems
   21099    in the C++ ABI, with the intention of providing a stable interface
   21100    going forward.  Accordingly, 3.2 is only a small change to 3.1.1.
   21101 
   21102   Bug Fixes
   21103 
   21104     C++
   21105 
   21106      * [237]7320: g++ 3.2 relocation problem
   21107      * [238]7470: vtable: virtual function pointers not in declaration
   21108        order
   21109 
   21110     libstdc++
   21111 
   21112      * [239]6410: Trouble with non-ASCII monetary symbols and wchar_t
   21113      * [240]6503, [241]6642, [242]7186: Problems with comparing or
   21114        subtracting various types of const and non-const iterators
   21115      * [243]7216: ambiguity with basic_iostream::traits_type
   21116      * [244]7220: problem with basic_istream::ignore(0,delimiter)
   21117      * [245]7222: locale::operator==() doesn't work on std::locale("")
   21118      * [246]7286: placement operator delete issue
   21119      * [247]7442: cxxabi.h does not match the C++ ABI
   21120      * [248]7445: poor performance of std::locale::classic() in
   21121        multi-threaded applications
   21122 
   21123     x86-64 specific
   21124 
   21125      * [249]7291: off-by-one in generated inline bzero code for x86-64
   21126 
   21127 
   21128     For questions related to the use of GCC, please consult these web
   21129     pages and the [250]GCC manuals. If that fails, the
   21130     [251]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21131     web pages and the development of GCC are welcome on our developer
   21132     list at [252]gcc (a] gcc.gnu.org. All of [253]our lists have public
   21133     archives.
   21134 
   21135    Copyright (C) [254]Free Software Foundation, Inc. Verbatim copying and
   21136    distribution of this entire article is permitted in any medium,
   21137    provided this notice is preserved.
   21138 
   21139    These pages are [255]maintained by the GCC team. Last modified
   21140    2025-04-08.
   21141 
   21142 References
   21143 
   21144    1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   21145    2. https://gcc.gnu.org/gcc-3.1/changes.html
   21146    3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
   21147    4. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.3
   21148    5. https://gcc.gnu.org/PR3782
   21149    6. https://gcc.gnu.org/PR6440
   21150    7. https://gcc.gnu.org/PR7050
   21151    8. https://gcc.gnu.org/PR7741
   21152    9. https://gcc.gnu.org/PR7982
   21153   10. https://gcc.gnu.org/PR8068
   21154   11. https://gcc.gnu.org/PR8178
   21155   12. https://gcc.gnu.org/PR8396
   21156   13. https://gcc.gnu.org/PR8674
   21157   14. https://gcc.gnu.org/PR9768
   21158   15. https://gcc.gnu.org/PR9798
   21159   16. https://gcc.gnu.org/PR9799
   21160   17. https://gcc.gnu.org/PR9928
   21161   18. https://gcc.gnu.org/PR10114
   21162   19. https://gcc.gnu.org/PR10352
   21163   20. https://gcc.gnu.org/PR10336
   21164   21. https://gcc.gnu.org/PR8224
   21165   22. https://gcc.gnu.org/PR8613
   21166   23. https://gcc.gnu.org/PR8828
   21167   24. https://gcc.gnu.org/PR9226
   21168   25. https://gcc.gnu.org/PR9853
   21169   26. https://gcc.gnu.org/PR9797
   21170   27. https://gcc.gnu.org/PR9967
   21171   28. https://gcc.gnu.org/PR10116
   21172   29. https://gcc.gnu.org/PR10171
   21173   30. https://gcc.gnu.org/PR10175
   21174   31. https://gcc.gnu.org/PR8316
   21175   32. https://gcc.gnu.org/PR9169
   21176   33. https://gcc.gnu.org/PR9420
   21177   34. https://gcc.gnu.org/PR9459
   21178   35. https://gcc.gnu.org/PR9507
   21179   36. https://gcc.gnu.org/PR9538
   21180   37. https://gcc.gnu.org/PR9602
   21181   38. https://gcc.gnu.org/PR9993
   21182   39. https://gcc.gnu.org/PR10167
   21183   40. https://gcc.gnu.org/PR9652
   21184   41. https://gcc.gnu.org/PR10144
   21185   42. https://gcc.gnu.org/PR8746
   21186   43. https://gcc.gnu.org/PR9888
   21187   44. https://gcc.gnu.org/PR9638
   21188   45. https://gcc.gnu.org/PR9954
   21189   46. https://gcc.gnu.org/PR7784
   21190   47. https://gcc.gnu.org/PR7796
   21191   48. https://gcc.gnu.org/PR8281
   21192   49. https://gcc.gnu.org/PR8366
   21193   50. https://gcc.gnu.org/PR8726
   21194   51. https://gcc.gnu.org/PR9414
   21195   52. https://gcc.gnu.org/PR10067
   21196   53. https://gcc.gnu.org/PR7248
   21197   54. https://gcc.gnu.org/PR8343
   21198   55. https://gcc.gnu.org/PR9732
   21199   56. https://gcc.gnu.org/PR10073
   21200   57. https://gcc.gnu.org/PR7702
   21201   58. https://gcc.gnu.org/PR9671
   21202   59. https://gcc.gnu.org/PR8694
   21203   60. https://gcc.gnu.org/PR9953
   21204   61. https://gcc.gnu.org/PR10271
   21205   62. https://gcc.gnu.org/PR6362
   21206   63. https://gcc.gnu.org/PR10377
   21207   64. https://gcc.gnu.org/PR6955
   21208   65. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.2
   21209   66. https://gcc.gnu.org/PR5919
   21210   67. https://gcc.gnu.org/PR7129
   21211   68. https://gcc.gnu.org/PR7507
   21212   69. https://gcc.gnu.org/PR7622
   21213   70. https://gcc.gnu.org/PR7681
   21214   71. https://gcc.gnu.org/PR9528
   21215   72. https://gcc.gnu.org/PR8031
   21216   73. https://gcc.gnu.org/PR8275
   21217   74. https://gcc.gnu.org/PR8332
   21218   75. https://gcc.gnu.org/PR8372
   21219   76. https://gcc.gnu.org/PR8439
   21220   77. https://gcc.gnu.org/PR8442
   21221   78. https://gcc.gnu.org/PR8518
   21222   79. https://gcc.gnu.org/PR8615
   21223   80. https://gcc.gnu.org/PR8663
   21224   81. https://gcc.gnu.org/PR8799
   21225   82. https://gcc.gnu.org/PR9328
   21226   83. https://gcc.gnu.org/PR9465
   21227   84. https://gcc.gnu.org/PR47
   21228   85. https://gcc.gnu.org/PR6745
   21229   86. https://gcc.gnu.org/PR8214
   21230   87. https://gcc.gnu.org/PR8493
   21231   88. https://gcc.gnu.org/PR8332
   21232   89. https://gcc.gnu.org/PR8503
   21233   90. https://gcc.gnu.org/PR8727
   21234   91. https://gcc.gnu.org/PR7445
   21235   92. https://gcc.gnu.org/PR8230
   21236   93. https://gcc.gnu.org/PR8399
   21237   94. https://gcc.gnu.org/PR8662
   21238   95. https://gcc.gnu.org/PR8707
   21239   96. https://gcc.gnu.org/PR8708
   21240   97. https://gcc.gnu.org/PR8790
   21241   98. https://gcc.gnu.org/PR8887
   21242   99. https://gcc.gnu.org/PR9076
   21243  100. https://gcc.gnu.org/PR9151
   21244  101. https://gcc.gnu.org/PR9168
   21245  102. https://gcc.gnu.org/PR9269
   21246  103. https://gcc.gnu.org/PR9322
   21247  104. https://gcc.gnu.org/PR9433
   21248  105. https://gcc.gnu.org/PR8032
   21249  106. https://gcc.gnu.org/PR8639
   21250  107. https://gcc.gnu.org/PR8794
   21251  108. https://gcc.gnu.org/PR8832
   21252  109. https://gcc.gnu.org/PR8988
   21253  110. https://gcc.gnu.org/PR9492
   21254  111. https://gcc.gnu.org/PR9267
   21255  112. https://gcc.gnu.org/PR8344
   21256  113. https://gcc.gnu.org/PR8524
   21257  114. https://gcc.gnu.org/PR8880
   21258  115. https://gcc.gnu.org/PR9090
   21259  116. https://gcc.gnu.org/PR8588
   21260  117. https://gcc.gnu.org/PR8599
   21261  118. https://gcc.gnu.org/PR9506
   21262  119. https://gcc.gnu.org/PR9484
   21263  120. https://gcc.gnu.org/PR9292
   21264  121. https://gcc.gnu.org/PR9293
   21265  122. https://gcc.gnu.org/PR9295
   21266  123. https://gcc.gnu.org/PR9296
   21267  124. https://gcc.gnu.org/PR9316
   21268  125. https://gcc.gnu.org/PR9493
   21269  126. https://gcc.gnu.org/PR7341
   21270  127. https://gcc.gnu.org/PR8947
   21271  128. https://gcc.gnu.org/PR7448
   21272  129. https://gcc.gnu.org/PR8882
   21273  130. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.1
   21274  131. https://gcc.gnu.org/PR7445
   21275  132. https://gcc.gnu.org/PR2521
   21276  133. https://gcc.gnu.org/PR5661
   21277  134. https://gcc.gnu.org/PR6419
   21278  135. https://gcc.gnu.org/PR6994
   21279  136. https://gcc.gnu.org/PR7150
   21280  137. https://gcc.gnu.org/PR7160
   21281  138. https://gcc.gnu.org/PR7228
   21282  139. https://gcc.gnu.org/PR7266
   21283  140. https://gcc.gnu.org/PR7353
   21284  141. https://gcc.gnu.org/PR7411
   21285  142. https://gcc.gnu.org/PR7478
   21286  143. https://gcc.gnu.org/PR7526
   21287  144. https://gcc.gnu.org/PR7721
   21288  145. https://gcc.gnu.org/PR7803
   21289  146. https://gcc.gnu.org/PR7754
   21290  147. https://gcc.gnu.org/PR7788
   21291  148. https://gcc.gnu.org/PR8031
   21292  149. https://gcc.gnu.org/PR8055
   21293  150. https://gcc.gnu.org/PR8067
   21294  151. https://gcc.gnu.org/PR8134
   21295  152. https://gcc.gnu.org/PR8149
   21296  153. https://gcc.gnu.org/PR8160
   21297  154. https://gcc.gnu.org/PR5607
   21298  155. https://gcc.gnu.org/PR6579
   21299  156. https://gcc.gnu.org/PR6803
   21300  157. https://gcc.gnu.org/PR7176
   21301  158. https://gcc.gnu.org/PR7188
   21302  159. https://gcc.gnu.org/PR7306
   21303  160. https://gcc.gnu.org/PR7461
   21304  161. https://gcc.gnu.org/PR7524
   21305  162. https://gcc.gnu.org/PR7584
   21306  163. https://gcc.gnu.org/PR7676
   21307  164. https://gcc.gnu.org/PR7679
   21308  165. https://gcc.gnu.org/PR7811
   21309  166. https://gcc.gnu.org/PR7961
   21310  167. https://gcc.gnu.org/PR8071
   21311  168. https://gcc.gnu.org/PR8127
   21312  169. https://gcc.gnu.org/PR6745
   21313  170. https://gcc.gnu.org/PR8096
   21314  171. https://gcc.gnu.org/PR8127
   21315  172. https://gcc.gnu.org/PR8218
   21316  173. https://gcc.gnu.org/PR8287
   21317  174. https://gcc.gnu.org/PR8347
   21318  175. https://gcc.gnu.org/PR8348
   21319  176. https://gcc.gnu.org/PR8391
   21320  177. https://gcc.gnu.org/PR6627
   21321  178. https://gcc.gnu.org/PR6631
   21322  179. https://gcc.gnu.org/PR7102
   21323  180. https://gcc.gnu.org/PR7120
   21324  181. https://gcc.gnu.org/PR7209
   21325  182. https://gcc.gnu.org/PR7515
   21326  183. https://gcc.gnu.org/PR7814
   21327  184. https://gcc.gnu.org/PR8467
   21328  185. https://gcc.gnu.org/PR4890
   21329  186. https://gcc.gnu.org/PR7357
   21330  187. https://gcc.gnu.org/PR7358
   21331  188. https://gcc.gnu.org/PR7602
   21332  189. https://gcc.gnu.org/PR7862
   21333  190. https://gcc.gnu.org/PR8190
   21334  191. https://gcc.gnu.org/PR8524
   21335  192. https://gcc.gnu.org/PR5351
   21336  193. https://gcc.gnu.org/PR7591
   21337  194. https://gcc.gnu.org/PR6845
   21338  195. https://gcc.gnu.org/PR7034
   21339  196. https://gcc.gnu.org/PR7124
   21340  197. https://gcc.gnu.org/PR7174
   21341  198. https://gcc.gnu.org/PR7134
   21342  199. https://gcc.gnu.org/PR7375
   21343  200. https://gcc.gnu.org/PR7390
   21344  201. https://gcc.gnu.org/PR6890
   21345  202. https://gcc.gnu.org/PR6981
   21346  203. https://gcc.gnu.org/PR7242
   21347  204. https://gcc.gnu.org/PR7396
   21348  205. https://gcc.gnu.org/PR7630
   21349  206. https://gcc.gnu.org/PR7693
   21350  207. https://gcc.gnu.org/PR7723
   21351  208. https://gcc.gnu.org/PR7951
   21352  209. https://gcc.gnu.org/PR8146
   21353  210. https://gcc.gnu.org/PR5967
   21354  211. https://gcc.gnu.org/PR6984
   21355  212. https://gcc.gnu.org/PR7114
   21356  213. https://gcc.gnu.org/PR7130
   21357  214. https://gcc.gnu.org/PR7133
   21358  215. https://gcc.gnu.org/PR7380
   21359  216. https://gcc.gnu.org/PR8252
   21360  217. https://gcc.gnu.org/PR8451
   21361  218. https://gcc.gnu.org/PR7250
   21362  219. https://gcc.gnu.org/PR6668
   21363  220. https://gcc.gnu.org/PR7151
   21364  221. https://gcc.gnu.org/PR7335
   21365  222. https://gcc.gnu.org/PR7842
   21366  223. https://gcc.gnu.org/PR7856
   21367  224. https://gcc.gnu.org/PR7967
   21368  225. https://gcc.gnu.org/PR7374
   21369  226. https://gcc.gnu.org/PR7370
   21370  227. https://gcc.gnu.org/PR7409
   21371  228. https://gcc.gnu.org/PR8232
   21372  229. https://gcc.gnu.org/PR7623
   21373  230. https://gcc.gnu.org/PR8314
   21374  231. https://gcc.gnu.org/PR761
   21375  232. https://gcc.gnu.org/PR5610
   21376  233. https://gcc.gnu.org/PR7484
   21377  234. https://gcc.gnu.org/PR7531
   21378  235. https://gcc.gnu.org/PR8120
   21379  236. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2
   21380  237. https://gcc.gnu.org/PR7320
   21381  238. https://gcc.gnu.org/PR7470
   21382  239. https://gcc.gnu.org/PR6410
   21383  240. https://gcc.gnu.org/PR6503
   21384  241. https://gcc.gnu.org/PR6642
   21385  242. https://gcc.gnu.org/PR7186
   21386  243. https://gcc.gnu.org/PR7216
   21387  244. https://gcc.gnu.org/PR7220
   21388  245. https://gcc.gnu.org/PR7222
   21389  246. https://gcc.gnu.org/PR7286
   21390  247. https://gcc.gnu.org/PR7442
   21391  248. https://gcc.gnu.org/PR7445
   21392  249. https://gcc.gnu.org/PR7291
   21393  250. https://gcc.gnu.org/onlinedocs/
   21394  251. mailto:gcc-help (a] gcc.gnu.org
   21395  252. mailto:gcc (a] gcc.gnu.org
   21396  253. https://gcc.gnu.org/lists.html
   21397  254. https://www.fsf.org/
   21398  255. https://gcc.gnu.org/about.html
   21399 ======================================================================
   21400 http://gcc.gnu.org/gcc-3.1/index.html
   21401 
   21402                                     GCC 3.1
   21403 
   21404    (This release series is no longer supported.)
   21405 
   21406    July 27, 2002
   21407 
   21408    The GNU project and the GCC developers are pleased to announce the
   21409    release of GCC 3.1.1.
   21410 
   21411    The links below still apply to GCC 3.1.1.
   21412 
   21413    May 15, 2002
   21414 
   21415    The [1]GNU project and the GCC developers are pleased to announce the
   21416    release of GCC 3.1.
   21417 
   21418    GCC used to stand for the GNU C Compiler, but since the compiler
   21419    supports several other languages aside from C, it now stands for the
   21420    GNU Compiler Collection.
   21421 
   21422    A list of [2]successful builds is updated as new information becomes
   21423    available.
   21424 
   21425    The GCC developers would like to thank the numerous people that have
   21426    contributed [3]new features, improvements, bug fixes, and other changes
   21427    as well as test results to GCC. This [4]amazing group of volunteers is
   21428    what makes GCC successful.
   21429 
   21430    For additional information about GCC please refer to the [5]GCC project
   21431    web site or contact the [6]GCC development mailing list.
   21432 
   21433    To obtain GCC please use [7]our mirror sites, or our CVS server.
   21434      __________________________________________________________________
   21435 
   21436 
   21437     For questions related to the use of GCC, please consult these web
   21438     pages and the [8]GCC manuals. If that fails, the
   21439     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21440     web pages and the development of GCC are welcome on our developer
   21441     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   21442     archives.
   21443 
   21444    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   21445    distribution of this entire article is permitted in any medium,
   21446    provided this notice is preserved.
   21447 
   21448    These pages are [13]maintained by the GCC team. Last modified
   21449    2024-07-04.
   21450 
   21451 References
   21452 
   21453    1. https://www.gnu.org/
   21454    2. https://gcc.gnu.org/gcc-3.1/buildstat.html
   21455    3. https://gcc.gnu.org/gcc-3.1/changes.html
   21456    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   21457    5. https://gcc.gnu.org/index.html
   21458    6. mailto:gcc (a] gcc.gnu.org
   21459    7. https://gcc.gnu.org/mirrors.html
   21460    8. https://gcc.gnu.org/onlinedocs/
   21461    9. mailto:gcc-help (a] gcc.gnu.org
   21462   10. mailto:gcc (a] gcc.gnu.org
   21463   11. https://gcc.gnu.org/lists.html
   21464   12. https://www.fsf.org/
   21465   13. https://gcc.gnu.org/about.html
   21466 ======================================================================
   21467 http://gcc.gnu.org/gcc-3.1/changes.html
   21468 
   21469                              GCC 3.1 Release Series
   21470                         Changes, New Features, and Fixes
   21471 
   21472 Additional changes in GCC 3.1.1
   21473 
   21474      * A bug related to how structures and unions are returned has been
   21475        fixed for powerpc-*-netbsd*.
   21476      * An important bug in the implementation of -fprefetch-loop-arrays
   21477        has been fixed. Previously the optimization prefetched random
   21478        blocks of memory for most targets except for i386.
   21479      * The Java compiler now compiles Java programs much faster and also
   21480        works with parallel make.
   21481      * Nested functions have been fixed for mips*-*-netbsd*.
   21482      * Some missing floating point support routines have beed added for
   21483        mips*-*-netbsd*.
   21484      * This [1]message gives additional information about the bugs fixed
   21485        in this release.
   21486 
   21487 Caveats
   21488 
   21489      * The -traditional C compiler option has been deprecated and will be
   21490        removed in GCC 3.3. (It remains possible to preprocess non-C code
   21491        with the traditional preprocessor.)
   21492      * The default debugging format for most ELF platforms (including
   21493        GNU/Linux and FreeBSD; notable exception is Solaris) has changed
   21494        from stabs to DWARF2. This requires GDB 5.1.1 or later.
   21495 
   21496 General Optimizer Improvements
   21497 
   21498      * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat,
   21499        and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure
   21500        for profile driven optimizations.
   21501        Options -fprofile-arcs and -fbranch-probabilities can now be used
   21502        to improve speed of the generated code by profiling the actual
   21503        program behaviour on typical runs. In the absence of profile info
   21504        the compiler attempts to guess the profile statically.
   21505      * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
   21506        monitor performance of the generated code.
   21507        According to the SPECInt2000 results on an AMD Athlon CPU, the code
   21508        generated by GCC 3.1 is 6% faster on the average (8.2% faster with
   21509        profile feedback) compared to GCC 3.0. The code produced by GCC 3.0
   21510        is about 2.1% faster compared to 2.95.3. Tests were done using the
   21511        -O2 -march=athlon command-line options.
   21512      * Alexandre Oliva, of Red Hat, has generalized the tree inlining
   21513        infrastructure developed by CodeSourcery, LLC for the C++ front
   21514        end, so that it is now used in the C front end too. Inlining
   21515        functions as trees exposes them earlier to the compiler, giving it
   21516        more opportunities for optimization.
   21517      * Support for data prefetching instructions has been added to the GCC
   21518        back end and several targets. A new __builtin_prefetch intrinsic is
   21519        available to explicitly insert prefetch instructions and
   21520        experimental support for loop array prefetching has been added (see
   21521        -fprefetch-loop-array documentation).
   21522      * Support for emitting debugging information for macros has been
   21523        added for DWARF2. It is activated using -g3.
   21524 
   21525 New Languages and Language specific improvements
   21526 
   21527   C/C++
   21528 
   21529      * A few more [4]ISO C99 features.
   21530      * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0.
   21531      * The preprocessor's symbol table has been merged with the symbol
   21532        table of the C, C++ and Objective-C front ends.
   21533      * The preprocessor consumes less memory than the preprocessor in GCC
   21534        3.0, often significantly so. On normal input files, it typically
   21535        consumes less memory than pre-3.0 cccp-based GCC, too.
   21536 
   21537   C++
   21538 
   21539      * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std
   21540        was a workaround to allow std compliant code to work with the
   21541        non-std compliant libstdc++-v2. libstdc++-v3 is std compliant.
   21542      * The C++ ABI has been fixed so that void (A::*)() const is mangled
   21543        as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only
   21544        affects pointer to cv-qualified member function types.
   21545      * The C++ ABI has been changed to correctly handle this code:
   21546     struct A {
   21547       void operator delete[] (void *, size_t);
   21548     };
   21549 
   21550     struct B : public A {
   21551     };
   21552 
   21553     new B[10];
   21554 
   21555        The amount of storage allocated for the array will be greater than
   21556        it was in 3.0, in order to store the number of elements in the
   21557        array, so that the correct size can be passed to operator delete[]
   21558        when the array is deleted. Previously, the value passed to operator
   21559        delete[] was unpredictable.
   21560        This change will only affect code that declares a two-argument
   21561        operator delete[] with a second parameter of type size_t in a base
   21562        class, and does not override that definition in a derived class.
   21563      * The C++ ABI has been changed so that:
   21564     struct A {
   21565       void operator delete[] (void *, size_t);
   21566       void operator delete[] (void *);
   21567     };
   21568 
   21569        does not cause unnecessary storage to be allocated when an array of
   21570        A objects is allocated.
   21571        This change will only affect code that declares both of these forms
   21572        of operator delete[], and declared the two-argument form before the
   21573        one-argument form.
   21574      * The C++ ABI has been changed so that when a parameter is passed by
   21575        value, any cleanup for that parameter is performed in the caller,
   21576        as specified by the ia64 C++ ABI, rather than the called function
   21577        as before. As a result, classes with a non-trivial destructor but a
   21578        trivial copy constructor will be passed and returned by invisible
   21579        reference, rather than by bitwise copy as before.
   21580      * G++ now supports the "named return value optimization": for code
   21581        like
   21582     A f () {
   21583       A a;
   21584       ...
   21585       return a;
   21586     }
   21587 
   21588        G++ will allocate a in the return value slot, so that the return
   21589        becomes a no-op. For this to work, all return statements in the
   21590        function must return the same variable.
   21591      * Improvements to the C++ library are listed in [5]the libstdc++-v3
   21592        FAQ.
   21593 
   21594   Objective-C
   21595 
   21596      * Annoying linker warnings (due to incorrect code being generated)
   21597        have been fixed.
   21598      * If a class method cannot be found, the compiler no longer issues a
   21599        warning if a corresponding instance method exists in the root
   21600        class.
   21601      * Forward @protocol declarations have been fixed.
   21602      * Loading of categories has been fixed in certain situations (GNU run
   21603        time only).
   21604      * The class lookup in the run-time library has been rewritten so that
   21605        class method dispatch is more than twice as fast as it used to be
   21606        (GNU run time only).
   21607 
   21608   Java
   21609 
   21610      * libgcj now includes RMI, java.lang.ref.*, javax.naming, and
   21611        javax.transaction.
   21612      * Property files and other system resources can be compiled into
   21613        executables which use libgcj using the new gcj --resource feature.
   21614      * libgcj has been ported to more platforms. In particular there is
   21615        now a mostly-functional mingw32 (Windows) target port.
   21616      * JNI and CNI invocation interfaces were implemented, so gcj-compiled
   21617        Java code can now be called from a C/C++ application.
   21618      * gcj can now use builtin functions for certain known methods, for
   21619        instance Math.cos.
   21620      * gcj can now automatically remove redundant array-store checks in
   21621        some common cases.
   21622      * The --no-store-checks optimization option was added. This can be
   21623        used to omit runtime store checks for code which is known not to
   21624        throw ArrayStoreException
   21625      * The following third party interface standards were added to libgcj:
   21626        org.w3c.dom and org.xml.sax.
   21627      * java.security has been merged with GNU Classpath. The new package
   21628        is now JDK 1.2 compliant, and much more complete.
   21629      * A bytecode verifier was added to the libgcj interpreter.
   21630      * java.lang.Character was rewritten to comply with the Unicode 3.0
   21631        standard, and improve performance.
   21632      * Partial support for many more locales was added to libgcj.
   21633      * Socket timeouts have been implemented.
   21634      * libgcj has been merged into a single shared library. There are no
   21635        longer separate shared libraries for the garbage collector and
   21636        zlib.
   21637      * Several performance improvements were made to gcj and libgcj:
   21638           + Hash synchronization (thin locks)
   21639           + A special allocation path for finalizer-free objects
   21640           + Thread-local allocation
   21641           + Parallel GC, and other GC tweaks
   21642 
   21643   Fortran
   21644 
   21645    Fortran improvements are listed in [6]the Fortran documentation.
   21646 
   21647   Ada
   21648 
   21649    [7]AdaCore, has contributed its GNAT Ada 95 front end and associated
   21650    tools. The GNAT compiler fully implements the Ada language as defined
   21651    by the ISO/IEC 8652 standard.
   21652 
   21653    Please note that the integration of the Ada front end is still work in
   21654    progress.
   21655 
   21656 New Targets and Target Specific Improvements
   21657 
   21658      * Hans-Peter Nilsson has contributed a port to MMIX, the CPU
   21659        architecture used in new editions of Donald E. Knuth's The Art of
   21660        Computer Programming.
   21661      * Axis Communications has contributed its port to the CRIS CPU
   21662        architecture, used in the ETRAX system-on-a-chip series.
   21663      * Alexandre Oliva, of Red Hat, has contributed a port to the SuperH
   21664        SH5 64-bit RISC microprocessor architecture, extending the existing
   21665        SH port.
   21666      * UltraSPARC is fully supported in 64-bit mode. The option -m64
   21667        enables it.
   21668      * For compatibility with the Sun compiler #pragma redefine_extname
   21669        has been implemented on Solaris.
   21670      * The x86 back end has had some noticeable work done to it.
   21671           + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas
   21672             Jaeger have contributed a port to the AMD x86-64 architecture.
   21673             For more information on x86-64 see http://www.x86-64.org.
   21674           + The compiler now supports MMX, 3DNow!, SSE, and SSE2
   21675             instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will
   21676             enable the respective instruction sets. Intel C++ compatible
   21677             MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics
   21678             will be added in next major release.
   21679           + Following those improvements, targets for Pentium MMX, K6-2,
   21680             K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were
   21681             added. Refer to the documentation on -march= and -mcpu=
   21682             options for details.
   21683           + For those targets that support it, -mfpmath=sse will cause the
   21684             compiler to generate SSE/SSE2 instructions for floating point
   21685             math instead of x87 instructions. Usually, this will lead to
   21686             quicker code -- especially on the Pentium 4. Note that only
   21687             scalar floating point instructions are used and GCC does not
   21688             exploit SIMD features yet.
   21689           + Prefetch support has been added to the Pentium III, Pentium 4,
   21690             K6-2, K6-3, and Athlon series.
   21691           + Code generated for floating point to integer conversions has
   21692             been improved leading to better performance of many 3D
   21693             applications.
   21694      * The PowerPC back end has added 64-bit PowerPC GNU/Linux support.
   21695      * C++ support for AIX has been improved.
   21696      * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the
   21697        PowerPC port supporting the AltiVec programming model (SIMD). The
   21698        support, though presently useful, is experimental and is expected
   21699        to stabilize for 3.2. The support is written to conform to
   21700        Motorola's AltiVec specs. See -maltivec.
   21701 
   21702 [8]Obsolete Systems
   21703 
   21704    Support for a number of older systems has been declared obsolete in GCC
   21705    3.1. Unless there is activity to revive them, the next release of GCC
   21706    will have their sources permanently removed.
   21707 
   21708    All configurations of the following processor architectures have been
   21709    declared obsolete:
   21710      * MIL-STD-1750A, 1750a-*-*
   21711      * AMD A29k, a29k-*-*
   21712      * Convex, c*-convex-*
   21713      * Clipper, clipper-*-*
   21714      * Elxsi, elxsi-*-*
   21715      * Intel i860, i860-*-*
   21716      * Sun picoJava, pj-*-* and pjl-*-*
   21717      * Western Electric 32000, we32k-*-*
   21718 
   21719    Most configurations of the following processor architectures have been
   21720    declared obsolete, but we are preserving a few systems which may have
   21721    active developers. It is unlikely that the remaining systems will
   21722    survive much longer unless we see definite signs of port activity.
   21723      * Motorola 88000 except
   21724           + Generic a.out, m88k-*-aout*
   21725           + Generic SVR4, m88k-*-sysv4
   21726           + OpenBSD, m88k-*-openbsd*
   21727      * NS32k except
   21728           + NetBSD, ns32k-*-netbsd*
   21729           + OpenBSD, ns32k-*-openbsd*.
   21730      * ROMP except
   21731           + OpenBSD, romp-*-openbsd*.
   21732 
   21733    Finally, only some configurations of these processor architectures are
   21734    being obsoleted.
   21735      * Alpha:
   21736           + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka
   21737             alpha*-*-osf[45], are still supported.)
   21738      * ARM:
   21739           + RISCiX, arm-*-riscix*.
   21740      * i386:
   21741           + 386BSD, i?86-*-bsd*
   21742           + Chorus, i?86-*-chorusos*
   21743           + DG/UX, i?86-*-dgux*
   21744           + FreeBSD 1.x, i?86-*-freebsd1.*
   21745           + IBM AIX, i?86-*-aix*
   21746           + ISC UNIX, i?86-*-isc*
   21747           + GNU/Linux with pre-BFD linker, i?86-*-linux*oldld*
   21748           + NEXTstep, i?86-next-*
   21749           + OSF UNIX, i?86-*-osf1* and i?86-*-osfrose*
   21750           + RTEMS/coff, i?86-*-rtemscoff*
   21751           + RTEMS/go32, i?86-go32-rtems*
   21752           + Sequent/BSD, i?86-sequent-bsd*
   21753           + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and
   21754             i?86-sequent-sysv3*
   21755           + SunOS, i?86-*-sunos*
   21756      * Motorola 68000:
   21757           + Altos, m68[k0]*-altos-*
   21758           + Apollo, m68[k0]*-apollo-*
   21759           + Apple A/UX, m68[k0]*-apple-*
   21760           + Bull, m68[k0]*-bull-*
   21761           + Convergent, m68[k0]*-convergent-*
   21762           + Generic SVR3, m68[k0]*-*-sysv3*
   21763           + ISI, m68[k0]*-isi-*
   21764           + LynxOS, m68[k0]*-*-lynxos*
   21765           + NEXT, m68[k0]*-next-*
   21766           + RTEMS/coff, m68[k0]*-*-rtemscoff*
   21767           + Sony, m68[k0]*-sony-*
   21768      * MIPS:
   21769           + DEC Ultrix, mips-*-ultrix* and mips-dec-*
   21770           + Generic BSD, mips-*-bsd*
   21771           + Generic System V, mips-*-sysv*
   21772           + IRIX before version 5, mips-sgi-irix[1234]*
   21773           + RiscOS, mips-*-riscos*
   21774           + Sony, mips-sony-*
   21775           + Tandem, mips-tandem-*
   21776      * SPARC:
   21777           + RTEMS/a.out, sparc-*-rtemsaout*.
   21778 
   21779 Documentation improvements
   21780 
   21781      * The old manual ("Using and Porting the GNU Compiler Collection")
   21782        has been replaced by a users manual ("Using the GNU Compiler
   21783        Collection") and a separate internals reference manual ("GNU
   21784        Compiler Collection Internals").
   21785      * More complete and much improved documentation about GCC's internal
   21786        representation used by the C and C++ front ends.
   21787      * Many cleanups and improvements in general.
   21788 
   21789 
   21790     For questions related to the use of GCC, please consult these web
   21791     pages and the [9]GCC manuals. If that fails, the
   21792     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21793     web pages and the development of GCC are welcome on our developer
   21794     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   21795     archives.
   21796 
   21797    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   21798    distribution of this entire article is permitted in any medium,
   21799    provided this notice is preserved.
   21800 
   21801    These pages are [14]maintained by the GCC team. Last modified
   21802    2025-06-05.
   21803 
   21804 References
   21805 
   21806    1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
   21807    2. https://gcc.gnu.org/news/profiledriven.html
   21808    3. https://gcc.gnu.org/benchmarks/
   21809    4. https://gcc.gnu.org/projects/c-status.html
   21810    5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
   21811    6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
   21812    7. https://www.adacore.com/
   21813    8. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   21814    9. https://gcc.gnu.org/onlinedocs/
   21815   10. mailto:gcc-help (a] gcc.gnu.org
   21816   11. mailto:gcc (a] gcc.gnu.org
   21817   12. https://gcc.gnu.org/lists.html
   21818   13. https://www.fsf.org/
   21819   14. https://gcc.gnu.org/about.html
   21820 ======================================================================
   21821 http://gcc.gnu.org/gcc-3.0/index.html
   21822 
   21823                                    GCC 3.0.4
   21824 
   21825    (This release series is no longer supported.)
   21826 
   21827    February 20, 2002
   21828 
   21829    The [1]GNU project and the GCC developers are pleased to announce the
   21830    release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0
   21831    series.
   21832 
   21833    GCC used to stand for the GNU C Compiler, but since the compiler
   21834    supports several other languages aside from C, it now stands for the
   21835    GNU Compiler Collection.
   21836 
   21837    GCC 3.0.x has several new optimizations, new targets, new languages and
   21838    many other new features, relative to GCC 2.95.x. See the [2]new
   21839    features page for a more complete list.
   21840 
   21841    A list of [3]successful builds is updated as new information becomes
   21842    available.
   21843 
   21844    The GCC developers would like to thank the numerous people that have
   21845    contributed new features, test results, bug fixes, etc to GCC. This
   21846    [4]amazing group of volunteers is what makes GCC successful.
   21847 
   21848    And finally, we can't in good conscience fail to mention some
   21849    [5]caveats to using GCC 3.0.x.
   21850 
   21851    For additional information about GCC please refer to the [6]GCC project
   21852    web site or contact the [7]GCC development mailing list.
   21853 
   21854    To obtain GCC please use [8]our mirror sites, or our CVS server.
   21855      __________________________________________________________________
   21856 
   21857 Previous 3.0.x Releases
   21858 
   21859    December 20, 2001: GCC 3.0.3 has been released.
   21860    October 25, 2001: GCC 3.0.2 has been released.
   21861    August 20, 2001: GCC 3.0.1 has been released.
   21862    June 18, 2001: GCC 3.0 has been released.
   21863 
   21864 
   21865     For questions related to the use of GCC, please consult these web
   21866     pages and the [9]GCC manuals. If that fails, the
   21867     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21868     web pages and the development of GCC are welcome on our developer
   21869     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   21870     archives.
   21871 
   21872    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   21873    distribution of this entire article is permitted in any medium,
   21874    provided this notice is preserved.
   21875 
   21876    These pages are [14]maintained by the GCC team. Last modified
   21877    2024-07-04.
   21878 
   21879 References
   21880 
   21881    1. https://www.gnu.org/
   21882    2. https://gcc.gnu.org/gcc-3.0/features.html
   21883    3. https://gcc.gnu.org/gcc-3.0/buildstat.html
   21884    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   21885    5. https://gcc.gnu.org/gcc-3.0/caveats.html
   21886    6. https://gcc.gnu.org/index.html
   21887    7. mailto:gcc (a] gcc.gnu.org
   21888    8. https://gcc.gnu.org/mirrors.html
   21889    9. https://gcc.gnu.org/onlinedocs/
   21890   10. mailto:gcc-help (a] gcc.gnu.org
   21891   11. mailto:gcc (a] gcc.gnu.org
   21892   12. https://gcc.gnu.org/lists.html
   21893   13. https://www.fsf.org/
   21894   14. https://gcc.gnu.org/about.html
   21895 ======================================================================
   21896 http://gcc.gnu.org/gcc-3.0/features.html
   21897 
   21898                               GCC 3.0 New Features
   21899 
   21900 Additional changes in GCC 3.0.4
   21901 
   21902      * GCC 3.0 now supports newer versions of the [1]NetBSD operating
   21903        system, which use the ELF object file format, on x86 processors.
   21904      * Correct debugging information is generated from functions that have
   21905        lines from multiple files (e.g. yacc output).
   21906      * A fix for whitespace handling in the -traditional preprocessor,
   21907        which can affect Fortran.
   21908      * Fixes to the exception handling runtime.
   21909      * More fixes for bad code generation in C++.
   21910      * A fix for shared library generation under AIX 4.3.
   21911      * Documentation updates.
   21912      * Port of GCC to Tensilica's Xtensa processor contributed.
   21913      * A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
   21914 
   21915 Additional changes in GCC 3.0.3
   21916 
   21917      * A fix to correct an accidental change to the PowerPC ABI.
   21918      * Fixes for bad code generation on a variety of architectures.
   21919      * Improvements to the debugging information generated for C++
   21920        classes.
   21921      * Fixes for bad code generation in C++.
   21922      * A fix to avoid crashes in the C++ demangler.
   21923      * A fix to the C++ standard library to avoid buffer overflows.
   21924      * Miscellaneous improvements for a variety of architectures.
   21925 
   21926 Additional changes in GCC 3.0.2
   21927 
   21928      * Fixes for bad code generation during loop unrolling.
   21929      * Fixes for bad code generation by the sibling call optimization.
   21930      * Minor improvements to x86 code generation.
   21931      * Implementation of function descriptors in C++ vtables for IA64.
   21932      * Numerous minor bug-fixes.
   21933 
   21934 Additional changes in GCC 3.0.1
   21935 
   21936      * C++ fixes for incorrect code-generation.
   21937      * Improved cross-compiling support for the C++ standard library.
   21938      * Fixes for some embedded targets that worked in GCC 2.95.3, but not
   21939        in GCC 3.0.
   21940      * Fixes for various exception-handling bugs.
   21941      * A port to the S/390 architecture.
   21942 
   21943 General Optimizer Improvements
   21944 
   21945      * [2]Basic block reordering pass.
   21946      * New if-conversion pass with support for conditional (predicated)
   21947        execution.
   21948      * New tail call and sibling call elimination optimizations.
   21949      * New register renaming pass.
   21950      * New (experimental) [3]static single assignment (SSA) representation
   21951        support.
   21952      * New dead-code elimination pass implemented using the SSA
   21953        representation.
   21954      * [4]Global null pointer test elimination.
   21955      * [5]Global code hoisting/unification.
   21956      * More builtins and optimizations for stdio.h, string.h and old BSD
   21957        functions, as well as for ISO C99 functions.
   21958      * New builtin __builtin_expect for giving hints to the branch
   21959        predictor.
   21960 
   21961 New Languages and Language specific improvements
   21962 
   21963      * The GNU Compiler for the Java(TM) language (GCJ) is now integrated
   21964        and supported, including the run-time library containing most
   21965        common non-GUI Java classes, a bytecode interpreter, and the Boehm
   21966        conservative garbage collector. Many bugs have been fixed. GCJ can
   21967        compile Java source or Java bytecodes to either native code or Java
   21968        class files, and supports native methods written in either the
   21969        standard JNI or the more efficient and convenient CNI.
   21970      * Here is a [6]partial list of C++ improvements, both new features
   21971        and those no longer supported.
   21972      * New C++ ABI. On the IA-64 platform GCC is capable of
   21973        inter-operating with other IA-64 compilers.
   21974      * The new ABI also significantly reduces the size of symbol and debug
   21975        information.
   21976      * New C++ support library and many C++ bug fixes, vastly improving
   21977        our conformance to the ISO C++ standard.
   21978      * New [7]inliner for C++.
   21979      * Rewritten C preprocessor, integrated into the C, C++ and Objective
   21980        C compilers, with very many improvements including ISO C99 support
   21981        and [8]improvements to dependency generation.
   21982      * Support for more [9]ISO C99 features.
   21983      * Many improvements to support for checking calls to format functions
   21984        such as printf and scanf, including support for ISO C99 format
   21985        features, extensions from the Single Unix Specification and GNU
   21986        libc 2.2, checking of strfmon formats and features to assist in
   21987        auditing for format string security bugs.
   21988      * New warnings for C code that may have undefined semantics because
   21989        of violations of sequence point rules in the C standard (such as a
   21990        = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall.
   21991      * Additional warning option -Wfloat-equal.
   21992      * Improvements to -Wtraditional.
   21993      * Fortran improvements are listed in [10]the Fortran documentation.
   21994 
   21995 New Targets and Target Specific Improvements
   21996 
   21997      * New x86 back end, generating much improved code.
   21998      * Support for a generic i386-elf target contributed.
   21999      * New option to emit x86 assembly code using Intel style syntax
   22000        (-mintel-syntax).
   22001      * HPUX 11 support contributed.
   22002      * Improved PowerPC code generation, including scheduled prologue and
   22003        epilogue.
   22004      * Port of GCC to Intel's IA-64 processor contributed.
   22005      * Port of GCC to Motorola's MCore 210 and 340 contributed.
   22006      * New unified back-end for Arm, Thumb and StrongArm contributed.
   22007      * Port of GCC to Intel's XScale processor contributed.
   22008      * Port of GCC to Atmel's AVR microcontrollers contributed.
   22009      * Port of GCC to Mitsubishi's D30V processor contributed.
   22010      * Port of GCC to Matsushita's AM33 processor (a member of the MN10300
   22011        processor family) contributed.
   22012      * Port of GCC to Fujitsu's FR30 processor contributed.
   22013      * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed.
   22014      * Port of GCC to Sun's picoJava processor core contributed.
   22015 
   22016 Documentation improvements
   22017 
   22018      * Substantially rewritten and improved C preprocessor manual.
   22019      * Many improvements to other documentation.
   22020      * Manpages for gcc, cpp and gcov are now generated automatically from
   22021        the master Texinfo manual, eliminating the problem of manpages
   22022        being out of date. (The generated manpages are only extracts from
   22023        the full manual, which is provided in Texinfo form, from which
   22024        info, HTML, other formats and a printed manual can be generated.)
   22025      * Generated info files are included in the release tarballs alongside
   22026        their Texinfo sources, avoiding problems on some platforms with
   22027        building makeinfo as part of the GCC distribution.
   22028 
   22029 Other significant improvements
   22030 
   22031      * Garbage collection used internally by the compiler for most memory
   22032        allocation instead of obstacks.
   22033      * Lengauer and Tarjan algorithm used for computing dominators in the
   22034        CFG. This algorithm can be significantly faster and more space
   22035        efficient than our older algorithm.
   22036      * gccbug script provided to assist in submitting bug reports to our
   22037        bug tracking system. (Bug reports previously submitted directly to
   22038        our mailing lists, for which you received no bug tracking number,
   22039        should be submitted again using gccbug if you can reproduce the
   22040        problem with GCC 3.0.)
   22041      * The internal libgcc library is [11]built as a shared library on
   22042        systems that support it.
   22043      * Extensive testsuite included with GCC, with many new tests. In
   22044        addition to tests for GCC bugs that have been fixed, many tests
   22045        have been added for language features, compiler warnings and
   22046        builtin functions.
   22047      * Additional language-independent warning options -Wpacked, -Wpadded,
   22048        -Wunreachable-code and -Wdisabled-optimization.
   22049      * Target-independent options -falign-functions, -falign-loops and
   22050        -falign-jumps.
   22051 
   22052    Plus a great many bug fixes and almost all the [12]features found in
   22053    GCC 2.95.
   22054 
   22055 
   22056     For questions related to the use of GCC, please consult these web
   22057     pages and the [13]GCC manuals. If that fails, the
   22058     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22059     web pages and the development of GCC are welcome on our developer
   22060     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   22061     archives.
   22062 
   22063    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   22064    distribution of this entire article is permitted in any medium,
   22065    provided this notice is preserved.
   22066 
   22067    These pages are [18]maintained by the GCC team. Last modified
   22068    2025-06-05.
   22069 
   22070 References
   22071 
   22072    1. http://www.netbsd.org/
   22073    2. https://gcc.gnu.org/news/reorder.html
   22074    3. https://gcc.gnu.org/news/ssa.html
   22075    4. https://gcc.gnu.org/news/null.html
   22076    5. https://gcc.gnu.org/news/unify.html
   22077    6. https://gcc.gnu.org/gcc-3.0/c++features.html
   22078    7. https://gcc.gnu.org/news/inlining.html
   22079    8. https://gcc.gnu.org/news/dependencies.html
   22080    9. https://gcc.gnu.org/projects/c-status.html
   22081   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   22082   11. https://gcc.gnu.org/gcc-3.0/libgcc.html
   22083   12. https://gcc.gnu.org/gcc-2.95/features.html
   22084   13. https://gcc.gnu.org/onlinedocs/
   22085   14. mailto:gcc-help (a] gcc.gnu.org
   22086   15. mailto:gcc (a] gcc.gnu.org
   22087   16. https://gcc.gnu.org/lists.html
   22088   17. https://www.fsf.org/
   22089   18. https://gcc.gnu.org/about.html
   22090 ======================================================================
   22091 http://gcc.gnu.org/gcc-3.0/caveats.html
   22092 
   22093                                 GCC 3.0 Caveats
   22094 
   22095      * -fstrict-aliasing is now part of -O2 and higher optimization
   22096        levels. This allows the compiler to assume the strictest aliasing
   22097        rules applicable to the language being compiled. For C and C++,
   22098        this activates optimizations based on the type of expressions. This
   22099        optimization may thus break old, non-compliant code.
   22100      * Enumerations are now properly promoted to int in function
   22101        parameters and function returns. Normally this change is not
   22102        visible, but when using -fshort-enums this is an ABI change.
   22103      * The undocumented extension that allowed C programs to have a label
   22104        at the end of a compound statement has been deprecated and may be
   22105        removed in a future version. Programs that now generate a warning
   22106        about this may be fixed by adding a null statement (a single
   22107        semicolon) after the label.
   22108      * The poorly documented extension that allowed string constants in C,
   22109        C++ and Objective C to contain unescaped newlines has been
   22110        deprecated and may be removed in a future version. Programs using
   22111        this extension may be fixed in several ways: the bare newline may
   22112        be replaced by \n, or preceded by \n\, or string concatenation may
   22113        be used with the bare newline preceded by \n" and " placed at the
   22114        start of the next line.
   22115      * The Chill compiler is not included in GCC 3.0, because of the lack
   22116        of a volunteer to convert it to use garbage collection.
   22117      * Certain non-standard iostream methods from earlier versions of
   22118        libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach,
   22119        ostream::form, and istream::gets.
   22120      * The new C++ ABI is not yet fully supported by current (as of
   22121        2001-07-01) releases and development versions of GDB, or any
   22122        earlier versions. There is a problem setting breakpoints by line
   22123        number, and other related issues that have been fixed in GCC 3.0
   22124        but not yet handled in GDB:
   22125        [1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   22126 
   22127 
   22128     For questions related to the use of GCC, please consult these web
   22129     pages and the [2]GCC manuals. If that fails, the
   22130     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22131     web pages and the development of GCC are welcome on our developer
   22132     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   22133 
   22134    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   22135    distribution of this entire article is permitted in any medium,
   22136    provided this notice is preserved.
   22137 
   22138    These pages are [7]maintained by the GCC team. Last modified
   22139    2022-10-26.
   22140 
   22141 References
   22142 
   22143    1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   22144    2. https://gcc.gnu.org/onlinedocs/
   22145    3. mailto:gcc-help (a] gcc.gnu.org
   22146    4. mailto:gcc (a] gcc.gnu.org
   22147    5. https://gcc.gnu.org/lists.html
   22148    6. https://www.fsf.org/
   22149    7. https://gcc.gnu.org/about.html
   22150 ======================================================================
   22151 http://gcc.gnu.org/gcc-2.95/index.html
   22152 
   22153                                     GCC 2.95
   22154 
   22155    (This release series is no longer supported.)
   22156 
   22157    March 16, 2001: The GNU project and the GCC developers are pleased to
   22158    announce the release of GCC version 2.95.3.
   22159 
   22160 Release History
   22161 
   22162    GCC 2.95.3
   22163           March 16, 2001
   22164 
   22165    GCC 2.95.2
   22166           October 27, 1999
   22167 
   22168    GCC 2.95.1
   22169           August 19, 1999
   22170 
   22171    GCC 2.95
   22172           July 31, 1999. This is the first release of GCC since the April
   22173           1999 GCC/EGCS reunification and includes nearly a year's worth
   22174           of new development and bugfixes.
   22175 
   22176 References and Acknowledgements
   22177 
   22178    GCC used to stand for the GNU C Compiler, but since the compiler
   22179    supports several other languages aside from C, it now stands for the
   22180    GNU Compiler Collection.
   22181 
   22182    The whole suite has been extensively [1]regression tested and
   22183    [2]package tested. It should be reliable and suitable for widespread
   22184    use.
   22185 
   22186    The compiler has several new optimizations, new targets, new languages
   22187    and other new features. See the [3]new features page for a more
   22188    complete list of new features found in the GCC 2.95 releases.
   22189 
   22190    The sources include installation instructions in both HTML and
   22191    plaintext forms in the install directory in the distribution. However,
   22192    the most up to date installation instructions and [4]build/test status
   22193    are on the web pages. We will update those pages as new information
   22194    becomes available.
   22195 
   22196    The GCC developers would like to thank the numerous people that have
   22197    contributed new features, test results, bugfixes, etc to GCC. This
   22198    [5]amazing group of volunteers is what makes GCC successful.
   22199 
   22200    And finally, we can't in good conscience fail to mention some
   22201    [6]caveats to using GCC 2.95.
   22202 
   22203    Download GCC 2.95 from one of our many [7]mirror sites.
   22204 
   22205    For additional information about GCC please see the [8]GCC project web
   22206    server or contact the [9]GCC development mailing list.
   22207 
   22208 
   22209     For questions related to the use of GCC, please consult these web
   22210     pages and the [10]GCC manuals. If that fails, the
   22211     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22212     web pages and the development of GCC are welcome on our developer
   22213     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   22214     archives.
   22215 
   22216    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   22217    distribution of this entire article is permitted in any medium,
   22218    provided this notice is preserved.
   22219 
   22220    These pages are [15]maintained by the GCC team. Last modified
   22221    2022-10-26.
   22222 
   22223 References
   22224 
   22225    1. https://gcc.gnu.org/gcc-2.95/regress.html
   22226    2. https://gcc.gnu.org/gcc-2.95/othertest.html
   22227    3. https://gcc.gnu.org/gcc-2.95/features.html
   22228    4. https://gcc.gnu.org/gcc-2.95/buildstat.html
   22229    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   22230    6. https://gcc.gnu.org/gcc-2.95/caveats.html
   22231    7. https://gcc.gnu.org/mirrors.html
   22232    8. https://gcc.gnu.org/index.html
   22233    9. mailto:gcc (a] gcc.gnu.org
   22234   10. https://gcc.gnu.org/onlinedocs/
   22235   11. mailto:gcc-help (a] gcc.gnu.org
   22236   12. mailto:gcc (a] gcc.gnu.org
   22237   13. https://gcc.gnu.org/lists.html
   22238   14. https://www.fsf.org/
   22239   15. https://gcc.gnu.org/about.html
   22240 ======================================================================
   22241 http://gcc.gnu.org/gcc-2.95/features.html
   22242 
   22243                              GCC 2.95 New Features
   22244 
   22245      * General Optimizer Improvements:
   22246           + [1]Localized register spilling to improve speed and code
   22247             density especially on small register class machines.
   22248           + [2]Global CSE using lazy code motion algorithms.
   22249           + [3]Improved global constant/copy propagation.
   22250           + [4]Improved control flow graph analysis and manipulation.
   22251           + [5]Local dead store elimination.
   22252           + [6]Memory Load hoisting/store sinking in loops.
   22253           + [7]Type based alias analysis is enabled by default. Note this
   22254             feature will expose bugs in the Linux kernel. Please refer to
   22255             the FAQ (as shipped with GCC 2.95) for additional information
   22256             on this issue.
   22257           + Major revamp of GIV detection, combination and simplification
   22258             to improve loop performance.
   22259           + Major improvements to register allocation and reloading.
   22260      * New Languages and Language specific improvements
   22261           + [8]Many C++ improvements.
   22262           + [9]Many Fortran improvements.
   22263           + [10]Java front-end has been integrated. A [11]runtime library
   22264             is available separately.
   22265           + [12]ISO C99 support
   22266           + [13]Chill front-end and runtime has been integrated.
   22267           + Boehm garbage collector support in libobjc.
   22268           + More support for various pragmas which appear in vendor
   22269             include files
   22270      * New Targets and Target Specific Improvements
   22271           + [14]SPARC back end rewrite.
   22272           + -mschedule=8000 will optimize code for PA8000 class
   22273             processors; -mpa-risc-2-0 will generate code for PA2.0
   22274             processors
   22275           + Various micro-optimizations for the ia32 port. K6
   22276             optimizations
   22277           + Compiler will attempt to align doubles in the stack on the
   22278             ia32 port
   22279           + Alpha EV6 support
   22280           + PowerPC 750
   22281           + RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
   22282             -mcpu=e603e was added to do -mcpu=603e and -msoft-float.
   22283           + c3x, c4x
   22284           + HyperSPARC
   22285           + SparcLite86x
   22286           + sh4
   22287           + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
   22288             arm-linux)
   22289           + vxWorks targets include support for vxWorks threads
   22290           + StrongARM 110 and ARM9 support added. ARM Scheduling
   22291             parameters rewritten.
   22292           + Various changes to the MIPS port to avoid assembler macros,
   22293             which in turn improves performance
   22294           + Various performance improvements to the i960 port.
   22295           + Major rewrite of ns32k port
   22296      * Other significant improvements
   22297           + [15]Ability to dump cfg information and display it using vcg.
   22298           + The new faster scheme for fixing vendor header files is
   22299             enabled by default.
   22300           + Experimental internationalization support.
   22301           + multibyte character support
   22302           + Some compile-time speedups for pathological problems
   22303           + Better support for complex types
   22304      * Plus the usual mountain of bugfixes
   22305      * Core compiler is based on the gcc2 development tree from Sept 30,
   22306        1998, so we have all of the [16]features found in GCC 2.8.
   22307 
   22308 Additional Changes in GCC 2.95.1
   22309 
   22310      * Generic bugfixes and improvements
   22311           + Various documentation fixes related to the GCC/EGCS merger.
   22312           + Fix memory management bug which could lead to spurious aborts,
   22313             core dumps or random parsing errors in the compiler.
   22314           + Fix a couple bugs in the dwarf1 and dwarf2 debug record
   22315             support.
   22316           + Fix infinite loop in the CSE optimizer.
   22317           + Avoid undefined behavior in compiler FP emulation code
   22318           + Fix install problem when prefix is overridden on the make
   22319             install command.
   22320           + Fix problem with unwanted installation of assert.h on some
   22321             systems.
   22322           + Fix problem with finding the wrong assembler in a single tree
   22323             build.
   22324           + Avoid increasing the known alignment of a register that is
   22325             already known to be a pointer.
   22326      * Platform specific bugfixes and improvements
   22327           + Codegen bugfix for prologue/epilogue for cpu32 target.
   22328           + Fix long long code generation bug for the Coldfire target.
   22329           + Fix various aborts in the SH compiler.
   22330           + Fix bugs in libgcc support library for the SH.
   22331           + Fix alpha ev6 code generation bug.
   22332           + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
   22333             AIX platforms.
   22334           + Fix -fpic code generation bug for rs6000/ppc svr4 targets.
   22335           + Fix varargs/stdarg code generation bug for rs6000/ppc svr4
   22336             targets.
   22337           + Fix weak symbol handling for rs6000/ppc svr4 targets.
   22338           + Fix various problems with 64bit code generation for the
   22339             rs6000/ppc port.
   22340           + Fix codegen bug which caused tetex to be mis-compiled on the
   22341             x86.
   22342           + Fix compiler abort in new cfg code exposed by x86 port.
   22343           + Fix out of range array reference in code convert flat
   22344             registers to the x87 stacked FP register file.
   22345           + Fix minor vxworks configuration bug.
   22346           + Fix return type of bsearch for SunOS 4.x.
   22347      * Language & Runtime specific fixes.
   22348           + The G++ signature extension has been deprecated. It will be
   22349             removed in the next major release of G++. Use of signatures
   22350             will result in a warning from the compiler.
   22351           + Several bugs relating to templates and namespaces were fixed.
   22352           + A bug that caused crashes when combining templates with -g on
   22353             DWARF1 platforms was fixed.
   22354           + Pointers-to-members, virtual functions, and multiple
   22355             inheritance should now work together correctly.
   22356           + Some code-generation bugs relating to function try blocks were
   22357             fixed.
   22358           + G++ is a little bit more lenient with certain archaic
   22359             constructs than in GCC 2.95.
   22360           + Fix to prevent shared library version #s from bring truncated
   22361             to 1 digit
   22362           + Fix missing std:: in the libstdc++ library.
   22363           + Fix stream locking problems in libio.
   22364           + Fix problem in java compiler driver.
   22365 
   22366 Additional Changes in GCC 2.95.2
   22367 
   22368    The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
   22369    the optimizations performed by -fstrict-aliasing are valid according to
   22370    the C and C++ standards, the optimization have caused some problems,
   22371    particularly with old non-conforming code.
   22372 
   22373    The GCC developers are experimenting with ways to warn users about code
   22374    which violates the C/C++ standards, but those warnings are not ready
   22375    for widespread use at this time. Rather than wait for those warnings
   22376    the GCC developers have chosen to disable -fstrict-aliasing by default
   22377    for the GCC 2.95.2 release.
   22378 
   22379    We strongly encourage developers to find and fix code which violates
   22380    the C/C++ standards as -fstrict-aliasing may be enabled by default in
   22381    future releases. Use the option -fstrict-aliasing to re-enable these
   22382    optimizations.
   22383      * Generic bugfixes and improvements
   22384           + Fix incorrectly optimized memory reference in global common
   22385             subexpression elimination (GCSE) optimization pass.
   22386           + Fix code generation bug in regmove.c in which it could
   22387             incorrectly change a "const" value.
   22388           + Fix bug in optimization of conditionals involving volatile
   22389             memory references.
   22390           + Avoid over-allocation of stack space for some procedures.
   22391           + Fixed bug in the compiler which caused incorrect optimization
   22392             of an obscure series of bit manipulations, shifts and
   22393             arithmetic.
   22394           + Fixed register allocator bug which caused teTeX to be
   22395             mis-compiled on SPARC targets.
   22396           + Avoid incorrect optimization of degenerate case statements for
   22397             certain targets such as the ARM.
   22398           + Fix out of range memory reference in the jump optimizer.
   22399           + Avoid dereferencing null pointer in fix-header.
   22400           + Fix test for GCC specific features so that it is possible to
   22401             bootstrap with gcc-2.6.2 and older versions of GCC.
   22402           + Fix typo in scheduler which could potentially cause out of
   22403             range memory accesses.
   22404           + Avoid incorrect loop reversal which caused incorrect code for
   22405             certain loops on PowerPC targets.
   22406           + Avoid incorrect optimization of switch statements on certain
   22407             targets (for example the ARM).
   22408      * Platform specific bugfixes and improvements
   22409           + Work around bug in Sun V5.0 compilers which caused bootstrap
   22410             comparison failures on SPARC targets.
   22411           + Fix SPARC back end bug which caused aborts in final.c.
   22412           + Fix sparc-hal-solaris2* configuration fragments.
   22413           + Fix bug in sparc block profiling.
   22414           + Fix obscure code generation bug for the PARISC targets.
   22415           + Define __STDC_EXT__ for HPUX configurations.
   22416           + Various POWERPC64 code generation bugfixes.
   22417           + Fix abort for PPC targets using ELF (ex GNU/Linux).
   22418           + Fix collect2 problems for AIX targets.
   22419           + Correct handling of .file directive for PPC targets.
   22420           + Fix bug in fix_trunc x86 patterns.
   22421           + Fix x86 port to correctly pop the FP stack for functions that
   22422             return structures in memory.
   22423           + Fix minor bug in strlen x86 pattern.
   22424           + Use stabs debugging instead of dwarf1 for x86-solaris targets.
   22425           + Fix template repository code to handle leading underscore in
   22426             mangled names.
   22427           + Fix weak/weak alias support for OpenBSD.
   22428           + GNU/Linux for the ARM has C++ compatible include files.
   22429      * Language & Runtime specific fixes.
   22430           + Fix handling of constructor attribute in the C front-end which
   22431             caused problems building the Chill runtime library on some
   22432             targets.
   22433           + Fix minor problem merging type qualifiers in the C front-end.
   22434           + Fix aliasing bug for pointers and references (C/C++).
   22435           + Fix incorrect "non-constant initializer bug" when -traditional
   22436             or -fwritable-strings is enabled.
   22437           + Fix build error for Chill front-end on SunOS.
   22438           + Do not complain about duplicate instantiations when using
   22439             -frepo (C++).
   22440           + Fix array bounds handling in C++ front-end which caused
   22441             problems with dwarf debugging information in some
   22442             circumstances.
   22443           + Fix minor namespace problem.
   22444           + Fix problem linking java programs.
   22445 
   22446 Additional Changes in GCC 2.95.3
   22447 
   22448      * Generic bugfixes and improvements
   22449           + Fix numerous problems that caused incorrect optimization in
   22450             the register reloading code.
   22451           + Fix numerous problems that caused incorrect optimization in
   22452             the loop optimizer.
   22453           + Fix aborts in the functions build_insn_chain and scan_loops
   22454             under some circumstances.
   22455           + Fix an alias analysis bug.
   22456           + Fix an infinite compilation bug in the combiner.
   22457           + A few problems with complex number support have been fixed.
   22458           + It is no longer possible for gcc to act as a fork bomb when
   22459             installed incorrectly.
   22460           + The -fpack-struct option should be recognized now.
   22461           + Fixed a bug that caused incorrect code to be generated due to
   22462             a lost stack adjustment.
   22463      * Platform specific bugfixes and improvements
   22464           + Support building ARM toolchains hosted on Windows.
   22465           + Fix attribute calculations in ARM toolchains.
   22466           + arm-linux support has been improved.
   22467           + Fix a PIC failure on sparc targets.
   22468           + On ix86 targets, the regparm attribute should now work
   22469             reliably.
   22470           + Several updates for the h8300 port.
   22471           + Fix problem building libio with glibc 2.2.
   22472 
   22473 
   22474     For questions related to the use of GCC, please consult these web
   22475     pages and the [17]GCC manuals. If that fails, the
   22476     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22477     web pages and the development of GCC are welcome on our developer
   22478     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   22479     archives.
   22480 
   22481    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   22482    distribution of this entire article is permitted in any medium,
   22483    provided this notice is preserved.
   22484 
   22485    These pages are [22]maintained by the GCC team. Last modified
   22486    2025-06-05.
   22487 
   22488 References
   22489 
   22490    1. https://gcc.gnu.org/news/spill.html
   22491    2. https://gcc.gnu.org/news/lcm.html
   22492    3. https://gcc.gnu.org/news/cprop.html
   22493    4. https://gcc.gnu.org/news/cfg.html
   22494    5. https://gcc.gnu.org/news/dse.html
   22495    6. https://gcc.gnu.org/news/hoist.html
   22496    7. https://gcc.gnu.org/news/alias.html
   22497    8. https://gcc.gnu.org/gcc-2.95/c++features.html
   22498    9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   22499   10. https://gcc.gnu.org/news/gcj-announce.txt
   22500   11. https://gcc.gnu.org/news/javaannounce.html
   22501   12. https://gcc.gnu.org/projects/c-status.html
   22502   13. https://gcc.gnu.org/news/chill.html
   22503   14. https://gcc.gnu.org/news/sparc.html
   22504   15. https://gcc.gnu.org/news/egcs-vcg.html
   22505   16. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   22506   17. https://gcc.gnu.org/onlinedocs/
   22507   18. mailto:gcc-help (a] gcc.gnu.org
   22508   19. mailto:gcc (a] gcc.gnu.org
   22509   20. https://gcc.gnu.org/lists.html
   22510   21. https://www.fsf.org/
   22511   22. https://gcc.gnu.org/about.html
   22512 ======================================================================
   22513 http://gcc.gnu.org/gcc-2.95/caveats.html
   22514 
   22515                                 GCC 2.95 Caveats
   22516 
   22517      * GCC 2.95 will issue an error for invalid asm statements that had
   22518        been silently accepted by earlier versions of the compiler. This is
   22519        particularly noticeable when compiling older versions of the Linux
   22520        kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95)
   22521        for more information on this issue.
   22522      * GCC 2.95 implements type based alias analysis to disambiguate
   22523        memory references. Some programs, particularly the Linux kernel
   22524        violate ANSI/ISO aliasing rules and therefore may not operate
   22525        correctly when compiled with GCC 2.95. Please refer to the FAQ (as
   22526        shipped with GCC 2.95) for more information on this issue.
   22527      * GCC 2.95 has a known bug in its handling of complex variables for
   22528        64bit targets. Instead of silently generating incorrect code, GCC
   22529        2.95 will issue a fatal error for situations it can not handle.
   22530        This primarily affects the Fortran community as Fortran makes more
   22531        use of complex variables than C or C++.
   22532      * GCC 2.95 has an integrated libstdc++, but does not have an
   22533        integrated libg++. Furthermore old libg++ releases will not work
   22534        with GCC 2.95. You can retrieve a recent copy of libg++ from the
   22535        [1]GCC ftp server.
   22536        Note most C++ programs only need libstdc++.
   22537      * Exception handling may not work with shared libraries, particularly
   22538        on alphas, hppas, rs6000/powerpc and mips based platforms.
   22539        Exception handling is known to work on x86 GNU/Linux platforms with
   22540        shared libraries.
   22541      * In general, GCC 2.95 is more rigorous about rejecting invalid C++
   22542        code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
   22543        or EGCS 1.1. As a result it may be necessary to fix C++ code before
   22544        it will compile with GCC 2.95.
   22545      * G++ is also converting toward the ISO C++ standard; as a result
   22546        code which was previously valid (and thus accepted by other
   22547        compilers and older versions of g++) may no longer be accepted. The
   22548        flag -fpermissive may allow some non-conforming code to compile
   22549        with GCC 2.95.
   22550      * GCC 2.95 compiled C++ code is not binary compatible with EGCS
   22551        1.1.x, EGCS 1.0.x or GCC 2.8.x.
   22552      * GCC 2.95 does not have changes from the GCC 2.8 tree that were made
   22553        between Sept 30, 1998 and April 30, 1999 (the official end of the
   22554        GCC 2.8 project). Future GCC releases will include all the changes
   22555        from the defunct GCC 2.8 sources.
   22556 
   22557 
   22558     For questions related to the use of GCC, please consult these web
   22559     pages and the [2]GCC manuals. If that fails, the
   22560     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22561     web pages and the development of GCC are welcome on our developer
   22562     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   22563 
   22564    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   22565    distribution of this entire article is permitted in any medium,
   22566    provided this notice is preserved.
   22567 
   22568    These pages are [7]maintained by the GCC team. Last modified
   22569    2022-10-26.
   22570 
   22571 References
   22572 
   22573    1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
   22574    2. https://gcc.gnu.org/onlinedocs/
   22575    3. mailto:gcc-help (a] gcc.gnu.org
   22576    4. mailto:gcc (a] gcc.gnu.org
   22577    5. https://gcc.gnu.org/lists.html
   22578    6. https://www.fsf.org/
   22579    7. https://gcc.gnu.org/about.html
   22580 ======================================================================
   22581 http://gcc.gnu.org/egcs-1.1/index.html
   22582 
   22583                                     EGCS 1.1
   22584 
   22585    September 3, 1998: We are pleased to announce the release of EGCS 1.1.
   22586    December 1, 1998: We are pleased to announce the release of EGCS 1.1.1.
   22587    March 15, 1999: We are pleased to announce the release of EGCS 1.1.2.
   22588 
   22589    EGCS is a free software project to further the development of the GNU
   22590    compilers using an open development environment.
   22591 
   22592    EGCS 1.1 is a major new release of the EGCS compiler system. It has
   22593    been [1]extensively tested and is believed to be stable and suitable
   22594    for widespread use.
   22595 
   22596    EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
   22597    development sources; it contains all of the new features found in GCC
   22598    2.8.1 as well as all new development from GCC up to June 6, 1998.
   22599 
   22600    EGCS 1.1 also contains many improvements and features not found in GCC
   22601    or in older versions of EGCS:
   22602      * Global common subexpression elimination and global constant/copy
   22603        propagation (aka [2]gcse)
   22604      * Ongoing improvements to the [3]alias analysis support to allow for
   22605        better optimizations throughout the compiler.
   22606      * Vastly improved [4]C++ compiler and integrated C++ runtime
   22607        libraries.
   22608      * Fixes for the /tmp symlink race security problems.
   22609      * New targets including mips16, arm-thumb and 64-bit PowerPC.
   22610      * Improvements to GNU Fortran (g77) compiler and runtime library made
   22611        since g77 version 0.5.23.
   22612 
   22613    See the [5]new features page for a more complete list of new features
   22614    found in EGCS 1.1 releases.
   22615 
   22616    EGCS 1.1.1 is a minor update to fix several serious problems in EGCS
   22617    1.1:
   22618      * General improvements and fixes
   22619           + Avoid some stack overflows when compiling large functions.
   22620           + Avoid incorrect loop invariant code motions.
   22621           + Fix some core dumps on Linux kernel code.
   22622           + Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
   22623           + Fix code generation problem in gcse.
   22624           + Various documentation related fixes.
   22625      * g++/libstdc++ improvements and fixes
   22626           + MT safe EH fix for setjmp/longjmp based exception handling.
   22627           + Fix a few bad interactions between optimization and exception
   22628             handling.
   22629           + Fixes for demangling of template names starting with "__".
   22630           + Fix a bug that would fail to run destructors in some cases
   22631             with -O2.
   22632           + Fix 'new' of classes with virtual bases.
   22633           + Fix crash building Qt on the Alpha.
   22634           + Fix failure compiling WIFEXITED macro on GNU/Linux.
   22635           + Fix some -frepo failures.
   22636      * g77 and libf2c improvements and fixes
   22637           + Various documentation fixes.
   22638           + Avoid compiler crash on RAND intrinsic.
   22639           + Fix minor bugs in makefiles exposed by BSD make programs.
   22640           + Define _XOPEN_SOURCE for libI77 build to avoid potential
   22641             problems on some 64-bit systems.
   22642           + Fix problem with implicit endfile on rewind.
   22643           + Fix spurious recursive I/O errors.
   22644      * platform specific improvements and fixes
   22645           + Match all versions of UnixWare7.
   22646           + Do not assume x86 SVR4 or UnixWare targets can handle stabs.
   22647           + Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
   22648             from unsigned ints to double precision floats.
   22649           + Fix ARM ABI issue with NetBSD.
   22650           + Fix a few arm code generation bugs.
   22651           + Fixincludes will fix additional broken SCO OpenServer header
   22652             files.
   22653           + Fix a m68k back end bug which caused invalid offsets in reg+d
   22654             addresses.
   22655           + Fix problems with 64bit AIX 4.3 support.
   22656           + Fix handling of long longs for varargs/stdarg functions on the
   22657             ppc.
   22658           + Minor fixes to CPP predefines for Windows.
   22659           + Fix code generation problems with gpr<->fpr copies for 64bit
   22660             ppc.
   22661           + Fix a few coldfire code generation bugs.
   22662           + Fix some more header file problems on SunOS 4.x.
   22663           + Fix assert.h handling for RTEMS.
   22664           + Fix Windows handling of TREE_SYMBOL_REFERENCED.
   22665           + Fix x86 compiler abort in reg-stack pass.
   22666           + Fix cygwin/windows problem with section attributes.
   22667           + Fix Alpha code generation problem exposed by SMP Linux
   22668             kernels.
   22669           + Fix typo in m68k 32->64bit integer conversion.
   22670           + Make sure target libraries build with -fPIC for PPC & Alpha
   22671             targets.
   22672 
   22673    EGCS 1.1.2 is a minor update to fix several serious problems in EGCS
   22674    1.1.1:
   22675      * General improvements and fixes
   22676           + Fix bug in loop optimizer which caused the SPARC (and
   22677             potentially other) ports to segfault.
   22678           + Fix infinite recursion in alias analysis and combiner code.
   22679           + Fix bug in regclass preferencing.
   22680           + Fix incorrect loop reversal which caused incorrect code to be
   22681             generated for several targets.
   22682           + Fix return value for builtin memcpy.
   22683           + Reduce compile time for certain loops which exposed quadratic
   22684             behavior in the loop optimizer.
   22685           + Fix bug which caused volatile memory to be written multiple
   22686             times when only one write was needed/desired.
   22687           + Fix compiler abort in caller-save.c
   22688           + Fix combiner bug which caused incorrect code generation for
   22689             certain division by constant operations.
   22690           + Fix incorrect code generation due to a bug in range check
   22691             optimizations.
   22692           + Fix incorrect code generation due to mis-handling of clobbered
   22693             values in CSE.
   22694           + Fix compiler abort/segfault due to incorrect register
   22695             splitting when unrolling loops.
   22696           + Fix code generation involving autoincremented addresses with
   22697             ternary operators.
   22698           + Work around bug in the scheduler which caused qt to be
   22699             mis-compiled on some platforms.
   22700           + Fix code generation problems with -fshort-enums.
   22701           + Tighten security for temporary files.
   22702           + Improve compile time for codes which make heavy use of
   22703             overloaded functions.
   22704           + Fix multiply defined constructor/destructor symbol problems.
   22705           + Avoid setting bogus RPATH environment variable during
   22706             bootstrap.
   22707           + Avoid GNU-make dependencies in the texinfo subdir.
   22708           + Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
   22709             --enable-cpp=<dirname> can be used to specify an additional
   22710             install directory for the cpp wrapper script.
   22711           + Fix CSE bug which caused incorrect label-label refs to appear
   22712             on some platforms.
   22713           + Avoid linking in EH routines from libgcc if they are not
   22714             needed.
   22715           + Avoid obscure bug in aliasing code.
   22716           + Fix bug in weak symbol handling.
   22717      * Platform-specific improvements and fixes
   22718           + Fix detection of PPro/PII on Unixware 7.
   22719           + Fix compiler segfault when building spec99 and other programs
   22720             for SPARC targets.
   22721           + Fix code-generation bugs for integer and floating point
   22722             conditional move instructions on the PPro/PII.
   22723           + Use fixincludes to fix byteorder problems on i?86-*-sysv.
   22724           + Fix build failure for the arc port.
   22725           + Fix floating point format configuration for i?86-gnu port.
   22726           + Fix problems with hppa1.0-hp-hpux10.20 configuration when
   22727             threads are enabled.
   22728           + Fix coldfire code generation bugs.
   22729           + Fix "unrecognized insn" problems for Alpha and PPC ports.
   22730           + Fix h8/300 code generation problem with floating point values
   22731             in memory.
   22732           + Fix unrecognized insn problems for the m68k port.
   22733           + Fix namespace-pollution problem for the x86 port.
   22734           + Fix problems with old assembler on x86 NeXT systems.
   22735           + Fix PIC code-generation problems for the SPARC port.
   22736           + Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
   22737           + Fix minor ISO namespace violation in Alpha varargs/stdarg
   22738             support.
   22739           + Fix incorrect "braf" instruction usage for the SH port.
   22740           + Fix minor bug in va-sh which prevented its use with -ansi.
   22741           + Fix problems recognizing and supporting FreeBSD.
   22742           + Handle OpenBSD systems correctly.
   22743           + Minor fixincludes fix for Digital UNIX 4.0B.
   22744           + Fix problems with ctors/dtors in SCO shared libraries.
   22745           + Abort instead of generating incorrect code for PPro/PII
   22746             floating point conditional moves.
   22747           + Avoid multiply defined symbols on GNU/Linux systems using
   22748             libc-5.4.xx.
   22749           + Fix abort in alpha compiler.
   22750      * Fortran-specific fixes
   22751           + Fix the IDate intrinsic (VXT) (in libg2c) so the returned year
   22752             is in the documented, non-Y2K-compliant range of 0-99, instead
   22753             of being returned as 100 in the year 2000.
   22754           + Fix the `Date_and_Time' intrinsic (in libg2c) to return the
   22755             milliseconds value properly in Values(8).
   22756           + Fix the `LStat' intrinsic (in libg2c) to return device-ID
   22757             information properly in SArray(7).
   22758 
   22759    Each release includes installation instructions in both HTML and
   22760    plaintext forms (see the INSTALL directory in the toplevel directory of
   22761    the distribution). However, we also keep the most up to date
   22762    installation instructions and [6]build/test status on our web page. We
   22763    will update those pages as new information becomes available.
   22764 
   22765    The EGCS project would like to thank the numerous people that have
   22766    contributed new features, test results, bugfixes, etc. This [7]amazing
   22767    group of volunteers is what makes EGCS successful.
   22768 
   22769    And finally, we can't in good conscience fail to mention some
   22770    [8]caveats to using EGCS 1.1.
   22771 
   22772    Download EGCS from egcs.cygnus.com (USA California).
   22773 
   22774    The EGCS 1.1 release is also available on many mirror sites.
   22775    [9]Goto mirror list to find a closer site.
   22776 
   22777 
   22778     For questions related to the use of GCC, please consult these web
   22779     pages and the [10]GCC manuals. If that fails, the
   22780     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22781     web pages and the development of GCC are welcome on our developer
   22782     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   22783     archives.
   22784 
   22785    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   22786    distribution of this entire article is permitted in any medium,
   22787    provided this notice is preserved.
   22788 
   22789    These pages are [15]maintained by the GCC team. Last modified
   22790    2024-05-18.
   22791 
   22792 References
   22793 
   22794    1. https://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
   22795    2. https://gcc.gnu.org/news/gcse.html
   22796    3. https://gcc.gnu.org/news/alias.html
   22797    4. https://gcc.gnu.org/egcs-1.1/c++features.html
   22798    5. https://gcc.gnu.org/egcs-1.1/features.html
   22799    6. https://gcc.gnu.org/egcs-1.1/buildstat.html
   22800    7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   22801    8. https://gcc.gnu.org/egcs-1.1/caveats.html
   22802    9. https://gcc.gnu.org/mirrors.html
   22803   10. https://gcc.gnu.org/onlinedocs/
   22804   11. mailto:gcc-help (a] gcc.gnu.org
   22805   12. mailto:gcc (a] gcc.gnu.org
   22806   13. https://gcc.gnu.org/lists.html
   22807   14. https://www.fsf.org/
   22808   15. https://gcc.gnu.org/about.html
   22809 ======================================================================
   22810 http://gcc.gnu.org/egcs-1.1/features.html
   22811 
   22812                              EGCS 1.1 new features
   22813 
   22814      * Integrated GNU Fortran (g77) compiler and runtime library with
   22815        improvements, based on g77 version 0.5.23.
   22816      * Vast improvements in the C++ compiler; so many they have [1]page of
   22817        their own!
   22818      * Compiler implements [2]global common subexpression elimination and
   22819        global copy/constant propagation.
   22820      * More major improvements in the [3]alias analysis code.
   22821      * More major improvements in the exception handling code to improve
   22822        performance, lower static overhead and provide the infrastructure
   22823        for future improvements.
   22824      * The infamous /tmp symlink race security problems have been fixed.
   22825      * The regmove optimization pass has been nearly completely rewritten
   22826        to improve performance of generated code.
   22827      * The compiler now recomputes register usage information before local
   22828        register allocation. By providing more accurate information to the
   22829        priority based allocator, we get better register allocation.
   22830      * The register reloading phase of the compiler optimizes spill code
   22831        much better than in previous releases.
   22832      * Some bad interactions between the register allocator and
   22833        instruction scheduler have been fixed, resulting in much better
   22834        code for certain programs. Additionally, we have tuned the
   22835        scheduler in various ways to improve performance of generated code
   22836        for some architectures.
   22837      * The compiler's branch shortening algorithms have been significantly
   22838        improved to work better on targets which align jump targets.
   22839      * The compiler now supports -Os to prefer optimizing for code space
   22840        over optimizing for code speed.
   22841      * The compiler will now totally eliminate library calls which compute
   22842        constant values. This primarily helps targets with no integer
   22843        div/mul support and targets without floating point support.
   22844      * The compiler now supports an extensive "--help" option.
   22845      * cpplib has been greatly improved and may be suitable for limited
   22846        use.
   22847      * Memory footprint for the compiler has been significantly reduced
   22848        for some pathological cases.
   22849      * The time to build EGCS has been improved for certain targets
   22850        (particularly the alpha and mips platforms).
   22851      * Many infrastructure improvements throughout the compiler, plus the
   22852        usual mountain of bugfixes and minor improvements.
   22853      * Target dependent improvements:
   22854           + SPARC port now includes V8 plus and V9 support as well as
   22855             performance tuning for Ultra class machines. The SPARC port
   22856             now uses the Haifa scheduler.
   22857           + Alpha port has been tuned for the EV6 processor and has an
   22858             optimized expansion of memcpy/bzero. The Alpha port now uses
   22859             the Haifa scheduler.
   22860           + RS6000/PowerPC: support for the Power64 architecture and AIX
   22861             4.3. The RS6000/PowerPC port now uses the Haifa scheduler.
   22862           + x86: Alignment of static store data and jump targets is per
   22863             Intel recommendations now. Various improvements throughout the
   22864             x86 port to improve performance on Pentium processors
   22865             (including improved epilogue sequences for Pentium chips and
   22866             back end improvements which should help register allocation on
   22867             all x86 variants. Conditional move support has been fixed and
   22868             enabled for PPro processors. The x86 port also better supports
   22869             64bit operations now. Unixware 7, a System V Release 5 target,
   22870             is now supported and SCO OpenServer targets can support GAS.
   22871           + MIPS has improved multiply/multiply-add support and now
   22872             includes mips16 ISA support.
   22873           + M68k has many micro-optimizations and Coldfire fixes.
   22874      * Core compiler is based on the GCC development tree from June 9,
   22875        1998, so we have all of the [4]features found in GCC 2.8.
   22876 
   22877 
   22878     For questions related to the use of GCC, please consult these web
   22879     pages and the [5]GCC manuals. If that fails, the
   22880     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22881     web pages and the development of GCC are welcome on our developer
   22882     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   22883 
   22884    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   22885    distribution of this entire article is permitted in any medium,
   22886    provided this notice is preserved.
   22887 
   22888    These pages are [10]maintained by the GCC team. Last modified
   22889    2023-09-02.
   22890 
   22891 References
   22892 
   22893    1. https://gcc.gnu.org/egcs-1.1/c++features.html
   22894    2. https://gcc.gnu.org/news/gcse.html
   22895    3. https://gcc.gnu.org/news/alias.html
   22896    4. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   22897    5. https://gcc.gnu.org/onlinedocs/
   22898    6. mailto:gcc-help (a] gcc.gnu.org
   22899    7. mailto:gcc (a] gcc.gnu.org
   22900    8. https://gcc.gnu.org/lists.html
   22901    9. https://www.fsf.org/
   22902   10. https://gcc.gnu.org/about.html
   22903 ======================================================================
   22904 http://gcc.gnu.org/egcs-1.1/caveats.html
   22905 
   22906                                 EGCS 1.1 Caveats
   22907 
   22908      * EGCS has an integrated libstdc++, but does not have an integrated
   22909        libg++. Furthermore old libg++ releases will not work with EGCS; HJ
   22910        Lu has made a libg++-2.8.1.2 snapshot available which may work with
   22911        EGCS.
   22912        Note most C++ programs only need libstdc++.
   22913      * Exception handling may not work with shared libraries, particularly
   22914        on alphas, hppas, rs6000/powerpc and mips based platforms.
   22915        Exception handling is known to work on x86-linux platforms with
   22916        shared libraries.
   22917      * Some versions of the Linux kernel have bugs which prevent them from
   22918        being compiled or from running when compiled by EGCS. See the FAQ
   22919        (as shipped with EGCS 1.1) for additional information.
   22920      * In general, EGCS is more rigorous about rejecting invalid C++ code
   22921        or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
   22922        a result it may be necessary to fix C++ code before it will compile
   22923        with EGCS.
   22924      * G++ is also converting toward the ISO C++ standard; as a result
   22925        code which was previously valid (and thus accepted by other
   22926        compilers and older versions of g++) may no longer be accepted.
   22927      * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x
   22928        or GCC 2.8.x due to changes necessary to support thread safe
   22929        exception handling.
   22930 
   22931 
   22932     For questions related to the use of GCC, please consult these web
   22933     pages and the [1]GCC manuals. If that fails, the
   22934     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22935     web pages and the development of GCC are welcome on our developer
   22936     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   22937 
   22938    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   22939    distribution of this entire article is permitted in any medium,
   22940    provided this notice is preserved.
   22941 
   22942    These pages are [6]maintained by the GCC team. Last modified
   22943    2022-10-26.
   22944 
   22945 References
   22946 
   22947    1. https://gcc.gnu.org/onlinedocs/
   22948    2. mailto:gcc-help (a] gcc.gnu.org
   22949    3. mailto:gcc (a] gcc.gnu.org
   22950    4. https://gcc.gnu.org/lists.html
   22951    5. https://www.fsf.org/
   22952    6. https://gcc.gnu.org/about.html
   22953 ======================================================================
   22954 http://gcc.gnu.org/egcs-1.0/index.html
   22955 
   22956                                     EGCS 1.0
   22957 
   22958    December 3, 1997: We are pleased to announce the release of EGCS 1.0.
   22959    January 6, 1998: We are pleased to announce the release of EGCS 1.0.1.
   22960    March 16, 1998: We are pleased to announce the release of EGCS 1.0.2.
   22961    May 15, 1998 We are pleased to announce the release of EGCS 1.0.3.
   22962 
   22963    EGCS is a collaborative effort involving several groups of hackers
   22964    using an open development model to accelerate development and testing
   22965    of GNU compilers and runtime libraries.
   22966 
   22967    An important goal of EGCS is to allow wide scale testing of
   22968    experimental features and optimizations; therefore, EGCS contains some
   22969    features and optimizations which are still under development. However,
   22970    EGCS has been carefully tested and should be comparable in quality to
   22971    most GCC releases.
   22972 
   22973    EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
   22974    development sources; it contains nearly all of the new features found
   22975    in GCC 2.8.
   22976 
   22977    EGCS 1.0 also contains many improvements and features not found in GCC
   22978    2.7 and even the GCC 2.8 series (which was released after the original
   22979    EGCS 1.0 release).
   22980      * Integrated C++ runtime libraries, including support for most major
   22981        GNU/Linux systems!
   22982      * The integrated libstdc++ library includes a verbatim copy of SGI's
   22983        STL release.
   22984      * Integrated GNU Fortran compiler.
   22985      * New instruction scheduler.
   22986      * New alias analysis code.
   22987 
   22988    See the [1]new features page for a more complete list of new features.
   22989 
   22990    EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
   22991    critical bugs and add support for Red Hat 5.0 Linux. Changes since the
   22992    EGCS 1.0 release:
   22993      * Add support for Red Hat 5.0 Linux and better support for Linux
   22994        systems using glibc2.
   22995        Many programs failed to link when compiled with EGCS 1.0 on Red Hat
   22996        5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should
   22997        fix these problems.
   22998      * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception
   22999        handling interfaces.
   23000        To avoid future compatibility problems, we strongly urge anyone who
   23001        is planning on distributing shared libraries that contain C++ code
   23002        to upgrade to EGCS 1.0.1 first.
   23003        Soon after EGCS 1.0 was released, the GCC developers made some
   23004        incompatible changes in libgcc's exception handling interfaces.
   23005        These changes were needed to solve problems on some platforms. This
   23006        means that GCC 2.8.0, when released, will not be seamlessly
   23007        compatible with shared libraries built by EGCS 1.0. The reason is
   23008        that the libgcc.a in GCC 2.8.0 will not contain a function needed
   23009        by the old interface.
   23010        The result of this is that there may be compatibility problems with
   23011        shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
   23012        With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) interface,
   23013        and libgcc.a has the support routines for both the old and the new
   23014        interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be freely mixed,
   23015        and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed).
   23016        The maintainers of GCC 2.x have decided against including seamless
   23017        support for the old interface in 2.8.0, since it was never
   23018        "official", so to avoid future compatibility problems we recommend
   23019        against distributing any shared libraries built by EGCS 1.0 that
   23020        contain C++ code (upgrade to 1.0.1 and use that).
   23021      * Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
   23022        The x86 changes fix code generation errors exposed when building
   23023        glibc2 and the usual GNU/Linux dynamic linker (ld.so).
   23024        The hppa change fixes a compiler abort when configured for use with
   23025        RTEMS.
   23026        The MIPS changes fix problems with the definition of LONG_MAX on
   23027        newer systems, allow for command line selection of the target ABI,
   23028        and fix one code generation problem.
   23029        The rs6000/ppc change fixes some problems with passing structures
   23030        to varargs/stdarg functions.
   23031      * A few machine independent bugfixes, mostly to fix code generation
   23032        errors when building Linux kernels or glibc.
   23033      * Fix a few critical exception handling and template bugs in the C++
   23034        compiler.
   23035      * Fix Fortran namelist bug on alphas.
   23036      * Fix build problems on x86-solaris systems.
   23037 
   23038    EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
   23039    serious problems in EGCS 1.0.1.
   23040      * General improvements and fixes
   23041           + Memory consumption significantly reduced, especially for
   23042             templates and inline functions.
   23043           + Fix various problems with glibc2.1.
   23044           + Fix loop optimization bug exposed by rs6000/ppc port.
   23045           + Fix to avoid potential code generation problems in jump.c.
   23046           + Fix some undefined symbol problems in dwarf1 debug support.
   23047      * g++/libstdc++ improvements and fixes
   23048           + libstdc++ in the EGCS release has been updated and should be
   23049             link compatible with libstdc++-2.8.
   23050           + Various fixes in libio/libstdc++ to work better on GNU/Linux
   23051             systems.
   23052           + Fix problems with duplicate symbols on systems that do not
   23053             support weak symbols.
   23054           + Memory corruption bug and undefined symbols in bastring have
   23055             been fixed.
   23056           + Various exception handling fixes.
   23057           + Fix compiler abort for very long thunk names.
   23058      * g77 improvements and fixes
   23059           + Fix compiler crash for omitted bound in Fortran CASE
   23060             statement.
   23061           + Add missing entries to g77 lang-options.
   23062           + Fix problem with -fpedantic in the g77 compiler.
   23063           + Fix "backspace" problem with g77 on alphas.
   23064           + Fix x86 back end problem with Fortran literals and -fpic.
   23065           + Fix some of the problems with negative subscripts for g77 on
   23066             alphas.
   23067           + Fixes for Fortran builds on cygwin32/mingw32.
   23068      * platform specific improvements and fixes
   23069           + Fix long double problems on x86 (exposed by glibc).
   23070           + x86 ports define i386 again to keep imake happy.
   23071           + Fix exception handling support on NetBSD ports.
   23072           + Several changes to collect2 to fix many problems with AIX.
   23073           + Define __ELF__ for GNU/Linux on rs6000.
   23074           + Fix -mcall-linux problem on GNU/Linux on rs6000.
   23075           + Fix stdarg/vararg problem for GNU/Linux on rs6000.
   23076           + Allow autoconf to select a proper install problem on AIX 3.1.
   23077           + m68k port support includes -mcpu32 option as well as cpu32
   23078             multilibs.
   23079           + Fix stdarg bug for irix6.
   23080           + Allow EGCS to build on irix5 without the gnu assembler.
   23081           + Fix problem with static linking on sco5.
   23082           + Fix bootstrap on sco5 with native compiler.
   23083           + Fix for abort building newlib on H8 target.
   23084           + Fix fixincludes handling of math.h on SunOS.
   23085           + Minor fix for Motorola 3300 m68k systems.
   23086 
   23087    EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
   23088    problems reported by Red Hat for builds of Red Hat 5.1.
   23089      * Generic bugfixes:
   23090           + Fix a typo in the libio library which resulted in incorrect
   23091             behavior of istream::get.
   23092           + Fix the Fortran negative array index problem.
   23093           + Fix a major problem with the ObjC runtime thread support
   23094             exposed by glibc2.
   23095           + Reduce memory consumption of the Haifa scheduler.
   23096      * Target specific bugfixes:
   23097           + Fix one x86 floating point code generation bug exposed by
   23098             glibc2 builds.
   23099           + Fix one x86 internal compiler error exposed by glibc2 builds.
   23100           + Fix profiling bugs on the Alpha.
   23101           + Fix ImageMagick & emacs 20.2 build problems on the Alpha.
   23102           + Fix rs6000/ppc bug when converting values from integer types
   23103             to floating point types.
   23104 
   23105    The EGCS 1.0 releases include installation instructions in both HTML
   23106    and plaintext forms (see the INSTALL directory in the toplevel
   23107    directory of the distribution). However, we also keep the most up to
   23108    date installation instructions and [2]build/test status on our web
   23109    page. We will update those pages as new information becomes available.
   23110 
   23111    And, we can't in good conscience fail to mention some [3]caveats to
   23112    using EGCS.
   23113 
   23114    Update: Big thanks to Stanford for providing a high speed link for
   23115    downloading EGCS (go.cygnus.com)!
   23116 
   23117    Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com
   23118    (USA California -- High speed link provided by Stanford).
   23119 
   23120    The EGCS 1.0 release is also available many mirror sites.
   23121    [4]Goto mirror list to find a closer site
   23122 
   23123    We'd like to thank the numerous people that have contributed new
   23124    features, test results, bugfixes, etc. Unfortunately, they're far too
   23125    numerous to mention by name.
   23126 
   23127 
   23128     For questions related to the use of GCC, please consult these web
   23129     pages and the [5]GCC manuals. If that fails, the
   23130     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23131     web pages and the development of GCC are welcome on our developer
   23132     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   23133 
   23134    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   23135    distribution of this entire article is permitted in any medium,
   23136    provided this notice is preserved.
   23137 
   23138    These pages are [10]maintained by the GCC team. Last modified
   23139    2023-09-02.
   23140 
   23141 References
   23142 
   23143    1. https://gcc.gnu.org/egcs-1.0/features.html
   23144    2. https://gcc.gnu.org/egcs-1.0/buildstat.html
   23145    3. https://gcc.gnu.org/egcs-1.0/caveats.html
   23146    4. https://gcc.gnu.org/mirrors.html
   23147    5. https://gcc.gnu.org/onlinedocs/
   23148    6. mailto:gcc-help (a] gcc.gnu.org
   23149    7. mailto:gcc (a] gcc.gnu.org
   23150    8. https://gcc.gnu.org/lists.html
   23151    9. https://www.fsf.org/
   23152   10. https://gcc.gnu.org/about.html
   23153 ======================================================================
   23154 http://gcc.gnu.org/egcs-1.0/features.html
   23155 
   23156                                EGCS 1.0 features
   23157 
   23158      * Core compiler is based on the gcc2 development tree from Aug 2,
   23159        1997, so we have most of the [1]features found in GCC 2.8.
   23160      * Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
   23161      * Vast improvements in the C++ compiler; so many they have [2]page of
   23162        their own!
   23163      * Integrated C++ runtime libraries, including support for most major
   23164        GNU/Linux systems!
   23165      * New instruction scheduler from IBM Haifa which includes support for
   23166        function wide instruction scheduling as well as superscalar
   23167        scheduling.
   23168      * Significantly improved alias analysis code.
   23169      * Improved register allocation for two address machines.
   23170      * Significant code generation improvements for Fortran code on
   23171        Alphas.
   23172      * Various optimizations from the g77 project as well as improved loop
   23173        optimizations.
   23174      * Dwarf2 debug format support for some targets.
   23175      * egcs libstdc++ includes the SGI STL implementation without changes.
   23176      * As a result of these and other changes, egcs libstc++ is not binary
   23177        compatible with previous releases of libstdc++.
   23178      * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The SCO
   23179        Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 and
   23180        1.1), Support for RTEMS on several embedded targets, Support for
   23181        arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
   23182        MN103, NEC V850, Sparclet, Solaris & GNU/Linux on PowerPCs, etc.
   23183      * Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
   23184      * RS6000/PowerPC ports generate code which can run on all
   23185        RS6000/PowerPC variants by default.
   23186      * -mcpu= and -march= switches for the x86 port to allow better
   23187        control over how the x86 port generates code.
   23188      * Includes the template repository patch (aka repo patch); note the
   23189        new template code makes repo obsolete for ELF systems using gnu-ld
   23190        such as GNU/Linux.
   23191      * Plus the usual assortment of bugfixes and improvements.
   23192 
   23193 
   23194     For questions related to the use of GCC, please consult these web
   23195     pages and the [3]GCC manuals. If that fails, the
   23196     [4]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23197     web pages and the development of GCC are welcome on our developer
   23198     list at [5]gcc (a] gcc.gnu.org. All of [6]our lists have public archives.
   23199 
   23200    Copyright (C) [7]Free Software Foundation, Inc. Verbatim copying and
   23201    distribution of this entire article is permitted in any medium,
   23202    provided this notice is preserved.
   23203 
   23204    These pages are [8]maintained by the GCC team. Last modified
   23205    2022-10-26.
   23206 
   23207 References
   23208 
   23209    1. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   23210    2. https://gcc.gnu.org/egcs-1.0/c++features.html
   23211    3. https://gcc.gnu.org/onlinedocs/
   23212    4. mailto:gcc-help (a] gcc.gnu.org
   23213    5. mailto:gcc (a] gcc.gnu.org
   23214    6. https://gcc.gnu.org/lists.html
   23215    7. https://www.fsf.org/
   23216    8. https://gcc.gnu.org/about.html
   23217 ======================================================================
   23218 http://gcc.gnu.org/egcs-1.0/caveats.html
   23219 
   23220                                 EGCS 1.0 Caveats
   23221 
   23222      * EGCS has an integrated libstdc++, but does not have an integrated
   23223        libg++. Furthermore old libg++ releases will not work with egc; HJ
   23224        Lu has made a libg++-2.8.1.2 available which may work with EGCS.
   23225        Note most C++ programs only need libstdc++.
   23226      * Note that using -pedantic or -Wreturn-type can cause an explosion
   23227        in the amount of memory needed for template-heavy C++ code, such as
   23228        code that uses STL. Also note that -Wall includes -Wreturn-type, so
   23229        if you use -Wall you will need to specify -Wno-return-type to turn
   23230        it off.
   23231      * Exception handling may not work with shared libraries, particularly
   23232        on alphas, hppas, and mips based platforms. Exception handling is
   23233        known to work on x86-linux platforms with shared libraries.
   23234      * Some versions of the Linux kernel have bugs which prevent them from
   23235        being compiled or from running when compiled by EGCS. See the FAQ
   23236        (as shipped with EGCS 1.0) for additional information.
   23237      * In general, EGCS is more rigorous about rejecting invalid C++ code
   23238        or deprecated C++ constructs than G++ 2.7. As a result it may be
   23239        necessary to fix C++ code before it will compile with EGCS.
   23240      * G++ is also aggressively tracking the C++ standard; as a result
   23241        code which was previously valid (and thus accepted by other
   23242        compilers and older versions of G++) may no longer be accepted.
   23243      * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
   23244        1.0.x and later releases should work with Red Hat Linux 5.0.
   23245 
   23246 
   23247     For questions related to the use of GCC, please consult these web
   23248     pages and the [1]GCC manuals. If that fails, the
   23249     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23250     web pages and the development of GCC are welcome on our developer
   23251     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   23252 
   23253    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   23254    distribution of this entire article is permitted in any medium,
   23255    provided this notice is preserved.
   23256 
   23257    These pages are [6]maintained by the GCC team. Last modified
   23258    2022-10-26.
   23259 
   23260 References
   23261 
   23262    1. https://gcc.gnu.org/onlinedocs/
   23263    2. mailto:gcc-help (a] gcc.gnu.org
   23264    3. mailto:gcc (a] gcc.gnu.org
   23265    4. https://gcc.gnu.org/lists.html
   23266    5. https://www.fsf.org/
   23267    6. https://gcc.gnu.org/about.html
   23268 ======================================================================
   23269