Home | History | Annotate | Line # | Download | only in dist
NEWS revision 1.18
      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                              GCC 12 Release Series
     10 
     11    Jun 20, 2024
     12 
     13    The GCC developers are pleased to announce the release of GCC 12.4.
     14 
     15    This release is a bug-fix release, containing fixes for regressions in
     16    GCC 12.3 relative to previous releases of GCC.
     17 
     18 Release History
     19 
     20    GCC 12.4
     21           Jun 20, 2024 ([1]changes, [2]documentation)
     22 
     23    GCC 12.3
     24           May 8, 2023 ([3]changes, [4]documentation)
     25 
     26    GCC 12.2
     27           Aug 19, 2022 ([5]changes, [6]documentation)
     28 
     29    GCC 12.1
     30           May 6, 2022 ([7]changes, [8]documentation)
     31 
     32 References and Acknowledgements
     33 
     34    GCC used to stand for the GNU C Compiler, but since the compiler
     35    supports several other languages aside from C, it now stands for the
     36    GNU Compiler Collection.
     37 
     38    The GCC developers would like to thank the numerous people that have
     39    contributed new features, improvements, bug fixes, and other changes as
     40    well as test results to GCC. This [9]amazing group of volunteers is
     41    what makes GCC successful.
     42 
     43    For additional information about GCC please refer to the [10]GCC
     44    project web site or contact the [11]GCC development mailing list.
     45 
     46    To obtain GCC please use [12]our mirror sites or [13]our version
     47    control system.
     48 
     49 
     50     For questions related to the use of GCC, please consult these web
     51     pages and the [14]GCC manuals. If that fails, the
     52     [15]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
     53     web pages and the development of GCC are welcome on our developer
     54     list at [16]gcc (a] gcc.gnu.org. All of [17]our lists have public
     55     archives.
     56 
     57    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     58    distribution of this entire article is permitted in any medium,
     59    provided this notice is preserved.
     60 
     61    These pages are [19]maintained by the GCC team. Last modified
     62    2024-06-20.
     63 
     64 References
     65 
     66    1. https://gcc.gnu.org/gcc-12/changes.html
     67    2. https://gcc.gnu.org/onlinedocs/12.4.0/
     68    3. https://gcc.gnu.org/gcc-12/changes.html
     69    4. https://gcc.gnu.org/onlinedocs/12.3.0/
     70    5. https://gcc.gnu.org/gcc-12/changes.html
     71    6. https://gcc.gnu.org/onlinedocs/12.2.0/
     72    7. https://gcc.gnu.org/gcc-12/changes.html
     73    8. https://gcc.gnu.org/onlinedocs/12.1.0/
     74    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
     75   10. https://gcc.gnu.org/index.html
     76   11. mailto:gcc (a] gcc.gnu.org
     77   12. https://gcc.gnu.org/mirrors.html
     78   13. https://gcc.gnu.org/git.html
     79   14. https://gcc.gnu.org/onlinedocs/
     80   15. mailto:gcc-help (a] gcc.gnu.org
     81   16. mailto:gcc (a] gcc.gnu.org
     82   17. https://gcc.gnu.org/lists.html
     83   18. https://www.fsf.org/
     84   19. https://gcc.gnu.org/about.html
     85 ======================================================================
     86 http://gcc.gnu.org/gcc-12/changes.html
     87                              GCC 12 Release Series
     88                         Changes, New Features, and Fixes
     89 
     90    This page is a "brief" summary of some of the huge number of
     91    improvements in GCC 12. You may also want to check out our [1]Porting
     92    to GCC 12 page and the [2]full GCC documentation.
     93 
     94 Caveats
     95 
     96      * An ABI incompatibility between C and C++ when passing or returning
     97        by value certain aggregates containing zero width bit-fields has
     98        been discovered on various targets. As mentioned in [3]PR102024,
     99        since the [4]PR42217 fix in GCC 4.5 the C++ front-end has been
    100        removing zero width bit-fields from the internal representation of
    101        the aggregates after the layout of those aggregates, but the C
    102        front-end kept them, so passing e.g. struct S { float a; int : 0;
    103        float b; } or struct T { float c; int : 0; } by value could differ
    104        between C and C++. Starting with GCC 12 the C++ front-end no longer
    105        removes those bit-fields from the internal representation and per
    106        clarified psABI some targets have been changed, so that they either
    107        ignore those bit-fields in the argument passing by value decisions
    108        in both C and C++, or they always take them into account. x86-64,
    109        ARM and AArch64 will always ignore them (so there is a C ABI
    110        incompatibility between GCC 11 and earlier with GCC 12 or later),
    111        PowerPC64 ELFv2 and S/390 always take them into account (so there
    112        is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with
    113        GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V
    114        has changed the handling of these already starting with GCC 10. As
    115        the ABI requires, MIPS takes them into account handling function
    116        return values so there is a C++ ABI incompatibility with GCC 4.5
    117        through 11. For function arguments on MIPS, refer to [5]the MIPS
    118        specific entry. GCC 12 on the above targets will report such
    119        incompatibilities as warnings or other diagnostics unless
    120        -Wno-psabi is used.
    121      * C: Computed gotos require a pointer type now.
    122      * C++: Two non-standard std::pair constructors have been deprecated.
    123        These allowed the use of an rvalue and a literal 0 to construct a
    124        pair containing a move-only type and a pointer. The nullptr keyword
    125        should be used to initialize the pointer member instead of a
    126        literal 0, as this is portable to other C++ implementations.
    127      * The configuration option --enable-libstdcxx-allocator no longer
    128        supports the bitmap, mt, and pool arguments. Those configurations
    129        had been broken for some time.
    130      * D: Building and bootstrapping GDC, the D compiler, now requires a
    131        working GDC compiler (GCC version 9.1 or later) and D runtime
    132        library, libphobos, as the D front end is written in D. On some
    133        targets, libphobos isn't enabled by default, but compiles and works
    134        if --enable-libphobos is used. Other targets may require a more
    135        recent minimum version of GCC to bootstrap. Specifics are
    136        documented for affected targets in the [6]manual for installing
    137        GCC.
    138      * Fortran: OpenMP code using the omp_lib.h include file can no longer
    139        be compiled with -std=f95 but now requires at least -std=f2003.
    140        Alternatively, use the omp_lib module, which still supports
    141        -std=f95 and is recommended to be used instead in general.
    142      * OpenMP offloading to Intel MIC has been deprecated and will be
    143        removed in a future release.
    144      * The cr16 target with the cr16-*-* configuration has been obsoleted
    145        and will be removed in a future release.
    146      * The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations
    147        targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be
    148        removed in a future release.
    149      * The m32c*-*-rtems* configuration has been obsoleted and will be
    150        removed in a future release.
    151      * The support for the m32r-*-linux*, m32rle-*-linux*,
    152        m68k*-*-openbsd* and vax-*-openbsd* configurations has been
    153        removed.
    154      * STABS: Support for emitting the STABS debugging format is
    155        deprecated and will be removed in the next release. All ports now
    156        default to emit DWARF (version 2 or later) debugging info or are
    157        obsoleted.
    158      * The optimization level -Ofast now implies
    159        -fno-semantic-interposition.
    160 
    161 General Improvements
    162 
    163      * Vectorization is enabled at -O2 which is now equivalent to what
    164        would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
    165        in the past. Note that the default vectorizer cost model has been
    166        changed; it used to behave as if -fvect-cost-model=cheap had been
    167        specified.
    168      * GCC now supports the [7]ShadowCallStack sanitizer, which can be
    169        enabled using the command-line option
    170        [8]-fsanitize=shadow-call-stack. This sanitizer currently only
    171        works on AArch64 targets and it requires an environment in which
    172        all code has been compiled with -ffixed-r18. Its primary initial
    173        user is the Linux kernel.
    174 
    175 New Languages and Language specific improvements
    176 
    177      * OpenMP
    178           + OpenMP 5.0 support has been extended: The close map modifier
    179             and the affinity clause are now supported. In addition,
    180             Fortran gained the following features which were available in
    181             C and C++ before: declare variant is now available, depobj,
    182             mutexinoutset and iterator can now also be used with the
    183             depend clause, defaultmap has been updated for OpenMP 5.0, and
    184             the loop directive and combined directives involving the
    185             master directive have been added.
    186           + The following OpenMP 5.1 features have been added: support for
    187             expressing OpenMP directives as C++ 11 attributes, the masked
    188             and scope constructs, the nothing and error directives, and
    189             using primary with the proc_bind clause and OMP_PROC_BIND
    190             environment variable, the reproducible and unconstrained
    191             modifiers to the order clause, and, for C/C++ only, the align
    192             and allocator modifiers to the allocate clause and the atomic
    193             extensions are now available. The OMP_PLACE environment
    194             variable supports the OpenMP 5.1 features. In addition, the
    195             OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT environment variables
    196             and their associated API routines are now supported as well as
    197             the memory-allocation routines added for Fortran and extended
    198             for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
    199             blocks can be used.
    200           + The [9]OpenMP Implementation Status can be found in the
    201             libgomp manual.
    202      * Version 2.6 of the [10]OpenACC specification continues to be
    203        maintained and improved in the C, C++ and Fortran compilers. See
    204        the [11]implementation status section on the OpenACC wiki page and
    205        the [12]run-time library documentation for further information. In
    206        addition to general performance tuning and bug fixing, new features
    207        include:
    208           + OpenACC worker parallelism for [13]AMD GPUs (already for a
    209             long time supported for [14]Nvidia GPUs).
    210           + Data privatization/sharing at the OpenACC gang level.
    211           + Considerable improvements for the experimental OpenACC
    212             'kernels' decomposition ([15]--param
    213             openacc-kernels=decompose).
    214           + A new warning flag [16]-Wopenacc-parallelism to warn about
    215             potentially suboptimal choices related to OpenACC parallelism.
    216      * The offload target code generation for OpenMP and OpenACC can now
    217        be better adjusted using the new [17]-foffload-options= flag and
    218        the pre-existing but now documented [18]-foffload= flag.
    219 
    220   Ada
    221 
    222      * Ada 2022
    223           + Added the -gnat2022 flag to indicate strict Ada 2022
    224             compliance. The old -gnat2020 flag is now deprecated.
    225           + Support for Big Numbers (Annex G) has seen continuous
    226             improvements. It is now considered complete. It is compatible
    227             with SPARK, i.e. can be used from SPARK code.
    228           + Continuous improvements to the Ada 2022 standard since GCC 11.
    229           + Greatly improved compile time support. More functions can now
    230             have the with Static aspect and can be used in more contexts.
    231      * Ada 2022 extensions. The use of the -gnatX flag is necessary to
    232        access these features as they are not considered stable or
    233        standard.
    234           + Fixed lower bound for unconstrained arrays.
    235                o type Matrix is array (Natural range 0 .. <>, Natural
    236                  range 0 .. <>) of Integer; is now valid.
    237                o Subtypes can also specify a lower bound: subtype String_1
    238                  is String (1 .. <>);. Boundaries from slices will "slide"
    239                  to the correct lower bound of the subtype.
    240           + Generalized Object.Operand notation. The following code is now
    241             valid V.Add_Element(42);, with V being a vector, for example.
    242           + Additional when constructs. Keywords return, goto and raise
    243             can now use when in addition to the existing exit when. The
    244             following expression is therefore now valid raise
    245             Constraint_Error with "Element is null" when Element = null;
    246           + Pattern matching
    247                o The case statement has been extended to cover records and
    248                  arrays as well as finer grained casing on scalar types.
    249                  In the future it is expected to provide more compile time
    250                  guarantees when accessing discriminated fields. Case
    251                  exhaustion is supported for pattern matching. An example
    252                  would be
    253 type Sign is (Neg, Zero, Pos);
    254 
    255 function Multiply (S1, S2 : Sign) return Sign is
    256   (case (S1, S2) is
    257      when (Neg, Neg) | (Pos, Pos) => Pos,
    258      when (Zero, <>) | (<>, Zero) => Zero,
    259      when (Neg, Pos) | (Pos, Neg) => Neg);
    260 
    261      * gnatfind and gnatxref, which were already deprecated, have been
    262        removed.
    263      * Greatly expanded code covered by contracts. Thanks to this work,
    264        there are now several Ada standard libraries fully proven in SPARK
    265        which means they have no runtime nor logical errors. They are
    266        mostly numeric and string handling libraries.
    267      * Enable return-slot optimization for Pure functions.
    268      * General optimizations, improvements and additions to the standard
    269        library. Performance, correctness and in some cases stability was
    270        improved. Memory pools have also seen some minor enhancements.
    271      * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
    272        QNX. Older targets were removed or cleaned.
    273      * Added some [19]hardening features.
    274 
    275   C family
    276 
    277      * Support for __builtin_shufflevector compatible with the clang
    278        language extension was added.
    279      * Support for attribute unavailable was added.
    280      * A new built-in function, __builtin_assoc_barrier, was added. It can
    281        be used to inhibit re-association of floating-point expressions.
    282      * Support for __builtin_dynamic_object_size compatible with the clang
    283        language extension was added.
    284      * New warnings:
    285           + [20]-Wbidi-chars warns about potentially misleading UTF-8
    286             bidirectional control characters. The default is
    287             -Wbidi-chars=unpaired ([21]PR103026)
    288           + [22]-Warray-compare warns about comparisons between two
    289             operands of array type ([23]PR97573)
    290      * Enhancements to existing warnings:
    291           + [24]-Wattributes has been extended so that it's possible to
    292             use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
    293             suppress warnings about unknown scoped attributes (in C++11
    294             and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
    295             "vendor::attr" can be used to achieve the same effect
    296             ([25]PR101940)
    297 
    298   C
    299 
    300      * Some new features from the upcoming C2X revision of the ISO C
    301        standard are supported with -std=c2x and -std=gnu2x. Some of these
    302        features are also supported as extensions when compiling for older
    303        language versions. In addition to the features listed, some
    304        features previously supported as extensions and now added to the C
    305        standard are enabled by default in C2X mode and not diagnosed with
    306        -std=c2x -Wpedantic.
    307           + Digit separators (as in C++) are supported for C2X.
    308           + The #elifdef and #elifndef preprocessing directives are now
    309             supported.
    310           + The printf and scanf format checking with [26]-Wformat now
    311             supports the %b format specified by C2X for binary integers,
    312             and the %B format recommended by C2X for printf.
    313 
    314   C++
    315 
    316      * Several C++23 features have been implemented:
    317           + [27]P1938R3, if consteval ([28]PR100974)
    318           + [29]P0849R8, auto(x): decay-copy in the language
    319             ([30]PR103049)
    320           + [31]P2242R3, Non-literal variables (and labels and gotos) in
    321             constexpr functions ([32]PR102612)
    322           + [33]P2334R1, Support for preprocessing directives elifdef and
    323             elifndef ([34]PR102616)
    324           + [35]P2360R0, Extend init-statement to allow alias-declaration
    325             ([36]PR102617)
    326           + [37]P2128R6, Multidimensional subscript operator
    327           + [38]DR 2397, auto specifier for pointers and references to
    328             arrays ([39]PR100975)
    329      * Several C++ Defect Reports have been resolved, e.g.:
    330           + [40]DR 960, Covariant functions and lvalue/rvalue references
    331           + [41]DR 1227, Mixing immediate and non-immediate contexts in
    332             deduction failure
    333           + [42]DR 1315, Restrictions on non-type template arguments in
    334             partial specializations
    335           + [43]DR 2082, Referring to parameters in unevaluated operands
    336             of default arguments
    337           + [44]DR 2351, void{}
    338           + [45]DR 2374, Overly permissive specification of enum
    339             direct-list-initialization
    340           + [46]DR 2397, auto specifier for pointers and references to
    341             arrays
    342           + [47]DR 2446, Questionable type-dependency of concept-ids
    343      * New command-line option -fimplicit-constexpr can be used to make
    344        inline functions implicitly constexpr ([48]git)
    345      * New command-line option -ffold-simple-inlines can be used to fold
    346        calls to certain trivial inline functions (currently std::move,
    347        std::forward, std::addressof and std::as_const). In contrast to
    348        inlining such calls, folding means that no intermediate code or
    349        debug information will be generated for them; this minimizes the
    350        abstraction penalty incurred for using these functions versus using
    351        the fundamental operations from which they're defined (e.g.
    352        std::move versus static_cast). This flag is enabled by default when
    353        -fno-inline is not active.
    354      * Deduction guides can be declared at class scope ([49]PR79501)
    355      * [50]-Wuninitialized warns about using uninitialized variables in
    356        member initializer lists ([51]PR19808)
    357      * [52]-Wint-in-bool-context is now disabled when instantiating a
    358        template ([53]git)
    359      * Stricter checking of attributes on friend declarations: if a friend
    360        declaration has an attribute, that declaration must be a
    361        definition. Moreover, a C++11 attribute cannot appear in the middle
    362        of the decl-specifier-seq. ([54]PR99032)
    363      * New warning options for C++ language mismatches:
    364        -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
    365        -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
    366        default and can be used to control existing pedwarns about
    367        occurrences of new C++ constructs in code using an old C++ standard
    368        dialect.
    369      * New warning [55]-Wmissing-requires warns about missing requires
    370        ([56]git)
    371      * The existing std::is_constant_evaluated in if warning was extended
    372        to warn in more cases ([57]PR100995)
    373      * [58]-Waddress has been enhanced so that it now warns about, for
    374        instance, comparing the address of a nonstatic member function to
    375        null ([59]PR102103)
    376      * Errors about narrowing are no longer hidden if they occur in system
    377        headers
    378      * Ordered comparison of null pointers is now rejected ([60]PR99701)
    379      * Anonymous structs with bases are now rejected ([61]git)
    380      * The compiler rejects taking the address of an immediate member
    381        function ([62]PR102753)
    382      * The compiler has support for C++20
    383        __cpp_lib_is_pointer_interconvertible and
    384        __cpp_lib_is_layout_compatible to help the C++ library implement
    385        [63]P0466, Layout-compatibility and Pointer-interconvertibility
    386        Traits ([64]PR101539)
    387      * Memory usage of constraint subsumption has been improved
    388        ([65]PR100828)
    389      * constinit thread_local variables are optimized better
    390        ([66]PR101786)
    391      * Support for C++17 std::hardware_destructive_interference_size was
    392        added, along with the [67]-Winterference-size warning ([68]git)
    393      * Many bugs in the CTAD handling have been fixed ([69]PR101344,
    394        [70]PR101883, [71]PR89062, [72]PR101233, [73]PR88252, [74]PR86439,
    395        [75]PR98832, [76]PR102933 ...)
    396      * Two-stage name lookup for dependent operator expressions has been
    397        corrected ([77]PR51577)
    398      * Several issues with constrained variable templates have been fixed
    399        ([78]PR98486)
    400      * The compiler performs less instantiating when doing speculative
    401        constant evaluation ([79]git)
    402      * Various diagnostic improvements; e.g., a more precise caret
    403        location for pointer-to-member expressions
    404      * The new -fconstexpr-fp-except flag allows IEC559 floating point
    405        exceptions in constant-expressions.
    406 
    407     Runtime Library (libstdc++)
    408 
    409      * Improved experimental C++20 support, including:
    410           + std::vector, std::basic_string, std::optional, and
    411             std::variant can be used in constexpr functions.
    412           + std::make_shared for arrays with default initialization, and
    413             std::atomic<std::shared_ptr<T>>.
    414           + Layout-compatibility and pointer-interconvertibility traits.
    415      * Improved experimental C++23 support, including:
    416           + Monadic operations for std::optional.
    417           + std::expected
    418           + std::move_only_function
    419           + <spanstream>
    420           + std::basic_string::resize_and_overwrite
    421           + std::unique_ptr can be used in constexpr functions.
    422           + <stacktrace> (not built by default, requires linking to an
    423             extra library).
    424           + <stdatomic.h>
    425           + std::invoke_r
    426           + constexpr std::type_info::operator==
    427 
    428   D
    429 
    430      * New features:
    431           + Support for the D programming language has been updated to
    432             version 2.100.1 of the language and run-time library. Full
    433             changelog for this release and previous releases can be found
    434             on the [80]dlang.org website.
    435           + On supported targets, the __traits(compiles) expression can
    436             now be used to determine whether a target-specific built-in is
    437             available without error during CTFE ([81]PR101127).
    438           + Functions annotated with pragma(inline, true) are now compiled
    439             into every module where they are used from ([82]PR106563).
    440           + Partial support for directly importing C99 sources into a D
    441             compilation ([83]ImportC) has been added to the language. A
    442             notable missing feature is support for preprocessing C
    443             imports, which can be worked around by preprocessing all C
    444             sources used for importing ahead of time.
    445      * New language options:
    446           + -fcheck=, enables or disables the code generation of specific
    447             run-time contract checks.
    448           + -fcheckaction=, controls the run-time behavior on an assert,
    449             array bounds check, or final switch contract failure. The
    450             default is -fcheckaction=throw.
    451           + -fdump-c++-spec=, dumps all compiled extern(C++) declarations
    452             as C++ code to the given file. The supplementary option
    453             -fdump-c++-spec-verbose turns on emission of comments for
    454             ignored declarations in the generated spec.
    455           + -fextern-std=, controls which C++ standard extern(C++)
    456             declarations are compiled to be compatible with. The default
    457             is -fextern-std=c++17.
    458           + -fpreview=, added to enable upcoming D language features in
    459             the compiler.
    460           + -frevert=, added to revert D language changes to support older
    461             D codebases that need more time to transition.
    462           + -fsave-mixins=, saves mixins expanded at compile-time to a
    463             file.
    464      * Deprecated and removed features:
    465           + The -Wtemplates compiler switch has been removed, as it had
    466             been superceded by -ftransition=templates, which more
    467             accurately reports on which templates have been instantiated.
    468           + The -ftransition=dip25 and -ftransition=dip1000 compiler
    469             switches have been renamed to -fpreview=dip25 and
    470             -fpreview=dip1000.
    471 
    472   Fortran
    473 
    474      * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
    475        is now fully supported. In addition to implementing previously
    476        missing functionality, such as support for character arguments of
    477        length greater than one in functions marked bind(c) and gaps in the
    478        handling for assumed-rank arrays, numerous other bugs have been
    479        fixed, and an extensive set of new conformance test cases has been
    480        added.
    481      * GCC 12 now uses OPERATION as the name of the function to the
    482        CO_REDUCE intrinsic for the pairwise reduction, thus conforming to
    483        the Fortran 2018 standard. Previous versions used OPERATOR which
    484        conforms to TS 18508.
    485      * On POWER systems which support it, the -mabi=ieeelongdouble option
    486        now selects the IEEE 128-bit floating point format for
    487        REAL(KIND=16). R16_IBM and R16_IEEE have been added to the
    488        -fconvert option, the CONVERT specifier of the OPEN statement and
    489        the GFORTRAN_CONVERT_UNIT environment variable.
    490 
    491   Go
    492 
    493      * GCC 12 provides a complete implementation of the Go 1.18 user
    494        packages.
    495      * Although Go 1.18 includes support for generic programming, that
    496        support is not yet available in GCC.
    497 
    498 libgccjit
    499 
    500      * The libgccjit API gained 30 new entry points:
    501           + 17 new "reflection" entry points for querying functions and
    502             types ([84]LIBGCCJIT_ABI_16)
    503           + [85]gcc_jit_lvalue_set_tls_model for supporting thread-local
    504             variables ([86]LIBGCCJIT_ABI_17)
    505           + [87]gcc_jit_lvalue_set_link_section for setting the link
    506             section of global variables, analogous to
    507             [88]__attribute__((section(".section")))
    508             ([89]LIBGCCJIT_ABI_18)
    509           + 4 new entry points for initializing global variables and
    510             creating constructors for rvalues ([90]LIBGCCJIT_ABI_19)
    511           + Support for sized integer types, including 128-bit integers
    512             and helper functions for such types ([91]LIBGCCJIT_ABI_20)
    513           + [92]gcc_jit_context_new_bitcast for reinterpreting the bits of
    514             an rvalue as a different type ([93]LIBGCCJIT_ABI_21)
    515           + [94]gcc_jit_lvalue_set_register_name for setting a specific
    516             register for a variable ([95]LIBGCCJIT_ABI_22)
    517           + [96]gcc_jit_context_set_bool_print_errors_to_stderr
    518             ([97]LIBGCCJIT_ABI_23)
    519           + 2 new entry points for setting the alignment of a variable
    520             ([98]LIBGCCJIT_ABI_24)
    521      * libgccjit has gained support for the use of various atomic builtins
    522        ([99]PR96066, [100]PR96067)
    523      * [101]gcc_jit_context_new_cast is now able to handle truncation and
    524        extension between different integer types ([102]PR95498)
    525 
    526 New Targets and Target Specific Improvements
    527 
    528   AArch64 & arm
    529 
    530      * Newer revisions of the Arm Architecture are supported as arguments
    531        to the -march option: armv8.7-a, armv8.8-a, armv9-a.
    532      * The Arm Cortex-A510 CPU is now supported through the cortex-a510
    533        argument to the -mcpu and -mtune options.
    534      * GCC can now auto-vectorize operations performing sign-differing
    535        dot-product operations, taking advantage of instructions in the
    536        Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
    537 
    538   AArch64
    539 
    540      * A number of new CPUs are supported through the -mcpu and -mtune
    541        options (GCC identifiers in parentheses).
    542           + Ampere-1 (ampere1).
    543           + Arm Cortex-A710 (cortex-a710).
    544           + Arm Cortex-X2 (cortex-x2).
    545      * The 64-byte atomic load/store intrinsics to accelerator memory from
    546        the [103]2020 Arm Architecture extensions are supported through the
    547        +ls64 option extension.
    548      * Initial code generation support is supported for hardware
    549        instructions used to accelerate the memcpy,memmove and memset
    550        standard functions. These instructions can be generated when
    551        compiling with the +mopsoption extension.
    552      * The ACLE Advanced SIMD intrinsics accessible through the arm_neon.h
    553        header have been significantly reimplemented and generate
    554        higher-performing code than previous GCC versions.
    555      * The option -mtune=neoverse-512tvb is added to tune for Arm Neoverse
    556        cores that have a total vector bandwidth of 512 bits. Please refer
    557        to the documentation for more details.
    558 
    559   AMD Radeon (GCN)
    560 
    561      * Debug experience with ROCGDB has been improved.
    562      * Support for the type __int128_t/integer(kind=16) was added.
    563      * For offloading, the limitation of using only one wavefront per
    564        compute unit (CU) has been lifted. Up to 40 workgroups per CU and
    565        16 wavefronts per workgroup are supported (up to a limit of 40
    566        wavefronts in total, per CU). Additionally, the number of used
    567        wavefronts and workgroups was tuned for performance.
    568 
    569   arm
    570 
    571      * Support is added for accessing the stack canary value via the TLS
    572        register through the -fstack-protector-guard=tls and
    573        -mstack-protector-guard-offset= options. This intended for use in
    574        Linux kernel development. Please refer to the documentation for
    575        more details.
    576 
    577   BPF
    578 
    579      * Support for CO-RE (compile-once, run-everywhere) has been added to
    580        the BPF back end. CO-RE allows to compile portable BPF programs
    581        that are able to run among different versions of the Linux kernel.
    582 
    583   IA-32/x86-64
    584 
    585      * New ISA extension support for Intel AVX512-FP16 was added.
    586        AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
    587        switch.
    588      * For both C and C++ the _Float16 type is supported on x86 systems
    589        with SSE2 enabled. Without {-mavx512fp16}, all operations will be
    590        emulated in software and float instructions.
    591      * Mitigation against straight line speculation (SLS) for function
    592        return and indirect jump is supported via
    593        -mharden-sls=[none|all|return|indirect-jmp].
    594      * Add CS prefix to call and jmp to indirect thunk with branch target
    595        in r8-r15 registers via -mindirect-branch-cs-prefix.
    596      * Always use global offset table (GOT) to access external data and
    597        function symbols when the new -mno-direct-extern-access
    598        command-line option is specified.
    599 
    600   LoongArch
    601 
    602      * Support for the LoongArch architecture instruction set has been
    603        added.
    604      * The Loongson CPU codename LA464 and LoongArch 64-bit generic CPU
    605        codename loongarch64 are supported through the -march= and -mtune=
    606        options (GCC identifiers in parentheses).
    607           + Loongson LA464 core (la464).
    608           + LoongArch 64-bit generic core (loongarch64).
    609 
    610   MIPS
    611 
    612      * The ABI passing arguments containing zero-width fields (for
    613        example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
    614        and GNU C empty structs) has changed. Now a zero-width field will
    615        not prevent an aligned 64-bit floating-point field next to it from
    616        being passed through FPR. This is compatible with LLVM, but
    617        incompatible with previous GCC releases. GCC 12 on MIPS will report
    618        such incompatibilities as an inform unless -Wno-psabi is used.
    619      * The ABI returning values containing C++17 empty bases has changed.
    620        Now an empty base will not prevent an aggregate containing only one
    621        or two floating-point fields from being returned through FPR. This
    622        is compatible with GCC 6 and earlier, but incompatible with GCC 7
    623        through 11. GCC 12 on MIPS will report such incompatibilities as an
    624        inform unless -Wno-psabi is used.
    625 
    626   NVPTX
    627 
    628      * The -march flag has been added. The -misa flag is now considered an
    629        alias of the -march flag.
    630      * Support for PTX ISA target architectures sm_53, sm_70, sm_75 and
    631        sm_80 has been added. These can be specified using the -march flag.
    632      * The default PTX ISA target architecture has been set back to sm_30,
    633        to fix support for sm_30 boards.
    634      * The -march-map flag has been added. The -march-map value will be
    635        mapped to an valid -march flag value. For instance,
    636        -march-map=sm_50 maps to -march=sm_35. This can be used to specify
    637        that generated code is to be executed on a board with at least some
    638        specific compute capability, without having to know the valid
    639        values for the -march flag.
    640      * The -mptx flag has been added to specify the PTX ISA version for
    641        the generated code; permitted values are 3.1 (matches previous GCC
    642        versions), 6.0, 6.3, and 7.0. If not specified, the used version is
    643        the minimal version required for -march but at least 6.0.
    644      * An mptx-3.1 multilib was added. This allows using older drivers
    645        which do not support PTX ISA version 6.0.
    646      * The new __PTX_SM__ predefined macro allows code to check the PTX
    647        ISA target architecture being targeted by the compiler.
    648      * The new __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__
    649        predefined macros allows code to check the PTX ISA version being
    650        targeted by the compiler.
    651 
    652   PowerPC / PowerPC64 / RS6000
    653 
    654      * The internal implementation of Power's target-specific built-in
    655        functions has been rewritten to be easier and less error-prone to
    656        maintain. Every attempt has been made to ensure that the new
    657        behavior matches the old behavior, but inevitably some bugs can be
    658        expected. Please [104]report any problems.
    659      * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
    660        __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
    661        __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
    662        now behave as documented in all supported configurations. On prior
    663        releases, the arguments and return values of these functions were
    664        treated as unsigned long long instead of as unsigned long, when the
    665        options -m32 -mpowerpc64 were in effect.
    666      * The overloaded built-in functions vec_cntlz_lsbb and vec_cnttz_lsbb
    667        now behave as documented. On prior releases, these built-in
    668        functions had incorrect semantics on little-endian targets.
    669 
    670   PRU
    671 
    672      * The [105]__regio_symbol variable qualifier has been added. It
    673        allows easier access in C programs to the __R30 and __R31 CPU I/O
    674        registers.
    675 
    676   RISC-V
    677 
    678      * Default ISA spec version was bump to 20191213, more detail see this
    679        [106]announcement
    680      * New ISA extension support for zba, zbb, zbc, zbs was added.
    681      * New ISA extension support for vector and scalar crypto was added,
    682        only support architecture testing macro and -march= parsing.
    683      * The option -mtune=thead-c906 is added to tune for T-HEAD c906
    684        cores.
    685      * libstdc++ no longer attempts to detect built-in atomics.
    686        Distributions that have out-of-tree workarounds for -latomic should
    687        check their ABIs again.
    688 
    689 Operating Systems
    690 
    691 Improvements to Static Analyzer
    692 
    693      * The analyzer has gained a
    694        [107]-Wanalyzer-use-of-uninitialized-value warning, similar to
    695        [108]-Wuninitialized and [109]-Wmaybe-uninitialized, but based on
    696        an interprocedural path-sensitive analysis ([110]PR95006).
    697        Such warnings are not disabled by the new
    698        [111]-ftrivial-auto-var-init (see below), as the latter is
    699        considered a mitigation option.
    700      * [112]-Wanalyzer-write-to-const and
    701        [113]-Wanalyzer-write-to-string-literal will now check for
    702        [114]__attribute__ ((access, ....)) on calls to externally-defined
    703        functions, and complain about read-only regions pointed to by
    704        arguments marked with a write_only or read_write attribute
    705        ([115]PR104793).
    706      * The analyzer's "taint" mode, activated by
    707        [116]-fanalyzer-checker=taint (in addition to [117]-fanalyzer), has
    708        gained four new taint-based warnings:
    709           + [118]-Wanalyzer-tainted-allocation-size for e.g.
    710             attacker-controlled malloc and alloca,
    711           + [119]-Wanalyzer-tainted-divisor for detecting where an
    712             attacker can inject a divide-by-zero,
    713           + [120]-Wanalyzer-tainted-offset for attacker-controlled pointer
    714             offsets,
    715           + [121]-Wanalyzer-tainted-size for attacker-controlled values
    716             being used as a size parameter to calls to memset or to
    717             functions marked with [122]__attribute__ ((access, ....)).
    718        The existing [123]-Wanalyzer-tainted-array-index has been reworded
    719        to talk about "attacker-controlled" rather than "tainted" values,
    720        for consistency with the new warnings.
    721        A new [124]__attribute__ ((tainted_args)) has been added to the C
    722        and C++ front ends, usable on functions, and on function pointer
    723        callback fields in structs. The analyzer's taint mode will treat
    724        all parameters and buffers pointed to by parameters of such
    725        functions as being attacker-controlled, such as for annotating
    726        system calls in an operating system kernel as being an "attack
    727        surface".
    728      * The analyzer now respects [125]__attribute__((const)): it will
    729        treat such functions as returning the same value when given the
    730        same inputs ([126]PR104434), and as having no side effects
    731        ([127]PR104576).
    732      * The analyzer is now able to split its analysis into multiple
    733        execution paths in places where there isn't a split in the control
    734        flow graph. For example, it now handles realloc calls by splitting
    735        the execution path into three possible outcomes for the call:
    736           + failure, returning NULL
    737           + success, growing the buffer in-place without moving it
    738           + success, allocating a new buffer, copying the content of the
    739             old buffer to it, and freeing the old buffer
    740      * The analyzer's interprocedural path exploration logic is now able
    741        to track calls through function pointers.
    742      * The analyzer now makes the assumption that if we know PTR is
    743        non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
    744        true, but eliminates false positives in practice ([128]PR101962).
    745      * The analyzer has gained some initial support for inline assembler
    746        code. This is extremely limited, and is purely to help suppress
    747        false positives when analyzing the Linux kernel, which makes heavy
    748        use of inline assembler ([129]PR101570).
    749      * The way the analyzer tracks the state of memory along an execution
    750        path has been improved in various ways for GCC 12:
    751           + An optimization for representing bulk updates to memory (e.g.
    752             zero fills) has been removed as it never worked well. In GCC
    753             12 it has been replaced with a simpler and more accurate
    754             approach, eliminating many false positives ([130]PR95006).
    755           + Various optimizations have been added, speeding up the
    756             analysis on a particularly problematic source file from 4
    757             minutes down to 17 seconds ([131]PR104943, [132]PR104954, and
    758             [133]PR104955).
    759           + The analyzer now tracks the sizes of dynamically-allocated
    760             regions, both on the heap (via malloc etc) and stack (via
    761             alloca), though none of the analyzer warnings make use of this
    762             yet in GCC 12.
    763      * The analyzer's handling of switch statements has been rewritten,
    764        fixing various bugs.
    765 
    766 Other significant improvements
    767 
    768   Eliminating uninitialized variables
    769 
    770      * GCC can now [134]initialize all stack variables implicitly,
    771        including padding. This is intended to eliminate all classes of
    772        uninitialized stack variable flaws. Lack of explicit initialization
    773        will still warn when [135]-Wuninitialized is active. For best
    774        debugging, use of the new command-line option
    775        [136]-ftrivial-auto-var-init=pattern can be used to fill variables
    776        with a repeated 0xFE pattern, which tends to illuminate many bugs
    777        (e.g. pointers receive invalid addresses, sizes and indices are
    778        very large). For best production results, the new command-line
    779        option [137]-ftrivial-auto-var-init=zero can be used to fill
    780        variables with 0x00, which tends to provide a safer state for bugs
    781        (e.g. pointers are NULL, strings are NUL filled, and sizes and
    782        indices are 0).
    783 
    784   Debugging formats
    785 
    786      * GCC can now generate debugging information in [138]CTF, a
    787        lightweight debugging format that provides information about C
    788        types and the association between functions and data symbols and
    789        types. This format is designed to be embedded in ELF files and to
    790        be very compact and simple. A new command-line option -gctf enables
    791        the generation of CTF.
    792      * GCC can now generate debugging information in BTF. This is a
    793        debugging format mainly used in BPF programs and the Linux kernel.
    794        The compiler can generate BTF for any target, when enabled with the
    795        command-line option -gbtf
    796 
    797 GCC 12.1
    798 
    799    This is the [139]list of problem reports (PRs) from GCC's bug tracking
    800    system that are known to be fixed in the 12.1 release. This list might
    801    not be complete (that is, it is possible that some PRs that have been
    802    fixed are not listed here).
    803 
    804 GCC 12.2
    805 
    806    This is the [140]list of problem reports (PRs) from GCC's bug tracking
    807    system that are known to be fixed in the 12.2 release. This list might
    808    not be complete (that is, it is possible that some PRs that have been
    809    fixed are not listed here).
    810 
    811   Target Specific Changes
    812 
    813     LoongArch
    814 
    815      * The default setting of -m[check|no-check]-zero-division is changed
    816        for optimized code. Now -mno-check-zero-division is the default for
    817        all optimization levels but -O0 and -Og. The old behavior can be
    818        obtained by explicitly passing -mcheck-zero-division to GCC.
    819 
    820 GCC 12.3
    821 
    822   Target Specific Changes
    823 
    824   x86-64
    825 
    826      * GCC now supports AMD CPUs based on the znver4 core via
    827        -march=znver4. The switch makes GCC consider using 512-bit vectors
    828        when auto-vectorizing.
    829 
    830    This is the [141]list of problem reports (PRs) from GCC's bug tracking
    831    system that are known to be fixed in the 12.3 release. This list might
    832    not be complete (that is, it is possible that some PRs that have been
    833    fixed are not listed here).
    834 
    835 GCC 12.4
    836 
    837    This is the [142]list of problem reports (PRs) from GCC's bug tracking
    838    system that are known to be fixed in the 12.4 release. This list might
    839    not be complete (that is, it is possible that some PRs that have been
    840    fixed are not listed here).
    841 
    842 
    843     For questions related to the use of GCC, please consult these web
    844     pages and the [143]GCC manuals. If that fails, the
    845     [144]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
    846     web pages and the development of GCC are welcome on our developer
    847     list at [145]gcc (a] gcc.gnu.org. All of [146]our lists have public
    848     archives.
    849 
    850    Copyright (C) [147]Free Software Foundation, Inc. Verbatim copying and
    851    distribution of this entire article is permitted in any medium,
    852    provided this notice is preserved.
    853 
    854    These pages are [148]maintained by the GCC team. Last modified
    855    2024-06-20.
    856 
    857 References
    858 
    859    1. https://gcc.gnu.org/gcc-12/porting_to.html
    860    2. https://gcc.gnu.org/onlinedocs/index.html#current
    861    3. https://gcc.gnu.org/PR102024
    862    4. https://gcc.gnu.org/PR42217
    863    5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
    864    6. https://gcc.gnu.org/install/specific.html
    865    7. https://clang.llvm.org/docs/ShadowCallStack.html
    866    8. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
    867    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
    868   10. https://www.openacc.org/
    869   11. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-12
    870   12. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
    871   13. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
    872   14. https://gcc.gnu.org/gcc-12/changes.html#nvptx
    873   15. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
    874   16. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
    875   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
    876   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
    877   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
    878   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
    879   21. https://gcc.gnu.org/PR103026
    880   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
    881   23. https://gcc.gnu.org/PR97573
    882   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
    883   25. https://gcc.gnu.org/PR101940
    884   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
    885   27. https://wg21.link/p1938
    886   28. https://gcc.gnu.org/PR100974
    887   29. https://wg21.link/p0849
    888   30. https://gcc.gnu.org/PR103049
    889   31. https://wg21.link/p2242
    890   32. https://gcc.gnu.org/PR102612
    891   33. https://wg21.link/p2334
    892   34. https://gcc.gnu.org/PR102616
    893   35. https://wg21.link/p2360
    894   36. https://gcc.gnu.org/PR102617
    895   37. https://wg21.link/p2128
    896   38. https://wg21.link/cwg2397
    897   39. https://gcc.gnu.org/PR100975
    898   40. https://wg21.link/cwg960
    899   41. https://wg21.link/cwg1227
    900   42. https://wg21.link/cwg1315
    901   43. https://wg21.link/cwg2082
    902   44. https://wg21.link/cwg2351
    903   45. https://wg21.link/cwg2374
    904   46. https://wg21.link/cwg2397
    905   47. https://wg21.link/cwg2446
    906   48. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
    907   49. https://gcc.gnu.org/PR79501
    908   50. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
    909   51. https://gcc.gnu.org/PR19808
    910   52. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
    911   53. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
    912   54. https://gcc.gnu.org/PR99032
    913   55. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
    914   56. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
    915   57. https://gcc.gnu.org/PR100995
    916   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
    917   59. https://gcc.gnu.org/PR102103
    918   60. https://gcc.gnu.org/PR99701
    919   61. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
    920   62. https://gcc.gnu.org/PR102753
    921   63. https://wg21.link/p0466
    922   64. https://gcc.gnu.org/PR101539
    923   65. https://gcc.gnu.org/PR100828
    924   66. https://gcc.gnu.org/PR101786
    925   67. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
    926   68. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
    927   69. https://gcc.gnu.org/PR101344
    928   70. https://gcc.gnu.org/PR101883
    929   71. https://gcc.gnu.org/PR89062
    930   72. https://gcc.gnu.org/PR101233
    931   73. https://gcc.gnu.org/PR88252
    932   74. https://gcc.gnu.org/PR86439
    933   75. https://gcc.gnu.org/PR98832
    934   76. https://gcc.gnu.org/PR102933
    935   77. https://gcc.gnu.org/PR51577
    936   78. https://gcc.gnu.org/PR98486
    937   79. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
    938   80. https://dlang.org/changelog/2.100.1.html
    939   81. https://gcc.gnu.org/PR101127
    940   82. https://gcc.gnu.org/PR106563
    941   83. https://dlang.org/spec/importc.html
    942   84. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
    943   85. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
    944   86. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
    945   87. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
    946   88. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
    947   89. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
    948   90. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
    949   91. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
    950   92. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
    951   93. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
    952   94. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
    953   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
    954   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
    955   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
    956   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
    957   99. https://gcc.gnu.org/PR96066
    958  100. https://gcc.gnu.org/PR96067
    959  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
    960  102. https://gcc.gnu.org/PR95498
    961  103. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
    962  104. https://gcc.gnu.org/bugs/
    963  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
    964  106. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
    965  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
    966  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
    967  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
    968  110. https://gcc.gnu.org/PR95006
    969  111. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
    970  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
    971  113. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
    972  114. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
    973  115. https://gcc.gnu.org/PR104793
    974  116. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
    975  117. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
    976  118. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
    977  119. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
    978  120. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
    979  121. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
    980  122. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
    981  123. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
    982  124. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
    983  125. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
    984  126. https://gcc.gnu.org/PR104434
    985  127. https://gcc.gnu.org/PR104576
    986  128. https://gcc.gnu.org/PR101962
    987  129. https://gcc.gnu.org/PR101570
    988  130. https://gcc.gnu.org/PR95006
    989  131. https://gcc.gnu.org/PR104943
    990  132. https://gcc.gnu.org/PR104954
    991  133. https://gcc.gnu.org/PR104955
    992  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
    993  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
    994  136. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
    995  137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
    996  138. https://ctfstd.org/
    997  139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
    998  140. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
    999  141. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
   1000  142. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
   1001  143. https://gcc.gnu.org/onlinedocs/
   1002  144. mailto:gcc-help (a] gcc.gnu.org
   1003  145. mailto:gcc (a] gcc.gnu.org
   1004  146. https://gcc.gnu.org/lists.html
   1005  147. https://www.fsf.org/
   1006  148. https://gcc.gnu.org/about.html
   1007 ======================================================================
   1008 http://gcc.gnu.org/gcc-11/index.html
   1009                              GCC 11 Release Series
   1010 
   1011    May 29, 2023
   1012 
   1013    The GCC developers are pleased to announce the release of GCC 11.4.
   1014 
   1015    This release is a bug-fix release, containing fixes for regressions in
   1016    GCC 11.3 relative to previous releases of GCC.
   1017 
   1018 Release History
   1019 
   1020    GCC 11.4
   1021           May 29, 2023 ([1]changes, [2]documentation)
   1022 
   1023    GCC 11.3
   1024           April 21, 2022 ([3]changes, [4]documentation)
   1025 
   1026    GCC 11.2
   1027           July 28, 2021 ([5]changes, [6]documentation)
   1028 
   1029    GCC 11.1
   1030           April 27, 2021 ([7]changes, [8]documentation)
   1031 
   1032 References and Acknowledgements
   1033 
   1034    GCC used to stand for the GNU C Compiler, but since the compiler
   1035    supports several other languages aside from C, it now stands for the
   1036    GNU Compiler Collection.
   1037 
   1038    The GCC developers would like to thank the numerous people that have
   1039    contributed new features, improvements, bug fixes, and other changes as
   1040    well as test results to GCC. This [9]amazing group of volunteers is
   1041    what makes GCC successful.
   1042 
   1043    For additional information about GCC please refer to the [10]GCC
   1044    project web site or contact the [11]GCC development mailing list.
   1045 
   1046    To obtain GCC please use [12]our mirror sites or [13]our version
   1047    control system.
   1048 
   1049 
   1050     For questions related to the use of GCC, please consult these web
   1051     pages and the [14]GCC manuals. If that fails, the
   1052     [15]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1053     web pages and the development of GCC are welcome on our developer
   1054     list at [16]gcc (a] gcc.gnu.org. All of [17]our lists have public
   1055     archives.
   1056 
   1057    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
   1058    distribution of this entire article is permitted in any medium,
   1059    provided this notice is preserved.
   1060 
   1061    These pages are [19]maintained by the GCC team. Last modified
   1062    2024-05-30.
   1063 
   1064 References
   1065 
   1066    1. https://gcc.gnu.org/gcc-11/changes.html
   1067    2. https://gcc.gnu.org/onlinedocs/11.4.0/
   1068    3. https://gcc.gnu.org/gcc-11/changes.html
   1069    4. https://gcc.gnu.org/onlinedocs/11.3.0/
   1070    5. https://gcc.gnu.org/gcc-11/changes.html
   1071    6. https://gcc.gnu.org/onlinedocs/11.2.0/
   1072    7. https://gcc.gnu.org/gcc-11/changes.html
   1073    8. https://gcc.gnu.org/onlinedocs/11.1.0/
   1074    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
   1075   10. https://gcc.gnu.org/index.html
   1076   11. mailto:gcc (a] gcc.gnu.org
   1077   12. https://gcc.gnu.org/mirrors.html
   1078   13. https://gcc.gnu.org/git.html
   1079   14. https://gcc.gnu.org/onlinedocs/
   1080   15. mailto:gcc-help (a] gcc.gnu.org
   1081   16. mailto:gcc (a] gcc.gnu.org
   1082   17. https://gcc.gnu.org/lists.html
   1083   18. https://www.fsf.org/
   1084   19. https://gcc.gnu.org/about.html
   1085 ======================================================================
   1086 http://gcc.gnu.org/gcc-11/changes.html
   1087                              GCC 11 Release Series
   1088                         Changes, New Features, and Fixes
   1089 
   1090    This page is a "brief" summary of some of the huge number of
   1091    improvements in GCC 11. You may also want to check out our [1]Porting
   1092    to GCC 11 page and the [2]full GCC documentation.
   1093 
   1094 Caveats
   1095 
   1096      * The default mode for C++ is now -std=gnu++17 instead of
   1097        -std=gnu++14. Note that [3]C++17 changes to template template
   1098        parameter matching can be disabled independently of other features
   1099        with -fno-new-ttp-matching.
   1100      * When building GCC itself, the host compiler must now support C++11,
   1101        rather than C++98. In particular bootstrapping GCC 11 using an
   1102        older version of GCC requires a binary of GCC 4.8 or later, rather
   1103        than of GCC 3.4 or later as was the case for bootstrapping GCC 10.
   1104      * Naming and location of auxiliary and dump output files changed. If
   1105        you compile multiple input files in a single command, if you enable
   1106        Link Time Optimization, or if you use -dumpbase, -dumpdir,
   1107        -save-temps=*, and you expect any file other than the primary
   1108        output file(s) to be created as a side effect, watch out for
   1109        improvements and a few surprises. See [4]the patch, particularly
   1110        its textual description, for more details about the changes.
   1111      * -gsplit-dwarf no longer enables debug info generation on its own
   1112        but requires a separate -g for this.
   1113      * The libstdc++ configure option --enable-cheaders=c_std is
   1114        deprecated and will be removed in a future release. It should be
   1115        possible to use --enable-cheaders=c_global (the default) with no
   1116        change in behaviour.
   1117      * The front end for compiling BRIG format of Heterogeneous System
   1118        Architecture Intermediate Language (HSAIL) has been deprecated and
   1119        will likely be removed in a future release.
   1120      * Some short options of the gcov tool have been renamed: -i to -j and
   1121        -j to -H.
   1122 
   1123 General Improvements
   1124 
   1125      * [5]ThreadSanitizer improvements to support alternative runtimes and
   1126        environments. The [6]Linux Kernel Concurrency Sanitizer (KCSAN) is
   1127        now supported.
   1128           + Add --param tsan-distinguish-volatile to optionally emit
   1129             instrumentation distinguishing volatile accesses.
   1130           + Add --param tsan-instrument-func-entry-exit to optionally
   1131             control if function entries and exits should be instrumented.
   1132      * In previous releases of GCC, the "column numbers" emitted in
   1133        diagnostics were actually a count of bytes from the start of the
   1134        source line. This could be problematic, both because of:
   1135           + multibyte characters (requiring more than one byte to encode),
   1136             and
   1137           + multicolumn characters (requiring more than one column to
   1138             display in a monospace font)
   1139        For example, the character  ("GREEK SMALL LETTER PI (U+03C0)")
   1140        occupies one column, and its UTF-8 encoding requires two bytes; the
   1141        character  ("SLIGHTLY SMILING FACE (U+1F642)") occupies two
   1142        columns, and its UTF-8 encoding requires four bytes.
   1143        In GCC 11 the column numbers default to being column numbers,
   1144        respecting multi-column characters. The old behavior can be
   1145        restored using a new option [7]-fdiagnostics-column-unit=byte.
   1146        There is also a new option [8]-fdiagnostics-column-origin=,
   1147        allowing the pre-existing default of the left-hand column being
   1148        column 1 to be overridden if desired (e.g. for 0-based columns).
   1149        The output of [9]-fdiagnostics-format=json has been extended to
   1150        supply both byte counts and column numbers for all source
   1151        locations.
   1152        Additionally, in previous releases of GCC, tab characters in the
   1153        source would be emitted verbatim when quoting source code, but be
   1154        prefixed with whitespace or line number information, leading to
   1155        misalignments in the resulting output when compared with the actual
   1156        source. Tab characters are now printed as an appropriate number of
   1157        spaces, using the [10]-ftabstop option (which defaults to 8 spaces
   1158        per tab stop).
   1159      * Introduce [11]Hardware-assisted AddressSanitizer support. This
   1160        sanitizer currently only works for the AArch64 target. It helps
   1161        debug address problems similarly to [12]AddressSanitizer but is
   1162        based on partial hardware assistance and provides probabilistic
   1163        protection to use less RAM at run time. [13]Hardware-assisted
   1164        AddressSanitizer is not production-ready for user space, and is
   1165        provided mainly for use compiling the Linux Kernel.
   1166        To use this sanitizer the command line arguments are:
   1167           + -fsanitize=hwaddress to instrument userspace code.
   1168           + -fsanitize=kernel-hwaddress to instrument kernel code.
   1169      * For targets that produce DWARF debugging information GCC now
   1170        defaults to [14]DWARF version 5 (with the exception of VxWorks and
   1171        Darwin/Mac OS X which default to version 2 and AIX which defaults
   1172        to version 4). This can produce up to 25% more compact debug
   1173        information compared to earlier versions.
   1174        To take full advantage of DWARF version 5 GCC needs to be built
   1175        against binutils version 2.35.2 or higher. When GCC is built
   1176        against earlier versions of binutils GCC will still emit DWARF
   1177        version 5 for most debuginfo data, but will generate version 4
   1178        debug line tables (even when explicitly given -gdwarf-5).
   1179        The following debug information consumers can process DWARF version
   1180        5:
   1181           + GDB 8.0, or higher
   1182           + valgrind 3.17.0
   1183           + elfutils 0.172, or higher (for use with systemtap,
   1184             dwarves/pahole, perf and libabigail)
   1185           + dwz 0.14
   1186        Programs embedding libbacktrace are urged to upgrade to the version
   1187        shipping with GCC 11.
   1188        To make GCC 11 generate an older DWARF version use -g together with
   1189        -gdwarf-2, -gdwarf-3 or -gdwarf-4.
   1190      * Vectorizer improvements:
   1191           + The straight-line code vectorizer now considers the whole
   1192             function when vectorizing and can handle opportunities
   1193             crossing CFG merges and backedges.
   1194      * A series of conditional expressions that compare the same variable
   1195        can be transformed into a switch statement if each of them contains
   1196        a comparison expression. Example:
   1197         int IsHTMLWhitespace(int aChar) {
   1198           return aChar == 0x0009 || aChar == 0x000A ||
   1199                  aChar == 0x000C || aChar == 0x000D ||
   1200                  aChar == 0x0020;
   1201         }
   1202 
   1203        This statement can be transformed into a switch statement and then
   1204        expanded into a bit-test.
   1205      * New command-line options:
   1206           + [15]-fbit-tests, enabled by default, can be used to enable or
   1207             disable switch expansion using bit-tests.
   1208      * Inter-procedural optimization improvements:
   1209           + A new IPA-modref pass was added to track side effects of
   1210             function calls and improve precision of points-to-analysis.
   1211             The pass can be controlled by the [16]-fipa-modref option.
   1212           + The identical code folding pass (controlled by [17]-fipa-icf)
   1213             was significantly improved to increase the number of unified
   1214             functions and to reduce compile-time memory use.
   1215           + IPA-CP (Interprocedural constant propagation) heuristics
   1216             improved its estimation of potential usefulness of known loop
   1217             bounds and strides by taking the estimated frequency of these
   1218             loops into account.
   1219      * Link-time optimization improvements:
   1220           + The LTO bytecode format was optimized for smaller object files
   1221             and faster streaming.
   1222           + Memory allocation of the linking stage was improved to reduce
   1223             peak memory use.
   1224      * Profile driven optimization improvements:
   1225           + Using [18]-fprofile-values, was improved by tracking more
   1226             target values for e.g. indirect calls.
   1227           + GCOV data file format outputs smaller files by representing
   1228             zero counters in a more compact way.
   1229 
   1230 New Languages and Language specific improvements
   1231 
   1232      * GCC 11 adds support for non-rectangular loop nests in OpenMP
   1233        constructs and the allocator routines of [19]OpenMP 5.0, including
   1234        initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
   1235        environment variable and the active-levels routines are now
   1236        supported. For C/C++, the declare variant and map support has been
   1237        extended. For Fortran, OpenMP 4.5 is now fully supported and OpenMP
   1238        5.0 support has been extended, including the following features
   1239        which were before only available in C and C++: order(concurrent),
   1240        device_type, memorder-clauses for flush, lastprivate with
   1241        conditional modifier, atomic construct and reduction clause
   1242        extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
   1243        target data without map clause, and limited support for the
   1244        requires construct.
   1245      * Version 2.6 of the [20]OpenACC specification continues to be
   1246        maintained and improved in the C, C++ and Fortran compilers. See
   1247        the [21]implementation status section on the OpenACC wiki page and
   1248        the [22]run-time library documentation for further information.
   1249 
   1250   C family
   1251 
   1252      * New attributes:
   1253           + The [23]no_stack_protector attribute has been added to mark
   1254             functions which should not be instrumented with stack
   1255             protection (-fstack-protector).
   1256           + The existing [24]malloc attribute has been extended so that it
   1257             can be used to identify allocator/deallocator API pairs. A
   1258             pair of new [25]-Wmismatched-dealloc and
   1259             [26]-Wmismatched-new-delete warnings will complain about
   1260             mismatched calls, and [27]-Wfree-nonheap-object about
   1261             deallocation calls with pointers not obtained from allocation
   1262             functions. Additionally, the static analyzer will use these
   1263             attributes when checking for leaks, double-frees,
   1264             use-after-frees, and similar issues.
   1265      * New warnings:
   1266           + [28]-Wmismatched-dealloc, enabled by default, warns about
   1267             calls to deallocation functions with pointers returned from
   1268             mismatched allocation functions.
   1269           + [29]-Wsizeof-array-div, enabled by -Wall, warns about
   1270             divisions of two sizeof operators when the first one is
   1271             applied to an array and the divisor does not equal the size of
   1272             the array element.
   1273           + [30]-Wstringop-overread, enabled by default, warns about calls
   1274             to string functions reading past the end of the arrays passed
   1275             to them as arguments. In prior GCC releases most instances of
   1276             his warning are diagnosed by -Wstringop-overflow.
   1277           + [31]-Wtsan, enabled by default, warns about unsupported
   1278             features in ThreadSanitizer (currently
   1279             std::atomic_thread_fence).
   1280      * Enhancements to existing warnings:
   1281           + [32]-Wfree-nonheap-object detects many more instances of calls
   1282             to deallocation functions with pointers not returned from a
   1283             dynamic memory allocation function.
   1284           + [33]-Wmaybe-uninitialized diagnoses passing pointers or
   1285             references to uninitialized memory to functions taking
   1286             const-qualified arguments.
   1287           + [34]-Wuninitialized detects reads from uninitialized
   1288             dynamically allocated memory.
   1289      * For ELF targets that support the GNU or FreeBSD OSABIs, the used
   1290        attribute will now save the symbol declaration it is applied to
   1291        from linker garbage collection.
   1292        To support this behavior, used symbols that have not been placed in
   1293        specific sections (e.g. with the section attribute, or the
   1294        -f{function,data}-sections options) will be placed in new, unique
   1295        sections.
   1296        This functionality requires Binutils version 2.36 or later.
   1297 
   1298   C
   1299 
   1300      * Several new features from the upcoming C2X revision of the ISO C
   1301        standard are supported with -std=c2x and -std=gnu2x. Some of these
   1302        features are also supported as extensions when compiling for older
   1303        language versions. In addition to the features listed, some
   1304        features previously supported as extensions and now added to the C
   1305        standard are enabled by default in C2X mode and not diagnosed with
   1306        -std=c2x -Wpedantic.
   1307           + The BOOL_MAX and BOOL_WIDTH macros are provided in <limits.h>.
   1308           + As in C++, function definitions no longer need to give names
   1309             for unused function parameters.
   1310           + The expansions of the true and false macros in <stdbool.h>
   1311             have changed so that they have type bool.
   1312           + The [[nodiscard]] standard attribute is now supported.
   1313           + The __has_c_attribute preprocessor operator is now supported.
   1314           + Macros INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN,
   1315             DEC_INFINITY, DEC_NAN, and corresponding signaling NaN macros
   1316             for _FloatN, _FloatNx and _DecimalN types, are provided in
   1317             <float.h>. There are also corresponding built-in functions
   1318             __builtin_nansdN for decimal signaling NaNs.
   1319           + Macros FLT_IS_IEC_60559, DBL_IS_IEC_60559 and
   1320             LDBL_IS_IEC_60559 are provided in <float.h>.
   1321           + The feature test macro __STDC_WANT_IEC_60559_EXT__ is
   1322             supported by <float.h>.
   1323           + Labels may appear before declarations and at the end of a
   1324             compound statement.
   1325      * New warnings:
   1326           + [35]-Warray-parameter, enabled by -Wall, warns about
   1327             redeclarations of functions with ordinary array arguments
   1328             declared using inconsistent forms. The warning also enables
   1329             the detection of the likely out of bounds accesses in calls to
   1330             such functions with smaller arrays.
   1331           + [36]-Wvla-parameter, enabled by -Wall, warns redeclarations of
   1332             functions with variable length array arguments declared using
   1333             inconsistent forms or with mismatched bounds. The warning also
   1334             enables the detection of the likely out of bounds accesses in
   1335             calls to such functions with smaller arrays.
   1336 
   1337   C++
   1338 
   1339      * The default mode has been changed to -std=gnu++17.
   1340      * Several C++20 features have been implemented:
   1341           + the compiler now supports consteval virtual functions
   1342           + P2082R1, Fixing CTAD for aggregates
   1343           + P0593R6, Pseudo-destructors end object lifetimes
   1344           + P1907R1, Inconsistencies with non-type template parameters
   1345             (complete implementation)
   1346           + P1975R0, Fixing the wording of parenthesized
   1347             aggregate-initialization
   1348           + P1009R2, Array size deduction in new-expressions
   1349           + P1099R5, using enum
   1350           + Modules, Requires -fmodules-ts and some aspects are
   1351             incomplete. Refer to [37]C++ 20 Status
   1352      * The C++ front end has experimental support for some of the upcoming
   1353        C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
   1354        or -std=gnu++2b flags, including
   1355           + P0330R8, Literal Suffix for (signed) size_t.
   1356        For a full list of new features, see [38]the C++ status page.
   1357      * Several C++ Defect Reports have been resolved, e.g.:
   1358           + DR 625, Use of auto as a template-argument
   1359           + DR 1512, Pointer comparison vs qualification conversions
   1360           + DR 1722, Should lambda to function pointer conversion function
   1361             be noexcept?
   1362           + DR 1914, Duplicate standard attributes
   1363           + DR 2032, Default template-arguments of variable templates
   1364           + DR 2289, Uniqueness of decomposition declaration names
   1365           + DR 2237, Can a template-id name a constructor?
   1366           + DR 2303, Partial ordering and recursive variadic inheritance
   1367           + DR 2369, Ordering between constraints and substitution
   1368           + DR 2450, braced-init-list as a template-argument
   1369      * G++ now performs better access checking in templates ([39]PR41437).
   1370      * reinterpret_casts in constexpr evaluation are now checked more
   1371        completely ([40]PR95307).
   1372      * The diagnostic for static_assert has been improved: the compiler
   1373        now shows the expression including its template arguments (if there
   1374        were any), and can point to the failing clause if the condition
   1375        comprised of any logical AND operators ([41]PR97518).
   1376      * New warnings:
   1377           + [42]-Wctad-maybe-unsupported, disabled by default, warns about
   1378             performing class template argument deduction on a type with no
   1379             deduction guides.
   1380           + [43]-Wrange-loop-construct, enabled by -Wall, warns when a
   1381             range-based for-loop is creating unnecessary and expensive
   1382             copies.
   1383           + [44]-Wdeprecated-enum-enum-conversion, enabled by default in
   1384             C++20, warns about deprecated arithmetic conversions on
   1385             operands of enumeration types, as outlined in
   1386             [depr.arith.conv.enum].
   1387           + [45]-Wdeprecated-enum-float-conversion, enabled by default in
   1388             C++20, warns about deprecated arithmetic conversions on
   1389             operands where one is of enumeration type and the other is of
   1390             a floating-point type, as outlined in [depr.arith.conv.enum].
   1391           + [46]-Wmismatched-new-delete, enabled by -Wall, warns about
   1392             calls to C++ operator delete with pointers returned from
   1393             mismatched forms of operator new or from other mismatched
   1394             allocation functions.
   1395           + [47]-Wvexing-parse, enabled by default, warns about the most
   1396             vexing parse rule: the cases when a declaration looks like a
   1397             variable definition, but the C++ language requires it to be
   1398             interpreted as a function declaration.
   1399      * Enhancements to existing warnings:
   1400           + [48]-Wnonnull considers the implicit this argument of every
   1401             C++ nonstatic member function to have been implicitly declared
   1402             with attribute nonnull and triggers warnings for calls where
   1403             the pointer is null.
   1404 
   1405     Runtime Library (libstdc++)
   1406 
   1407      * Improved C++17 support, including:
   1408           + std::from_chars and std::to_chars for floating-point types.
   1409      * Improved experimental C++20 support, including:
   1410           + Calendar additions to <chrono>. Thanks to Cassio Neri for
   1411             optimizations.
   1412           + std::bit_cast
   1413           + std::source_location
   1414           + Atomic wait and notify operations.
   1415           + <barrier>, <latch>, and <semaphore>
   1416           + <syncstream>
   1417           + Efficient access to basic_stringbuf's buffer.
   1418           + Heterogeneous lookup in unordered containers.
   1419      * Experimental C++23 support, including:
   1420           + contains member functions for strings, thanks to Paul Fee.
   1421           + std::to_underlying, std::is_scoped_enum
   1422      * Experimental support for Data-Parallel Types (simd) from the
   1423        Parallelism 2 TS, thanks to Matthias Kretz.
   1424      * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
   1425 
   1426   D
   1427 
   1428      * New features:
   1429           + A new bottom type typeof(*null) has been added to represent
   1430             run-time errors and non-terminating functions. This also
   1431             introduces a new standard alias for the type named noreturn,
   1432             and is implicitly imported into every module.
   1433           + Printf-like and scanf-like functions are now detected by
   1434             prefixing them with pragma(printf) for printf-like functions
   1435             or pragma(scanf) for scanf-like functions.
   1436           + The __traits() expression now supports the extensions
   1437             isDeprecated, isDisabled, isFuture, isModule, isPackage,
   1438             child, isReturnOnStack, isZeroInit, getTargetInfo,
   1439             getLocation, hasPostblit, isCopyable, getVisibility, and
   1440             totype.
   1441           + An expression-based contract syntax has been added to the
   1442             language.
   1443           + Function literals can now return a value by reference with the
   1444             ref keyword.
   1445           + A new syntax is available to declare aliases to function types
   1446             using the alias syntax based on the assignment operator.
   1447           + New types __c_complex_float, __c_complex_double,
   1448             __c_complex_real, and __c_wchar_t have been added for
   1449             interfacing with C and C++ code, and are available from the
   1450             core.stdc.config module.
   1451           + User-defined attributes can now be used to annotate enum
   1452             members, alias declarations, and function parameters.
   1453           + Template alias parameters can now be instantiated with basic
   1454             types such as int or void function().
   1455           + The mixin construct can now be used as types in the form
   1456             mixin(string) var.
   1457           + The mixin construct can now take an argument list, same as
   1458             pragma(msg).
   1459      * New intrinsics:
   1460           + Bitwise rotate intrinsics core.bitop.rol and core.bitop.ror
   1461             have been added.
   1462           + Byte swap intrinsic core.bitop.byteswap for swapping bytes in
   1463             a 2-byte ushort has been added.
   1464           + Math intrinsics available from core.math now have overloads
   1465             for float and double types.
   1466           + Volatile intrinsics core.volatile.volatileLoad and
   1467             core.volatile.volatileStore have been moved from the
   1468             core.bitop module.
   1469      * New attributes:
   1470           + The following GCC attributes are now recognized and available
   1471             from the gcc.attributes module with short-hand aliases for
   1472             convenience:
   1473                o @attribute("alloc_size", arguments) or
   1474                  @alloc_size(arguments).
   1475                o @attribute("always_inline") or @always_inline.
   1476                o @attribute("used") or @used.
   1477                o @attribute("optimize", arguments) or
   1478                  @optimize(arguments).
   1479                o @attribute("cold") or @cold.
   1480                o @attribute("noplt") or @noplt.
   1481                o @attribute("target_clones", arguments) or
   1482                  @target_clones(arguments).
   1483                o @attribute("no_icf") or @no_icf.
   1484                o @attribute("noipa") or @noipa.
   1485                o @attribute("symver", arguments) or @symver(arguments).
   1486           + New aliases have been added to gcc.attributes for
   1487             compatibility with ldc.attributes.
   1488                o The @allocSize(arguments) attribute is the same as
   1489                  @alloc_size(arguments), but uses a 0-based index for
   1490                  function arguments.
   1491                o The @assumeUsed attribute is an alias for
   1492                  @attribute("used").
   1493                o The @fastmath attribute is an alias for
   1494                  @optimize("Ofast").
   1495                o The @naked attribute is an alias for @attribute("naked").
   1496                  This attribute may not be available on all targets.
   1497                o The @restrict attribute has been added to specify that a
   1498                  function parameter is to be restrict-qualified in the C99
   1499                  sense of the term.
   1500                o The @optStrategy(strategy) attribute is an alias for
   1501                  @optimize("O0") when the strategy is "none", otherwise
   1502                  @optimize("Os") for the "optsize" and "minsize"
   1503                  strategies.
   1504                o The @polly attribute is an alias for
   1505                  @optimize("loop-parallelize-all").
   1506                o The @section(name) attribute is an alias for
   1507                  @attribute("section", name).
   1508                o The @target(arguments) attribute is an alias for
   1509                  attribute("target", arguments).
   1510                o The @weak attribute is an alias for @attribute("weak").
   1511      * New language options:
   1512           + -fweak-templates, added to control whether declarations that
   1513             can be defined in multiple objects should be emitted as weak
   1514             symbols. The default is to emit all symbols with extern
   1515             linkage as weak, unless the target lacks support for weak
   1516             symbols.
   1517           + -Wdeprecated, this option is now enabled by default.
   1518           + -Wextra, this option now turns on all warnings that are not
   1519             part of the core D language front-end - -Waddress,
   1520             -Wcast-result, -Wunknown-pragmas.
   1521           + -Wvarargs, added to turn on warnings about questionable usage
   1522             of the va_start intrinsic.
   1523      * Deprecated and removed features:
   1524           + Compiler-recognized attributes are now made available from the
   1525             gcc.attributes module, the former module gcc.attribute has
   1526             been deprecated and will be removed in a future release.
   1527           + The @attribute("alias") attribute has been removed, as it had
   1528             been superseded by pragma(mangle).
   1529           + The @attribute("forceinline") attribute has been removed and
   1530             renamed to @always_inline.
   1531           + __vector types that are not supported in hardware are now
   1532             rejected at compile-time. Previously all vector types were
   1533             accepted by the compiler and emulated when target support was
   1534             absent.
   1535           + The extern(Pascal) linkage attribute has been removed.
   1536           + The deprecation phase for -ftransition=import and
   1537             -ftransition=checkimports is finished. These switches no
   1538             longer have an effect and are now removed. Symbols that are
   1539             not visible in a particular scope will no longer be found by
   1540             the compiler.
   1541           + It is now an error to use private variables selectively
   1542             imported from other modules. Due to a bug, some imported
   1543             private members were visible from other modules, violating the
   1544             specification.
   1545           + The -fweak compiler switch has been removed, as it existed
   1546             only for testing.
   1547 
   1548   Fortran
   1549 
   1550      * Added DEPRECATED to !GCC$'s attributes directive.
   1551 
   1552   Go
   1553 
   1554      * GCC 11 provides a complete implementation of the Go 1.16.3 user
   1555        packages.
   1556 
   1557 libgccjit
   1558 
   1559      * libgccjit was marked as merely "Alpha" quality when [49]originally
   1560        added in GCC 5. Given that we have maintained [50]API and ABI
   1561        compatibility since then and it is in use by various projects, we
   1562        have removed that caveat.
   1563      * libgccjit can now be built for MinGW
   1564      * The libgccjit API gained 10 new entry points:
   1565           + [51]gcc_jit_global_set_initializer
   1566           + 9 entrypoints for [52]directly embedding asm statements into a
   1567             compile, analogous to inline asm in the C front end
   1568 
   1569 New Targets and Target Specific Improvements
   1570 
   1571   AArch64 & arm
   1572 
   1573      * A number of new CPUs are supported through arguments to the -mcpu
   1574        and -mtune options in both the arm and aarch64 back ends (GCC
   1575        identifiers in parentheses):
   1576           + Arm Cortex-A78 (cortex-a78).
   1577           + Arm Cortex-A78AE (cortex-a78ae).
   1578           + Arm Cortex-A78C (cortex-a78c).
   1579           + Arm Cortex-X1 (cortex-x1).
   1580           + Arm Neoverse V1 (neoverse-v1).
   1581           + Arm Neoverse N2 (neoverse-n2).
   1582      * GCC can now auto-vectorize operations performing addition,
   1583        subtraction, multiplication and the accumulate/subtract variants on
   1584        complex numbers, taking advantage of the Advanced SIMD instructions
   1585        in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
   1586        and MVE (AArch32 M-profile) instruction sets.
   1587 
   1588   AArch64
   1589 
   1590      * In addition to the above, the following AArch64-only CPUs are now
   1591        supported:
   1592           + Fujitsu A64FX (a64fx).
   1593           + Arm Cortex-R82 (cortex-r82).
   1594      * The AArch64 Armv8-R architecture is now supported through the
   1595        -march=armv8-r option.
   1596      * Mitigation against the [53]Straight-line Speculation vulnerability
   1597        is supported with the -mharden-sls= option. Please refer to the
   1598        documentation for usage instructions.
   1599      * The availability of Advanced SIMD intrinsics available through the
   1600        arm_neon.h header is improved and GCC 11 supports the full set of
   1601        intrinsics defined by ACLE Q3 2020.
   1602 
   1603   AMD Radeon (GCN)
   1604 
   1605      * Initial support for gfx908 GPUs has been added.
   1606 
   1607   arm
   1608 
   1609      * Initial auto-vectorization is now available when targeting the MVE
   1610        instruction set.
   1611      * GCC can now make use of the Low Overhead Branch instruction in
   1612        Armv8.1-M to optimize loop counters and checks.
   1613      * The -mcpu=cortex-m55 option now supports the extensions +nomve and
   1614        +nomve.fp to control generation of MVE and MVE floating-point
   1615        instructions.
   1616 
   1617   IA-32/x86-64
   1618 
   1619      * New ISA extension support for Intel TSXLDTRK was added to GCC.
   1620        TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
   1621        switch.
   1622      * New ISA extension support for Intel SERIALIZE was added to GCC.
   1623        SERIALIZE intrinsics are available via the -mserialize compiler
   1624        switch.
   1625      * New ISA extension support for Intel HRESET was added to GCC. HRESET
   1626        intrinsics are available via the -mhreset compiler switch.
   1627      * New ISA extension support for Intel UINTR was added to GCC. UINTR
   1628        intrinsics are available via the -muintr compiler switch.
   1629      * New ISA extension support for Intel KEYLOCKER was added to GCC.
   1630        KEYLOCKER intrinsics are available via the -mkeylocker compiler
   1631        switch.
   1632      * New ISA extension support for Intel AMX-TILE, AMX-INT8, AMX-BF16
   1633        was added to GCC. AMX-TILE, AMX-INT8, AMX-BF16 intrinsics are
   1634        available via the -mamx-tile, -mamx-int8, -mamx-bf16 compiler
   1635        switches.
   1636      * New ISA extension support for Intel AVX-VNNI was added to GCC.
   1637        AVX-VNNI intrinsics are available via the -mavxvnni compiler
   1638        switch.
   1639      * GCC now supports the Intel CPU named Sapphire Rapids through
   1640        -march=sapphirerapids. The switch enables the MOVDIRI, MOVDIR64B,
   1641        AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG,
   1642        TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16, and AVX-VNNI ISA
   1643        extensions.
   1644      * GCC now supports the Intel CPU named Alderlake through
   1645        -march=alderlake. The switch enables the CLDEMOTE, PTWRITE,
   1646        WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI, and HRESET ISA extensions.
   1647      * GCC now supports the Intel CPU named Rocketlake through
   1648        -march=rocketlake. Rocket Lake is based on Icelake client and minus
   1649        SGX.
   1650      * GCC now supports AMD CPUs based on the znver3 core via
   1651        -march=znver3.
   1652      * GCC now supports micro-architecture levels defined in the x86-64
   1653        psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
   1654 
   1655   Nios II
   1656 
   1657      * The options -mcustom-insn=N no longer produce compiler warnings if
   1658        the custom instruction is not generated due to missing optimization
   1659        options such as -fno-math-errno, -ffinite-math-only, or
   1660        -funsafe-math-optimizations. These warnings were not consistently
   1661        emitted for all custom instructions.
   1662      * The -mcustom-fpu-cfg=fph2 option has been added to enable the
   1663        custom instructions supported by the Nios II Floating Point
   1664        Hardware 2 Component.
   1665 
   1666   NVPTX
   1667 
   1668      * The -misa default has changed from sm_30 to sm_35.
   1669      * The -m32 compiler switch has been removed.
   1670      * The -msoft-stack-reserve-local format has been fixed. Previously,
   1671        it accepted -msoft-stack-reserve-local<n>. It now accepts
   1672        -msoft-stack-reserve-local=<n>.
   1673 
   1674   S/390, System z, IBM Z Systems
   1675 
   1676      * The behavior when compiling with -fexcess-precision=standard (e.g.,
   1677        implied by -std=c99) on s390(x) targets can now be controlled at
   1678        configure time with the flag --enable-s390-excess-float-precision.
   1679        When enabled, GCC will maintain previous behavior and evaluate
   1680        float expressions in double precision, which aligns with the
   1681        definition of float_t as double. With the flag disabled, GCC will
   1682        always evaluate float expressions in single precision. In native
   1683        builds and cross compiles that have target libc headers, GCC will
   1684        by default match the definition of float_t in the installed glibc.
   1685 
   1686   RISC-V
   1687 
   1688      * Support address sanitizer for RISC-V.
   1689      * Support big-endian for RISC-V, thanks to Marcus Comstedt.
   1690      * Implement new style of architecture extension test macros: each
   1691        architecture extension has a corresponding feature test macro,
   1692        which can be used to test its existence and version information.
   1693      * Legacy architecture extension test macros like __riscv_atomic are
   1694        deprecated, but will still be supported for at least 2 release
   1695        cycles.
   1696      * Support IFUNC for riscv*-*-linux*.
   1697      * Add new option -misa-spec=* to control ISA spec version. This
   1698        controls the default version of each extensions. It defaults to
   1699        2.2.
   1700      * Introduce the --with-multilib-generator configure time option. This
   1701        allows for flexible config multi-lib settings. Its syntax is the
   1702        same as RISC-V's multilib-generator.
   1703      * Extend the sytax for multilib-generator, support expansion operator
   1704        * to reduce the complexity of complicated multi-lib re-use rules.
   1705      * Support -mcpu=* option aligned with RISC-V clang/LLVM. It sets the
   1706        pipeline model and architecture extensions, like -mtune=* plus
   1707        -march=*.
   1708      * Support for TLS stack protector canary access, thanks to Cooper Qu.
   1709      * Support __builtin_thread_pointer for RISC-V.
   1710      * Introduce shorten_memrefs optimization, which reduces the code size
   1711        for memory access, thanks to Craig Blackmore.
   1712 
   1713 Operating Systems
   1714 
   1715   AIX
   1716 
   1717      * GCC for AIX can be built as a 64-bit application and the runtime is
   1718        built as FAT libraries containing both 32-bit and 64-bit objects.
   1719      * Support AIX Vector Extended ABI with -mabi=vec-extabi.
   1720      * Thread-Local uninitiated data placed in local common section.
   1721      * Use thread-safe access in ctype.
   1722      * Link with libc128.a when long-double-128 enabled.
   1723 
   1724 Improvements to Static Analyzer
   1725 
   1726      * The implementation of how program state is tracked within
   1727        [54]-fanalyzer has been completely rewritten for GCC 11, fixing
   1728        numerous bugs, and allowing for the analyzer to scale to larger C
   1729        source files.
   1730      * The analysis of allocations and deallocations has been generalized
   1731        beyond malloc and free.
   1732           + As preliminary work towards eventually supporting C++, the
   1733             malloc/free checking will also check new/delete and
   1734             new[]/delete[]. However, C++ is not yet properly supported by
   1735             [55]-fanalyzer (for example, exception-handling is
   1736             unimplemented).
   1737           + As noted above, the existing [56]malloc attribute has been
   1738             extended so that it can be used to identify
   1739             allocator/deallocator API pairs. The analyzer will use these
   1740             attributes when checking for leaks, double-frees,
   1741             use-after-frees, and similar issues.
   1742           + A new [57]-Wanalyzer-mismatching-deallocation warning has been
   1743             added, covering such mismatches as using scalar delete rather
   1744             vector delete[].
   1745      * The analyzer has gained warnings
   1746        [58]-Wanalyzer-shift-count-negative,
   1747        [59]-Wanalyzer-shift-count-overflow, [60]-Wanalyzer-write-to-const,
   1748        and [61]-Wanalyzer-write-to-string-literal, all enabled by default
   1749        when [62]-fanalyzer is enabled.
   1750      * The analyzer can now be extended by GCC plugins, allowing for
   1751        domain-specific path-sensitive warnings. An example of using a
   1752        [63]GCC plugin to check for misuses of CPython's global interpreter
   1753        lock can be seen in the test suite
   1754      * The analyzer has gained new debugging options
   1755        [64]-fdump-analyzer-json and [65]-fno-analyzer-feasibility.
   1756 
   1757 Other significant improvements
   1758 
   1759      * GCC has gained a new environment variable
   1760        [66]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
   1761        request machine-readable fix-it hints without needing to adjust
   1762        build flags.
   1763 
   1764 GCC 11.1
   1765 
   1766    This is the [67]list of problem reports (PRs) from GCC's bug tracking
   1767    system that are known to be fixed in the 11.1 release. This list might
   1768    not be complete (that is, it is possible that some PRs that have been
   1769    fixed are not listed here).
   1770 
   1771 GCC 11.2
   1772 
   1773    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   1774    system that are known to be fixed in the 11.2 release. This list might
   1775    not be complete (that is, it is possible that some PRs that have been
   1776    fixed are not listed here).
   1777 
   1778 GCC 11.3
   1779 
   1780    This is the [69]list of problem reports (PRs) from GCC's bug tracking
   1781    system that are known to be fixed in the 11.3 release. This list might
   1782    not be complete (that is, it is possible that some PRs that have been
   1783    fixed are not listed here).
   1784 
   1785 GCC 11.4
   1786 
   1787    This is the [70]list of problem reports (PRs) from GCC's bug tracking
   1788    system that are known to be fixed in the 11.4 release. This list might
   1789    not be complete (that is, it is possible that some PRs that have been
   1790    fixed are not listed here).
   1791 
   1792   Target Specific Changes
   1793 
   1794     x86-64
   1795 
   1796      * The x86-64 ABI of passing and returning structure with a 64-bit
   1797        single precision vector changed in GCC 11.1 when 3DNOW is disabled.
   1798        Disabling 3DNOW no longer changes how they are passed nor returned.
   1799        This ABI change is now diagnosed with -Wpsabi.
   1800      * Mitigation against straight line speculation (SLS) for function
   1801        return and indirect jump is supported via
   1802        -mharden-sls=[none|all|return|indirect-jmp].
   1803      * Add CS prefix to call and jmp to indirect thunk with branch target
   1804        in r8-r15 registers via -mindirect-branch-cs-prefix.
   1805 
   1806 
   1807     For questions related to the use of GCC, please consult these web
   1808     pages and the [71]GCC manuals. If that fails, the
   1809     [72]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1810     web pages and the development of GCC are welcome on our developer
   1811     list at [73]gcc (a] gcc.gnu.org. All of [74]our lists have public
   1812     archives.
   1813 
   1814    Copyright (C) [75]Free Software Foundation, Inc. Verbatim copying and
   1815    distribution of this entire article is permitted in any medium,
   1816    provided this notice is preserved.
   1817 
   1818    These pages are [76]maintained by the GCC team. Last modified
   1819    2024-06-14.
   1820 
   1821 References
   1822 
   1823    1. https://gcc.gnu.org/gcc-11/porting_to.html
   1824    2. https://gcc.gnu.org/onlinedocs/index.html#current
   1825    3. https://wg21.link/p0522r0
   1826    4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
   1827    5. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
   1828    6. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
   1829    7. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
   1830    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
   1831    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1832   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
   1833   11. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   1834   12. https://github.com/google/sanitizers/wiki/AddressSanitizer
   1835   13. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   1836   14. https://dwarfstd.org/doc/DWARF5.pdf
   1837   15. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
   1838   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
   1839   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
   1840   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
   1841   19. https://www.openmp.org/specifications/
   1842   20. https://www.openacc.org/
   1843   21. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11
   1844   22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
   1845   23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
   1846   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   1847   25. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   1848   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   1849   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   1850   28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   1851   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
   1852   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
   1853   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
   1854   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   1855   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   1856   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
   1857   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
   1858   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
   1859   37. https://gcc.gnu.org/projects/cxx-status.html#cxx20
   1860   38. https://gcc.gnu.org/projects/cxx-status.html#cxx23
   1861   39. https://gcc.gnu.org/PR41437
   1862   40. https://gcc.gnu.org/PR95307
   1863   41. https://gcc.gnu.org/PR97518
   1864   42. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
   1865   43. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
   1866   44. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
   1867   45. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
   1868   46. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   1869   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
   1870   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
   1871   49. https://gcc.gnu.org/gcc-5/changes.html#jit
   1872   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
   1873   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
   1874   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
   1875   53. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
   1876   54. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1877   55. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1878   56. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   1879   57. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
   1880   58. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
   1881   59. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
   1882   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   1883   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   1884   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   1885   63. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
   1886   64. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
   1887   65. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
   1888   66. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
   1889   67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
   1890   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
   1891   69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
   1892   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
   1893   71. https://gcc.gnu.org/onlinedocs/
   1894   72. mailto:gcc-help (a] gcc.gnu.org
   1895   73. mailto:gcc (a] gcc.gnu.org
   1896   74. https://gcc.gnu.org/lists.html
   1897   75. https://www.fsf.org/
   1898   76. https://gcc.gnu.org/about.html
   1899 ======================================================================
   1900 http://gcc.gnu.org/gcc-10/index.html
   1901                              GCC 10 Release Series
   1902 
   1903    (This release series is no longer supported.)
   1904 
   1905    July, 7, 2023
   1906 
   1907    The [1]GNU project and the GCC developers are pleased to announce the
   1908    release of GCC 10.5.
   1909 
   1910    This release is a bug-fix release, containing fixes for regressions in
   1911    GCC 10.4 relative to previous releases of GCC.
   1912 
   1913 Release History
   1914 
   1915    GCC 10.5
   1916           July 7, 2023 ([2]changes, [3]documentation)
   1917 
   1918    GCC 10.4
   1919           June 28, 2022 ([4]changes, [5]documentation)
   1920 
   1921    GCC 10.3
   1922           April 8, 2021 ([6]changes, [7]documentation)
   1923 
   1924    GCC 10.2
   1925           July 23, 2020 ([8]changes, [9]documentation)
   1926 
   1927    GCC 10.1
   1928           May 7, 2020 ([10]changes, [11]documentation)
   1929 
   1930 References and Acknowledgements
   1931 
   1932    GCC used to stand for the GNU C Compiler, but since the compiler
   1933    supports several other languages aside from C, it now stands for the
   1934    GNU Compiler Collection.
   1935 
   1936    The GCC developers would like to thank the numerous people that have
   1937    contributed new features, improvements, bug fixes, and other changes as
   1938    well as test results to GCC. This [12]amazing group of volunteers is
   1939    what makes GCC successful.
   1940 
   1941    For additional information about GCC please refer to the [13]GCC
   1942    project web site or contact the [14]GCC development mailing list.
   1943 
   1944    To obtain GCC please use [15]our mirror sites or [16]our version
   1945    control system.
   1946 
   1947 
   1948     For questions related to the use of GCC, please consult these web
   1949     pages and the [17]GCC manuals. If that fails, the
   1950     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1951     web pages and the development of GCC are welcome on our developer
   1952     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   1953     archives.
   1954 
   1955    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   1956    distribution of this entire article is permitted in any medium,
   1957    provided this notice is preserved.
   1958 
   1959    These pages are [22]maintained by the GCC team. Last modified
   1960    2024-05-30.
   1961 
   1962 References
   1963 
   1964    1. http://www.gnu.org/
   1965    2. https://gcc.gnu.org/gcc-10/changes.html
   1966    3. https://gcc.gnu.org/onlinedocs/10.5.0/
   1967    4. https://gcc.gnu.org/gcc-10/changes.html
   1968    5. https://gcc.gnu.org/onlinedocs/10.4.0/
   1969    6. https://gcc.gnu.org/gcc-10/changes.html
   1970    7. https://gcc.gnu.org/onlinedocs/10.3.0/
   1971    8. https://gcc.gnu.org/gcc-10/changes.html
   1972    9. https://gcc.gnu.org/onlinedocs/10.2.0/
   1973   10. https://gcc.gnu.org/gcc-10/changes.html
   1974   11. https://gcc.gnu.org/onlinedocs/10.1.0/
   1975   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
   1976   13. https://gcc.gnu.org/index.html
   1977   14. mailto:gcc (a] gcc.gnu.org
   1978   15. https://gcc.gnu.org/mirrors.html
   1979   16. https://gcc.gnu.org/git.html
   1980   17. https://gcc.gnu.org/onlinedocs/
   1981   18. mailto:gcc-help (a] gcc.gnu.org
   1982   19. mailto:gcc (a] gcc.gnu.org
   1983   20. https://gcc.gnu.org/lists.html
   1984   21. https://www.fsf.org/
   1985   22. https://gcc.gnu.org/about.html
   1986 ======================================================================
   1987 http://gcc.gnu.org/gcc-10/changes.html
   1988                              GCC 10 Release Series
   1989                         Changes, New Features, and Fixes
   1990 
   1991    This page is a "brief" summary of some of the huge number of
   1992    improvements in GCC 10. You may also want to check out our [1]Porting
   1993    to GCC 10 page and the [2]full GCC documentation.
   1994 
   1995 Caveats
   1996 
   1997      * An ABI incompatibility between C++14 and C++17 has been fixed. On
   1998        some targets a class with a zero-sized subobject would be passed
   1999        incorrectly when compiled as C++17 or C++20. See the [3]C++ notes
   2000        below for more details.
   2001      * The deprecated Profile Mode and array_allocator extensions have
   2002        been removed from libstdc++.
   2003      * The non-standard std::__is_nullptr_t type trait is deprecated and
   2004        will be removed from libstdc++ in a future release. The standard
   2005        trait std::is_null_pointer should be instead.
   2006      * The minimum version of the [4]MPFR library required for building
   2007        GCC has been increased to version 3.1.0 (released 2011-10-03).
   2008      * The automatic template instantiation at link time (-frepo) has been
   2009        removed.
   2010      * The --param allow-store-data-races internal parameter has been
   2011        removed in favor of a new official option -fallow-store-data-races.
   2012        While default behavior is unchanged and the new option allows to
   2013        correctly maintain a per compilation unit setting across link-time
   2014        optimization, alteration of the default via --param
   2015        allow-store-data-races will now be diagnosed and build systems have
   2016        to be adjusted accordingly.
   2017      * Offloading to Heterogeneous System Architecture Intermediate
   2018        Language (HSAIL) has been deprecated and will likely be removed in
   2019        a future release.
   2020      * The type of the std::iterator base class of
   2021        std::istreambuf_iterator was changed in C++98 mode to be consistent
   2022        with C++11 and later standards. See the [5]libstdc++ notes below
   2023        for more details.
   2024 
   2025 General Improvements
   2026 
   2027      * New built-in functions:
   2028           + The [6]__has_builtin built-in preprocessor operator can be
   2029             used to query support for built-in functions provided by GCC
   2030             and other compilers that support it.
   2031           + __builtin_roundeven for the corresponding function from
   2032             ISO/IEC TS 18661.
   2033      * New command-line options:
   2034           + [7]-fallocation-dce removes unneeded pairs of new and delete
   2035             operators.
   2036           + [8]-fprofile-partial-training can now be used to inform the
   2037             compiler that code paths not covered by the training run
   2038             should not be optimized for size.
   2039           + [9]-fprofile-reproducible controls level of reproducibility of
   2040             profile gathered by [10]-fprofile-generate. This makes it
   2041             possible to rebuild program with same outcome which is useful,
   2042             for example, for distribution packages.
   2043           + [11]-fprofile-prefix-path can be used in combination with
   2044             -fprofile-generate=profile_dir and -fprofile-use=profile_dir
   2045             to inform GCC where the base directory of build source tree is
   2046             in case it differs between instrumentation and optimized
   2047             builds.
   2048           + [12]-fanalyzer enables a new static analysis pass and
   2049             associated warnings. This pass performs a time-consuming
   2050             exploration of paths through the code in the hope of detecting
   2051             various common errors, such as double-free bugs. This option
   2052             should be regarded as experimental in this release. In
   2053             particular, analysis of non-C code is unlikely to work.
   2054      * Inter-procedural optimization improvements:
   2055           + The inter-procedural scalar replacement of aggregates
   2056             (IPA-SRA) pass was re-implemented to work at link-time and can
   2057             now also remove computing and returning unused return values.
   2058           + [13]-finline-functions is now enabled at -O2 and was retuned
   2059             for better code size versus runtime performance trade-offs.
   2060             Inliner heuristics was also significantly sped up to avoid
   2061             negative impact to -flto -O2 compile times.
   2062           + Inliner heuristics and function cloning can now use
   2063             value-range information to predict effectivity of individual
   2064             transformations.
   2065           + During link-time optimization the C++ One Definition Rule is
   2066             used to increase precision of type based alias analysis.
   2067      * Link-time optimization improvements:
   2068           + A new binary [14]lto-dump has been added. It dumps various
   2069             information about LTO bytecode object files.
   2070           + The parallel phase of the LTO can automatically detect a
   2071             running make's jobserver or fall back to number of available
   2072             cores.
   2073           + The LTO bytecode can be compressed with the [15]zstd
   2074             algorithm. The configure script automatically detects zstd
   2075             support.
   2076           + Most --param values can now be specified at translation unit
   2077             granularity. This includes all parameters controlling the
   2078             inliner and other inter-procedural optimizations. Unlike
   2079             earlier releases, GCC 10 will ignore parameters controlling
   2080             optimizations specified at link-time and apply parameters
   2081             specified at compile-time in the same manner as done for
   2082             optimization flags.
   2083      * Profile driven optimization improvements:
   2084           + Profile maintenance during compilation and hot/cold code
   2085             partitioning have been improved.
   2086           + Using [16]-fprofile-values, an instrumented binary can track
   2087             multiple values (up to 4) for e.g. indirect calls and provide
   2088             more precise profile information.
   2089 
   2090 New Languages and Language-Specific Improvements
   2091 
   2092      * Version 2.6 of the [17]OpenACC specification is now supported by
   2093        the C, C++ and Fortran compilers. See the [18]implementation status
   2094        section on the OpenACC wiki page and the [19]run-time library
   2095        documentation for further information.
   2096      * GCC 10 adds a number of newly implemented [20]OpenMP 5.0 features
   2097        such as conditional lastprivate clause, scan and loop directives,
   2098        order(concurrent) and use_device_addr clauses support, if clause on
   2099        simd construct, and partial support for the declare variant
   2100        directive, getting closer to full support of the OpenMP 5.0
   2101        standard.
   2102      * OpenMP and OpenACC now support [21]offloading to AMD Radeon (GCN)
   2103        GPUs; supported are the third-generation Fiji (fiji) and the
   2104        fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
   2105 
   2106   C family
   2107 
   2108      * New attributes:
   2109           + The access function and type attribute has been added to
   2110             describe how a function accesses objects passed to it by
   2111             pointer or reference, and to associate such arguments with
   2112             integer arguments denoting the objects' sizes. The attribute
   2113             is used to enable the detection of invalid accesses by
   2114             user-defined functions, such as those diagnosed by
   2115             -Wstringop-overflow.
   2116           + The symver attribute can be used to bind symbols to specific
   2117             version nodes on ELF platforms. This is preferred to using
   2118             inline assembly with GNU as symver directive because the
   2119             latter is not compatible with link-time optimizations.
   2120      * New warnings:
   2121           + [22]-Wstring-compare, enabled by -Wextra, warns about equality
   2122             and inequality expressions between zero and the result of a
   2123             call to either strcmp and strncmp that evaluate to a constant
   2124             as a result of the length of one argument being greater than
   2125             the size of the array pointed to by the other.
   2126           + [23]-Wzero-length-bounds, enabled by -Warray-bounds, warns
   2127             about accesses to elements of zero-length arrays that might
   2128             overlap other members of the same object.
   2129      * Enhancements to existing warnings:
   2130           + [24]-Warray-bounds detects more out-of-bounds accesses to
   2131             member arrays as well as accesses to elements of zero-length
   2132             arrays.
   2133           + [25]-Wformat-overflow makes full use of string length
   2134             information computed by the strlen optimization pass.
   2135           + [26]-Wrestrict detects overlapping accesses to dynamically
   2136             allocated objects.
   2137           + [27]-Wreturn-local-addr diagnoses more instances of return
   2138             statements returning addresses of automatic variables.
   2139           + [28]-Wstringop-overflow detects more out-of-bounds stores to
   2140             member arrays including zero-length arrays, dynamically
   2141             allocated objects and variable length arrays, as well as more
   2142             instances of reads of unterminated character arrays by string
   2143             built-in functions. The warning also detects out-of-bounds
   2144             accesses by calls to user-defined functions declared with the
   2145             new attribute access.
   2146           + [29]-Warith-conversion re-enables warnings from -Wconversion,
   2147             -Wfloat-conversion, and -Wsign-conversion that are now off by
   2148             default for an expression where the result of an arithmetic
   2149             operation will not fit in the target type due to promotion,
   2150             but the operands of the expression do fit in the target type.
   2151      * Extended characters in identifiers may now be specified directly in
   2152        the input encoding (UTF-8, by default), in addition to the UCN
   2153        syntax (\uNNNN or \UNNNNNNNN) that is already supported:
   2154 
   2155 static const int  = 3;
   2156 int get_nave_pi() {
   2157   return ;
   2158 }
   2159 
   2160   C
   2161 
   2162      * Several new features from the upcoming C2X revision of the ISO C
   2163        standard are supported with -std=c2x and -std=gnu2x. Some of these
   2164        features are also supported as extensions when compiling for older
   2165        language versions. In addition to the features listed, some
   2166        features previously supported as extensions and now added to the C
   2167        standard are enabled by default in C2X mode and not diagnosed with
   2168        -std=c2x -Wpedantic.
   2169           + The [[]] attribute syntax is supported, as in C++. Existing
   2170             attributes can be used with this syntax in forms such as
   2171             [[gnu::const]]. The standard attributes [[deprecated]],
   2172             [[fallthrough]] and [[maybe_unused]] are supported.
   2173           + UTF-8 character constants using the u8'' syntax are supported.
   2174           + <float.h> defines macros FLT_NORM_MAX, DBL_NORM_MAX and
   2175             LDBL_NORM_MAX.
   2176           + When decimal floating-point arithmetic is supported, <float.h>
   2177             defines macros DEC32_TRUE_MIN, DEC64_TRUE_MIN and
   2178             DEC128_TRUE_MIN, in addition to the macros that were
   2179             previously only defined if __STDC_WANT_DEC_FP__ was defined
   2180             before including <float.h>.
   2181           + In C2X mode, empty parentheses in a function definition give
   2182             that function a type with a prototype for subsequent calls;
   2183             other old-style function definitions are diagnosed by default
   2184             in C2X mode.
   2185           + The strftime format checking supports the %OB and %Ob formats.
   2186           + In C2X mode, -fno-fp-int-builtin-inexact is enabled by
   2187             default.
   2188      * GCC now defaults to -fno-common. As a result, global variable
   2189        accesses are more efficient on various targets. In C, global
   2190        variables with multiple tentative definitions now result in linker
   2191        errors. With -fcommon such definitions are silently merged during
   2192        linking.
   2193 
   2194   C++
   2195 
   2196      * Several C++20 features have been implemented:
   2197           + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
   2198             P0848R3, P1616R1, P1452R2
   2199           + P1668R1, Permitting Unevaluated inline-assembly in constexpr
   2200             Functions
   2201           + P1161R3, Deprecate a[b,c]
   2202           + P0848R3, Conditionally Trivial Special Member Functions
   2203           + P1091R3, Extending structured bindings
   2204           + P1143R2, Adding the constinit keyword
   2205           + P1152R4, Deprecating volatile
   2206           + P0388R4, Permit conversions to arrays of unknown bound
   2207           + P0784R7, constexpr new
   2208           + P1301R4, [[nodiscard("with reason")]]
   2209           + P1814R0, class template argument deduction for alias templates
   2210           + P1816R0, class template argument deduction for aggregates
   2211           + P0960R3, Parenthesized initialization of aggregates
   2212           + P1331R2, Allow trivial default initialization in constexpr
   2213             contexts
   2214           + P1327R1, Allowing dynamic_cast and polymorphic typeid in
   2215             constexpr contexts
   2216           + P0912R5, Coroutines (requires -fcoroutines)
   2217      * Several C++ Defect Reports have been resolved, e.g.:
   2218           + DR 1560, lvalue-to-rvalue conversion in ?:
   2219           + DR 1813, __is_standard_layout for a class with repeated bases
   2220           + DR 2094, volatile scalars are trivially copyable,
   2221           + DR 2096, constraints on literal unions
   2222           + DR 2413, typename in conversion-function-ids
   2223           + DR 2352, Similar types and reference binding
   2224           + DR 1601, Promotion of enumeration with fixed underlying type
   2225           + DR 330, Qualification conversions and pointers to arrays of
   2226             pointers
   2227           + DR 1307, Overload resolution based on size of array
   2228             initializer-list
   2229           + DR 1710, Missing template keyword in class-or-decltype
   2230      * New warnings:
   2231           + [30]-Wmismatched-tags, disabled by default, warns about
   2232             declarations of structs, classes, and class templates and
   2233             their specializations with a class-key that does not match
   2234             either the definition or the first declaration if no
   2235             definition is provided. The option is provided to ease
   2236             portability to Windows-based compilers.
   2237           + [31]-Wredundant-tags, disabled by default, warns about
   2238             redundant class-key and enum-key in contexts where the key can
   2239             be eliminated without causing an syntactic ambiguity.
   2240      * G++ can now detect modifying constant objects in constexpr
   2241        evaluation (which is undefined behavior).
   2242      * G++ no longer emits bogus -Wsign-conversion warnings with explicit
   2243        casts.
   2244      * Narrowing is now detected in more contexts (e.g., case values).
   2245      * Memory consumption of the compiler has been reduced in constexpr
   2246        evaluation.
   2247      * The noexcept-specifier is now properly treated as a complete-class
   2248        context as per [class.mem].
   2249      * The attribute deprecated can now be used on namespaces too.
   2250      * The ABI of passing and returning certain C++ classes by value
   2251        changed on several targets in GCC 10, including [32]AArch64,
   2252        [33]ARM, [34]PowerPC ELFv2, [35]S/390 and [36]Itanium. These
   2253        changes affect classes with a zero-sized subobject (an empty base
   2254        class, or data member with the [[no_unique_address]] attribute)
   2255        where all other non-static data members have the same type (this is
   2256        called a "homogeneous aggregate" in some ABI specifications, or if
   2257        there is only one such member, a "single element"). In -std=c++17
   2258        and -std=c++20 modes, classes with an empty base class were not
   2259        considered to have a single element or to be a homogeneous
   2260        aggregate, and so could be passed differently (in the wrong
   2261        registers or at the wrong stack address). This could make code
   2262        compiled with -std=c++17 and -std=c++14 ABI incompatible. This has
   2263        been corrected and the empty bases are ignored in those ABI
   2264        decisions, so functions compiled with -std=c++14 and -std=c++17 are
   2265        now ABI compatible again. Example: struct empty {}; struct S :
   2266        empty { float f; }; void f(S);. Similarly, in classes containing
   2267        non-static data members with empty class types using the C++20
   2268        [[no_unique_address]] attribute, those members weren't ignored in
   2269        the ABI argument passing decisions as they should be. Both of these
   2270        ABI changes are now diagnosed with -Wpsabi.
   2271 
   2272     Runtime Library (libstdc++)
   2273 
   2274      * Improved experimental C++2a support, including:
   2275           + Library concepts in <concepts> and <iterator>.
   2276           + Constrained algorithms in <ranges>, <algorithm>, and <memory>
   2277             (thanks to Patrick Palka).
   2278           + New algorithms shift_left and shift_right (thanks to Patrick
   2279             Palka).
   2280           + std::span (thanks to JeanHeyd Meneide).
   2281           + Three-way comparisons in <compare> and throughout the library.
   2282           + Constexpr support in <algorithm> and elsewhere (thanks to
   2283             Edward Smith-Rowland).
   2284           + <stop_token> and std::jthread (thanks to Thomas Rodgers).
   2285           + std::atomic_ref and std::atomic<floating point>.
   2286           + Integer comparison functions (cmp_equal, cmp_less etc.).
   2287           + std::ssize, std::to_array.
   2288           + std::construct_at, std::destroy, constexpr std::allocator.
   2289           + Mathematical constants in <numbers>.
   2290      * Support for RDSEED in std::random_device.
   2291      * Reduced header dependencies, leading to faster compilation for some
   2292        code.
   2293      * The std::iterator base class of std::istreambuf_iterator was
   2294        changed in C++98 mode to be consistent with C++11 and later
   2295        standards. This is expected to have no noticeable effect except in
   2296        the unlikely case of a class which has potentially overlapping
   2297        subobjects of type std::istreambuf_iterator<C> and another iterator
   2298        type with a std::iterator<input_iterator_tag, C, ...> base class.
   2299        The layout of such a type might change when compiled as C++98.
   2300        [37]Bug 92285 has more details and concrete examples.
   2301 
   2302   D
   2303 
   2304      * Support for static foreach has been implemented.
   2305      * Aliases can now be created directly from any __traits that return
   2306        symbols or tuples. Previously, an AliasSeq was necessary in order
   2307        to alias their return.
   2308      * It is now possible to detect the language ABI specified for a
   2309        struct, class, or interface using __traits(getLinkage, ...).
   2310      * Support for core.math.toPrec intrinsics has been added. These
   2311        intrinsics guarantee the rounding to specific floating-point
   2312        precisions at specified points in the code.
   2313      * Support for pragma(inline) has been implemented. Previously the
   2314        pragma was recognized, but had no effect on the compilation.
   2315      * Optional parentheses in asm operands are deprecated and will be
   2316        removed in a future release.
   2317      * All content imported files are now included in the make dependency
   2318        list when compiling with -M.
   2319      * Compiler recognized attributes provided by the gcc.attribute module
   2320        will now take effect when applied to function prototypes as well as
   2321        when applied to full function declarations.
   2322      * Added a --enable-libphobos-checking configure option to control
   2323        whether run-time checks are compiled into the D runtime library.
   2324      * Added a --with-libphobos-druntime-only configure option to indicate
   2325        whether to build only the core D runtime library, or both the core
   2326        and standard libraries into libphobos.
   2327 
   2328   Fortran
   2329 
   2330      * use_device_addr of version 5.0 of the [38]OpenMP specification is
   2331        now supported. Note that otherwise OpenMP 4.5 is partially
   2332        supported in the Fortran compiler; the largest missing item is
   2333        structure element mapping.
   2334      * The default buffer size for I/O using unformatted files has been
   2335        increased to 1048576. The buffer size for can now be set at runtime
   2336        via the environment variables GFORTRAN_FORMATTED_BUFFER_SIZE and
   2337        GFORTRAN_UNFORMATTED_BUFFER_SIZE for formatted and unformatted
   2338        files, respectively.
   2339      * Mismatches between actual and dummy argument lists in a single file
   2340        are now rejected with an error. Use the new option
   2341        -fallow-argument-mismatch to turn these errors into warnings; this
   2342        option is implied with -std=legacy. -Wargument-mismatch has been
   2343        removed.
   2344      * The handling of a BOZ literal constant has been reworked to provide
   2345        better conformance to the Fortran 2008 and 2018 standards. In these
   2346        Fortran standards, a BOZ literal constant is a typeless and
   2347        kindless entity. As a part of the rework, documented and
   2348        undocumented extensions to the Fortran standard now emit errors
   2349        during compilation. Some of these extensions are permitted with the
   2350        -fallow-invalid-boz option, which degrades the error to a warning
   2351        and the code is compiled as with older gfortran.
   2352      * At any optimization level except-Os, gfortran now uses inline
   2353        packing for arguments instead of calling a library routine. If the
   2354        source contains a large number of arguments that need to be
   2355        repacked, code size or time for compilation can become excessive.
   2356        If that is the case, -fno-inline-arg-packing can be used to disable
   2357        inline argument packing.
   2358      * Legacy extensions:
   2359           + For formatted input/output, if the explicit widths after the
   2360             data-edit descriptors I, F and G have been omitted, default
   2361             widths are used.
   2362           + A blank format item at the end of a format specification, i.e.
   2363             nothing following the final comma, is allowed. Use the option
   2364             -fdec-blank-format-item; this option is implied with -fdec.
   2365           + The existing support for AUTOMATIC and STATIC attributes has
   2366             been extended to allow variables with the AUTOMATIC attribute
   2367             to be used in EQUIVALENCE statements. Use -fdec-static; this
   2368             option is implied by -fdec.
   2369           + Allow character literals in assignments and DATA statements
   2370             for numeric (INTEGER, REAL, or COMPLEX) or LOGICAL variables.
   2371             Use the option -fdec-char-conversions; this option is implied
   2372             with -fdec.
   2373           + DEC comparisons, i.e. allow Hollerith constants to be used in
   2374             comparisons with INTEGER, REAL, COMPLEX and CHARACTER
   2375             expressions. Use the option -fdec.
   2376      * Character type names in errors and warnings now include len in
   2377        addition to kind; * is used for assumed length. The kind is omitted
   2378        if it is the default kind. Examples: CHARACTER(12), CHARACTER(6,4).
   2379      * CO_BROADCAST now supports derived type variables including objects
   2380        with allocatable components. In this case, the optional arguments
   2381        STAT= and ERRMSG= are currently ignored.
   2382      * The handling of module and submodule names has been reworked to
   2383        allow the full 63-character length mandated by the standard.
   2384        Previously symbol names were truncated if the combined length of
   2385        module, submodule, and function name exceeded 126 characters. This
   2386        change therefore breaks the ABI, but only for cases where this 126
   2387        character limit was exceeded.
   2388 
   2389   Go
   2390 
   2391      * GCC 10 provides a complete implementation of the Go 1.14.6 user
   2392        packages.
   2393 
   2394 libgccjit
   2395 
   2396      * The libgccjit API gained four new entry points:
   2397           + [39]gcc_jit_version_major, [40]gcc_jit_version_minor, and
   2398             [41]gcc_jit_version_patchlevel for programmatically checking
   2399             the libgccjit version from client code, and
   2400           + [42]gcc_jit_context_new_bitfield
   2401 
   2402 New Targets and Target Specific Improvements
   2403 
   2404   AArch64 & arm
   2405 
   2406      * The AArch64 and arm ports now support condition flag output
   2407        constraints in inline assembly, as indicated by the
   2408        __GCC_ASM_FLAG_OUTPUTS__. On arm this feature is only available for
   2409        A32 and T32 targets. Please refer to the documentation for more
   2410        details.
   2411 
   2412   AArch64
   2413 
   2414      * There have been several improvements related to the Scalable Vector
   2415        Extension (SVE):
   2416           + The SVE ACLE types and intrinsics are now supported. They can
   2417             be accessed using the header file arm_sve.h.
   2418           + It is now possible to create fixed-length SVE types using the
   2419             arm_sve_vector_bits attribute. For example:
   2420 #if __ARM_FEATURE_SVE_BITS==512
   2421 typedef svint32_t vec512 __attribute__((arm_sve_vector_bits(512)));
   2422 typedef svbool_t pred512 __attribute__((arm_sve_vector_bits(512)));
   2423 #endif
   2424           + -mlow-precision-div, -mlow-precision-sqrt and
   2425             -mlow-precision-recip-sqrt now work for SVE.
   2426           + -msve-vector-bits=128 now generates vector-length-specific
   2427             code for little-endian targets. It continues to generate
   2428             vector-length-agnostic code for big-endian targets, just as
   2429             previous releases did for all targets.
   2430           + The vectorizer is now able to use extending loads and
   2431             truncating stores, including gather loads and scatter stores.
   2432           + The vectorizer now compares the cost of vectorizing with SVE
   2433             and vectorizing with Advanced SIMD and tries to pick the best
   2434             one. Previously it would always use SVE if possible.
   2435           + If a vector loop uses Advanced SIMD rather than SVE, the
   2436             vectorizer now considers using SVE to vectorize the left-over
   2437             elements (the scalar tail or epilog).
   2438           + Besides these specific points, there have been many general
   2439             improvements to the way that the vectorizer uses SVE.
   2440      * The -mbranch-protection=pac-ret option now accepts the optional
   2441        argument +b-key extension to perform return address signing with
   2442        the B-key instead of the A-key.
   2443      * The option -moutline-atomics has been added to aid deployment of
   2444        the Large System Extensions (LSE) on GNU/Linux systems built with a
   2445        baseline architecture targeting Armv8-A. When the option is
   2446        specified code is emitted to detect the presence of LSE
   2447        instructions at runtime and use them for standard atomic
   2448        operations. For more information please refer to the documentation.
   2449      * The Transactional Memory Extension is now supported through ACLE
   2450        intrinsics. It can be enabled through the +tme option extension
   2451        (for example, -march=armv8.5-a+tme).
   2452      * A number of features from Armv8.5-A are now supported through ACLE
   2453        intrinsics. These include:
   2454           + The random number instructions that can be enabled through the
   2455             (already present in GCC 9.1) +rng option extension.
   2456           + Floating-point intrinsics to round to integer instructions
   2457             from Armv8.5-A when targeting -march=armv8.5-a or later.
   2458           + Memory Tagging Extension intrinsics enabled through the
   2459             +memtag option extension.
   2460      * Similarly, the following Armv8.6-A features are now supported
   2461        through ACLE intrinsics:
   2462           + The bfloat16 extension. This extension is enabled
   2463             automatically when Armv8.6-A is selected (such as by
   2464             -march=armv8.6-a). It can also be enabled for Armv8.2-A and
   2465             later using the +bf16 option extension.
   2466           + The Matrix Multiply extension. This extension is split into
   2467             three parts, one for each supported data type:
   2468                o Support for 8-bit integer matrix multiply instructions.
   2469                  This extension is enabled automatically when Armv8.6-A is
   2470                  selected. It can also be enabled for Armv8.2-A and later
   2471                  using the +i8mm option extension.
   2472                o Support for 32-bit floating-point matrix multiply
   2473                  instructions. This extension can be enabled using the
   2474                  +f32mm option extension, which also has the effect of
   2475                  enabling SVE.
   2476                o Support for 64-bit floating-point matrix multiply
   2477                  instructions. This extension can be enabled using the
   2478                  +f64mm option extension, which likewise has the effect of
   2479                  enabling SVE.
   2480      * SVE2 is now supported through ACLE intrinsics and (to a limited
   2481        extent) through autovectorization. It can be enabled through the
   2482        +sve2 option extension (for example, -march=armv8.5-a+sve2).
   2483        Additional extensions can be enabled through +sve2-sm4, +sve2-aes,
   2484        +sve2-sha3 and +sve2-bitperm.
   2485      * Support has been added for the following processors (GCC
   2486        identifiers in parentheses):
   2487           + Arm Cortex-A77 (cortex-a77).
   2488           + Arm Cortex-A76AE (cortex-a76ae).
   2489           + Arm Cortex-A65 (cortex-a65).
   2490           + Arm Cortex-A65AE (cortex-a65ae).
   2491           + Arm Cortex-A34 (cortex-a34).
   2492           + Marvell ThunderX3 (thunderx3t110).
   2493        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   2494        options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
   2495        arguments to the equivalent target attributes and pragmas.
   2496 
   2497   arm
   2498 
   2499      * Support for the FDPIC ABI has been added. It uses 64-bit function
   2500        descriptors to represent pointers to functions, and enables code
   2501        sharing on MMU-less systems. The corresponding target triple is
   2502        arm-uclinuxfdpiceabi, and the C library is uclibc-ng.
   2503      * Support has been added for the Arm EABI on NetBSD through the
   2504        arm*-*-netbsdelf-*eabi* triplet.
   2505      * The handling of 64-bit integer operations has been significantly
   2506        reworked and improved leading to improved performance and reduced
   2507        stack usage when using 64-bit integral data types. The option
   2508        -mneon-for-64bits is now deprecated and will be removed in a future
   2509        release.
   2510      * Support has been added for the following processors (GCC
   2511        identifiers in parentheses):
   2512           + Arm Cortex-A77 (cortex-a77).
   2513           + Arm Cortex-A76AE (cortex-a76ae).
   2514           + Arm Cortex-M35P (cortex-m35p).
   2515           + Arm Cortex-M55 (cortex-m55).
   2516        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   2517        options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
   2518      * Support has been extended for the ACLE [43]data-processing
   2519        intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
   2520        multiplication and other related intrinsics aimed at DSP algorithm
   2521        optimization.
   2522      * Support for -mpure-code in Thumb-1 (v6m) has been added: this
   2523        M-profile feature is no longer restricted to targets with MOVT. For
   2524        example, -mcpu=cortex-m0 now supports this option.
   2525      * Support for the [44]Armv8.1-M Mainline Architecture has been added.
   2526           + Armv8.1-M Mainline can be enabled by using the
   2527             -march=armv8.1-m.main command-line option.
   2528      * Support for the [45]MVE beta ACLE intrinsics has been added. These
   2529        intrinsics can be enabled by including the arm_mve.h header file
   2530        and passing the +mve or +mve.fp option extensions (for example:
   2531        -march=armv8.1-m.main+mve).
   2532      * Support for the Custom Datapath Extension beta ACLE [46]intrinsics
   2533        has been added.
   2534      * Support for Armv8.1-M Mainline Security Extensions architecture has
   2535        been added. The -mcmse option, when used in combination with an
   2536        Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
   2537        -mcmse), now leads to the generation of improved code sequences
   2538        when changing security states.
   2539 
   2540   AMD Radeon (GCN)
   2541 
   2542      * Code generation and in particular vectorization support have been
   2543        much improved.
   2544 
   2545   ARC
   2546 
   2547      * The interrupt service routine functions save all used registers,
   2548        including extension registers and auxiliary registers used by Zero
   2549        Overhead Loops.
   2550      * Improve code size by using multiple short instructions instead of a
   2551        single long mov or ior instruction when its long immediate constant
   2552        is known.
   2553      * Fix usage of the accumulator register for ARC600.
   2554      * Fix issues with uncached attribute.
   2555      * Remove -mq-class option.
   2556      * Improve 64-bit integer addition and subtraction operations.
   2557 
   2558   AVR
   2559 
   2560      * Support for the XMEGA-like devices
   2561 
   2562      ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804,
   2563      ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808,
   2564      ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209,
   2565      ATmega4808, ATmega4809
   2566        has been added.
   2567      * A new command-line option -nodevicespecs has been added. It allows
   2568        to provide a custom device-specs file by means of
   2569 
   2570      avr-gcc -nodevicespecs -specs=my-spec-file <options>
   2571        and without the need to provide options -B and -mmcu=. See [47]AVR
   2572        command-line options for details. This feature is also available in
   2573        GCC 9.3+ and GCC 8.4+.
   2574      * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
   2575        have been added. They allow to choose the size (in bits) of the
   2576        double and long double types, respectively. Whether or not the
   2577        mentioned layouts are available, whether the options act as a
   2578        multilib option, and the default for either option are controlled
   2579        by the new [48]AVR configure options --with-double= and
   2580        --with-long-double=.
   2581      * A new configure option --with-libf7= has been added. It controls to
   2582        which level avr-libgcc provides 64-bit floating point support by
   2583        means of [49]Libf7.
   2584      * A new configure option --with-double-comparison= has been added.
   2585        It's unlikely you need to set this option by hand.
   2586 
   2587   IA-32/x86-64
   2588 
   2589      * Support to expand __builtin_roundeven into the appropriate SSE 4.1
   2590        instruction has been added.
   2591      * New ISA extension support for Intel ENQCMD was added to GCC. ENQCMD
   2592        intrinsics are available via the -menqcmd compiler switch.
   2593      * GCC now supports the Intel CPU named Cooperlake through
   2594        -march=cooperlake. The switch enables the AVX512BF16 ISA
   2595        extensions.
   2596      * GCC now supports the Intel CPU named Tigerlake through
   2597        -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
   2598        AVX512VP2INTERSECT ISA extensions.
   2599 
   2600   MIPS
   2601 
   2602      * The mips*-*-linux* targets now mark object files with appropriate
   2603        GNU-stack note, facilitating use of non-executable stack hardening
   2604        on GNU/Linux. The soft-float targets have this feature enabled by
   2605        default, while for hard-float targets it is required for GCC to be
   2606        configured with --with-glibc-version=2.31 against glibc 2.31 or
   2607        later.
   2608 
   2609   PowerPC / PowerPC64 / RS6000
   2610 
   2611      * Many vector builtins have been listed as deprecated in the
   2612        [50]64-Bit ELF V2 ABI Specification for quite a number of years.
   2613        The vector builtins listed in Tables A.8 through A.10 are now
   2614        deprecated for GCC 10, and will likely be removed from support in
   2615        GCC 11. Note that this does not result in any loss of function.
   2616        These deprecated builtins generally provide somewhat nonsensical
   2617        argument lists (for example, mixing signed, unsigned, and bool
   2618        vector arguments arbitrarily), or are duplicate builtins that are
   2619        inconsistent with the expected naming scheme. We expect that this
   2620        will be unlikely to affect much if any code, and any required code
   2621        changes will be trivial.
   2622 
   2623   PRU
   2624 
   2625      * A new back end targeting TI PRU I/O processors has been contributed
   2626        to GCC.
   2627 
   2628   RISC-V
   2629 
   2630      * The riscv*-*-* targets now require GNU binutils version 2.30 or
   2631        later, to support new assembly instructions produced by GCC.
   2632 
   2633   V850
   2634 
   2635      * The ABI for V850 nested functions has been changed. Previously the
   2636        V850 port used %r20 for the static chain pointer, now the port uses
   2637        %r19. This corrects a long standing latent bug in the v850 port
   2638        where a call to a nested function would unexpectedly change the
   2639        value in %r20.
   2640 
   2641 Operating Systems
   2642 
   2643 Improvements for plugin authors
   2644 
   2645      * GCC diagnostics can now have a chain of events associated with
   2646        them, describing a path through the code that triggers the problem.
   2647        These can be printed by the diagnostics subsystem in various ways,
   2648        controlled by the [51]-fdiagnostics-path-format option, or captured
   2649        in JSON form via [52]-fdiagnostics-format=json.
   2650      * GCC diagnostics can now be associated with [53]CWE weakness
   2651        identifiers, which will appear on the standard error stream, and in
   2652        the JSON output from [54]-fdiagnostics-format=json.
   2653 
   2654 Other significant improvements
   2655 
   2656      * To allow inline expansion of both memcpy and memmove, the existing
   2657        movmem instruction patterns used for non-overlapping memory copies
   2658        have been renamed to cpymem. The movmem name is now used for
   2659        overlapping memory moves, consistent with the library functions
   2660        memcpy and memmove.
   2661      * For many releases, when GCC emits a warning it prints the option
   2662        controlling that warning. As of GCC 10, that option text is now a
   2663        clickable hyperlink for the documentation of that option (assuming
   2664        a [55]sufficiently capable terminal). This behavior can be
   2665        controlled via a new [56]-fdiagnostics-urls option (along with
   2666        various environment variables and heuristics documented with that
   2667        option).
   2668 
   2669 GCC 10.1
   2670 
   2671    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   2672    system that are known to be fixed in the 10.1 release. This list might
   2673    not be complete (that is, it is possible that some PRs that have been
   2674    fixed are not listed here).
   2675 
   2676 GCC 10.2
   2677 
   2678    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   2679    system that are known to be fixed in the 10.2 release. This list might
   2680    not be complete (that is, it is possible that some PRs that have been
   2681    fixed are not listed here).
   2682 
   2683 GCC 10.3
   2684 
   2685    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   2686    system that are known to be fixed in the 10.3 release. This list might
   2687    not be complete (that is, it is possible that some PRs that have been
   2688    fixed are not listed here).
   2689 
   2690   Target Specific Changes
   2691 
   2692     AArch64
   2693 
   2694      * A bug with the Random Number intrinsics in the arm_acle.h header
   2695        that resulted in an incorrect status result being returned has been
   2696        fixed.
   2697      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   2698        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   2699        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   2700        tunes the code for the A64FX. This includes tuning the SVE code,
   2701        although by default the code is still length-agnostic and so works
   2702        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   2703        code specific to 512-bit SVE.
   2704 
   2705   x86-64
   2706 
   2707      * GCC 10.3 supports AMD CPUs based on the znver3 core via
   2708        -march=znver3.
   2709 
   2710 GCC 10.4
   2711 
   2712    This is the [60]list of problem reports (PRs) from GCC's bug tracking
   2713    system that are known to be fixed in the 10.4 release. This list might
   2714    not be complete (that is, it is possible that some PRs that have been
   2715    fixed are not listed here).
   2716 
   2717   Target Specific Changes
   2718 
   2719     x86-64
   2720 
   2721      * The x86-64 ABI of passing and returning structures with a 64-bit
   2722        integer vector changed in GCC 10.1 when MMX is disabled. Disabling
   2723        MMX no longer changes how they are passed nor returned. This ABI
   2724        change is now diagnosed with -Wpsabi.
   2725 
   2726 GCC 10.5
   2727 
   2728    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   2729    system that are known to be fixed in the 10.5 release. This list might
   2730    not be complete (that is, it is possible that some PRs that have been
   2731    fixed are not listed here).
   2732 
   2733 
   2734     For questions related to the use of GCC, please consult these web
   2735     pages and the [62]GCC manuals. If that fails, the
   2736     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2737     web pages and the development of GCC are welcome on our developer
   2738     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   2739     archives.
   2740 
   2741    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   2742    distribution of this entire article is permitted in any medium,
   2743    provided this notice is preserved.
   2744 
   2745    These pages are [67]maintained by the GCC team. Last modified
   2746    2023-07-07.
   2747 
   2748 References
   2749 
   2750    1. https://gcc.gnu.org/gcc-10/porting_to.html
   2751    2. https://gcc.gnu.org/onlinedocs/index.html#current
   2752    3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
   2753    4. https://www.mpfr.org/
   2754    5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
   2755    6. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
   2756    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
   2757    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
   2758    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
   2759   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
   2760   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
   2761   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
   2762   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
   2763   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
   2764   15. https://facebook.github.io/zstd/
   2765   16. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
   2766   17. https://www.openacc.org/
   2767   18. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10
   2768   19. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
   2769   20. https://www.openmp.org/specifications/
   2770   21. https://gcc.gnu.org/wiki/Offloading
   2771   22. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
   2772   23. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
   2773   24. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
   2774   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   2775   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
   2776   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
   2777   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
   2778   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
   2779   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
   2780   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
   2781   32. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
   2782   33. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
   2783   34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
   2784   35. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
   2785   36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
   2786   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
   2787   38. https://www.openmp.org/specifications/
   2788   39. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
   2789   40. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
   2790   41. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
   2791   42. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
   2792   43. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
   2793   44. https://developer.arm.com/Architectures/M-Profile Architecture
   2794   45. https://developer.arm.com/architectures/instruction-sets/intrinsics/
   2795   46. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
   2796   47. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
   2797   48. https://gcc.gnu.org/install/configure.html#avr
   2798   49. https://gcc.gnu.org/wiki/avr-gcc#Libf7
   2799   50. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
   2800   51. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
   2801   52. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2802   53. https://cwe.mitre.org/
   2803   54. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2804   55. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
   2805   56. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
   2806   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
   2807   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
   2808   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
   2809   60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
   2810   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
   2811   62. https://gcc.gnu.org/onlinedocs/
   2812   63. mailto:gcc-help (a] gcc.gnu.org
   2813   64. mailto:gcc (a] gcc.gnu.org
   2814   65. https://gcc.gnu.org/lists.html
   2815   66. https://www.fsf.org/
   2816   67. https://gcc.gnu.org/about.html
   2817 ======================================================================
   2818 http://gcc.gnu.org/gcc-9/index.html
   2819                               GCC 9 Release Series
   2820 
   2821    (This release series is no longer supported.)
   2822 
   2823    May 27, 2022
   2824 
   2825    The [1]GNU project and the GCC developers are pleased to announce the
   2826    release of GCC 9.5.
   2827 
   2828    This release is a bug-fix release, containing fixes for regressions in
   2829    GCC 9.4 relative to previous releases of GCC.
   2830 
   2831 Release History
   2832 
   2833    GCC 9.5
   2834           May 27, 2022 ([2]changes, [3]documentation)
   2835 
   2836    GCC 9.4
   2837           June 1, 2021 ([4]changes, [5]documentation)
   2838 
   2839    GCC 9.3
   2840           Mar 12, 2020 ([6]changes, [7]documentation)
   2841 
   2842    GCC 9.2
   2843           Aug 12, 2019 ([8]changes, [9]documentation)
   2844 
   2845    GCC 9.1
   2846           May 3, 2019 ([10]changes, [11]documentation)
   2847 
   2848 References and Acknowledgements
   2849 
   2850    GCC used to stand for the GNU C Compiler, but since the compiler
   2851    supports several other languages aside from C, it now stands for the
   2852    GNU Compiler Collection.
   2853 
   2854    The GCC developers would like to thank the numerous people that have
   2855    contributed new features, improvements, bug fixes, and other changes as
   2856    well as test results to GCC. This [12]amazing group of volunteers is
   2857    what makes GCC successful.
   2858 
   2859    For additional information about GCC please refer to the [13]GCC
   2860    project web site or contact the [14]GCC development mailing list.
   2861 
   2862    To obtain GCC please use [15]our mirror sites or [16]our version
   2863    control system.
   2864 
   2865 
   2866     For questions related to the use of GCC, please consult these web
   2867     pages and the [17]GCC manuals. If that fails, the
   2868     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2869     web pages and the development of GCC are welcome on our developer
   2870     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   2871     archives.
   2872 
   2873    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   2874    distribution of this entire article is permitted in any medium,
   2875    provided this notice is preserved.
   2876 
   2877    These pages are [22]maintained by the GCC team. Last modified
   2878    2024-05-30.
   2879 
   2880 References
   2881 
   2882    1. http://www.gnu.org/
   2883    2. https://gcc.gnu.org/gcc-9/changes.html
   2884    3. https://gcc.gnu.org/onlinedocs/9.5.0/
   2885    4. https://gcc.gnu.org/gcc-9/changes.html
   2886    5. https://gcc.gnu.org/onlinedocs/9.4.0/
   2887    6. https://gcc.gnu.org/gcc-9/changes.html
   2888    7. https://gcc.gnu.org/onlinedocs/9.3.0/
   2889    8. https://gcc.gnu.org/gcc-9/changes.html
   2890    9. https://gcc.gnu.org/onlinedocs/9.2.0/
   2891   10. https://gcc.gnu.org/gcc-9/changes.html
   2892   11. https://gcc.gnu.org/onlinedocs/9.1.0/
   2893   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
   2894   13. https://gcc.gnu.org/index.html
   2895   14. mailto:gcc (a] gcc.gnu.org
   2896   15. https://gcc.gnu.org/mirrors.html
   2897   16. https://gcc.gnu.org/git.html
   2898   17. https://gcc.gnu.org/onlinedocs/
   2899   18. mailto:gcc-help (a] gcc.gnu.org
   2900   19. mailto:gcc (a] gcc.gnu.org
   2901   20. https://gcc.gnu.org/lists.html
   2902   21. https://www.fsf.org/
   2903   22. https://gcc.gnu.org/about.html
   2904 ======================================================================
   2905 http://gcc.gnu.org/gcc-9/changes.html
   2906                               GCC 9 Release Series
   2907                         Changes, New Features, and Fixes
   2908 
   2909    This page is a "brief" summary of some of the huge number of
   2910    improvements in GCC 9. You may also want to check out our [1]Porting to
   2911    GCC 9 page and the [2]full GCC documentation.
   2912 
   2913 Caveats
   2914 
   2915      * On Arm targets (arm*-*-*), [3]a bug in the implementation of the
   2916        procedure call standard (AAPCS) in the GCC 6, 7 and 8 releases has
   2917        been fixed: a structure containing a bit-field based on a 64-bit
   2918        integral type and where no other element in a structure required
   2919        64-bit alignment could be passed incorrectly to functions. This is
   2920        an ABI change. If the option -Wpsabi is enabled (on by default) the
   2921        compiler will emit a diagnostic note for code that might be
   2922        affected.
   2923      * Support for a number of older systems and recently unmaintained or
   2924        untested target ports of GCC has been declared obsolete in GCC 9.
   2925        Unless there is activity to revive them, the next release of GCC
   2926        will have their sources permanently removed.
   2927        The following ports for individual systems on particular
   2928        architectures have been obsoleted:
   2929           + Solaris 10 (*-*-solaris2.10). Details can be found in the
   2930             [4]announcement.
   2931           + Cell Broadband Engine SPU (spu*-*-*). Details can be found in
   2932             the [5]announcement.
   2933      * A change to the C++ std::rotate algorithm in GCC 9.1.0 can cause
   2934        ABI incompatibilities with object files compiled with other
   2935        versions of GCC. If the std::rotate algorithm is called with an
   2936        empty range then it might cause a divide-by-zero error (as a SIGFPE
   2937        signal) and crash. The change has been reverted for GCC 9.2.0 and
   2938        future releases. For more details see [6]Bug 90920. The problem can
   2939        be avoided by recompiling any objects that might call std::rotate
   2940        with an empty range, so that the GCC 9.1.0 definition of
   2941        std::rotate is not used.
   2942      * The automatic template instantiation at link time ([7]-frepo) has
   2943        been deprecated and will be removed in a future release.
   2944      * The --with-default-libstdcxx-abi=gcc4-compatible configure option
   2945        is broken in the 9.1 and 9.2 releases, producing a shared library
   2946        with missing symbols (see [8]Bug 90361). As a workaround, configure
   2947        without that option and build GCC as normal, then edit the
   2948        installed <bits/c++config.h> headers to define the
   2949        _GLIBCXX_USE_CXX11_ABI macro to 0.
   2950 
   2951 General Improvements
   2952 
   2953    The following GCC command line options have been introduced or
   2954    improved.
   2955      * All command line options that take a byte-size argument accept
   2956        64-bit integers as well as standard SI and IEC suffixes such as kb
   2957        and KiB, MB and MiB, or GB and GiB denoting the corresponding
   2958        multiples of bytes. See [9]Invoking GCC for more.
   2959      * A new option [10]-flive-patching=[inline-only-static|inline-clone]
   2960        generates code suitable for live patching. At the same time it
   2961        provides multiple-level control over IPA optimizations. See the
   2962        user guide for more details.
   2963      * A new option, --completion, has been added to provide more fine
   2964        option completion in a shell. It is intended to be used by
   2965        Bash-completion.
   2966      * GCC's diagnostics now print source code with a left margin showing
   2967        line numbers, configurable with
   2968        [11]-fno-diagnostics-show-line-numbers.
   2969        GCC's diagnostics can also now label regions of the source code to
   2970        show pertinent information, such as the types within an expression.
   2971 $ g++ t.cc
   2972 t.cc: In function 'int test(const shape&, const shape&)':
   2973 t.cc:15:4: error: no match for 'operator+' (operand types are 'boxed_value<doubl
   2974 e>' and 'boxed_value<double>')
   2975    14 |   return (width(s1) * height(s1)
   2976       |           ~~~~~~~~~~~~~~~~~~~~~~
   2977       |                     |
   2978       |                     boxed_value<[...]>
   2979    15 |    + width(s2) * height(s2));
   2980       |    ^ ~~~~~~~~~~~~~~~~~~~~~~
   2981       |                |
   2982       |                boxed_value<[...]>
   2983 
   2984        These labels can be disabled via [12]-fno-diagnostics-show-labels.
   2985      * A new option [13]-fdiagnostics-format=json has been introduced for
   2986        emitting diagnostics in a machine-readable format.
   2987      * The alignment-related options [14]-falign-functions,
   2988        [15]-falign-labels, [16]-falign-loops, and [17]-falign-jumps
   2989        received support for a secondary alignment (e.g.
   2990        -falign-loops=n:m:n2:m2).
   2991      * New pair of profiling options ([18]-fprofile-filter-files and
   2992        [19]-fprofile-exclude-files) has been added. The options help to
   2993        filter which source files are instrumented.
   2994      * AddressSanitizer generates more compact redzones for automatic
   2995        variables. That helps to reduce memory footprint of a sanitized
   2996        binary.
   2997      * Numerous improvements have been made to the output of
   2998        [20]-fopt-info.
   2999        Messages are now prefixed with optimized, missed, or note, rather
   3000        than the old behavior of all being prefixed with note.
   3001        The output from -fopt-info can now contain information on inlining
   3002        decisions:
   3003 $ g++ -c inline.cc -O2 -fopt-info-inline-all
   3004 inline.cc:24:11: note: Considering inline candidate void foreach(T, T, void (*)(
   3005 E)) [with T = char**; E = char*]/2.
   3006 inline.cc:24:11: optimized:  Inlining void foreach(T, T, void (*)(E)) [with T =
   3007 char**; E = char*]/2 into int main(int, char**)/1.
   3008 inline.cc:19:12: missed:   not inlinable: void inline_me(char*)/0 -> int std::pu
   3009 ts(const char*)/3, function body not available
   3010 inline.cc:13:8: optimized:  Inlined void inline_me(char*)/4 into int main(int, c
   3011 har**)/1 which now has time 127.363637 and size 11, net change of +0.
   3012 Unit growth for small function inlining: 16->16 (0%)
   3013 
   3014 Inlined 2 calls, eliminated 1 functions
   3015 
   3016 
   3017        The output from the vectorizer has been rationalized so that failed
   3018        attempts to vectorize a loop are displayed in the form
   3019     [LOOP-LOCATION]: couldn't vectorize this loop
   3020     [PROBLEM-LOCATION]: because of [REASON]
   3021 
   3022        rather than an exhaustive log of all decisions made by the
   3023        vectorizer. For example:
   3024 $ gcc -c v.c -O3 -fopt-info-all-vec
   3025 v.c:7:3: missed: couldn't vectorize loop
   3026 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   3027 mory");
   3028 v.c:3:6: note: vectorized 0 loops in function.
   3029 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   3030 mory");
   3031 
   3032        The old behavior can be obtained via a new -internals suboption of
   3033        -fopt-info.
   3034      * A new option, [21]-fsave-optimization-record has been added, which
   3035        writes a SRCFILE.opt-record.json.gz file describing the
   3036        optimization decisions made by GCC. This is similar to the output
   3037        of -fopt-info, but with additional metadata such as the inlining
   3038        chain, and profile information (if available).
   3039      * Inter-procedural propagation of stack alignment can now be
   3040        controlled by [22]-fipa-stack-alignment.
   3041      * Propagation of addressability, readonly, and writeonly flags on
   3042        static variables can now be controlled by
   3043        [23]-fipa-reference-addressable.
   3044 
   3045    The following built-in functions have been introduced.
   3046      * [24]__builtin_expect_with_probability to provide branch prediction
   3047        probability hints to the optimizer.
   3048      * [25]__builtin_has_attribute determines whether a function, type, or
   3049        variable has been declared with some attribute.
   3050      * [26]__builtin_speculation_safe_value can be used to help mitigate
   3051        against unsafe speculative execution.
   3052 
   3053    The following attributes have been introduced.
   3054      * The [27]copy function attribute has been added. The attribute can
   3055        also be applied to type definitions and to variable declarations.
   3056 
   3057    A large number of improvements to code generation have been made,
   3058    including but not limited to the following.
   3059      * Switch expansion has been improved by using a different strategy
   3060        (jump table, bit test, decision tree) for a subset of switch cases.
   3061      * A linear function expression defined as a switch statement can be
   3062        transformed by [28]-ftree-switch-conversion. For example:
   3063 
   3064 int
   3065 foo (int how)
   3066 {
   3067   switch (how) {
   3068     case 2: how = 205; break;
   3069     case 3: how = 305; break;
   3070     case 4: how = 405; break;
   3071     case 5: how = 505; break;
   3072     case 6: how = 605; break;
   3073   }
   3074   return how;
   3075 }
   3076 
   3077        can be transformed into 100 * how + 5 (for values defined in the
   3078        switch statement).
   3079      * Inter-procedural optimization improvements:
   3080           + Inliner defaults were tuned to better suit modern C++
   3081             codebases, especially when built with link time-optimizations.
   3082             New parameters max-inline-insns-small, max-inline-insns-size,
   3083             uninlined-function-insns, uninlined-function-time,
   3084             uninlined-thunk-insns, and uninlined-thunk-time were added.
   3085           + Hot/cold partitioning is now more precise and aggressive.
   3086           + Improved scalability for very large translation units
   3087             (especially when link-time optimizing large programs).
   3088      * Profile driven optimization improvements:
   3089           + [29]-fprofile-use now enables [30]-fversion-loops-for-strides,
   3090             [31]-floop-interchange, [32]-floop-unroll-and-jam,
   3091             [33]-ftree-loop-distribution.
   3092           + Streaming of counter histograms was removed, which reduces the
   3093             size of profile files. Histograms are computed on the fly with
   3094             link-time optimization.
   3095           + The parameter hot-bb-count-ws-permille was reduced from 999 to
   3096             990 to account for more precise histograms.
   3097      * Link-time optimization improvements:
   3098           + Types are now simplified prior to streaming resulting in
   3099             significant reductions of LTO object file sizes and link-time
   3100             memory use as well as improvements of link-time parallelism.
   3101           + The default number of partitions (--param lto-partitions) was
   3102             increased from 32 to 128 enabling effective use of CPUs with
   3103             more than 32 hyperthreads. --param
   3104             lto-max-streaming-parallelism can now be used to control the
   3105             number of streaming processes.
   3106           + Warnings on C++ One Decl Rule violations (-Wodr) are now more
   3107             informative and produce fewer redundant results.
   3108        Overall compile time of Firefox 66 and LibreOffice 6.2.3 on an
   3109        8-core machine was reduced by about 5% compared to GCC 8.3, and the
   3110        size of LTO object files by 7%. LTO link time improves by 11% on an
   3111        8-core machine and scales significantly better for more parallel
   3112        build environments. The serial stage of the link-time optimization
   3113        is 28% faster consuming 20% less memory. The parallel stage now
   3114        scales to up to 128 partitions rather than 32 and reduces memory
   3115        use for every worker by 30%.
   3116 
   3117    The following improvements to the gcov command-line utility have been
   3118    made.
   3119      * The gcov tool received a new option [34]--use-hotness-colors (-q)
   3120        that can provide perf-like coloring of hot functions.
   3121      * The gcov tool has changed its intermediate format to a new JSON
   3122        format.
   3123 
   3124 New Languages and Language specific improvements
   3125 
   3126    [35]OpenACC support in C, C++, and Fortran continues to be maintained
   3127    and improved. Most of the OpenACC 2.5 specification is implemented. See
   3128    the [36]implementation status section on the OpenACC wiki page for
   3129    further information.
   3130 
   3131   C family
   3132 
   3133      * Version 5.0 of the [37]OpenMP specification is now partially
   3134        supported in the C and C++ compilers. For details which features of
   3135        OpenMP 5.0 are and which are not supported in the GCC 9 release see
   3136        [38]this mail.
   3137      * New extensions:
   3138           + [39]__builtin_convertvector built-in for vector conversions
   3139             has been added.
   3140      * New warnings:
   3141           + [40]-Waddress-of-packed-member, enabled by default, warns
   3142             about an unaligned pointer value from the address of a packed
   3143             member of a struct or union.
   3144      * Enhancements to existing warnings:
   3145           + [41]-Warray-bounds detects more instances of out-of-bounds
   3146             indices.
   3147           + [42]-Wattribute-alias also detects attribute mismatches
   3148             between alias declarations and their targets, in addition to
   3149             mismatches between their types.
   3150           + [43]-Wformat-overflow and [44]-Wformat-truncation have been
   3151             extended to all formatted input/output functions (where
   3152             applicable) and enhanced to detect a subset of instances of
   3153             reading past the end of unterminated constant character arrays
   3154             in %s directives.
   3155           + [45]-Wmissing-attributes detects instances of missing function
   3156             attributes on declarations of aliases and weak references.
   3157           + [46]-Wstringop-truncation also detects a subset of instances
   3158             of reading past the end of unterminated constant character
   3159             arrays,
   3160      * If a macro is used with the wrong argument count, the C and C++
   3161        front ends now show the definition of that macro via a note.
   3162      * The spelling corrector now considers transposed letters, and the
   3163        threshold for similarity has been tightened, to avoid nonsensical
   3164        suggestions.
   3165 
   3166   C
   3167 
   3168      * There is now experimental support for -std=c2x, to select support
   3169        for the upcoming C2X revision of the ISO C standard. This standard
   3170        is in the early stages of development and the only feature
   3171        supported in GCC 9 is _Static_assert with a single argument
   3172        (support for _Static_assert with two arguments was added in C11 and
   3173        GCC 4.6). There are also new options -std=gnu2x, for C2X with GNU
   3174        extensions, and -Wc11-c2x-compat, to warn for uses of features
   3175        added in C2X (such warnings are also enabled by use of -Wpedantic
   3176        if not using -std=c2x or -std=gnu2x).
   3177      * New warnings:
   3178           + [47]-Wabsolute-value warns for calls to standard functions
   3179             that compute the absolute value of an argument when a more
   3180             appropriate standard function is available. For example,
   3181             calling abs(3.14) triggers the warning because the appropriate
   3182             function to call to compute the absolute value of a double
   3183             argument is fabs. The option also triggers warnings when the
   3184             argument in a call to such a function has an unsigned type.
   3185             This warning can be suppressed with an explicit type cast and
   3186             it is also enabled by -Wextra.
   3187 
   3188   C++
   3189 
   3190      * New warnings:
   3191           + [48]-Wdeprecated-copy, implied by -Wextra, warns about the
   3192             C++11 deprecation of implicitly declared copy constructor and
   3193             assignment operator if one of them is user-provided.
   3194             -Wdeprecated-copy-dtor also warns if the destructor is
   3195             user-provided, as specified in C++11.
   3196           + [49]-Winit-list-lifetime, on by default, warns about uses of
   3197             std::initializer_list that are likely to result in a dangling
   3198             pointer, such as returning or assigning from a temporary list.
   3199           + [50]-Wredundant-move, implied by -Wextra, warns about
   3200             redundant calls to std::move.
   3201           + [51]-Wpessimizing-move, implied by -Wall, warns when a call to
   3202             std::move prevents copy elision.
   3203           + [52]-Wclass-conversion, on by default, warns when a conversion
   3204             function will never be called due to the type it converts to.
   3205      * The C++ front end has experimental support for some of the upcoming
   3206        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   3207        including range-based for statements with initializer, default
   3208        constructible and assignable stateless lambdas, lambdas in
   3209        unevaluated contexts, language support for empty data members,
   3210        allowing pack expansion in lambda init-capture, likely and unlikely
   3211        attributes, class types in non-type template parameters, allowing
   3212        virtual function calls in constant expressions, explicit(bool),
   3213        std::is_constant_evaluated, nested inline namespaces, etc. For a
   3214        full list of new features, see [53]the C++ status page.
   3215      * The C++ front end now preserves source locations for literals,
   3216        id-expression, and mem-initializer for longer. For example it is
   3217        now able to pin-point the pertinent locations for bad
   3218        initializations such as these
   3219 $ g++ -c bad-inits.cc
   3220 bad-inits.cc:10:14: error: cannot convert 'json' to 'int' in initialization
   3221    10 |   { 3, json::object },
   3222       |        ~~~~~~^~~~~~
   3223       |              |
   3224       |              json
   3225 bad-inits.cc:14:31: error: initializer-string for array of chars is too long [-f
   3226 permissive]
   3227    14 | char buffers[3][5] = { "red", "green", "blue" };
   3228       |                               ^~~~~~~
   3229 bad-inits.cc: In constructor 'X::X()':
   3230 bad-inits.cc:17:13: error: invalid conversion from 'int' to 'void*' [-fpermissiv
   3231 e]
   3232    17 |   X() : one(42), two(42), three(42)
   3233       |             ^~
   3234       |             |
   3235       |             int
   3236 
   3237        rather than emitting the error at the final closing parenthesis or
   3238        brace.
   3239      * Error-reporting of overload resolution has been special-cased to
   3240        make the case of a single failed candidate easier to read. For
   3241        example:
   3242 $ g++ param-type-mismatch.cc
   3243 param-type-mismatch.cc: In function 'int test(int, const char*, float)':
   3244 param-type-mismatch.cc:8:32: error: cannot convert 'const char*' to 'const char*
   3245 *'
   3246     8 |   return foo::member_1 (first, second, third);
   3247       |                                ^~~~~~
   3248       |                                |
   3249       |                                const char*
   3250 param-type-mismatch.cc:3:46: note:   initializing argument 2 of 'static int foo:
   3251 :member_1(int, const char**, float)'
   3252     3 |   static int member_1 (int one, const char **two, float three);
   3253       |                                 ~~~~~~~~~~~~~^~~
   3254 
   3255        highlights both the problematic argument, and the parameter that it
   3256        can't be converted to.
   3257      * Diagnostics involving binary operators now use color to distinguish
   3258        the two operands, and label them separately (as per the example of
   3259        source labelling above).
   3260      * Diagnostics involving function calls now highlight the pertinent
   3261        parameter of the declaration in more places.
   3262 $ g++ bad-conversion.cc
   3263 bad-conversion.cc: In function 'void caller()':
   3264 bad-conversion.cc:9:14: error: cannot convert 'bool' to 'void*'
   3265     9 |   callee (0, false, 2);
   3266       |              ^~~~~
   3267       |              |
   3268       |              bool
   3269 bad-conversion.cc:3:19: note:   initializing argument 2 of 'void callee(int, voi
   3270 d*, int)'
   3271     3 | void callee (int, void *, int)
   3272       |                   ^~~~~~
   3273 
   3274      * The C++ front end's implementation of [54]-Wformat now shows
   3275        precise locations within string literals, and underlines the
   3276        pertinent arguments at bogus call sites (the C front end has been
   3277        doing this since GCC 7). For example:
   3278 $ g++ -c bad-printf.cc -Wall
   3279 bad-printf.cc: In function 'void print_field(const char*, float, long int, long
   3280 int)':
   3281 bad-printf.cc:6:17: warning: field width specifier '*' expects argument of type
   3282 'int', but argument 3 has type 'long int' [-Wformat=]
   3283     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   3284       |                ~^~~               ~~~~~~~~~~~~~~
   3285       |                 |                        |
   3286       |                 int                      long int
   3287 bad-printf.cc:6:19: warning: format '%ld' expects argument of type 'long int', b
   3288 ut argument 4 has type 'double' [-Wformat=]
   3289     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   3290       |                ~~~^                               ~~~~~
   3291       |                   |                               |
   3292       |                   long int                        double
   3293       |                %*f
   3294 
   3295      * The C++ front end has gained new fix-it hints for forgetting the
   3296        return *this; needed by various C++ operators:
   3297 $ g++ -c operator.cc
   3298 operator.cc: In member function 'boxed_ptr& boxed_ptr::operator=(const boxed_ptr
   3299 &)':
   3300 operator.cc:7:3: warning: no return statement in function returning non-void [-W
   3301 return-type]
   3302     6 |     m_ptr = other.m_ptr;
   3303   +++ |+    return *this;
   3304     7 |   }
   3305       |   ^
   3306 
   3307        for when the compiler needs a typename:
   3308 $ g++ -c template.cc
   3309 template.cc:3:3: error: need 'typename' before 'Traits::type' because 'Traits' i
   3310 s a dependent scope
   3311     3 |   Traits::type type;
   3312       |   ^~~~~~
   3313       |   typename
   3314 
   3315        when trying to use an accessor member as if it were a data member:
   3316 $ g++ -c fncall.cc
   3317 fncall.cc: In function 'void hangman(const mystring&)':
   3318 fncall.cc:12:11: error: invalid use of member function 'int mystring::get_length
   3319 () const' (did you forget the '()' ?)
   3320    12 |   if (str.get_length > 0)
   3321       |       ~~~~^~~~~~~~~~
   3322       |                     ()
   3323 
   3324        for C++11's scoped enums:
   3325 $ g++ -c enums.cc
   3326 enums.cc: In function 'void json::test(const json::value&)':
   3327 enums.cc:12:26: error: 'STRING' was not declared in this scope; did you mean 'js
   3328 on::kind::STRING'?
   3329    12 |     if (v.get_kind () == STRING)
   3330       |                          ^~~~~~
   3331       |                          json::kind::STRING
   3332 enums.cc:3:44: note: 'json::kind::STRING' declared here
   3333     3 |   enum class kind { OBJECT, ARRAY, NUMBER, STRING, TRUE, FALSE, NULL_ };
   3334       |                                            ^~~~~~
   3335 
   3336        and a tweak to integrate the suggestions about misspelled members
   3337        with that for accessors:
   3338 $ g++ -c accessor-fixit.cc
   3339 accessor-fixit.cc: In function 'int test(t*)':
   3340 accessor-fixit.cc:17:15: error: 'class t' has no member named 'ratio'; did you m
   3341 ean 'int t::m_ratio'? (accessible via 'int t::get_ratio() const')
   3342    17 |   return ptr->ratio;
   3343       |               ^~~~~
   3344       |               get_ratio()
   3345 
   3346        In addition, various diagnostics in the C++ front-end have been
   3347        streamlined by consolidating the suggestion into the initial error,
   3348        rather than emitting a follow-up note:
   3349 $ g++ typo.cc
   3350 typo.cc:5:13: error: 'BUFSIZE' was not declared in this scope; did you mean 'BUF
   3351 _SIZE'?
   3352     5 | uint8_t buf[BUFSIZE];
   3353       |             ^~~~~~~
   3354       |             BUF_SIZE
   3355 
   3356     Runtime Library (libstdc++)
   3357 
   3358      * Improved support for C++17, including:
   3359           + The C++17 implementation is no longer experimental.
   3360           + Parallel algorithms and <execution> (requires [55]Thread
   3361             Building Blocks 2018 or newer).
   3362           + <memory_resource>.
   3363           + Using the types and functions in <filesystem> does not require
   3364             linking with -lstdc++fs now.
   3365      * Improved experimental support for C++2a, including:
   3366           + Type traits std::remove_cvref, std::unwrap_reference,
   3367             std::unwrap_decay_ref, std::is_nothrow_convertible, and
   3368             std::type_identity.
   3369           + Headers <bit> and <version>.
   3370           + Uniform container erasure (std::erase_if).
   3371           + contains member of maps and sets.
   3372           + String prefix and suffix checking (starts_with, ends_with).
   3373           + Functions std::midpoint and std::lerp for interpolation.
   3374           + std::bind_front.
   3375           + std::visit<R>.
   3376           + std::assume_aligned.
   3377           + Uses-allocator construction utilities.
   3378           + std::pmr::polymorphic_allocator<std::byte>.
   3379           + Library support for char8_t type.
   3380           + Destroying delete.
   3381           + std::is_constant_evaluated() function.
   3382      * Support for opening file streams with wide character paths on
   3383        Windows
   3384      * Incomplete support for the C++17 Filesystem library and the
   3385        Filesystem TS on Windows.
   3386      * Incomplete, experimental support for the Networking TS.
   3387 
   3388   D
   3389 
   3390      * Support for the D programming language has been added to GCC,
   3391        implementing version 2.076 of the language and run-time library.
   3392 
   3393   Fortran
   3394 
   3395      * Asynchronous I/O is now fully supported. The program needs to be
   3396        linked against the pthreads library to use it, otherwise the I/O is
   3397        done synchronously. For systems which do not support POSIX
   3398        condition variables, such as AIX, all I/O is still done
   3399        synchronously.
   3400      * The BACK argument for MINLOC and MAXLOC has been implemented.
   3401      * The FINDLOC intrinsic function has been implemented.
   3402      * The IS_CONTIGUOUS intrinsic function has been implemented.
   3403      * Direct access to the real and imaginary parts of a complex variable
   3404        via c%re and c%im has been implemented.
   3405      * Type parameter inquiry via str%len and a%kind has been implemented.
   3406      * C descriptors and the ISO_Fortran_binding.h source file have been
   3407        implemented.
   3408      * The MAX and MIN intrinsics are no longer guaranteed to return any
   3409        particular value in case one of the arguments is a NaN. Note that
   3410        this conforms to the Fortran standard and to what other Fortran
   3411        compilers do. If there is a need to handle that case in some
   3412        specific way, one needs to explicitly check for NaN's before
   3413        calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
   3414        intrinsic module IEEE_ARITHMETIC.
   3415      * A new command-line option [56]-fdec-include, set also by the
   3416        [57]-fdec option, has been added to increase compatibility with
   3417        legacy code. With this option, an INCLUDE directive is also parsed
   3418        as a statement, which allows the directive to be spread across
   3419        multiple source lines with line continuations.
   3420      * A new [58]BUILTIN directive, has been added. The purpose of the
   3421        directive is to provide an API between the GCC compiler and the GNU
   3422        C Library which would define vector implementations of math
   3423        routines.
   3424 
   3425   Go
   3426 
   3427      * GCC 9 provides a complete implementation of the Go 1.12.2 user
   3428        packages.
   3429 
   3430 libgccjit
   3431 
   3432      * The libgccjit API gained a new entry point:
   3433        [59]gcc_jit_context_add_driver_option.
   3434 
   3435 New Targets and Target Specific Improvements
   3436 
   3437   AArch64 & Arm
   3438 
   3439      * Support has been added for the following processors (GCC
   3440        identifiers in parentheses):
   3441           + Arm Cortex-A76 (cortex-a76).
   3442           + Arm Cortex-A55/Cortex-A76 DynamIQ big.LITTLE
   3443             (cortex-a76.cortex-a55).
   3444           + Arm Neoverse N1 (neoverse-n1).
   3445        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   3446        options, for example: -mcpu=cortex-a76 or
   3447        -mtune=cortex-a76.cortex-a55 or as arguments to the equivalent
   3448        target attributes and pragmas.
   3449      * The Armv8.3-A complex number instructions are now supported via
   3450        intrinsics when the option -march=armv8.3-a or equivalent is
   3451        specified. For the half-precision floating-point variants of these
   3452        instructions use the architecture extension flag +fp16, e.g.
   3453        -march=armv8.3-a+fp16.
   3454        The intrinsics are defined by the ACLE specification.
   3455      * The Armv8.5-A architecture is now supported through the
   3456        -march=armv8.5-a option.
   3457      * The Armv8.5-A architecture also adds some security features that
   3458        are optional to all older architecture versions. These are now
   3459        supported and only affect the assembler.
   3460           + Speculation Barrier instruction through the -march=armv8-a+sb
   3461             option.
   3462           + Execution and Data Prediction Restriction instructions through
   3463             the -march=armv8-a+predres option.
   3464           + Speculative Store Bypass Safe instruction through the
   3465             -march=armv8-a+ssbs option. This does not require a compiler
   3466             option for Arm and thus -march=armv8-a+ssbs is an
   3467             AArch64-specific option.
   3468 
   3469       AArch64 specific
   3470 
   3471      * Support has been added for the Arm Neoverse E1 processor
   3472        (-mcpu=neoverse-e1).
   3473      * The AArch64 port now has support for stack clash protection using
   3474        the [60]-fstack-clash-protection option. The probing interval/guard
   3475        size can be set by using --param
   3476        stack-clash-protection-guard-size=12|16. The value of this
   3477        parameter must be in bytes represented as a power of two. The two
   3478        supported values for this parameter are 12 (for a 4KiB size, 2^12)
   3479        and 16 (for a 64KiB size, 2^16). The default value is 16 (64Kb) and
   3480        can be changed at configure time using the flag
   3481        --with-stack-clash-protection-guard-size=12|16.
   3482      * The option -msign-return-address= has been deprecated. This has
   3483        been replaced by the new -mbranch-protection= option. This new
   3484        option can now be used to enable the return address signing as well
   3485        as the new Branch Target Identification feature of Armv8.5-A
   3486        architecture. For more information on the arguments accepted by
   3487        this option, please refer to [61]AArch64-Options.
   3488      * The following optional extensions to Armv8.5-A architecture are now
   3489        supported and only affect the assembler.
   3490           + Random Number Generation instructions through the
   3491             -march=armv8.5-a+rng option.
   3492           + Memory Tagging Extension through the -march=armv8.5-a+memtag
   3493             option.
   3494 
   3495       Arm specific
   3496 
   3497      * Support for the deprecated Armv2 and Armv3 architectures and their
   3498        variants has been removed. Their corresponding -march values and
   3499        the -mcpu options that used these architectures have been removed.
   3500      * Support for the Armv5 and Armv5E architectures (which have no known
   3501        implementations) has been removed. Note that Armv5T, Armv5TE and
   3502        Armv5TEJ architectures remain supported.
   3503      * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
   3504        their respective -mcpu options.
   3505 
   3506   AMD GCN
   3507 
   3508      * A new back end targeting AMD GCN GPUs has been contributed to GCC.
   3509        The implementation is currently limited to compiling
   3510        single-threaded, stand-alone programs. Future versions will add
   3511        support for offloading multi-threaded kernels via OpenMP and
   3512        OpenACC. The following devices are supported (GCC identifiers in
   3513        parentheses):
   3514           + Fiji (fiji).
   3515           + Vega 10 (gfx900).
   3516 
   3517   ARC
   3518 
   3519      * LRA is now on by default for the ARC target. This can be controlled
   3520        by -mlra.
   3521      * Add support for frame code-density and branch-and-index
   3522        instructions.
   3523 
   3524   C-SKY
   3525 
   3526      * A new back end targeting C-SKY V2 processors has been contributed
   3527        to GCC.
   3528 
   3529   IA-32/x86-64
   3530 
   3531      * Support of Intel MPX (Memory Protection Extensions) has been
   3532        removed.
   3533      * New ISA extension support for Intel PTWRITE was added to GCC.
   3534        PTWRITE intrinsics are available via the -mptwrite compiler switch.
   3535      * GCC now supports the Intel CPU named Cascade Lake with AVX512
   3536        extensions through -march=cascadelake. The switch enables the
   3537        following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
   3538        AVX512DQ, AVX512VNNI.
   3539 
   3540   MIPS
   3541 
   3542      * The Loongson loongson-mmi and loongson-ext extensions have been
   3543        split from loongson3a:
   3544           + loongson-mmi contains the Loongson MMI (MultiMedia extensions
   3545             Instructions).
   3546           + loongson-ext contains the Loongson EXT (EXTensions
   3547             instructions).
   3548      * The Loongson EXT2 (EXTensions R2 instructions) are now supported.
   3549           + loongson-ext2 contains the Loongson EXT2 instructions.
   3550        Command-line options-m[no-]loongson-mmi, -m[no-]loongson-ext, and
   3551        -m[no-]loongson-ext2 enable or disable those extensions.
   3552      * Support has been added for the following processors (GCC
   3553        identifiers in parentheses):
   3554           + Loongson 3A1000 (gs464) which enables loongson-mmi,
   3555             loongson-ext by default.
   3556           + Loongson 3A2000/3A3000 (gs464e) which enables loongson-mmi,
   3557             loongson-ext, loongson-ext2 by default.
   3558           + Loongson 2K1000 (gs264e) which enables loongson-ext,
   3559             loongson-ext2, msa by default.
   3560        The GCC identifiers can be used as arguments to the -mcpu and
   3561        -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
   3562        to the equivalent target attributes and pragmas.
   3563 
   3564   OpenRISC
   3565 
   3566      * A new back end targeting OpenRISC processors has been contributed
   3567        to GCC.
   3568 
   3569   S/390, System z, IBM z Systems
   3570 
   3571      * Support for the arch13 architecture has been added. When using the
   3572        -march=arch13 option, the compiler will generate code making use of
   3573        the new instructions introduced with the vector enhancement
   3574        facility 2 and the miscellaneous instruction extension facility 2.
   3575        The -mtune=arch13 option enables arch13 specific instruction
   3576        scheduling without making use of new instructions.
   3577      * Builtins for the new vector instructions have been added and can be
   3578        enabled using the -mzvector option.
   3579      * Support for ESA architecture machines g5 and g6 is deprecated since
   3580        GCC 6.1.0 and has been removed now.
   3581      * When compiling with -march=z14 or higher GCC emits alignments hints
   3582        on the vector load/store instructions (8 or 16 byte).
   3583      * Functions now have a default alignment of 16 bytes. This helps with
   3584        branch prediction effects.
   3585      * -mfentry is now supported. As well as the mcount mechanism the
   3586        __fentry__ is called before the function prologue. However, since
   3587        just a single instruction is required to call __fentry__ the call
   3588        sequence imposes a smaller overhead than mcount (4 instructions).
   3589        The produced code is compatible only with newer glibc versions,
   3590        which provide the __fentry__ symbol and do not clobber r0 when
   3591        resolving lazily bound functions. -mfentry is only supported when
   3592        generating 64-bit code and does not work with nested C functions.
   3593      * The -mnop-mcount option can be used to emit NOP instructions
   3594        instead of an mcount or fentry call stub.
   3595      * With the -mrecord-mcount option a __mcount_loc section is generated
   3596        containing pointers to each profiling call stub. This is useful for
   3597        automatically patching in and out calls.
   3598 
   3599 Operating Systems
   3600 
   3601   Solaris
   3602 
   3603      * g++ now unconditionally enables large file support when compiling
   3604        32-bit code.
   3605      * Support for the AddressSanitizer and UndefinedBehaviorSanitizer has
   3606        been merged from LLVM. For the moment, this only works for 32-bit
   3607        code on both SPARC and x86.
   3608      * An initial port of the D runtime library has been completed on
   3609        Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
   3610        support is still work-in-progress.
   3611 
   3612   Windows
   3613 
   3614      * A C++ Microsoft ABI bitfield layout bug, [62]PR87137 has been
   3615        fixed. A non-field declaration could cause the current bitfield
   3616        allocation unit to be completed, incorrectly placing a following
   3617        bitfield into a new allocation unit. The Microsoft ABI is selected
   3618        for:
   3619           + Mingw targets
   3620           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   3621             option is specified, or __attribute__((ms_struct)) is used
   3622           + SuperH targets when the -mhitachi option is specified, or
   3623             __attribute__((renesas)) is used
   3624 
   3625 Improvements for plugin authors
   3626 
   3627      * GCC's diagnostic subsystem now has a way to logically group
   3628        together related diagnostics, auto_diagnostic_group. Such
   3629        diagnostics will be nested by the output of
   3630        [63]-fdiagnostics-format=json.
   3631      * GCC now has a set of [64]user experience guidelines for GCC, with
   3632        information and advice on implementing new diagnostics.
   3633 
   3634 Other significant improvements
   3635 
   3636      * GCC's internal "selftest" suite now runs for C++ as well as C (in
   3637        debug builds of the compiler).
   3638 
   3639 GCC 9.1
   3640 
   3641    This is the [65]list of problem reports (PRs) from GCC's bug tracking
   3642    system that are known to be fixed in the 9.1 release. This list might
   3643    not be complete (that is, it is possible that some PRs that have been
   3644    fixed are not listed here).
   3645 
   3646 GCC 9.2
   3647 
   3648    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   3649    system that are known to be fixed in the 9.2 release. This list might
   3650    not be complete (that is, it is possible that some PRs that have been
   3651    fixed are not listed here).
   3652 
   3653 GCC 9.3
   3654 
   3655    This is the [67]list of problem reports (PRs) from GCC's bug tracking
   3656    system that are known to be fixed in the 9.3 release. This list might
   3657    not be complete (that is, it is possible that some PRs that have been
   3658    fixed are not listed here).
   3659 
   3660 GCC 9.4
   3661 
   3662    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   3663    system that are known to be fixed in the 9.4 release. This list might
   3664    not be complete (that is, it is possible that some PRs that have been
   3665    fixed are not listed here).
   3666 
   3667   Target Specific Changes
   3668 
   3669     AArch64
   3670 
   3671      * The option -moutline-atomics has been added to aid deployment of
   3672        the Large System Extensions (LSE) on GNU/Linux systems built with a
   3673        baseline architecture targeting Armv8-A. When the option is
   3674        specified code is emitted to detect the presence of LSE
   3675        instructions at run time and use them for standard atomic
   3676        operations. For more information please refer to the documentation.
   3677      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   3678        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   3679        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   3680        tunes the code for the A64FX. This includes tuning the SVE code,
   3681        although by default the code is still length-agnostic and so works
   3682        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   3683        code specific to 512-bit SVE.
   3684 
   3685 GCC 9.5
   3686 
   3687    This is the [69]list of problem reports (PRs) from GCC's bug tracking
   3688    system that are known to be fixed in the 9.5 release. This list might
   3689    not be complete (that is, it is possible that some PRs that have been
   3690    fixed are not listed here).
   3691 
   3692 
   3693     For questions related to the use of GCC, please consult these web
   3694     pages and the [70]GCC manuals. If that fails, the
   3695     [71]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3696     web pages and the development of GCC are welcome on our developer
   3697     list at [72]gcc (a] gcc.gnu.org. All of [73]our lists have public
   3698     archives.
   3699 
   3700    Copyright (C) [74]Free Software Foundation, Inc. Verbatim copying and
   3701    distribution of this entire article is permitted in any medium,
   3702    provided this notice is preserved.
   3703 
   3704    These pages are [75]maintained by the GCC team. Last modified
   3705    2024-05-09.
   3706 
   3707 References
   3708 
   3709    1. https://gcc.gnu.org/gcc-9/porting_to.html
   3710    2. https://gcc.gnu.org/onlinedocs/index.html#current
   3711    3. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
   3712    4. https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html
   3713    5. https://gcc.gnu.org/ml/gcc/2019-04/msg00023.html
   3714    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
   3715    7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
   3716    8. https://gcc.gnu.org/PR90361
   3717    9. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
   3718   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
   3719   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
   3720   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
   3721   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   3722   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
   3723   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
   3724   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
   3725   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
   3726   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
   3727   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
   3728   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
   3729   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
   3730   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
   3731   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
   3732   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
   3733   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
   3734   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
   3735   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
   3736   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
   3737   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
   3738   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
   3739   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
   3740   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
   3741   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
   3742   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
   3743   35. https://www.openacc.org/
   3744   36. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9
   3745   37. https://www.openmp.org/specifications/
   3746   38. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
   3747   39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
   3748   40. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
   3749   41. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
   3750   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
   3751   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   3752   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   3753   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   3754   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   3755   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
   3756   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
   3757   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
   3758   50. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   3759   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   3760   52. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
   3761   53. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   3762   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
   3763   55. https://github.com/oneapi-src/oneTBB
   3764   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
   3765   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
   3766   58. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
   3767   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
   3768   60. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
   3769   61. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
   3770   62. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   3771   63. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   3772   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
   3773   65. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
   3774   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
   3775   67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
   3776   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
   3777   69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
   3778   70. https://gcc.gnu.org/onlinedocs/
   3779   71. mailto:gcc-help (a] gcc.gnu.org
   3780   72. mailto:gcc (a] gcc.gnu.org
   3781   73. https://gcc.gnu.org/lists.html
   3782   74. https://www.fsf.org/
   3783   75. https://gcc.gnu.org/about.html
   3784 ======================================================================
   3785 http://gcc.gnu.org/gcc-8/index.html
   3786                               GCC 8 Release Series
   3787 
   3788    (This release series is no longer supported.)
   3789 
   3790    May 14, 2021
   3791 
   3792    The [1]GNU project and the GCC developers are pleased to announce the
   3793    release of GCC 8.5.
   3794 
   3795    This release is a bug-fix release, containing fixes for regressions in
   3796    GCC 8.4 relative to previous releases of GCC.
   3797 
   3798 Release History
   3799 
   3800    GCC 8.5
   3801           May 14, 2021 ([2]changes, [3]documentation)
   3802 
   3803    GCC 8.4
   3804           Mar 4, 2020 ([4]changes, [5]documentation)
   3805 
   3806    GCC 8.3
   3807           Feb 22, 2019 ([6]changes, [7]documentation)
   3808 
   3809    GCC 8.2
   3810           Jul 26, 2018 ([8]changes, [9]documentation)
   3811 
   3812    GCC 8.1
   3813           May 2, 2018 ([10]changes, [11]documentation)
   3814 
   3815 References and Acknowledgements
   3816 
   3817    GCC used to stand for the GNU C Compiler, but since the compiler
   3818    supports several other languages aside from C, it now stands for the
   3819    GNU Compiler Collection.
   3820 
   3821    A list of [12]successful builds is updated as new information becomes
   3822    available.
   3823 
   3824    The GCC developers would like to thank the numerous people that have
   3825    contributed new features, improvements, bug fixes, and other changes as
   3826    well as test results to GCC. This [13]amazing group of volunteers is
   3827    what makes GCC successful.
   3828 
   3829    For additional information about GCC please refer to the [14]GCC
   3830    project web site or contact the [15]GCC development mailing list.
   3831 
   3832    To obtain GCC please use [16]our mirror sites or [17]our version
   3833    control system.
   3834 
   3835 
   3836     For questions related to the use of GCC, please consult these web
   3837     pages and the [18]GCC manuals. If that fails, the
   3838     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3839     web pages and the development of GCC are welcome on our developer
   3840     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   3841     archives.
   3842 
   3843    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   3844    distribution of this entire article is permitted in any medium,
   3845    provided this notice is preserved.
   3846 
   3847    These pages are [23]maintained by the GCC team. Last modified
   3848    2024-05-30.
   3849 
   3850 References
   3851 
   3852    1. http://www.gnu.org/
   3853    2. https://gcc.gnu.org/gcc-8/changes.html
   3854    3. https://gcc.gnu.org/onlinedocs/8.5.0/
   3855    4. https://gcc.gnu.org/gcc-8/changes.html
   3856    5. https://gcc.gnu.org/onlinedocs/8.4.0/
   3857    6. https://gcc.gnu.org/gcc-8/changes.html
   3858    7. https://gcc.gnu.org/onlinedocs/8.3.0/
   3859    8. https://gcc.gnu.org/gcc-8/changes.html
   3860    9. https://gcc.gnu.org/onlinedocs/8.2.0/
   3861   10. https://gcc.gnu.org/gcc-8/changes.html
   3862   11. https://gcc.gnu.org/onlinedocs/8.1.0/
   3863   12. https://gcc.gnu.org/gcc-8/buildstat.html
   3864   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
   3865   14. https://gcc.gnu.org/index.html
   3866   15. mailto:gcc (a] gcc.gnu.org
   3867   16. https://gcc.gnu.org/mirrors.html
   3868   17. https://gcc.gnu.org/git.html
   3869   18. https://gcc.gnu.org/onlinedocs/
   3870   19. mailto:gcc-help (a] gcc.gnu.org
   3871   20. mailto:gcc (a] gcc.gnu.org
   3872   21. https://gcc.gnu.org/lists.html
   3873   22. https://www.fsf.org/
   3874   23. https://gcc.gnu.org/about.html
   3875 ======================================================================
   3876 http://gcc.gnu.org/gcc-8/changes.html
   3877                               GCC 8 Release Series
   3878                         Changes, New Features, and Fixes
   3879 
   3880    This page is a "brief" summary of some of the huge number of
   3881    improvements in GCC 8. You may also want to check out our [1]Porting to
   3882    GCC 8 page and the [2]full GCC documentation.
   3883 
   3884 Caveats
   3885 
   3886      * Support for the obsolete SDB/coff debug info format has been
   3887        removed. The option -gcoff no longer does anything.
   3888      * The Cilk+ extensions to the C and C++ languages have been removed.
   3889      * The MPX extensions to the C and C++ languages have been deprecated
   3890        and will be removed in a future release.
   3891      * The extension allowing arithmetic on std::atomic<void*> and types
   3892        like std::atomic<R(*)()> has been deprecated.
   3893      * The non-standard C++0x std::copy_exception function was removed.
   3894        std::make_exception_ptr should be used instead.
   3895      * Support for the powerpc*-*-*spe* target ports which have been
   3896        recently unmaintained and untested in GCC has been declared
   3897        obsolete in GCC 8 as [3]announced. Unless there is activity to
   3898        revive them, the next release of GCC will have their sources
   3899        permanently removed.
   3900 
   3901 General Improvements
   3902 
   3903      * Inter-procedural optimization improvements:
   3904           + Reworked run-time estimation metrics leading to more realistic
   3905             guesses driving inliner and cloning heuristics.
   3906           + The ipa-pure-const pass is extended to propagate the malloc
   3907             attribute, and the corresponding warning option
   3908             -Wsuggest-attribute=malloc emits a diagnostic for functions
   3909             which can be annotated with the malloc attribute.
   3910      * Profile driven optimization improvements:
   3911           + New infrastructure for representing profiles (both statically
   3912             guessed and profile feedback) which allows propagation of
   3913             additional information about the reliability of the profile.
   3914           + A number of improvements in the profile updating code solving
   3915             problems found by new verification code.
   3916           + Static detection of code which is not executed in a valid run
   3917             of the program. This includes paths which trigger undefined
   3918             behavior as well as calls to functions declared with the cold
   3919             attribute. Newly the noreturn attribute does not imply all
   3920             effects of cold to differentiate between exit (which is
   3921             noreturn) and abort (which is in addition not executed in
   3922             valid runs).
   3923           + -freorder-blocks-and-partition, a pass splitting function
   3924             bodies into hot and cold regions, is now enabled by default at
   3925             -O2 and higher for x86 and x86-64.
   3926      * Link-time optimization improvements:
   3927           + We have significantly improved debug information on ELF
   3928             targets using DWARF by properly preserving language-specific
   3929             information. This allows for example the libstdc++
   3930             pretty-printers to work with LTO optimized executables.
   3931      * A new option -fcf-protection=[full|branch|return|none] is
   3932        introduced to perform code instrumentation to increase program
   3933        security by checking that target addresses of control-flow transfer
   3934        instructions (such as indirect function call, function return,
   3935        indirect jump) are valid. Currently the instrumentation is
   3936        supported on x86 GNU/Linux targets only. See the user guide for
   3937        further information about the option syntax and section "New
   3938        Targets and Target Specific Improvements" for IA-32/x86-64 for more
   3939        details.
   3940      * The -gcolumn-info option is now enabled by default. It includes
   3941        column information in addition to just filenames and line numbers
   3942        in DWARF debugging information.
   3943      * The polyhedral-based loop nest optimization pass
   3944        -floop-nest-optimize has been overhauled. It's still considered
   3945        experimental and may not result in any runtime improvements.
   3946      * Two new classical loop nest optimization passes have been added.
   3947        -floop-unroll-and-jam performs outer loop unrolling and fusing of
   3948        the inner loop copies. -floop-interchange exchanges loops in a loop
   3949        nest to improve data locality. Both passes are enabled by default
   3950        at -O3 and above.
   3951      * The classic loop nest optimization pass -ftree-loop-distribution
   3952        has been improved and enabled by default at -O3 and above. It
   3953        supports loop nest distribution in some restricted scenarios; it
   3954        also supports cancellable innermost loop distribution with loop
   3955        versioning under run-time alias checks.
   3956      * The new option -fstack-clash-protection causes the compiler to
   3957        insert probes whenever stack space is allocated statically or
   3958        dynamically to reliably detect stack overflows and thus mitigate
   3959        the attack vector that relies on jumping over a stack guard page as
   3960        provided by the operating system.
   3961      * A new pragma GCC unroll has been implemented in the C family of
   3962        languages, as well as Fortran and Ada, so as to make it possible
   3963        for the user to have a finer-grained control over the loop
   3964        unrolling optimization.
   3965      * GCC has been enhanced to detect more instances of meaningless or
   3966        mutually exclusive attribute specifications and handle such
   3967        conflicts more consistently. Mutually exclusive attribute
   3968        specifications are ignored with a warning regardless of whether
   3969        they appear on the same declaration or on distinct declarations of
   3970        the same entity. For example, because the noreturn attribute on the
   3971        second declaration below is mutually exclusive with the malloc
   3972        attribute on the first, it is ignored and a warning is issued.
   3973 >
   3974       void* __attribute__ ((malloc)) f (unsigned);
   3975       void* __attribute__ ((noreturn)) f (unsigned);
   3976 
   3977       warning: ignoring attribute 'noreturn' because it conflicts with attribute
   3978  'malloc' [-Wattributes]
   3979      * The gcov tool can distinguish functions that begin on a same line
   3980        in a source file. This can be a different template instantiation or
   3981        a class constructor:
   3982 
   3983 File 'ins.C'
   3984 Lines executed:100.00% of 8
   3985 Creating 'ins.C.gcov'
   3986 
   3987         -:    0:Source:ins.C
   3988         -:    0:Graph:ins.gcno
   3989         -:    0:Data:ins.gcda
   3990         -:    0:Runs:1
   3991         -:    0:Programs:1
   3992         -:    1:template<class T>
   3993         -:    2:class Foo
   3994         -:    3:{
   3995         -:    4: public:
   3996         2:    5:   Foo(): b (1000) {}
   3997 ------------------
   3998 Foo<char>::Foo():
   3999         1:    5:   Foo(): b (1000) {}
   4000 ------------------
   4001 Foo<int>::Foo():
   4002         1:    5:   Foo(): b (1000) {}
   4003 ------------------
   4004         2:    6:   void inc () { b++; }
   4005 ------------------
   4006 Foo<char>::inc():
   4007         1:    6:   void inc () { b++; }
   4008 ------------------
   4009 Foo<int>::inc():
   4010         1:    6:   void inc () { b++; }
   4011 ------------------
   4012         -:    7:
   4013         -:    8:  private:
   4014         -:    9:   int b;
   4015         -:   10:};
   4016         -:   11:
   4017         1:   12:int main(int argc, char **argv)
   4018         -:   13:{
   4019         1:   14:  Foo<int> a;
   4020         1:   15:  Foo<char> b;
   4021         -:   16:
   4022         1:   17:  a.inc ();
   4023         1:   18:  b.inc ();
   4024         1:   19:}
   4025 
   4026      * The gcov tool has more accurate numbers for execution of lines in a
   4027        source file.
   4028      * The gcov tool can use TERM colors to provide more readable output.
   4029      * AddressSanitizer gained a new pair of sanitization options,
   4030        -fsanitize=pointer-compare and -fsanitize=pointer-subtract, which
   4031        warn about subtraction (or comparison) of pointers that point to a
   4032        different memory object:
   4033 
   4034 int
   4035 main ()
   4036 {
   4037   /* Heap allocated memory.  */
   4038   char *heap1 = (char *)__builtin_malloc (42);
   4039   char *heap2 = (char *)__builtin_malloc (42);
   4040   if (heap1 > heap2)
   4041       return 1;
   4042 
   4043   return 0;
   4044 }
   4045 
   4046 ==17465==ERROR: AddressSanitizer: invalid-pointer-pair: 0x604000000010 0x6040000
   4047 00050
   4048     #0 0x40070f in main /tmp/pointer-compare.c:7
   4049     #1 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4050     #2 0x400629 in _start (/tmp/a.out+0x400629)
   4051 
   4052 0x604000000010 is located 0 bytes inside of 42-byte region [0x604000000010,0x604
   4053 00000003a)
   4054 allocated by thread T0 here:
   4055     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   4056 _malloc_linux.cc:86
   4057     #1 0x4006ea in main /tmp/pointer-compare.c:5
   4058     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4059 
   4060 0x604000000050 is located 0 bytes inside of 42-byte region [0x604000000050,0x604
   4061 00000007a)
   4062 allocated by thread T0 here:
   4063     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   4064 _malloc_linux.cc:86
   4065     #1 0x4006f8 in main /tmp/pointer-compare.c:6
   4066     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   4067 
   4068 SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-compare.c:7 in main
   4069 
   4070      * The store merging pass has been enhanced to handle bit-fields and
   4071        not just constant stores, but also data copying from adjacent
   4072        memory locations into other adjacent memory locations, including
   4073        bitwise logical operations on the data. The pass can also handle
   4074        byte swapping into memory locations.
   4075      * The undefined behavior sanitizer gained two new options included in
   4076        -fsanitize=undefined: -fsanitize=builtin which diagnoses at run
   4077        time invalid arguments to __builtin_clz or __builtin_ctz prefixed
   4078        builtins, and -fsanitize=pointer-overflow which performs cheap run
   4079        time tests for pointer wrapping.
   4080      * A new attribute no_sanitize can be applied to functions to instruct
   4081        the compiler not to do sanitization of the options provided as
   4082        arguments to the attribute. Acceptable values for no_sanitize match
   4083        those acceptable by the -fsanitize command-line option.
   4084 
   4085 void __attribute__ ((no_sanitize ("alignment", "object-size")))
   4086 f () { /* Do something. */; }
   4087 
   4088 New Languages and Language specific improvements
   4089 
   4090   Ada
   4091 
   4092      * For its internal exception handling used on the host for error
   4093        recovery in the front-end, the compiler now relies on the native
   4094        exception handling mechanism of the host platform, which should be
   4095        more efficient than the former mechanism.
   4096 
   4097   BRIG (HSAIL)
   4098 
   4099    In this release cycle, the focus for the BRIGFE was on stabilization
   4100    and performance improvements. Also a couple of completely new features
   4101    were added.
   4102      * Improved support for function and module scope group segment
   4103        variables. PRM specs define function and module scope group segment
   4104        variables as an experimental feature. However, PRM test suite uses
   4105        them. Now group segment is handled by separate book keeping of
   4106        module scope and function (kernel) offsets. Each function has a
   4107        "frame" in the group segment offset to which is given as an
   4108        argument, similar to traditional call stack frame handling.
   4109      * Reduce the number of type conversions due to the untyped HSAIL
   4110        registers. Instead of always representing the HSAIL's untyped
   4111        registers as unsigned int, the gccbrig now pre-analyzes the BRIG
   4112        code and builds the register variables as a type used the most when
   4113        storing or reading data to/from each register. This reduces the
   4114        number of total casts which cannot be always optimized away.
   4115      * Support for BRIG_KIND_NONE directives.
   4116      * Made -O3 the default optimization level for BRIGFE.
   4117      * Fixed illegal addresses generated from address expressions which
   4118        refer only to offset 0.
   4119      * Fixed a bug with reg+offset addressing on 32b segments. In 'large'
   4120        mode, the offset is treated as 32-bit unless it's in global,
   4121        read-only or kernarg address space.
   4122      * Fixed a crash caused sometimes by calls with more than 4 arguments.
   4123      * Fixed a mis-execution issue with kernels that have both unexpanded
   4124        ID functions and calls to subfunctions.
   4125      * Treat HSAIL barrier builtins as setjmp/longjump style functions to
   4126        avoid illegal optimizations.
   4127      * Ensure per WI copies of private variables are aligned correctly.
   4128      * libhsail-rt: Assume the host runtime allocates the work group
   4129        memory.
   4130 
   4131   C family
   4132 
   4133      * New command-line options have been added for the C and C++
   4134        compilers:
   4135           + [4]-Wmultistatement-macros warns about unsafe macros expanding
   4136             to multiple statements used as a body of a statement such as
   4137             if, else, while, switch, or for.
   4138           + [5]-Wstringop-truncation warns for calls to bounded string
   4139             manipulation functions such as strncat, strncpy, and stpncpy
   4140             that might either truncate the copied string or leave the
   4141             destination unchanged. For example, the following call to
   4142             strncat is diagnosed because it appends just three of the four
   4143             characters from the source string.
   4144 void append (char *buf, size_t bufsize)
   4145 {
   4146     strncat (buf, ".txt", 3);
   4147 }
   4148 warning: 'strncat' output truncated copying 3 bytes from a string of length 4 [-
   4149 Wstringop-truncation]
   4150             Similarly, in the following example, the call to strncpy
   4151             specifies the size of the destination buffer as the bound. If
   4152             the length of the source string is equal to or greater than
   4153             this size the result of the copy will not be NUL-terminated.
   4154             Therefore, the call is also diagnosed. To avoid the warning,
   4155             specify sizeof buf - 1 as the bound and set the last element
   4156             of the buffer to NUL.
   4157 void copy (const char *s)
   4158 {
   4159     char buf[80];
   4160     strncpy (buf, s, sizeof buf);
   4161     
   4162 }
   4163 warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
   4164 tion]
   4165             The -Wstringop-truncation option is included in -Wall.
   4166             Note that due to GCC bug [6]82944, defining strncat, strncpy,
   4167             or stpncpy as a macro in a system header as some
   4168             implementations do, suppresses the warning.
   4169           + [7]-Wif-not-aligned controls warnings issued in response to
   4170             invalid uses of objects declared with attribute
   4171             [8]warn_if_not_aligned.
   4172             The -Wif-not-aligned option is included in -Wall.
   4173           + [9]-Wmissing-attributes warns when a declaration of a function
   4174             is missing one or more attributes that a related function is
   4175             declared with and whose absence may adversely affect the
   4176             correctness or efficiency of generated code. For example, in
   4177             C++, the warning is issued when an explicit specialization of
   4178             a primary template declared with attribute alloc_align,
   4179             alloc_size, assume_aligned, format, format_arg, malloc, or
   4180             nonnull is declared without it. Attributes deprecated, error,
   4181             and warning suppress the warning.
   4182             The -Wmissing-attributes option is included in -Wall.
   4183           + [10]-Wpacked-not-aligned warns when a struct or union declared
   4184             with attribute packed defines a member with an explicitly
   4185             specified alignment greater than 1. Such a member will wind up
   4186             under-aligned. For example, a warning will be issued for the
   4187             definition of struct A in the following:
   4188 struct __attribute__ ((aligned (8)))
   4189 S8 { char a[8]; };
   4190 
   4191 struct __attribute__ ((packed)) A
   4192 {
   4193     struct S8 s8;
   4194 };
   4195 warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-not-aligned]
   4196             The -Wpacked-not-aligned option is included in -Wall.
   4197           + -Wcast-function-type warns when a function pointer is cast to
   4198             an incompatible function pointer. This warning is enabled by
   4199             -Wextra.
   4200           + -Wsizeof-pointer-div warns for suspicious divisions of the
   4201             size of a pointer by the size of the elements it points to,
   4202             which looks like the usual way to compute the array size but
   4203             won't work out correctly with pointers. This warning is
   4204             enabled by -Wall.
   4205           + -Wcast-align=strict warns whenever a pointer is cast such that
   4206             the required alignment of the target is increased. For
   4207             example, warn if a char * is cast to an int * regardless of
   4208             the target machine.
   4209           + -fprofile-abs-path creates absolute path names in the .gcno
   4210             files. This allows gcov to find the correct sources in
   4211             projects where compilations occur with different working
   4212             directories.
   4213      * -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and
   4214        signed integer overflow is now undefined by default at all
   4215        optimization levels. Using -fsanitize=signed-integer-overflow is
   4216        now the preferred way to audit code, -Wstrict-overflow is
   4217        deprecated.
   4218      * The [11]-Warray-bounds option has been improved to detect more
   4219        instances of out-of-bounds array indices and pointer offsets. For
   4220        example, negative or excessive indices into flexible array members
   4221        and string literals are detected.
   4222      * The [12]-Wrestrict option introduced in GCC 7 has been enhanced to
   4223        detect many more instances of overlapping accesses to objects via
   4224        restrict-qualified arguments to standard memory and string
   4225        manipulation functions such as memcpy and strcpy. For example, the
   4226        strcpy call in the function below attempts to truncate the string
   4227        by replacing its initial characters with the last four. However,
   4228        because the function writes the terminating NUL into a[4], the
   4229        copies overlap and the call is diagnosed.
   4230 void f (void)
   4231 {
   4232     char a[] = "abcd1234";
   4233     strcpy (a, a + 4);
   4234     
   4235 }
   4236 warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   4237  4 [-Wrestrict]
   4238        The -Wrestrict option is included in -Wall.
   4239      * Several optimizer enhancements have enabled improvements to the
   4240        [13]-Wformat-overflow and [14]-Wformat-truncation options. The
   4241        warnings detect more instances of buffer overflow and truncation
   4242        than in GCC 7 and are better at avoiding certain kinds of false
   4243        positives.
   4244      * When reporting mismatching argument types at a function call, the C
   4245        and C++ compilers now underline both the argument and the pertinent
   4246        parameter in the declaration.
   4247 $ gcc arg-type-mismatch.cc
   4248 arg-type-mismatch.cc: In function 'int caller(int, int, float)':
   4249 arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' to 'const char*'
   4250  [-fpermissive]
   4251    return callee(first, second, third);
   4252                         ^~~~~~
   4253 arg-type-mismatch.cc:1:40: note:   initializing argument 2 of 'int callee(int, c
   4254 onst char*, float)'
   4255  extern int callee(int one, const char *two, float three);
   4256                             ~~~~~~~~~~~~^~~
   4257 
   4258      * When reporting on unrecognized identifiers, the C and C++ compilers
   4259        will now emit fix-it hints suggesting #include directives for
   4260        various headers in the C and C++ standard libraries.
   4261 $ gcc incomplete.c
   4262 incomplete.c: In function 'test':
   4263 incomplete.c:3:10: error: 'NULL' undeclared (first use in this function)
   4264    return NULL;
   4265           ^~~~
   4266 incomplete.c:3:10: note: 'NULL' is defined in header '<stddef.h>'; did you forge
   4267 t to '#include <stddef.h>'?
   4268 incomplete.c:1:1:
   4269 +#include <stddef.h>
   4270  const char *test(void)
   4271 incomplete.c:3:10:
   4272    return NULL;
   4273           ^~~~
   4274 incomplete.c:3:10: note: each undeclared identifier is reported only once for ea
   4275 ch function it appears in
   4276 
   4277 $ gcc incomplete.cc
   4278 incomplete.cc:1:6: error: 'string' in namespace 'std' does not name a type
   4279  std::string s("hello world");
   4280       ^~~~~~
   4281 incomplete.cc:1:1: note: 'std::string' is defined in header '<string>'; did you
   4282 forget to '#include <string>'?
   4283 +#include <string>
   4284  std::string s("hello world");
   4285  ^~~
   4286 
   4287      * The C and C++ compilers now use more intuitive locations when
   4288        reporting on missing semicolons, and offer fix-it hints:
   4289 $ gcc t.c
   4290 t.c: In function 'test':
   4291 t.c:3:12: error: expected ';' before '}' token
   4292    return 42
   4293             ^
   4294             ;
   4295  }
   4296  ~
   4297 
   4298      * When reporting on missing '}' and ')' tokens, the C and C++
   4299        compilers will now highlight the corresponding '{' and '(' token,
   4300        issuing a 'note' if it's on a separate line:
   4301 $ gcc unclosed.c
   4302 unclosed.c: In function 'log_when_out_of_range':
   4303 unclosed.c:12:50: error: expected ')' before '{' token
   4304        && (temperature < MIN || temperature > MAX) {
   4305                                                   ^~
   4306                                                   )
   4307 unclosed.c:11:6: note: to match this '('
   4308    if (logging_enabled && check_range ()
   4309       ^
   4310 
   4311        or highlighting it directly if it's on the same line:
   4312 $ gcc unclosed-2.c
   4313 unclosed-2.c: In function 'test':
   4314 unclosed-2.c:8:45: error: expected ')' before '{' token
   4315    if (temperature < MIN || temperature > MAX {
   4316       ~                                      ^~
   4317                                              )
   4318 
   4319        They will also emit fix-it hints.
   4320 
   4321   C++
   4322 
   4323      * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
   4324        convention, which changes the ABI for some uncommon code:
   4325           + Passing an empty class as an argument now takes up no space on
   4326             x86_64, as required by the psABI.
   4327           + Passing or returning a class with only deleted copy and move
   4328             constructors now uses the same calling convention as a class
   4329             with a non-trivial copy or move constructor. This only affects
   4330             C++17 mode, as in earlier standards passing or returning such
   4331             a class was impossible.
   4332           + WARNING: In GCC 8.1 the second change mistakenly also affects
   4333             classes with a deleted copy constructor and defaulted trivial
   4334             move constructor (bug [15]c++/86094). This issue is fixed in
   4335             GCC 8.2 (-fabi-version=13).
   4336        You can test whether these changes affect your code with -Wabi=11
   4337        (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
   4338        problematic for your project, the GCC 7 ABI can be selected with
   4339        -fabi-version=11.
   4340      * The value of the C++11 alignof operator has been corrected to match
   4341        C _Alignof (minimum alignment) rather than GNU __alignof__
   4342        (preferred alignment); on ia32 targets this means that
   4343        alignof(double) is now 4 rather than 8. Code that wants the
   4344        preferred alignment should use __alignof__ instead.
   4345      * New command-line options have been added for the C++ compiler to
   4346        control warnings:
   4347           + [16]-Wclass-memaccess warns when objects of non-trivial class
   4348             types are manipulated in potentially unsafe ways by raw memory
   4349             functions such as memcpy, or realloc. The warning helps detect
   4350             calls that bypass user-defined constructors or copy-assignment
   4351             operators, corrupt virtual table pointers, data members of
   4352             const-qualified types or references, or member pointers. The
   4353             warning also detects calls that would bypass access controls
   4354             to data members. For example, a call such as:
   4355         memcpy (&std::cout, &std::cerr, sizeof std::cout);
   4356             results in
   4357         warning: 'void* memcpy(void*, const void*, long unsigned int)' writing t
   4358 o an object of type 'std::ostream' {aka 'class std::basic_ostream<char>'} with n
   4359 o trivial copy-assignment [-Wclass-memaccess]
   4360             The -Wclass-memaccess option is included in -Wall.
   4361      * The C++ front end has experimental support for some of the upcoming
   4362        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   4363        including designated initializers, default member initializers for
   4364        bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
   4365        lambda [=, this] captures, etc. For a full list of new features,
   4366        see [17]the C++ status page.
   4367      * When reporting on attempts to access private fields of a class or
   4368        struct, the C++ compiler will now offer fix-it hints showing how to
   4369        use an accessor function to get at the field in question, if one
   4370        exists.
   4371 $ gcc accessor.cc
   4372 accessor.cc: In function 'void test(foo*)':
   4373 accessor.cc:12:12: error: 'double foo::m_ratio' is private within this context
   4374    if (ptr->m_ratio >= 0.5)
   4375             ^~~~~~~
   4376 accessor.cc:7:10: note: declared private here
   4377    double m_ratio;
   4378           ^~~~~~~
   4379 accessor.cc:12:12: note: field 'double foo::m_ratio' can be accessed via 'double
   4380  foo::get_ratio() const'
   4381    if (ptr->m_ratio >= 0.5)
   4382             ^~~~~~~
   4383             get_ratio()
   4384 
   4385      * The C++ compiler can now give you a hint if you use a macro before
   4386        it was defined (e.g. if you mess up the order of your #include
   4387        directives):
   4388 $ gcc ordering.cc
   4389 ordering.cc:2:24: error: expected ';' at end of member declaration
   4390    virtual void clone() const OVERRIDE { }
   4391                         ^~~~~
   4392                              ;
   4393 ordering.cc:2:30: error: 'OVERRIDE' does not name a type
   4394    virtual void clone() const OVERRIDE { }
   4395                               ^~~~~~~~
   4396 ordering.cc:2:30: note: the macro 'OVERRIDE' had not yet been defined
   4397 In file included from ordering.cc:5:
   4398 c++11-compat.h:2: note: it was later defined here
   4399  #define OVERRIDE override
   4400 
   4401 
   4402      * The -Wold-style-cast diagnostic can now emit fix-it hints telling
   4403        you when you can use a static_cast, const_cast, or
   4404        reinterpret_cast.
   4405 $ gcc -c old-style-cast-fixits.cc -Wold-style-cast
   4406 old-style-cast-fixits.cc: In function 'void test(void*)':
   4407 old-style-cast-fixits.cc:5:19: warning: use of old-style cast to 'struct foo*' [
   4408 -Wold-style-cast]
   4409    foo *f = (foo *)ptr;
   4410                    ^~~
   4411             ----------
   4412             static_cast<foo *> (ptr)
   4413 
   4414      * When reporting on problems within extern "C" linkage
   4415        specifications, the C++ compiler will now display the location of
   4416        the start of the extern "C".
   4417 $ gcc -c extern-c.cc
   4418 extern-c.cc:3:1: error: template with C linkage
   4419  template <typename T> void test (void);
   4420  ^~~~~~~~
   4421 In file included from extern-c.cc:1:
   4422 unclosed.h:1:1: note: 'extern "C"' linkage started here
   4423  extern "C" {
   4424  ^~~~~~~~~~
   4425 extern-c.cc:3:39: error: expected '}' at end of input
   4426  template <typename T> void test (void);
   4427                                        ^
   4428 In file included from extern-c.cc:1:
   4429 unclosed.h:1:12: note: to match this '{'
   4430  extern "C" {
   4431             ^
   4432 
   4433      * When reporting on mismatching template types, the C++ compiler will
   4434        now use color to highlight the mismatching parts of the template,
   4435        and will elide the parameters that are common between two
   4436        mismatching templates, printing [...] instead:
   4437 $ gcc templates.cc
   4438 templates.cc: In function 'void test()':
   4439 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   4440 e>' to 'vector<int>'
   4441    fn_1(vector<double> ());
   4442         ^~~~~~~~~~~~~~~~~
   4443 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<[...]
   4444 ,double>' to 'map<[...],int>'
   4445    fn_2(map<int, double>());
   4446         ^~~~~~~~~~~~~~~~~~
   4447 
   4448        Those [...] elided parameters can be seen using -fno-elide-type:
   4449 $ gcc templates.cc -fno-elide-type
   4450 templates.cc: In function 'void test()':
   4451 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   4452 e>' to 'vector<int>'
   4453    fn_1(vector<double> ());
   4454         ^~~~~~~~~~~~~~~~~
   4455 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<int,d
   4456 ouble>' to 'map<int,int>'
   4457    fn_2(map<int, double>());
   4458         ^~~~~~~~~~~~~~~~~~
   4459 
   4460        The C++ compiler has also gained an option
   4461        -fdiagnostics-show-template-tree which visualizes such mismatching
   4462        templates in a hierarchical form:
   4463 $ gcc templates-2.cc -fdiagnostics-show-template-tree
   4464 templates-2.cc: In function 'void test()':
   4465 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   4466 ble>' to 'vector<int>'
   4467   vector<
   4468     [double != int]>
   4469    fn_1(vector<double> ());
   4470         ^~~~~~~~~~~~~~~~~
   4471 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   4472 ctor<double> >()' from 'map<map<[...],vector<double>>,vector<double>>' to 'map<m
   4473 ap<[...],vector<float>>,vector<float>>'
   4474   map<
   4475     map<
   4476       [...],
   4477       vector<
   4478         [double != float]>>,
   4479     vector<
   4480       [double != float]>>
   4481    fn_2(map<map<int, vector<double>>, vector<double>> ());
   4482         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   4483 
   4484        which again works with -fno-elide-type:
   4485 $ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
   4486 templates-2.cc: In function 'void test()':
   4487 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   4488 ble>' to 'vector<int>'
   4489   vector<
   4490     [double != int]>
   4491    fn_1(vector<double> ());
   4492         ^~~~~~~~~~~~~~~~~
   4493 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   4494 ctor<double> >()' from 'map<map<int,vector<double>>,vector<double>>' to 'map<map
   4495 <int,vector<float>>,vector<float>>'
   4496   map<
   4497     map<
   4498       int,
   4499       vector<
   4500         [double != float]>>,
   4501     vector<
   4502       [double != float]>>
   4503    fn_2(map<map<int, vector<double>>, vector<double>> ());
   4504         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   4505 
   4506      * Flowing off the end of a non-void function is considered
   4507        unreachable and may be subject to optimization on that basis. As a
   4508        result of this change, -Wreturn-type warnings are enabled by
   4509        default for C++.
   4510 
   4511     Runtime Library (libstdc++)
   4512 
   4513      * Improved experimental support for C++17, including the following
   4514        features:
   4515           + Deduction guides to support class template argument deduction.
   4516           + std::filesystem implementation.
   4517           + std::char_traits<char> and std::char_traits<wchar_t> are
   4518             usable in constant expressions.
   4519           + std::to_chars and std::from_chars (for integers only, not for
   4520             floating point types).
   4521      * Experimental support for C++2a: std::to_address (thanks to Glen
   4522        Fernandes) and std::endian.
   4523      * On GNU/Linux, std::random_device::entropy() accesses the kernel's
   4524        entropy count for the random device, if known (thanks to Xi
   4525        Ruoyao).
   4526      * Support for std::experimental::source_location.
   4527      * AddressSanitizer integration for std::vector, detecting
   4528        out-of-range accesses to the unused capacity of a vector.
   4529      * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
   4530        Mathematical Special Functions.
   4531 
   4532   Fortran
   4533 
   4534      * The main version of libfortran has been changed to 5.
   4535      * Parameterized derived types, a major feature of Fortran 2003, have
   4536        been implemented.
   4537      * Partial support is provided for Fortran 2018 teams, which are
   4538        hierarchical subsets of images that execute independently of other
   4539        image subsets.
   4540      * The maximum rank for arrays has been increased to 15, conforming to
   4541        the Fortran 2008 standard.
   4542      * Transformational intrinsics are now fully supported in
   4543        initialization expressions.
   4544      * New flag -fc-prototypes to write C prototypes for BIND(C)
   4545        procedures and variables.
   4546      * If -fmax-stack-var-size is honored if given together with -Ofast,
   4547        -fstack-arrays is no longer set in that case.
   4548      * New options -fdefault-real-16 and -fdefault-real-10 to control the
   4549        default kind of REAL variables.
   4550      * A warning is now issued if an array subscript inside a DO loop
   4551        could lead to an out-of-bounds-access. The new option
   4552        -Wdo-subscript, enabled by -Wextra, warns about this even if the
   4553        compiler can not prove that the code will be executed.
   4554      * The Fortran front end now attempts to interchange loops if it is
   4555        deemed profitable. So far, this is restricted to FORALL and DO
   4556        CONCURRENT statements with multiple indices. This behavior be
   4557        controlled with the new flag -ffrontend-loop-interchange, which is
   4558        enabled with optimization by default. The
   4559        -Wfrontend-loop-interchange option warns about such occurrences.
   4560      * When an actual argument contains too few elements for a dummy
   4561        argument, an error is now issued. The -std=legacy option can be
   4562        used to still compile such code.
   4563      * The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
   4564        integers, making records larger than 2GiB possible.
   4565      * The GFORTRAN_DEFAULT_RECL environment variable no longer has any
   4566        effect. The record length for preconnected units is now larger than
   4567        any practical limit, same as for sequential access units opened
   4568        without an explicit RECL= specifier.
   4569      * Character variables longer than HUGE(0) elements are now possible
   4570        on 64-bit targets. Note that this changes the procedure call ABI
   4571        for all procedures with character arguments on 64-bit targets, as
   4572        the type of the hidden character length argument has changed. The
   4573        hidden character length argument is now of type INTEGER(C_SIZE_T).
   4574      * Partial support is provided for Fortran 2018 teams, which are
   4575        hierarchical subsets of images that execute independently of other
   4576        image subsets.
   4577 
   4578   Go
   4579 
   4580      * GCC 8 provides a complete implementation of the Go 1.10.1 user
   4581        packages.
   4582      * The garbage collector is now fully concurrent. As before, values
   4583        stored on the stack are scanned conservatively, but value stored in
   4584        the heap are scanned precisely.
   4585      * Escape analysis is fully implemented and enabled by default in the
   4586        Go front end. This significantly reduces the number of heap
   4587        allocations by allocating values on the stack instead.
   4588 
   4589 libgccjit
   4590 
   4591    The libgccjit API gained four new entry points:
   4592      * [18]gcc_jit_type_get_vector and
   4593      * [19]gcc_jit_context_new_rvalue_from_vector for working with
   4594        vectors,
   4595      * [20]gcc_jit_type_get_aligned
   4596      * [21]gcc_jit_function_get_address
   4597 
   4598    The C code generated by [22]gcc_jit_context_dump_reproducer_to_file is
   4599    now easier-to-read.
   4600 
   4601 New Targets and Target Specific Improvements
   4602 
   4603   AArch64
   4604 
   4605      * The Armv8.4-A architecture is now supported. It can be used by
   4606        specifying the -march=armv8.4-a option.
   4607      * The Dot Product instructions are now supported as an optional
   4608        extension to the Armv8.2-A architecture and newer and are mandatory
   4609        on Armv8.4-A. The extension can be used by specifying the +dotprod
   4610        architecture extension. E.g. -march=armv8.2-a+dotprod.
   4611      * The Armv8-A +crypto extension has now been split into two
   4612        extensions for finer grained control:
   4613           + +aes which contains the Armv8-A AES crytographic instructions.
   4614           + +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
   4615             instructions.
   4616        Using +crypto will now enable these two extensions.
   4617      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   4618        instructions have been added. These instructions are mandatory in
   4619        Armv8.4-A but available as an optional extension to Armv8.2-A and
   4620        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   4621        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   4622        the instructions can be enabled by specifying +fp16.
   4623      * New cryptographic instructions have been added as optional
   4624        extensions to Armv8.2-A and newer. These instructions can be
   4625        enabled with:
   4626           + +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This
   4627             implies +sha2.
   4628           + +sm4 New SM3 and SM4 instructions from Armv8.4-A.
   4629      * The Scalable Vector Extension (SVE) is now supported as an optional
   4630        extension to the Armv8.2-A architecture and newer. This support
   4631        includes automatic vectorization with SVE instructions, but it does
   4632        not yet include the SVE Arm C Language Extensions (ACLE). It can be
   4633        enabled by specifying the +sve architecture extension (for example,
   4634        -march=armv8.2-a+sve). By default, the generated code works with
   4635        all vector lengths, but it can be made specific to N-bit vectors
   4636        using -msve-vector-bits=N.
   4637      * Support has been added for the following processors (GCC
   4638        identifiers in parentheses):
   4639           + Arm Cortex-A75 (cortex-a75).
   4640           + Arm Cortex-A55 (cortex-a55).
   4641           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   4642             (cortex-a75.cortex-a55).
   4643        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4644        options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
   4645        arguments to the equivalent target attributes and pragmas.
   4646 
   4647   ARC
   4648 
   4649      * Added support for:
   4650           + Fast interrupts.
   4651           + Naked functions.
   4652           + aux variable attributes.
   4653           + uncached type qualifier.
   4654           + Secure functions via sjli instruction.
   4655      * New exception handling implementation.
   4656      * Revamped trampoline implementation.
   4657      * Refactored small data feature implementation, controlled via the -G
   4658        command-line option.
   4659      * New support for reduced register set ARC architecture
   4660        configurations, controlled via the -mrf16 command-line option.
   4661      * Refurbished and improved support for zero overhead loops.
   4662        Introduced -mlpc-width command-line option to control the width of
   4663        the lp_count register.
   4664 
   4665   ARM
   4666 
   4667      * The -mfpu option now takes a new option setting of -mfpu=auto. When
   4668        set to this the floating-point and SIMD settings are derived from
   4669        the settings of the -mcpu or -march options. The internal CPU
   4670        configurations have been updated with information about the
   4671        permitted floating-point configurations supported. See the user
   4672        guide for further information about the extended option syntax for
   4673        controlling architectural extensions via the -march option.
   4674        -mfpu=auto is now the default setting unless the compiler has been
   4675        configured with an explicit --with-fpu option.
   4676      * The -march and -mcpu options now accept optional extensions to the
   4677        architecture or CPU option, allowing the user to enable or disable
   4678        any such extensions supported by that architecture or CPU such as
   4679        (but not limited to) floating-point and AdvancedSIMD. For example:
   4680        the option -mcpu=cortex-a53+nofp will generate code for the
   4681        Cortex-A53 processor with no floating-point support. This, in
   4682        combination with the new -mfpu=auto option, provides a
   4683        straightforward way of specifying a valid build target through a
   4684        single -mcpu or -march option. The -mtune option accepts the same
   4685        arguments as -mcpu but only the CPU name has an effect on tuning.
   4686        The architecture extensions do not have any effect. For details of
   4687        what extensions a particular architecture or CPU option supports
   4688        please refer to the [23]documentation.
   4689      * The -mstructure-size-boundary option has been deprecated and will
   4690        be removed in a future release.
   4691      * The default link behavior for Armv6 and Armv7-R targets has been
   4692        changed to produce BE8 format when generating big-endian images. A
   4693        new flag -mbe32 can be used to force the linker to produce legacy
   4694        BE32 format images. There is no change of behavior for Armv6-M and
   4695        other Armv7 or later targets: these already defaulted to BE8
   4696        format. This change brings GCC into alignment with other compilers
   4697        for the ARM architecture.
   4698      * The Armv8-R architecture is now supported. It can be used by
   4699        specifying the -march=armv8-r option.
   4700      * The Armv8.3-A architecture is now supported. It can be used by
   4701        specifying the -march=armv8.3-a option.
   4702      * The Armv8.4-A architecture is now supported. It can be used by
   4703        specifying the -march=armv8.4-a option.
   4704      * The Dot Product instructions are now supported as an optional
   4705        extension to the Armv8.2-A architecture and newer and are mandatory
   4706        on Armv8.4-A. The extension can be used by specifying the +dotprod
   4707        architecture extension. E.g. -march=armv8.2-a+dotprod.
   4708      * Support for setting extensions and architectures using the GCC
   4709        target pragma and attribute has been added. It can be used by
   4710        specifying #pragma GCC target ("arch=..."), #pragma GCC target
   4711        ("+extension"), __attribute__((target("arch=..."))) or
   4712        __attribute__((target("+extension"))).
   4713      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   4714        instructions have been added. These instructions are mandatory in
   4715        Armv8.4-A but available as an optional extension to Armv8.2-A and
   4716        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   4717        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   4718        the instructions can be enabled by specifying +fp16.
   4719      * Support has been added for the following processors (GCC
   4720        identifiers in parentheses):
   4721           + Arm Cortex-A75 (cortex-a75).
   4722           + Arm Cortex-A55 (cortex-a55).
   4723           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   4724             (cortex-a75.cortex-a55).
   4725           + Arm Cortex-R52 for Armv8-R (cortex-r52).
   4726        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4727        options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
   4728        arguments to the equivalent target attributes and pragmas.
   4729 
   4730   AVR
   4731 
   4732      * The AVR port now supports the following XMEGA-like devices:
   4733 
   4734      ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
   4735      ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
   4736      ATtiny3214, ATtiny3216, ATtiny3217
   4737        The new devices are listed under [24]-mmcu=avrxmega3.
   4738           + These devices see flash memory in the RAM address space, so
   4739             that features like PROGMEM and __flash are not needed any more
   4740             (as opposed to other AVR families for which read-only data
   4741             will be located in RAM except special, non-standard features
   4742             are used to locate and access such data). This requires that
   4743             the compiler is used with Binutils 2.29 or newer so that
   4744             [25]read-only data will be located in flash memory.
   4745           + A new command-line option -mshort-calls is supported. This
   4746             option is used internally for multilib selection of the
   4747             avrxmega3 variants. It is not an optimization option. Do not
   4748             set it by hand.
   4749      * The compiler now generates [26]efficient interrupt service routine
   4750        (ISR) prologues and epilogues. This is achieved by using the new
   4751        [27]AVR pseudo instruction __gcc_isr which is supported and
   4752        resolved by the GNU assembler.
   4753           + As the __gcc_isr pseudo-instruction will be resolved by the
   4754             assembler, inline assembly is transparent to the process. This
   4755             means that when inline assembly uses an instruction like INC
   4756             that clobbers the condition code, then the assembler will
   4757             detect this and generate an appropriate ISR prologue /
   4758             epilogue chunk to save / restore SREG as needed.
   4759           + A new command-line option -mno-gas-isr-prologues disables the
   4760             generation of the __gcc_isr pseudo instruction. Any non-naked
   4761             ISR will save and restore SREG, tmp_reg and zero_reg, no
   4762             matter whether the respective register is clobbered or used.
   4763           + The feature is turned on per default for all optimization
   4764             levels except for -O0 and -Og. It is explicitly enabled by
   4765             means of option -mgas-isr-prologues.
   4766           + Support has been added for a new [28]AVR function attribute
   4767             no_gccisr. It can be used to disable __gcc_isr pseudo
   4768             instruction generation for individual ISRs.
   4769           + This optimization is only available if GCC is configured with
   4770             GNU Binutils 2.29 or newer; or at least with a version of
   4771             Binutils that implements feature [29]PR21683.
   4772      * The compiler no more saves / restores registers in main; the effect
   4773        is the same as if attribute OS_task was specified for main. This
   4774        optimization can be switched off by the new command-line option
   4775        -mno-main-is-OS_task.
   4776 
   4777   IA-32/x86-64
   4778 
   4779      * The x86 port now supports the naked function attribute.
   4780      * Better tuning for znver1 and Intel Core based CPUs.
   4781      * Vectorization cost metrics has been reworked leading to significant
   4782        improvements on some benchmarks.
   4783      * GCC now supports the Intel CPU named Cannonlake through
   4784        -march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA
   4785        and SHA ISA extensions.
   4786      * GCC now supports the Intel CPU named Icelake through
   4787        -march=icelake. The switch enables the AVX512VNNI, GFNI, VAES,
   4788        AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ
   4789        ISA extensions.
   4790      * GCC now supports the Intel Control-flow Enforcement Technology
   4791        (CET) extension through -fcf-protection option.
   4792 
   4793   NDS32
   4794 
   4795      * New command-line options -mext-perf, -mext-perf2, and -mext-string
   4796        have been added for performance extension instructions.
   4797 
   4798   Nios II
   4799 
   4800      * The Nios II back end has been improved to generate better-optimized
   4801        code. Changes include switching to LRA, more accurate cost models,
   4802        and more compact code for addressing static variables.
   4803      * New command-line options -mgprel-sec= and -mr0rel-sec= have been
   4804        added.
   4805      * The stack-smashing protection options are now enabled on Nios II.
   4806 
   4807   PA-RISC
   4808 
   4809      * The default call ABI on 32-bit linux has been changed from callee
   4810        copies to caller copies. This affects objects larger than eight
   4811        bytes passed by value. The goal is to improve compatibility with
   4812        x86 and resolve issues with OpenMP.
   4813      * Other PA-RISC targets are unchanged.
   4814 
   4815   PowerPC / PowerPC64 / RS6000
   4816 
   4817      * The PowerPC SPE support is split off to a separate powerpcspe port.
   4818        The separate port is deprecated and might be removed in a future
   4819        release.
   4820      * The Paired Single support (as used on some PPC750 CPUs, -mpaired,
   4821        powerpc*-*-linux*paired*) is deprecated and will be removed in a
   4822        future release.
   4823      * The Xilinx floating point support (-mxilinx-fpu,
   4824        powerpc-xilinx-eabi*) is deprecated and will be removed in a future
   4825        release.
   4826      * Support for using big-endian AltiVec intrinsics on a little-endian
   4827        target (-maltivec=be) is deprecated and will be removed in a future
   4828        release.
   4829 
   4830   Tile
   4831 
   4832      * The TILE-Gx port is deprecated and will be removed in a future
   4833        release.
   4834 
   4835 Operating Systems
   4836 
   4837   Windows
   4838 
   4839      * GCC on Microsoft Windows can now be configured via
   4840        --enable-mingw-wildcard or --disable-mingw-wildcard to force a
   4841        specific behavior for GCC itself with regards to supporting the
   4842        wildcard character. Prior versions of GCC would follow the
   4843        configuration of the MinGW runtime. This behavior can still be
   4844        obtained by not using the above options or by using
   4845        --enable-mingw-wildcard=platform.
   4846 
   4847 Improvements for plugin authors
   4848 
   4849      * Plugins can now register a callback hook for when comments are
   4850        encountered by the C and C++ compilers, e.g. allowing for plugins
   4851        to handle documentation markup in code comments.
   4852      * The gdbinit support script for debugging GCC now has a
   4853        break-on-diagnostic command, providing an easy way to trigger a
   4854        breakpoint whenever a diagnostic is emitted.
   4855      * The API for creating fix-it hints now supports newlines, and for
   4856        emitting mutually incompatible fix-it hints for one diagnostic.
   4857 
   4858 GCC 8.1
   4859 
   4860    This is the [30]list of problem reports (PRs) from GCC's bug tracking
   4861    system that are known to be fixed in the 8.1 release. This list might
   4862    not be complete (that is, it is possible that some PRs that have been
   4863    fixed are not listed here).
   4864 
   4865 GCC 8.2
   4866 
   4867    This is the [31]list of problem reports (PRs) from GCC's bug tracking
   4868    system that are known to be fixed in the 8.2 release. This list might
   4869    not be complete (that is, it is possible that some PRs that have been
   4870    fixed are not listed here).
   4871 
   4872   General Improvements
   4873 
   4874      * Fixed LTO link-time performance problems caused by an overflow in
   4875        the partitioning algorithm while building large binaries.
   4876 
   4877   Language Specific Changes
   4878 
   4879     C++
   4880 
   4881    GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
   4882    returning of classes with a deleted copy constructor and defaulted
   4883    trivial move constructor (bug [32]c++/86094). GCC 8.2 introduces
   4884    -fabi-version=13 and makes it the default, ABI incompatibilities
   4885    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [33]C++
   4886    changes for more details.
   4887 
   4888   Target Specific Changes
   4889 
   4890     IA-32/x86-64
   4891 
   4892      * -mtune=native performance regression [34]PR84413 on Intel Skylake
   4893        processors has been fixed.
   4894 
   4895 GCC 8.3
   4896 
   4897    This is the [35]list of problem reports (PRs) from GCC's bug tracking
   4898    system that are known to be fixed in the 8.3 release. This list might
   4899    not be complete (that is, it is possible that some PRs that have been
   4900    fixed are not listed here).
   4901 
   4902   Windows
   4903 
   4904      * A C++ Microsoft ABI bitfield layout bug, [36]PR87137 has been
   4905        fixed. A non-field declaration could cause the current bitfield
   4906        allocation unit to be completed, incorrectly placing a following
   4907        bitfield into a new allocation unit. The Microsoft ABI is selected
   4908        for:
   4909           + Mingw targets
   4910           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   4911             option is specified, or __attribute__((ms_struct)) is used
   4912           + SuperH targets when the -mhitachi option is specified, or
   4913             __attribute__((renesas)) is used
   4914        GCC 8 introduced additional cases of this defect, but rather than
   4915        resolve only those regressions, we decided to resolve all the cases
   4916        of this defect in single change.
   4917 
   4918 GCC 8.4
   4919 
   4920    This is the [37]list of problem reports (PRs) from GCC's bug tracking
   4921    system that are known to be fixed in the 8.4 release. This list might
   4922    not be complete (that is, it is possible that some PRs that have been
   4923    fixed are not listed here).
   4924 
   4925 GCC 8.5
   4926 
   4927    This is the [38]list of problem reports (PRs) from GCC's bug tracking
   4928    system that are known to be fixed in the 8.5 release. This list might
   4929    not be complete (that is, it is possible that some PRs that have been
   4930    fixed are not listed here).
   4931 
   4932   Target Specific Changes
   4933 
   4934     AArch64
   4935 
   4936      * The option -moutline-atomics has been added to aid deployment of
   4937        the Large System Extensions (LSE) on GNU/Linux systems built with a
   4938        baseline architecture targeting Armv8-A. When the option is
   4939        specified code is emitted to detect the presence of LSE
   4940        instructions at run time and use them for standard atomic
   4941        operations. For more information please refer to the documentation.
   4942 
   4943 
   4944     For questions related to the use of GCC, please consult these web
   4945     pages and the [39]GCC manuals. If that fails, the
   4946     [40]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4947     web pages and the development of GCC are welcome on our developer
   4948     list at [41]gcc (a] gcc.gnu.org. All of [42]our lists have public
   4949     archives.
   4950 
   4951    Copyright (C) [43]Free Software Foundation, Inc. Verbatim copying and
   4952    distribution of this entire article is permitted in any medium,
   4953    provided this notice is preserved.
   4954 
   4955    These pages are [44]maintained by the GCC team. Last modified
   4956    2023-01-11.
   4957 
   4958 References
   4959 
   4960    1. https://gcc.gnu.org/gcc-8/porting_to.html
   4961    2. https://gcc.gnu.org/onlinedocs/index.html#current
   4962    3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
   4963    4. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
   4964    5. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   4965    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
   4966    7. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
   4967    8. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
   4968    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   4969   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
   4970   11. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
   4971   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
   4972   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   4973   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   4974   15. https://gcc.gnu.org/PR86094
   4975   16. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
   4976   17. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   4977   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
   4978   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
   4979   20. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
   4980   21. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
   4981   22. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
   4982   23. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
   4983   24. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
   4984   25. https://sourceware.org/PR21472
   4985   26. https://gcc.gnu.org/PR20296
   4986   27. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
   4987   28. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
   4988   29. https://sourceware.org/PR21683
   4989   30. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
   4990   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
   4991   32. https://gcc.gnu.org/PR86094
   4992   33. https://gcc.gnu.org/gcc-8/changes.html#cxx
   4993   34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
   4994   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
   4995   36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   4996   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
   4997   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
   4998   39. https://gcc.gnu.org/onlinedocs/
   4999   40. mailto:gcc-help (a] gcc.gnu.org
   5000   41. mailto:gcc (a] gcc.gnu.org
   5001   42. https://gcc.gnu.org/lists.html
   5002   43. https://www.fsf.org/
   5003   44. https://gcc.gnu.org/about.html
   5004 ======================================================================
   5005 http://gcc.gnu.org/gcc-7/index.html
   5006                               GCC 7 Release Series
   5007 
   5008    (This release series is no longer supported.)
   5009 
   5010    Nov 14, 2019
   5011 
   5012    The [1]GNU project and the GCC developers are pleased to announce the
   5013    release of GCC 7.5.
   5014 
   5015    This release is a bug-fix release, containing fixes for regressions in
   5016    GCC 7.4 relative to previous releases of GCC.
   5017 
   5018 Release History
   5019 
   5020    GCC 7.5
   5021           Nov 14, 2019 ([2]changes, [3]documentation)
   5022 
   5023    GCC 7.4
   5024           Dec 6, 2018 ([4]changes, [5]documentation)
   5025 
   5026    GCC 7.3
   5027           Jan 25, 2018 ([6]changes, [7]documentation)
   5028 
   5029    GCC 7.2
   5030           Aug 14, 2017 ([8]changes, [9]documentation)
   5031 
   5032    GCC 7.1
   5033           May 2, 2017 ([10]changes, [11]documentation)
   5034 
   5035 References and Acknowledgements
   5036 
   5037    GCC used to stand for the GNU C Compiler, but since the compiler
   5038    supports several other languages aside from C, it now stands for the
   5039    GNU Compiler Collection.
   5040 
   5041    A list of [12]successful builds is updated as new information becomes
   5042    available.
   5043 
   5044    The GCC developers would like to thank the numerous people that have
   5045    contributed new features, improvements, bug fixes, and other changes as
   5046    well as test results to GCC. This [13]amazing group of volunteers is
   5047    what makes GCC successful.
   5048 
   5049    For additional information about GCC please refer to the [14]GCC
   5050    project web site or contact the [15]GCC development mailing list.
   5051 
   5052    To obtain GCC please use [16]our mirror sites or [17]our version
   5053    control system.
   5054 
   5055 
   5056     For questions related to the use of GCC, please consult these web
   5057     pages and the [18]GCC manuals. If that fails, the
   5058     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5059     web pages and the development of GCC are welcome on our developer
   5060     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   5061     archives.
   5062 
   5063    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   5064    distribution of this entire article is permitted in any medium,
   5065    provided this notice is preserved.
   5066 
   5067    These pages are [23]maintained by the GCC team. Last modified
   5068    2024-05-30.
   5069 
   5070 References
   5071 
   5072    1. http://www.gnu.org/
   5073    2. https://gcc.gnu.org/gcc-7/changes.html
   5074    3. https://gcc.gnu.org/onlinedocs/7.5.0/
   5075    4. https://gcc.gnu.org/gcc-7/changes.html
   5076    5. https://gcc.gnu.org/onlinedocs/7.4.0/
   5077    6. https://gcc.gnu.org/gcc-7/changes.html
   5078    7. https://gcc.gnu.org/onlinedocs/7.3.0/
   5079    8. https://gcc.gnu.org/gcc-7/changes.html
   5080    9. https://gcc.gnu.org/onlinedocs/7.2.0/
   5081   10. https://gcc.gnu.org/gcc-7/changes.html
   5082   11. https://gcc.gnu.org/onlinedocs/7.1.0/
   5083   12. https://gcc.gnu.org/gcc-7/buildstat.html
   5084   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   5085   14. https://gcc.gnu.org/index.html
   5086   15. mailto:gcc (a] gcc.gnu.org
   5087   16. https://gcc.gnu.org/mirrors.html
   5088   17. https://gcc.gnu.org/git.html
   5089   18. https://gcc.gnu.org/onlinedocs/
   5090   19. mailto:gcc-help (a] gcc.gnu.org
   5091   20. mailto:gcc (a] gcc.gnu.org
   5092   21. https://gcc.gnu.org/lists.html
   5093   22. https://www.fsf.org/
   5094   23. https://gcc.gnu.org/about.html
   5095 ======================================================================
   5096 http://gcc.gnu.org/gcc-7/changes.html
   5097                               GCC 7 Release Series
   5098                         Changes, New Features, and Fixes
   5099 
   5100    This page is a brief summary of some of the huge number of improvements
   5101    in GCC 7. For more information, see the [1]Porting to GCC 7 page and
   5102    the [2]full GCC documentation.
   5103 
   5104 Caveats
   5105 
   5106      * GCC now uses [3]LRA (a new local register allocator) by default for
   5107        new targets.
   5108      * The non-standard C++0x type traits has_trivial_default_constructor,
   5109        has_trivial_copy_constructor and has_trivial_copy_assign have been
   5110        removed.
   5111      * The libstdc++ [4]Profile Mode has been deprecated and will be
   5112        removed in a future version.
   5113      * The Cilk+ extensions to the C and C++ languages have been
   5114        deprecated.
   5115      * On ARM targets (arm*-*-*), [5]a bug introduced in GCC 5 that
   5116        affects conformance to the procedure call standard (AAPCS) has been
   5117        fixed. The bug affects some C++ code where class objects are passed
   5118        by value to functions and could result in incorrect or inconsistent
   5119        code being generated. This is an ABI change. If the option -Wpsabi
   5120        is enabled (on by default) the compiler will emit a diagnostic note
   5121        for code that might be affected.
   5122 
   5123 General Optimizer Improvements
   5124 
   5125      * GCC 7 can determine the return value or range of return values of
   5126        some calls to the sprintf family of functions and make it available
   5127        to other optimization passes. Some calls to the snprintf function
   5128        with a zero size argument can be folded into constants. This
   5129        optimization is included in -O1 and can be selectively controlled
   5130        by the -fprintf-return-value option.
   5131      * A new store merging pass has been added. It merges constant stores
   5132        to adjacent memory locations into fewer, wider, stores. It is
   5133        enabled by the -fstore-merging option and at the -O2 optimization
   5134        level or higher (and -Os).
   5135      * A new code hoisting optimization has been added to the partial
   5136        redundancy elimination pass. It attempts to move evaluation of
   5137        expressions executed on all paths to the function exit as early as
   5138        possible. This primarily helps improve code size, but can improve
   5139        the speed of the generated code as well. It is enabled by the
   5140        -fcode-hoisting option and at the -O2 optimization level or higher
   5141        (and -Os).
   5142      * A new interprocedural bitwise constant propagation optimization has
   5143        been added, which propagates knowledge about which bits of
   5144        variables are known to be zero (including pointer alignment
   5145        information) across the call graph. It is enabled by the
   5146        -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled
   5147        at the -O2 optimization level and higher (and -Os). This
   5148        optimization supersedes interprocedural alignment propagation of
   5149        GCC 6, and therefore the option -fipa-cp-alignment is now
   5150        deprecated and ignored.
   5151      * A new interprocedural value range propagation optimization has been
   5152        added, which propagates integral range information across the call
   5153        graph when variable values can be proven to be within those ranges.
   5154        It is enabled by the -fipa-vrp option and at the -O2 optimization
   5155        level and higher (and -Os).
   5156      * A new loop splitting optimization pass has been added. Certain
   5157        loops which contain a condition that is always true on one side of
   5158        the iteration space and always false on the other are split into
   5159        two loops, such that each of the two new loops iterates on just one
   5160        side of the iteration space and the condition does not need to be
   5161        checked inside of the loop. It is enabled by the -fsplit-loops
   5162        option and at the -O3 optimization level or higher.
   5163      * The shrink-wrapping optimization can now separate portions of
   5164        prologues and epilogues to improve performance if some of the work
   5165        done traditionally by prologues and epilogues is not needed on
   5166        certain paths. This is controlled by the -fshrink-wrap-separate
   5167        option, enabled by default. It requires target support, which is
   5168        currently only implemented in the PowerPC and AArch64 ports.
   5169      * AddressSanitizer gained a new sanitization option,
   5170        -fsanitize-address-use-after-scope, which enables sanitization of
   5171        variables whose address is taken and used after a scope where the
   5172        variable is defined:
   5173 
   5174 int
   5175 main (int argc, char **argv)
   5176 {
   5177   char *ptr;
   5178     {
   5179       char my_char;
   5180       ptr = &my_char;
   5181     }
   5182 
   5183   *ptr = 123;
   5184   return *ptr;
   5185 }
   5186 
   5187 ==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba99
   5188 0 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
   5189 WRITE of size 1 at 0x7fffb8dba990 thread T0
   5190     #0 0x4006d4 in main /tmp/use-after-scope-1.c:10
   5191     #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
   5192     #2 0x400739 in _start (/tmp/a.out+0x400739)
   5193 
   5194 Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
   5195     #0 0x40067f in main /tmp/use-after-scope-1.c:3
   5196 
   5197   This frame has 1 object(s):
   5198     [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
   5199 
   5200        The option is enabled by default with -fsanitize=address and
   5201        disabled by default with -fsanitize=kernel-address. Compared to the
   5202        LLVM compiler, where the option already exists, the implementation
   5203        in the GCC compiler has some improvements and advantages:
   5204           + Complex uses of gotos and case labels are properly handled and
   5205             should not report any false positive or false negatives.
   5206           + C++ temporaries are sanitized.
   5207           + Sanitization can handle invalid memory stores that are
   5208             optimized out by the LLVM compiler when optimization is
   5209             enabled.
   5210      * The -fsanitize=signed-integer-overflow suboption of the
   5211        UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even
   5212        on arithmetic operations with generic vectors.
   5213      * Version 5 of the DWARF debugging information standard is supported
   5214        through the -gdwarf-5 option. The DWARF version 4 debugging
   5215        information remains the default until consumers of debugging
   5216        information are adjusted.
   5217 
   5218 New Languages and Language specific improvements
   5219 
   5220    OpenACC support in C, C++, and Fortran continues to be maintained and
   5221    improved. See the [6]OpenACC and [7]Offloading wiki pages for further
   5222    information.
   5223 
   5224   Ada
   5225 
   5226      * On mainstream native platforms, Ada programs no longer require the
   5227        stack to be made executable in order to run properly.
   5228 
   5229   BRIG (HSAIL)
   5230 
   5231    Support for processing BRIG 1.0 files was added in this release. BRIG
   5232    is a binary format for HSAIL (Heterogeneous System Architecture
   5233    Intermediate Language). The BRIG front end can be used for implementing
   5234    HSAIL "finalizers" (compilation of HSAIL to a native ISA) for
   5235    GCC-supported targets. An implementation of an HSAIL runtime library,
   5236    libhsail-rt is also included.
   5237 
   5238   C family
   5239 
   5240      * New command-line options have been added for the C and C++
   5241        compilers:
   5242           + -Wimplicit-fallthrough warns when a switch case falls through.
   5243             This warning has five different levels. The compiler is able
   5244             to parse a wide range of fallthrough comments, depending on
   5245             the level. It also handles control-flow statements, such as
   5246             ifs. It's possible to suppress the warning by either adding a
   5247             fallthrough comment, or by using a null statement:
   5248             __attribute__ ((fallthrough)); (C, C++), or [[fallthrough]];
   5249             (C++17), or [[gnu::fallthrough]]; (C++11/C++14). This warning
   5250             is enabled by -Wextra.
   5251           + -Wpointer-compare warns when a pointer is compared with a zero
   5252             character constant. Such code is now invalid in C++11 and GCC
   5253             rejects it. This warning is enabled by default.
   5254           + -Wduplicated-branches warns when an if-else has identical
   5255             branches.
   5256           + -Wrestrict warns when an argument passed to a
   5257             restrict-qualified parameter aliases with another argument.
   5258           + -Wmemset-elt-size warns for memset calls, when the first
   5259             argument references an array, and the third argument is a
   5260             number equal to the number of elements of the array, but not
   5261             the size of the array. This warning is enabled by -Wall.
   5262           + -Wint-in-bool-context warns about suspicious uses of integer
   5263             values where boolean values are expected. This warning is
   5264             enabled by -Wall.
   5265           + -Wswitch-unreachable warns when a switch statement has
   5266             statements between the controlling expression and the first
   5267             case label which will never be executed. This warning is
   5268             enabled by default.
   5269           + -Wexpansion-to-defined warns when defined is used outside #if.
   5270             This warning is enabled by -Wextra or -Wpedantic.
   5271           + -Wregister warns about uses of the register storage specifier.
   5272             In C++17 this keyword has been removed and for C++17 this is a
   5273             pedantic warning enabled by default. The warning is not
   5274             emitted for the GNU Explicit Register Variables extension.
   5275           + -Wvla-larger-than=N warns about unbounded uses of
   5276             variable-length arrays, and about bounded uses of
   5277             variable-length arrays whose bound can be larger than N bytes.
   5278           + -Wduplicate-decl-specifier warns when a declaration has
   5279             duplicate const, volatile, restrict or _Atomic specifier. This
   5280             warning is enabled by -Wall.
   5281      * GCC 6's C and C++ front ends were able to offer suggestions for
   5282        misspelled field names:
   5283 
   5284 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   5285 you mean 'color'?
   5286    return ptr->colour;
   5287                ^~~~~~
   5288 
   5289        GCC 7 greatly expands the scope of these suggestions. Firstly, it
   5290        adds fix-it hints to such suggestions:
   5291 
   5292 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   5293 you mean 'color'?
   5294    return ptr->colour;
   5295                ^~~~~~
   5296                color
   5297 
   5298        The suggestions now cover many other things, such as misspelled
   5299        function names:
   5300 
   5301 spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_wi
   5302 dget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declarat
   5303 ion]
   5304    gtk_widget_showall (w);
   5305    ^~~~~~~~~~~~~~~~~~
   5306    gtk_widget_show_all
   5307 
   5308        misspelled macro names and enum values:
   5309 
   5310 spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a fun
   5311 ction); did you mean 'MAX_ITEMS'?
   5312  int array[MAX_ITEM];
   5313            ^~~~~~~~
   5314            MAX_ITEMS
   5315 
   5316        misspelled type names:
   5317 
   5318 spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'si
   5319 gned'?
   5320  void test (singed char e);
   5321             ^~~~~~
   5322             signed
   5323 
   5324        and, in the C front end, named initializers:
   5325 
   5326 test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color
   5327 '?
   5328  struct s test = { .colour = 3 };
   5329                     ^~~~~~
   5330                     color
   5331 
   5332      * The preprocessor can now offer suggestions for misspelled
   5333        directives, e.g.:
   5334 
   5335 test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
   5336  #endfi
   5337   ^~~~~
   5338   endif
   5339 
   5340      * Warnings about format strings now underline the pertinent part of
   5341        the string, and can offer suggested fixes. In some cases, the
   5342        pertinent argument is underlined.
   5343 
   5344 test.c:51:29: warning: format '%s' expects argument of type 'char *', but argume
   5345 nt 3 has type 'int' [-Wformat=]
   5346    printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
   5347                           ~^                ~~~~~
   5348                           %d
   5349 
   5350      * The new -Wdangling-else command-line option has been split out of
   5351        -Wparentheses and warns about dangling else.
   5352      * The -Wshadow warning has been split into three variants.
   5353        -Wshadow=global warns for any shadowing. This is the default when
   5354        using -Wshadow without any argument. -Wshadow=local only warns for
   5355        a local variable shadowing another local variable or parameter.
   5356        -Wshadow=compatible-local only warns for a local variable shadowing
   5357        another local variable or parameter whose type is compatible (in
   5358        C++ compatible means that the type of the shadowing variable can be
   5359        converted to that of the shadowed variable).
   5360        The following example shows the different kinds of shadow warnings:
   5361 
   5362 enum operation { add, count };
   5363 struct container { int nr; };
   5364 
   5365 int
   5366 container_count (struct container c, int count)
   5367 {
   5368   int r = 0;
   5369   for (int count = 0; count > 0; count--)
   5370     {
   5371       struct container count = c;
   5372       r += count.nr;
   5373     }
   5374   return r;
   5375 }
   5376 
   5377        -Wshadow=compatible-local will warn for the parameter being
   5378        shadowed with the same type:
   5379 
   5380 warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=
   5381 compatible-local]
   5382    for (int count = 0; count > 0; count--)
   5383             ^~~~~
   5384 warn-test.c:5:42: note: shadowed declaration is here
   5385  container_count (struct container c, int count)
   5386                                           ^~~~~
   5387 
   5388        -Wshadow=local will warn for the above and for the shadowed
   5389        declaration with incompatible type:
   5390 
   5391 warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Ws
   5392 hadow=local]
   5393        struct container count = c;
   5394                         ^~~~~
   5395 warn-test.c:8:12: note: shadowed declaration is here
   5396    for (int count = 0; count > 0; count--)
   5397             ^~~~~
   5398 
   5399        -Wshadow=global will warn for all of the above and the shadowing of
   5400        the global declaration:
   5401 
   5402 warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [
   5403 -Wshadow]
   5404  container_count (struct container c, int count)
   5405                                           ^~~~~
   5406 warn-test.c:1:23: note: shadowed declaration is here
   5407  enum operation { add, count };
   5408                        ^~~~~
   5409 
   5410      * GCC 7 contains a number of enhancements that help detect buffer
   5411        overflow and other forms of invalid memory accesses.
   5412           + The -Walloc-size-larger-than=size option detects calls to
   5413             standard and user-defined memory allocation functions
   5414             decorated with attribute alloc_size whose argument exceeds the
   5415             specified size (PTRDIFF_MAX by default). The option also
   5416             detects arithmetic overflow in the computation of the size in
   5417             two-argument allocation functions like calloc where the total
   5418             size is the product of the two arguments. Since calls with an
   5419             excessive size cannot succeed they are typically the result of
   5420             programming errors. Such bugs have been known to be the source
   5421             of security vulnerabilities and a target of exploits.
   5422             -Walloc-size-larger-than=PTRDIFF_MAX is included in -Wall.
   5423             For example, the following call to malloc incorrectly tries to
   5424             avoid passing a negative argument to the function and instead
   5425             ends up unconditionally invoking it with an argument less than
   5426             or equal to zero. Since after conversion to the type of the
   5427             argument of the function (size_t) a negative argument results
   5428             in a value in excess of the maximum PTRDIFF_MAX the call is
   5429             diagnosed.
   5430 
   5431 void* f (int n)
   5432 {
   5433   return malloc (n > 0 ? 0 : n);
   5434 }
   5435 
   5436 warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2
   5437 147483647 [-Walloc-size-larger-than=]
   5438 
   5439           + The -Walloc-zero option detects calls to standard and
   5440             user-defined memory allocation functions decorated with
   5441             attribute alloc_size with a zero argument. -Walloc-zero is not
   5442             included in either -Wall or -Wextra and must be explicitly
   5443             enabled.
   5444           + The -Walloca option detects all calls to the alloca function
   5445             in the program. -Walloca is not included in either -Wall or
   5446             -Wextra and must be explicitly enabled.
   5447           + The -Walloca-larger-than=size option detects calls to the
   5448             alloca function whose argument either may exceed the specified
   5449             size, or that is not known to be sufficiently constrained to
   5450             avoid exceeding it. -Walloca-larger-than is not included in
   5451             either -Wall or -Wextra and must be explicitly enabled.
   5452             For example, compiling the following snippet with
   5453             -Walloca-larger-than=1024 results in a warning because even
   5454             though the code appears to call alloca only with sizes of 1kb
   5455             and less, since n is signed, a negative value would result in
   5456             a call to the function well in excess of the limit.
   5457 
   5458 void f (int n)
   5459 {
   5460   char *d;
   5461   if (n < 1025)
   5462     d = alloca (n);
   5463   else
   5464     d = malloc (n);
   5465   
   5466 }
   5467 
   5468 warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
   5469 ong unsigned int' [-Walloca-larger-than=]
   5470 
   5471             In contrast, a call to alloca that isn't bounded at all such
   5472             as in the following function will elicit the warning below
   5473             regardless of the size argument to the option.
   5474 
   5475 void f (size_t n)
   5476 {
   5477   char *d = alloca (n);
   5478   
   5479 }
   5480 
   5481 warning: unbounded use of 'alloca' [-Walloca-larger-than=]
   5482 
   5483           + The -Wformat-overflow=level option detects certain and likely
   5484             buffer overflow in calls to the sprintf family of formatted
   5485             output functions. Although the option is enabled even without
   5486             optimization it works best with -O2 and higher.
   5487             For example, in the following snippet the call to sprintf is
   5488             diagnosed because even though its output has been constrained
   5489             using the modulo operation it could result in as many as three
   5490             bytes if mday were negative. The solution is to either
   5491             allocate a larger buffer or make sure the argument is not
   5492             negative, for example by changing mday's type to unsigned or
   5493             by making the type of the second operand of the modulo
   5494             expression unsigned: 100U.
   5495 
   5496 void* f (int mday)
   5497 {
   5498   char *buf = malloc (3);
   5499   sprintf (buf, "%02i", mday % 100);
   5500   return buf;
   5501 }
   5502 
   5503 warning: 'sprintf may write a terminating nul past the end of the destination [-
   5504 Wformat-overflow=]
   5505 note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
   5506 
   5507           + The -Wformat-truncation=level option detects certain and
   5508             likely output truncation in calls to the snprintf family of
   5509             formatted output functions. -Wformat-truncation=1 is included
   5510             in -Wall and enabled without optimization but works best with
   5511             -O2 and higher.
   5512             For example, the following function attempts to format an
   5513             integer between 0 and 255 in hexadecimal, including the 0x
   5514             prefix, into a buffer of four characters. But since the
   5515             function must always terminate output by the null character
   5516             ('\0') such a buffer is only big enough to fit just one digit
   5517             plus the prefix. Therefore the snprintf call is diagnosed. To
   5518             avoid the warning either use a bigger buffer or handle the
   5519             function's return value which indicates whether or not its
   5520             output has been truncated.
   5521 
   5522 void f (unsigned x)
   5523 {
   5524   char d[4];
   5525   snprintf (d, sizeof d, "%#02x", x & 0xff);
   5526   
   5527 }
   5528 
   5529 warning: 'snprintf' output may be truncated before the last format character [-W
   5530 format-truncation=]
   5531 note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
   5532 
   5533           + The -Wnonnull option has been enhanced to detect a broader set
   5534             of cases of passing null pointers to functions that expect a
   5535             non-null argument (those decorated with attribute nonnull). By
   5536             taking advantage of optimizations the option can detect many
   5537             more cases of the problem than in prior GCC versions.
   5538           + The -Wstringop-overflow=type option detects buffer overflow in
   5539             calls to string handling functions like memcpy and strcpy. The
   5540             option relies on [8]Object Size Checking and has an effect
   5541             similar to defining the _FORTIFY_SOURCE macro.
   5542             -Wstringop-overflow=2 is enabled by default.
   5543             For example, in the following snippet, because the call to
   5544             strncat specifies a maximum that allows the function to write
   5545             past the end of the destination, it is diagnosed. To correct
   5546             the problem and avoid the overflow the function should be
   5547             called with a size of at most sizeof d - strlen(d) - 1.
   5548 
   5549 void f (const char *fname)
   5550 {
   5551   char d[8];
   5552   strncpy (d, "/tmp/", sizeof d);
   5553   strncat (d, fname, sizeof d);
   5554   
   5555 }
   5556 
   5557 warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
   5558 ow=]
   5559 
   5560      * The <limits.h> header provided by GCC defines macros such as
   5561        INT_WIDTH for the width in bits of integer types, if
   5562        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   5563        included. The <stdint.h> header defines such macros as SIZE_WIDTH
   5564        and INTMAX_WIDTH for the width of some standard typedef names for
   5565        integer types, again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined
   5566        before the header is included; note that GCC's implementation of
   5567        this header is only used for freestanding compilations, not hosted
   5568        compilations, on most systems. These macros come from ISO/IEC TS
   5569        18661-1:2014.
   5570      * The <float.h> header provided by GCC defines the macro
   5571        CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, if
   5572        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   5573        included. This represents the number of decimal digits for which
   5574        conversions between decimal character strings and binary formats,
   5575        in both directions, are correctly rounded, and currently has the
   5576        value of UINTMAX_MAX on all systems, reflecting that GCC's
   5577        compile-time conversions are correctly rounded for any number of
   5578        digits.
   5579      * New __builtin_add_overflow_p, __builtin_sub_overflow_p,
   5580        __builtin_mul_overflow_p built-in functions have been added. These
   5581        work similarly to their siblings without the _p suffix, but do not
   5582        actually store the result of the arithmetics anywhere, just return
   5583        whether the operation would overflow. Calls to these built-ins with
   5584        integer constant arguments evaluate to integer constants
   5585        expressions.
   5586        For example, in the following, c is assigned the result of a * b
   5587        only if the multiplication does not overflow, otherwise it is
   5588        assigned the value zero. The multiplication is performed at
   5589        compile-time and without triggering a -Woverflow warning.
   5590 
   5591 enum {
   5592   a = 12345678,
   5593   b = 87654321,
   5594   c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
   5595 };
   5596 
   5597   C
   5598 
   5599      * The C front end now supports type names _FloatN for floating-point
   5600        types with IEEE interchange formats and _FloatNx for floating-point
   5601        types with IEEE extended formats. These type names come from
   5602        ISO/IEC TS 18661-3:2015.
   5603        The set of types supported depends on the target for which GCC is
   5604        configured. Most targets support _Float32, _Float32x and _Float64.
   5605        _Float128 is supported on targets where IEEE binary128 encoding was
   5606        already supported as long double or __float128. _Float64x is
   5607        supported on targets where a type with either binary128 or Intel
   5608        extended precision format is available.
   5609        Constants with these types are supported using suffixes fN, FN, fNx
   5610        and FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are
   5611        defined in <float.h> if __STDC_WANT_IEC_60559_TYPES_EXT__ is
   5612        defined before it is included.
   5613        These new types are always distinct from each other and from float,
   5614        double and long double, even if they have the same encoding.
   5615        Complex types such as _Complex _Float128 are also supported.
   5616        Type-generic built-in functions such as __builtin_isinf support the
   5617        new types, and the following type-specific built-in functions have
   5618        versions (suffixed fN or fNx) for the new types:
   5619        __builtin_copysign, __builtin_fabs, __builtin_huge_val,
   5620        __builtin_inf, __builtin_nan, __builtin_nans.
   5621      * Compilation with -fopenmp is now compatible with the C11 _Atomic
   5622        keyword.
   5623 
   5624   C++
   5625 
   5626      * The C++ front end has experimental support for all of the current
   5627        C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
   5628        constexpr, class template argument deduction, auto template
   5629        parameters, and structured bindings. For a full list of new
   5630        features, see [9]the C++ status page.
   5631      * C++17 support for new of over-aligned types can be enabled in other
   5632        modes with the -faligned-new flag.
   5633      * The C++17 evaluation order requirements can be selected in other
   5634        modes with the -fstrong-eval-order flag, or disabled in C++17 mode
   5635        with -fno-strong-eval-order.
   5636      * The default semantics of inherited constructors has changed in all
   5637        modes, following [10]P0136. Essentially, overload resolution
   5638        happens as if calling the inherited constructor directly, and the
   5639        compiler fills in construction of the other bases and members as
   5640        needed. Most uses should not need any changes. The old behavior can
   5641        be restored with -fno-new-inheriting-ctors, or -fabi-version less
   5642        than 11.
   5643      * The resolution of DR 150 on matching of template template
   5644        parameters, allowing default template arguments to make a template
   5645        match a parameter, is currently enabled by default in C++17 mode
   5646        only. The default can be overridden with -f{no-,}new-ttp-matching.
   5647      * The C++ front end will now provide fix-it hints for some missing
   5648        semicolons, allowing for automatic fixes by IDEs:
   5649 
   5650 test.cc:4:11: error: expected ';' after class definition
   5651  class a {}
   5652            ^
   5653            ;
   5654 
   5655      * -Waligned-new has been added to the C++ front end. It warns about
   5656        new of type with extended alignment without -faligned-new.
   5657 
   5658     Runtime Library (libstdc++)
   5659 
   5660      * The type of exception thrown by iostreams, std::ios_base::failure,
   5661        now uses the [11]cxx11 ABI.
   5662      * Experimental support for C++17, including the following new
   5663        features:
   5664           + std::string_view;
   5665           + std::any, std::optional, and std::variant;
   5666           + std::invoke, std::is_invocable, std::is_nothrow_invocable, and
   5667             invoke_result;
   5668           + std::is_swappable, and std::is_nothrow_swappable;
   5669           + std::apply, and std::make_from_tuple;
   5670           + std::void_t, std::bool_constant, std::conjunction,
   5671             std::disjunction, and std::negation;
   5672           + Variable templates for type traits;
   5673           + Mathematical Special Functions;
   5674           + std::chrono::floor, std::chrono::ceil, std::chrono::round, and
   5675             std::chrono::abs;
   5676           + std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot;
   5677           + std::scoped_lock, std::shared_mutex,
   5678             std::atomic<T>::is_always_lock_free;
   5679           + std::sample, std::default_searcher, std::boyer_moore_searcher
   5680             and std::boyer_moore_horspool_searcher;
   5681           + Extraction and re-insertion of map and set nodes, try_emplace
   5682             members for maps, and functions for accessing containers
   5683             std::size, std::empty, and std::data;
   5684           + std::shared_ptr support for arrays,
   5685             std::shared_ptr<T>::weak_type,
   5686             std::enable_shared_from_this<T>::weak_from_this(), and
   5687             std::owner_less<void>;
   5688           + std::byte;
   5689           + std::as_const, std::not_fn,
   5690             std::has_unique_object_representations, constexpr
   5691             std::addressof.
   5692        Thanks to Daniel Krgler, Tim Shen, Edward Smith-Rowland, and Ville
   5693        Voutilainen for work on the C++17 support.
   5694      * A new power-of-two rehashing policy for use with the _Hashtable
   5695        internals, thanks to Franois Dumont.
   5696 
   5697   Fortran
   5698 
   5699      * Support for a number of extensions for compatibility with legacy
   5700        code with new flags:
   5701           + -fdec-structure Support for DEC STRUCTURE and UNION
   5702           + -fdec-intrinsic-ints Support for new integer intrinsics with
   5703             B/I/J/K prefixes such as BABS, JIAND...
   5704           + -fdec-math Support for additional math intrinsics, including
   5705             COTAN and degree-valued trigonometric functions such as TAND,
   5706             ASIND...
   5707           + -fdec Enable the -fdec-* family of extensions.
   5708      * New flag -finit-derived to allow default initialization of
   5709        derived-type variables.
   5710      * Improved DO loops with step equal to 1 or -1, generates faster code
   5711        without a loop preheader. A new warning, -Wundefined-do-loop, warns
   5712        when a loop iterates either to HUGE(i) (with step equal to 1), or
   5713        to -HUGE(i) (with step equal to -1). Invalid behavior can be caught
   5714        at run time with -fcheck=do enabled:
   5715 
   5716 program test
   5717   implicit none
   5718   integer(1) :: i
   5719   do i = -HUGE(i)+10, -HUGE(i)-1, -1
   5720     print *, i
   5721   end do
   5722 end program test
   5723 
   5724 At line 8 of file do_check_12.f90
   5725 Fortran runtime error: Loop iterates infinitely
   5726 
   5727      * Version 4.5 of the [12]OpenMP specification is now partially
   5728        supported in the Fortran compiler; the largest missing item is
   5729        structure element mapping.
   5730      * User-defined derived-type input/output (UDTIO) is added.
   5731      * Derived type coarrays with allocatable and pointer components are
   5732        partially supported.
   5733      * Non-constant stop codes and error stop codes (Fortran 2015
   5734        feature).
   5735      * Derived types with allocatable components of recursive type.
   5736      * Intrinsic assignment to polymorphic variables.
   5737      * Improved submodule support.
   5738      * Improved diagnostics (polymorphic results in pure functions).
   5739      * Coarray: Support for failed images (Fortan 2015 feature).
   5740 
   5741   Go
   5742 
   5743      * GCC 7 provides a complete implementation of the Go 1.8.1 user
   5744        packages.
   5745      * Compared to the Go 1.8.1 toolchain, the garbage collector is more
   5746        conservative and less concurrent.
   5747      * Escape analysis is available for experimental use via the
   5748        -fgo-optimize-allocs option. The -fgo-debug-escape prints
   5749        information useful for debugging escape analysis choices.
   5750 
   5751   Java (GCJ)
   5752 
   5753    The GCC Java front end and associated libjava runtime library have been
   5754    removed from GCC.
   5755 
   5756 libgccjit
   5757 
   5758    The libgccjit API gained support for marking calls as requiring
   5759    tail-call optimization via a new entry point:
   5760    [13]gcc_jit_rvalue_set_bool_require_tail_call.
   5761 
   5762    libgccjit performs numerous checks at the API boundary, but if these
   5763    succeed, it previously ignored errors and other diagnostics emitted
   5764    within the core of GCC, and treated the compile of a gcc_jit_context as
   5765    having succeeded. As of GCC 7 it now ensures that if any diagnostics
   5766    are emitted, they are visible from the libgccjit API, and that the the
   5767    context is flagged as having failed.
   5768 
   5769 New Targets and Target Specific Improvements
   5770 
   5771   AArch64
   5772 
   5773      * GCC has been updated to the latest revision of the procedure call
   5774        standard (AAPCS64) to provide support for parameter passing when
   5775        data types have been over-aligned.
   5776      * The ARMv8.3-A architecture is now supported. It can be used by
   5777        specifying the -march=armv8.3-a option.
   5778      * The option -msign-return-address= is supported to enable return
   5779        address protection using ARMv8.3-A Pointer Authentication
   5780        Extensions. For more information on the arguments accepted by this
   5781        option, please refer to [14]AArch64-Options.
   5782      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   5783        Extensions are now supported. They can be used by specifying the
   5784        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   5785        Floating-Point Extensions introduce new half-precision data
   5786        processing floating-point instructions.
   5787      * Support has been added for the following processors (GCC
   5788        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), Broadcom
   5789        Vulcan (vulcan), Cavium ThunderX CN81xx (thunderxt81), Cavium
   5790        ThunderX CN83xx (thunderxt83), Cavium ThunderX CN88xx
   5791        (thunderxt88), Cavium ThunderX CN88xx pass 1.x (thunderxt88p1),
   5792        Cavium ThunderX 2 CN99xx (thunderx2t99), Qualcomm Falkor (falkor).
   5793        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   5794        options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
   5795        arguments to the equivalent target attributes and pragmas.
   5796 
   5797   ARC
   5798 
   5799      * Added support for ARC HS and ARC EM processors.
   5800      * Added support for ARC EM variation found in Intel QuarkSE SoCs.
   5801      * Added support for NPS400 ARC700 based CPUs.
   5802      * Thread Local Storage is now supported by ARC CPUs.
   5803      * Fixed errors for ARC600 when using 32x16 multiplier option.
   5804      * Fixed PIE for ARC CPUs.
   5805      * New CPU templates are supported via multilib.
   5806 
   5807   ARM
   5808 
   5809      * Support for the ARMv5 and ARMv5E architectures has been deprecated
   5810        (which have no known implementations) and will be removed in a
   5811        future GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ
   5812        architectures remain supported. The values armv5 and armv5e of
   5813        -march are thus deprecated.
   5814      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   5815        Extensions are now supported. They can be used by specifying the
   5816        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   5817        Floating-Point Extensions introduce new half-precision data
   5818        processing floating-point instructions.
   5819      * The ARMv8-M architecture is now supported in its two architecture
   5820        profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and
   5821        Floating-Point Extensions. They can be used by specifying the
   5822        -march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options.
   5823      * Support has been added for the following processors (GCC
   5824        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), ARM
   5825        Cortex-M23 (cortex-m23) and ARM Cortex-M33 (cortex-m33). The GCC
   5826        identifiers can be used as arguments to the -mcpu or -mtune
   5827        options, for example: -mcpu=cortex-a73 or -mtune=cortex-m33.
   5828      * A new command-line option -mpure-code has been added. It does not
   5829        allow constant data to be placed in code sections. This option is
   5830        only available when generating non-PIC code for ARMv7-M targets.
   5831      * Support for the ACLE Coprocessor Intrinsics has been added. This
   5832        enables the generation of coprocessor instructions through the use
   5833        of intrinsics such as cdp, ldc, and others.
   5834      * The configure option --with-multilib-list now accepts the value
   5835        rmprofile to build multilib libraries for a range of embedded
   5836        targets. See our [15]installation instructions for details.
   5837 
   5838   AVR
   5839 
   5840      * On the reduced Tiny cores, the progmem [16]variable attribute is
   5841        now properly supported. Respective read-only variables are located
   5842        in flash memory in section .progmem.data. No special code is needed
   5843        to access such variables; the compiler automatically adds an offset
   5844        of 0x4000 to all addresses, which is needed to access variables in
   5845        flash memory. As opposed to ordinary cores where it is sufficient
   5846        to specify the progmem attribute with definitions, on the reduced
   5847        Tiny cores the attribute also has to be specified with (external)
   5848        declarations:
   5849 
   5850 extern const int array[] __attribute__((__progmem__));
   5851 
   5852 int get_value2 (void)
   5853 {
   5854   /* Access via addresses array + 0x4004 and array + 0x4005. */
   5855   return array[2];
   5856 }
   5857 
   5858 const int* get_address (unsigned idx)
   5859 {
   5860   /* Returns array + 0x4000 + 2 * idx. */
   5861   return &array[idx];
   5862 }
   5863 
   5864      * A new command-line option -Wmisspelled-isr has been added. It turns
   5865        off  or turns into errors  warnings that are reported for
   5866        interrupt service routines (ISRs) which don't follow AVR-LibC's
   5867        naming convention of prefixing ISR names with __vector.
   5868      * __builtin_avr_nops(n) is a new [17]built-in function that inserts n
   5869        NOP instructions into the instruction stream. n must be a value
   5870        known at compile time.
   5871 
   5872   IA-32/x86-64
   5873 
   5874      * Support for the AVX-512 Fused Multiply Accumulation Packed Single
   5875        precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
   5876        variable precision (4VNNIW), AVX-512 Vector Population Count
   5877        (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
   5878        been added.
   5879 
   5880   NVPTX
   5881 
   5882      * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
   5883        See the [18]Offloading Wiki on how to configure it.
   5884 
   5885   PowerPC / PowerPC64 / RS6000
   5886 
   5887      * The PowerPC port now uses LRA by default.
   5888      * GCC now diagnoses inline assembly that clobbers register r2. This
   5889        has always been invalid code, and is no longer quietly tolerated.
   5890      * The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been
   5891        enhanced to generate more of the new instructions by default, and
   5892        to provide more built-in functions to generate code for other new
   5893        instructions.
   5894      * The configuration option --enable-gnu-indirect-function is now
   5895        enabled by default on PowerPC GNU/Linux builds.
   5896      * The PowerPC port will now allow 64-bit and 32-bit integer types to
   5897        be allocated to the VSX vector registers (ISA 2.06 and above). In
   5898        addition, on ISA 3.0, 16-bit and 8-bit integer types can be
   5899        allocated in the vector registers. Previously, only 64-bit integer
   5900        types were allowed in the traditional floating point registers.
   5901      * New options -mstack-protector-guard=global,
   5902        -mstack-protector-guard=tls, -mstack-protector-guard-reg=, and
   5903        -mstack-protector-guard-offset= change how the stack protector gets
   5904        the value to use as canary.
   5905 
   5906   S/390, System z, IBM z Systems, IBM Z
   5907 
   5908      * Support for the IBM z14 processor has been added. When using the
   5909        -march=z14 option, the compiler will generate code making use of
   5910        the new instructions introduced with the vector enhancement
   5911        facility and the miscellaneous instruction extension facility 2.
   5912        The -mtune=z14 option enables z14 specific instruction scheduling
   5913        without making use of new instructions.
   5914      * Builtins for the new vector instructions have been added and can be
   5915        enabled using the -mzvector option.
   5916 
   5917   RISC-V
   5918 
   5919      * Support for the RISC-V instruction set has been added.
   5920 
   5921   RX
   5922 
   5923    Basic support for atomic built-in function has been added. It is
   5924    currently implemented by flipping interrupts off and on as needed.
   5925 
   5926   SH
   5927 
   5928      * Support for SH5/SH64 has been removed.
   5929      * Improved utilization of delay slots on SH2A.
   5930      * Improved utilization of zero-displacement conditional branches.
   5931      * The following deprecated options have been removed
   5932           + -mcbranchdi
   5933           + -mcmpeqdi
   5934           + -minvalid-symbols
   5935           + -msoft-atomic
   5936           + -mspace
   5937           + -madjust-unroll
   5938      * Support for the following SH2A instructions has been added
   5939           + mov.b @-Rm,R0
   5940           + mov.w @-Rm,R0
   5941           + mov.l @-Rm,R0
   5942           + mov.b R0,@Rn+
   5943           + mov.w R0,@Rn+
   5944           + mov.l R0,@Rn+
   5945 
   5946   SPARC
   5947 
   5948      * The SPARC port now uses LRA by default.
   5949      * Support for the new Subtract-Extended-with-Carry instruction
   5950        available in SPARC M7 (Niagara 7) has been added.
   5951 
   5952 Operating Systems
   5953 
   5954   AIX
   5955 
   5956      * Visibility support has been enabled for AIX 7.1 and above.
   5957 
   5958   Fuchsia
   5959 
   5960      * Support has been added for the [19]Fuchsia OS.
   5961 
   5962   RTEMS
   5963 
   5964      * The ABI changes on ARM so that no short enums are used by default.
   5965 
   5966 Other significant improvements
   5967 
   5968      * -fverbose-asm previously emitted information on the meanings of
   5969        assembly expressions. This has been extended so that it now also
   5970        prints comments showing the source lines that correspond to the
   5971        assembly, making it easier to read the generated assembly
   5972        (especially with larger functions). For example, given this C
   5973        source file:
   5974 
   5975 int test (int n)
   5976 {
   5977   int i;
   5978   int total = 0;
   5979 
   5980   for (i = 0; i < n; i++)
   5981     total += i * i;
   5982   return total;
   5983 }
   5984 
   5985        -fverbose-asm now gives output similar to this for the function
   5986        body (when compiling for x86_64, with -Os):
   5987 
   5988        .text
   5989        .globl  test
   5990        .type   test, @@function
   5991 test:
   5992 .LFB0:
   5993        .cfi_startproc
   5994 # example.c:4:   int total = 0;
   5995        xorl    %eax, %eax      # <retval>
   5996 # example.c:6:   for (i = 0; i < n; i++)
   5997        xorl    %edx, %edx      # i
   5998 .L2:
   5999 # example.c:6:   for (i = 0; i < n; i++)
   6000        cmpl    %edi, %edx      # n, i
   6001        jge     .L5     #,
   6002 # example.c:7:     total += i * i;
   6003        movl    %edx, %ecx      # i, tmp92
   6004        imull   %edx, %ecx      # i, tmp92
   6005 # example.c:6:   for (i = 0; i < n; i++)
   6006        incl    %edx    # i
   6007 # example.c:7:     total += i * i;
   6008        addl    %ecx, %eax      # tmp92, <retval>
   6009        jmp     .L2     #
   6010 .L5:
   6011 # example.c:10: }
   6012        ret
   6013        .cfi_endproc
   6014 
   6015      * Two new options have been added for printing fix-it hints:
   6016           + -fdiagnostics-parseable-fixits allows for fix-it hints to be
   6017             emitted in a machine-readable form, suitable for consumption
   6018             by IDEs. For example, given:
   6019 
   6020 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   6021 you mean 'color'?
   6022    return ptr->colour;
   6023                ^~~~~~
   6024                color
   6025 
   6026             it will emit:
   6027 
   6028 fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
   6029 
   6030           + -fdiagnostics-generate-patch will print a patch in "unified"
   6031             format after any diagnostics are printed, showing the result
   6032             of applying all fix-it hints. For the above example it would
   6033             emit:
   6034 
   6035 --- spellcheck-fields.cc
   6036 +++ spellcheck-fields.cc
   6037 @@ -49,5 +49,5 @@
   6038 
   6039  color get_color(struct s *ptr)
   6040  {
   6041 -  return ptr->colour;
   6042 +  return ptr->color;
   6043  }
   6044 
   6045      * The gcc and g++ driver programs will now provide suggestions for
   6046        misspelled arguments to command-line options.
   6047 
   6048 $ gcc -c test.c -ftls-model=global-dinamic
   6049 gcc: error: unknown TLS model 'global-dinamic'
   6050 gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec lo
   6051 cal-dynamic local-exec; did you mean 'global-dynamic'?
   6052 
   6053      * The compiler will now provide suggestions for misspelled
   6054        parameters.
   6055 
   6056 $ gcc -c test.c --param max-early-inliner-iteration=3
   6057 cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'ma
   6058 x-early-inliner-iterations'?
   6059 
   6060      * Profile-guided optimization (PGO) instrumentation, as well as test
   6061        coverage (GCOV), can newly instrument constructors (functions marks
   6062        with __attribute__((constructor))), destructors and C++
   6063        constructors (and destructors) of classes that are used as the type
   6064        of a global variable.
   6065      * A new option -fprofile-update=atomic prevents creation of corrupted
   6066        profiles created during an instrumentation run (-fprofile=generate)
   6067        of an application. The downside of the option is a speed penalty.
   6068        Providing -pthread on the command line selects atomic profile
   6069        updating (when supported by the target).
   6070      * GCC's already extensive testsuite has gained some new capabilities,
   6071        to further improve the reliability of the compiler:
   6072           + GCC now has an internal unit-testing API and a suite of tests
   6073             for programmatic self-testing of subsystems.
   6074           + GCC's C front end has been extended so that it can parse dumps
   6075             of GCC's internal representations, allowing for DejaGnu tests
   6076             that more directly exercise specific optimization passes. This
   6077             covers both the [20]GIMPLE representation (for testing
   6078             higher-level optimizations) and the [21]RTL representation,
   6079             allowing for more direct testing of lower-level details, such
   6080             as register allocation and instruction selection.
   6081 
   6082 GCC 7.1
   6083 
   6084    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   6085    system that are known to be fixed in the 7.1 release. This list might
   6086    not be complete (that is, it is possible that some PRs that have been
   6087    fixed are not listed here).
   6088 
   6089 GCC 7.2
   6090 
   6091    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   6092    system that are known to be fixed in the 7.2 release. This list might
   6093    not be complete (that is, it is possible that some PRs that have been
   6094    fixed are not listed here).
   6095 
   6096   Target Specific Changes
   6097 
   6098     SPARC
   6099 
   6100      * Support for the SPARC M8 processor has been added.
   6101      * The switches -mfix-ut700 and -mfix-gr712rc have been added to work
   6102        around an erratum in LEON3FT processors.
   6103      * Use of the Floating-point Multiply Single to Double (FsMULd)
   6104        instruction can now be controlled by the -mfsmuld and -fno-fsmuld
   6105        options.
   6106 
   6107   Operating Systems
   6108 
   6109     RTEMS
   6110 
   6111      * The Ada run-time support uses now thread-local storage (TLS).
   6112      * Support for RISC-V has been added.
   6113      * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
   6114        double has been added.
   6115 
   6116 GCC 7.3
   6117 
   6118    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   6119    system that are known to be fixed in the 7.3 release. This list might
   6120    not be complete (that is, it is possible that some PRs that have been
   6121    fixed are not listed here).
   6122 
   6123   Target Specific Changes
   6124 
   6125     SPARC
   6126 
   6127      * Workarounds for the four [25]LEON3FT errata GRLIB-TN-0010..0013
   6128        have been added. Relevant errata are activated by the target
   6129        specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
   6130 
   6131   Operating Systems
   6132 
   6133     RTEMS
   6134 
   6135      * Support has been added for Epiphany target.
   6136 
   6137 GCC 7.4
   6138 
   6139    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   6140    system that are known to be fixed in the 7.4 release. This list might
   6141    not be complete (that is, it is possible that some PRs that have been
   6142    fixed are not listed here).
   6143 
   6144 GCC 7.5
   6145 
   6146    This is the [27]list of problem reports (PRs) from GCC's bug tracking
   6147    system that are known to be fixed in the 7.5 release. This list might
   6148    not be complete (that is, it is possible that some PRs that have been
   6149    fixed are not listed here).
   6150 
   6151 
   6152     For questions related to the use of GCC, please consult these web
   6153     pages and the [28]GCC manuals. If that fails, the
   6154     [29]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6155     web pages and the development of GCC are welcome on our developer
   6156     list at [30]gcc (a] gcc.gnu.org. All of [31]our lists have public
   6157     archives.
   6158 
   6159    Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
   6160    distribution of this entire article is permitted in any medium,
   6161    provided this notice is preserved.
   6162 
   6163    These pages are [33]maintained by the GCC team. Last modified
   6164    2022-10-26.
   6165 
   6166 References
   6167 
   6168    1. https://gcc.gnu.org/gcc-7/porting_to.html
   6169    2. https://gcc.gnu.org/onlinedocs/index.html#current
   6170    3. https://gcc.gnu.org/wiki/LRAIsDefault
   6171    4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
   6172    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
   6173    6. https://gcc.gnu.org/wiki/OpenACC
   6174    7. https://gcc.gnu.org/wiki/Offloading
   6175    8. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
   6176    9. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   6177   10. https://wg21.link/p0136
   6178   11. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
   6179   12. https://www.openmp.org/specifications/
   6180   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
   6181   14. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
   6182   15. https://gcc.gnu.org/install/configure.html
   6183   16. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
   6184   17. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
   6185   18. https://gcc.gnu.org/wiki/Offloading
   6186   19. https://fuchsia.googlesource.com/
   6187   20. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
   6188   21. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
   6189   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
   6190   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
   6191   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
   6192   25. https://www.gaisler.com/index.php/information/app-tech-notes
   6193   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
   6194   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
   6195   28. https://gcc.gnu.org/onlinedocs/
   6196   29. mailto:gcc-help (a] gcc.gnu.org
   6197   30. mailto:gcc (a] gcc.gnu.org
   6198   31. https://gcc.gnu.org/lists.html
   6199   32. https://www.fsf.org/
   6200   33. https://gcc.gnu.org/about.html
   6201 ======================================================================
   6202 http://gcc.gnu.org/gcc-6/index.html
   6203                               GCC 6 Release Series
   6204 
   6205    (This release series is no longer supported.)
   6206 
   6207    October 26, 2018
   6208 
   6209    The [1]GNU project and the GCC developers are pleased to announce the
   6210    release of GCC 6.5.
   6211 
   6212    This release is a bug-fix release, containing fixes for regressions in
   6213    GCC 6.4 relative to previous releases of GCC.
   6214 
   6215 Release History
   6216 
   6217    GCC 6.5
   6218           October 26, 2018 ([2]changes, [3]documentation)
   6219 
   6220    GCC 6.4
   6221           July 4, 2017 ([4]changes, [5]documentation)
   6222 
   6223    GCC 6.3
   6224           December 21, 2016 ([6]changes, [7]documentation)
   6225 
   6226    GCC 6.2
   6227           August 22, 2016 ([8]changes, [9]documentation)
   6228 
   6229    GCC 6.1
   6230           April 27, 2016 ([10]changes, [11]documentation)
   6231 
   6232 References and Acknowledgements
   6233 
   6234    GCC used to stand for the GNU C Compiler, but since the compiler
   6235    supports several other languages aside from C, it now stands for the
   6236    GNU Compiler Collection.
   6237 
   6238    A list of [12]successful builds is updated as new information becomes
   6239    available.
   6240 
   6241    The GCC developers would like to thank the numerous people that have
   6242    contributed new features, improvements, bug fixes, and other changes as
   6243    well as test results to GCC. This [13]amazing group of volunteers is
   6244    what makes GCC successful.
   6245 
   6246    For additional information about GCC please refer to the [14]GCC
   6247    project web site or contact the [15]GCC development mailing list.
   6248 
   6249    To obtain GCC please use [16]our mirror sites or [17]our version
   6250    control system.
   6251 
   6252 
   6253     For questions related to the use of GCC, please consult these web
   6254     pages and the [18]GCC manuals. If that fails, the
   6255     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6256     web pages and the development of GCC are welcome on our developer
   6257     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   6258     archives.
   6259 
   6260    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   6261    distribution of this entire article is permitted in any medium,
   6262    provided this notice is preserved.
   6263 
   6264    These pages are [23]maintained by the GCC team. Last modified
   6265    2024-05-30.
   6266 
   6267 References
   6268 
   6269    1. http://www.gnu.org/
   6270    2. https://gcc.gnu.org/gcc-6/changes.html
   6271    3. https://gcc.gnu.org/onlinedocs/6.5.0/
   6272    4. https://gcc.gnu.org/gcc-6/changes.html
   6273    5. https://gcc.gnu.org/onlinedocs/6.4.0/
   6274    6. https://gcc.gnu.org/gcc-6/changes.html
   6275    7. https://gcc.gnu.org/onlinedocs/6.3.0/
   6276    8. https://gcc.gnu.org/gcc-6/changes.html
   6277    9. https://gcc.gnu.org/onlinedocs/6.2.0/
   6278   10. https://gcc.gnu.org/gcc-6/changes.html
   6279   11. https://gcc.gnu.org/onlinedocs/6.1.0/
   6280   12. https://gcc.gnu.org/gcc-6/buildstat.html
   6281   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   6282   14. https://gcc.gnu.org/index.html
   6283   15. mailto:gcc (a] gcc.gnu.org
   6284   16. https://gcc.gnu.org/mirrors.html
   6285   17. https://gcc.gnu.org/git.html
   6286   18. https://gcc.gnu.org/onlinedocs/
   6287   19. mailto:gcc-help (a] gcc.gnu.org
   6288   20. mailto:gcc (a] gcc.gnu.org
   6289   21. https://gcc.gnu.org/lists.html
   6290   22. https://www.fsf.org/
   6291   23. https://gcc.gnu.org/about.html
   6292 ======================================================================
   6293 http://gcc.gnu.org/gcc-6/changes.html
   6294                               GCC 6 Release Series
   6295                         Changes, New Features, and Fixes
   6296 
   6297    This page is a brief summary of some of the huge number of improvements
   6298    in GCC 6. For more information, see the [1]Porting to GCC 6 page and
   6299    the [2]full GCC documentation.
   6300 
   6301 Caveats
   6302 
   6303      * The default mode for C++ is now -std=gnu++14 instead of
   6304        -std=gnu++98.
   6305      * Support for a number of older systems and recently unmaintained or
   6306        untested target ports of GCC has been declared obsolete in GCC 6.
   6307        Unless there is activity to revive them, the next release of GCC
   6308        will have their sources permanently removed.
   6309        The following ports for individual systems on particular
   6310        architectures have been obsoleted:
   6311           + SH5 / SH64 (sh64-*-*) as announced [3]here.
   6312      * The AVR port requires binutils version 2.26.1 or later for the fix
   6313        for [4]PR71151 to work.
   6314      * The GCC 6.5 release has an accidental ABI incompatibility for
   6315        nested std::pair objects, for more details see [5]PR 87822. The bug
   6316        causes a layout change for pairs where the first member is also a
   6317        pair, e.g. std::pair<std::pair<X, Y>, Z>. The GCC 6 release series
   6318        is closed so the bug in GCC 6.5 will not be fixed upstream, but
   6319        there is a patch in the bug report to allow it to be fixed by
   6320        anybody packaging GCC 6.5 or installing it themselves.
   6321 
   6322 General Optimizer Improvements
   6323 
   6324      * UndefinedBehaviorSanitizer gained a new sanitization option,
   6325        -fsanitize=bounds-strict, which enables strict checking of array
   6326        bounds. In particular, it enables -fsanitize=bounds as well as
   6327        instrumentation of flexible array member-like arrays.
   6328      * Type-based alias analysis now disambiguates accesses to different
   6329        pointers. This improves precision of the alias oracle by about
   6330        20-30% on higher-level C++ programs. Programs doing invalid type
   6331        punning of pointer types may now need -fno-strict-aliasing to work
   6332        correctly.
   6333      * Alias analysis now correctly supports the weakref and alias
   6334        attributes. This allows accessing both a variable and its alias in
   6335        one translation unit which is common with link-time optimization.
   6336      * Value range propagation now assumes that the this pointer in C++
   6337        member functions is non-null. This eliminates common null pointer
   6338        checks but also breaks some non-conforming code-bases (such as
   6339        Qt-5, Chromium, KDevelop). As a temporary work-around
   6340        -fno-delete-null-pointer-checks can be used. Wrong code can be
   6341        identified by using -fsanitize=undefined.
   6342      * Link-time optimization improvements:
   6343           + warning and error attributes are now correctly preserved by
   6344             declaration linking and thus -D_FORTIFY_SOURCE=2 is now
   6345             supported with -flto.
   6346           + Type merging was fixed to handle C and Fortran
   6347             interoperability rules as defined by the Fortran 2008 language
   6348             standard.
   6349             As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
   6350             with char in all cases because it is an array while char is
   6351             scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
   6352             general, this inter-operability cannot be implemented, for
   6353             example on targets where the argument passing convention for
   6354             arrays differs from scalars.
   6355           + More type information is now preserved at link time, reducing
   6356             the loss of accuracy of the type-based alias analysis compared
   6357             to builds without link-time optimization.
   6358           + Invalid type punning on global variables and declarations is
   6359             now reported with -Wodr-type-mismatch.
   6360           + The size of LTO object files was reduced by about 11%
   6361             (measured by compiling Firefox 46.0).
   6362           + Link-time parallelization (enabled using -flto=n) was
   6363             significantly improved by decreasing the size of streamed data
   6364             when partitioning programs. The size of streamed IL while
   6365             compiling Firefox 46.0 was reduced by 66%.
   6366           + The linker plugin was extended to pass information about the
   6367             type of binary produced to the GCC back end. (That can also be
   6368             controlled manually by -flinker-output.) This makes it
   6369             possible to properly configure the code generator and support
   6370             incremental linking. Incremental linking of LTO objects by gcc
   6371             -r is now supported for plugin-enabled setups.
   6372             There are two ways to perform incremental linking:
   6373               1. Linking by ld -r will result in an object file with all
   6374                  sections from individual object files mechanically
   6375                  merged. This delays the actual link-time optimization to
   6376                  the final linking step and thus permits whole program
   6377                  optimization. Linking the final binary with such object
   6378                  files is however slower.
   6379               2. Linking by gcc -r will lead to link-time optimization and
   6380                  emit the final binary into the object file. Linking such
   6381                  an object file is fast but avoids any benefits from whole
   6382                  program optimization.
   6383             GCC 7 will support incremental link-time optimization with gcc
   6384             -r.
   6385      * Inter-procedural optimization improvements:
   6386           + Basic jump threading is now performed before profile
   6387             construction and inline analysis, resulting in more realistic
   6388             size and time estimates that drive the heuristics of the
   6389             inliner and function cloning passes.
   6390           + Function cloning now more aggressively eliminates unused
   6391             function parameters.
   6392 
   6393 New Languages and Language specific improvements
   6394 
   6395    Compared to GCC 5, the GCC 6 release series includes a much improved
   6396    implementation of the [6]OpenACC 2.0a specification. Highlights are:
   6397      * In addition to single-threaded host-fallback execution, offloading
   6398        is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
   6399        little-endian GNU/Linux host systems. For nvptx offloading, with
   6400        the OpenACC parallel construct, the execution model allows for an
   6401        arbitrary number of gangs, up to 32 workers, and 32 vectors.
   6402      * Initial support for parallelized execution of OpenACC kernels
   6403        constructs:
   6404           + Parallelization of a kernels region is switched on by
   6405             -fopenacc combined with -O2 or higher.
   6406           + Code is offloaded onto multiple gangs, but executes with just
   6407             one worker, and a vector length of 1.
   6408           + Directives inside a kernels region are not supported.
   6409           + Loops with reductions can be parallelized.
   6410           + Only kernels regions with one loop nest are parallelized.
   6411           + Only the outer-most loop of a loop nest can be parallelized.
   6412           + Loop nests containing sibling loops are not parallelized.
   6413        Typically, using the OpenACC parallel construct gives much better
   6414        performance, compared to the initial support of the OpenACC kernels
   6415        construct.
   6416      * The device_type clause is not supported. The bind and nohost
   6417        clauses are not supported. The host_data directive is not supported
   6418        in Fortran.
   6419      * Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
   6420      * Usage of OpenACC constructs inside multithreaded contexts (such as
   6421        created by OpenMP, or pthread programming) is not supported.
   6422      * If a call to the acc_on_device function has a compile-time constant
   6423        argument, the function call evaluates to a compile-time constant
   6424        value only for C and C++ but not for Fortran.
   6425 
   6426    See the [7]OpenACC and [8]Offloading wiki pages for further
   6427    information.
   6428 
   6429   C family
   6430 
   6431      * Version 4.5 of the [9]OpenMP specification is now supported in the
   6432        C and C++ compilers.
   6433      * The C and C++ compilers now support attributes on enumerators. For
   6434        instance, it is now possible to mark enumerators as deprecated:
   6435 
   6436 enum {
   6437   newval,
   6438   oldval __attribute__ ((deprecated ("too old")))
   6439 };
   6440 
   6441      * Source locations for the C and C++ compilers are now tracked as
   6442        ranges, rather than just points, making it easier to identify the
   6443        subexpression of interest within a complicated expression. For
   6444        example:
   6445 
   6446 test.cc: In function 'int test(int, int, foo, int, int)':
   6447 test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
   6448 )
   6449    return p + q * r * s + t;
   6450               ~~^~~
   6451 
   6452        In addition, there is now initial support for precise diagnostic
   6453        locations within strings:
   6454 
   6455 format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
   6456 t' argument [-Wformat=]
   6457    printf("%*d");
   6458             ^
   6459 
   6460      * Diagnostics can now contain "fix-it hints", which are displayed in
   6461        context underneath the relevant source code. For example:
   6462 
   6463 fixits.c: In function 'bad_deref':
   6464 fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
   6465    return ptr.x;
   6466              ^
   6467              ->
   6468 
   6469      * The C and C++ compilers now offer suggestions for misspelled field
   6470        names:
   6471 
   6472 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   6473 you mean 'color'?
   6474    return ptr->colour;
   6475                ^~~~~~
   6476 
   6477      * New command-line options have been added for the C and C++
   6478        compilers:
   6479           + -Wshift-negative-value warns about left shifting a negative
   6480             value.
   6481           + -Wshift-overflow warns about left shift overflows. This
   6482             warning is enabled by default. -Wshift-overflow=2 also warns
   6483             about left-shifting 1 into the sign bit.
   6484           + -Wtautological-compare warns if a self-comparison always
   6485             evaluates to true or false. This warning is enabled by -Wall.
   6486           + -Wnull-dereference warns if the compiler detects paths that
   6487             trigger erroneous or undefined behavior due to dereferencing a
   6488             null pointer. This option is only active when
   6489             -fdelete-null-pointer-checks is active, which is enabled by
   6490             optimizations in most targets. The precision of the warnings
   6491             depends on the optimization options used.
   6492           + -Wduplicated-cond warns about duplicated conditions in an
   6493             if-else-if chain.
   6494           + -Wmisleading-indentation warns about places where the
   6495             indentation of the code gives a misleading idea of the block
   6496             structure of the code to a human reader. For example, given
   6497             [10]CVE-2014-1266:
   6498 
   6499 sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
   6500 sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
   6501 g-indentation]
   6502     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
   6503     ^~
   6504 sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
   6505 indented as if it is guarded by the 'if'
   6506         goto fail;
   6507         ^~~~
   6508 
   6509             This warning is enabled by -Wall.
   6510      * The C and C++ compilers now emit saner error messages if
   6511        merge-conflict markers are present in a source file.
   6512 
   6513 test.c:3:1: error: version control conflict marker in file
   6514  <<<<<<< HEAD
   6515  ^~~~~~~
   6516 
   6517   C
   6518 
   6519      * It is possible to disable warnings when an initialized field of a
   6520        structure or a union with side effects is being overridden when
   6521        using designated initializers via a new warning option
   6522        -Woverride-init-side-effects.
   6523      * A new type attribute scalar_storage_order applying to structures
   6524        and unions has been introduced. It specifies the storage order (aka
   6525        endianness) in memory of scalar fields in structures or unions.
   6526 
   6527   C++
   6528 
   6529      * The default mode has been changed to -std=gnu++14.
   6530      * [11]C++ Concepts are now supported when compiling with -fconcepts.
   6531      * -flifetime-dse is more aggressive in dead-store elimination in
   6532        situations where a memory store to a location precedes a
   6533        constructor to that memory location.
   6534      * G++ now supports [12]C++17 fold expressions, u8 character literals,
   6535        extended static_assert, and nested namespace definitions.
   6536      * G++ now allows constant evaluation for all non-type template
   6537        arguments.
   6538      * G++ now supports C++ Transactional Memory when compiling with
   6539        -fgnu-tm.
   6540 
   6541     Runtime Library (libstdc++)
   6542 
   6543      * Extensions to the C++ Library to support mathematical special
   6544        functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
   6545      * Experimental support for C++17, including the following new
   6546        features:
   6547           + std::uncaught_exceptions function (this is also available for
   6548             -std=gnu++NN modes);
   6549           + new member functions try_emplace and insert_or_assign for
   6550             unique_key maps;
   6551           + non-member functions std::size, std::empty, and std::data for
   6552             accessing containers and arrays;
   6553           + std::invoke;
   6554           + std::shared_mutex;
   6555           + std::void_t and std::bool_constant metaprogramming utilities.
   6556        Thanks to Ville Voutilainen for contributing many of the C++17
   6557        features.
   6558      * An experimental implementation of the File System TS.
   6559      * Experimental support for most features of the second version of the
   6560        Library Fundamentals TS. This includes polymorphic memory resources
   6561        and array support in shared_ptr, thanks to Fan You.
   6562      * Some assertions checked by Debug Mode can now also be enabled by
   6563        _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
   6564        have less run-time overhead than the full _GLIBCXX_DEBUG checks and
   6565        don't affect the library ABI, so can be enabled per-translation
   6566        unit.
   6567      * Timed mutex types are supported on more targets, including Darwin.
   6568      * Improved std::locale support for DragonFly and FreeBSD, thanks to
   6569        John Marino and Andreas Tobler.
   6570 
   6571   Fortran
   6572 
   6573      * Fortran 2008 SUBMODULE support.
   6574      * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
   6575        support.
   6576      * Improved support for Fortran 2003 deferred-length character
   6577        variables.
   6578      * Improved support for OpenMP and OpenACC.
   6579      * The MATMUL intrinsic is now inlined for straightforward cases if
   6580        front-end optimization is active. The maximum size for inlining can
   6581        be set to n with the -finline-matmul-limit=n option and turned off
   6582        with -finline-matmul-limit=0.
   6583      * The -Wconversion-extra option will warn about REAL constants which
   6584        have excess precision for their kind.
   6585      * The -Winteger-division option has been added, which warns about
   6586        divisions of integer constants which are truncated. This option is
   6587        included in -Wall by default.
   6588 
   6589 libgccjit
   6590 
   6591      * The driver code is now run in-process within libgccjit, providing a
   6592        small speed-up of the compilation process.
   6593      * The API has gained entrypoints for
   6594           + [13]timing how long was spent in different parts of code,
   6595           + [14]creating switch statements,
   6596           + [15]allowing unreachable basic blocks in a function, and
   6597           + [16]adding arbitrary command-line options to a compilation.
   6598 
   6599 New Targets and Target Specific Improvements
   6600 
   6601   AArch64
   6602 
   6603      * A number of AArch64-specific options have been added. The most
   6604        important ones are summarised in this section; for more detailed
   6605        information please refer to the documentation.
   6606      * The command-line options -march=native, -mcpu=native and
   6607        -mtune=native are now available on native AArch64 GNU/Linux
   6608        systems. Specifying these options causes GCC to auto-detect the
   6609        host CPU and choose the optimal setting for that system.
   6610      * -fpic is now supported when generating code for the small code
   6611        model (-mcmodel=small). The size of the global offset table (GOT)
   6612        is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
   6613        ILP32 SysV ABI.
   6614      * The AArch64 port now supports target attributes and pragmas. Please
   6615        refer to the [17]documentation for details of available attributes
   6616        and pragmas as well as usage instructions.
   6617      * Link-time optimization across translation units with different
   6618        target-specific options is now supported.
   6619      * The option -mtls-size= is now supported. It can be used to specify
   6620        the bit size of TLS offsets, allowing GCC to generate better TLS
   6621        instruction sequences.
   6622      * The option -fno-plt is now fully functional.
   6623      * The ARMv8.1-A architecture and the Large System Extensions are now
   6624        supported. They can be used by specifying the -march=armv8.1-a
   6625        option. Additionally, the +lse option extension can be used in a
   6626        similar fashion to other option extensions. The Large System
   6627        Extensions introduce new instructions that are used in the
   6628        implementation of atomic operations.
   6629      * The ACLE half-precision floating-point type __fp16 is now supported
   6630        in the C and C++ languages.
   6631      * The ARM Cortex-A35 processor is now supported via the
   6632        -mcpu=cortex-a35 and -mtune=cortex-a35 options as well as the
   6633        equivalent target attributes and pragmas.
   6634      * The Qualcomm QDF24xx processor is now supported via the
   6635        -mcpu=qdf24xx and -mtune=qdf24xx options as well as the equivalent
   6636        target attributes and pragmas.
   6637      * Code generation for the ARM Cortex-A57 processor is improved. Among
   6638        general code generation improvements, a better algorithm is added
   6639        for allocating registers to floating-point multiply-accumulate
   6640        instructions offering increased performance when compiling with
   6641        -mcpu=cortex-a57 or -mtune=cortex-a57.
   6642      * Code generation for the ARM Cortex-A53 processor is improved. A
   6643        more accurate instruction scheduling model for the processor is now
   6644        used, and a number of compiler tuning parameters have been set to
   6645        offer increased performance when compiling with -mcpu=cortex-a53 or
   6646        -mtune=cortex-a53.
   6647      * Code generation for the Samsung Exynos M1 processor is improved. A
   6648        more accurate instruction scheduling model for the processor is now
   6649        used, and a number of compiler tuning parameters have been set to
   6650        offer increased performance when compiling with -mcpu=exynos-m1 or
   6651        -mtune=exynos-m1.
   6652      * Improvements in the generation of conditional branches and literal
   6653        pools allow the compiler to compile functions of a large size.
   6654        Constant pools are now placed into separate rodata sections. The
   6655        new option -mpc-relative-literal-loads generates per-function
   6656        literal pools, limiting the maximum size of functions to 1MiB.
   6657      * Several correctness issues generating Advanced SIMD instructions
   6658        for big-endian targets have been fixed resulting in improved code
   6659        generation for ACLE intrinsics with -mbig-endian.
   6660 
   6661   ARM
   6662 
   6663      * Support for revisions of the ARM architecture prior to ARMv4t has
   6664        been deprecated and will be removed in a future GCC release. The
   6665        -mcpu and -mtune values that are deprecated are: arm2, arm250,
   6666        arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
   6667        arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
   6668        arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
   6669        strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
   6670        arm7tdmi is still supported. The values of -march that are
   6671        deprecated are: armv2,armv2a,armv3,armv3m,armv4.
   6672      * The ARM port now supports target attributes and pragmas. Please
   6673        refer to the [18]documentation for details of available attributes
   6674        and pragmas as well as usage instructions.
   6675      * Support has been added for the following processors (GCC
   6676        identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
   6677        Cortex-A35 (cortex-a35) and ARM Cortex-R8 (cortex-r8). The GCC
   6678        identifiers can be used as arguments to the -mcpu or -mtune
   6679        options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
   6680 
   6681   Heterogeneous Systems Architecture
   6682 
   6683      * GCC can now generate HSAIL (Heterogeneous System Architecture
   6684        Intermediate Language) for simple OpenMP device constructs if
   6685        configured with --enable-offload-targets=hsa. A new libgomp plugin
   6686        then runs the HSA GPU kernels implementing these constructs on HSA
   6687        capable GPUs via a standard HSA run time.
   6688        If the HSA compilation back end determines it cannot output HSAIL
   6689        for a particular input, it gives a warning by default. These
   6690        warnings can be suppressed with -Wno-hsa. To give a few examples,
   6691        the HSA back end does not implement compilation of code using
   6692        function pointers, automatic allocation of variable sized arrays,
   6693        functions with variadic arguments as well as a number of other less
   6694        common programming constructs.
   6695        When compilation for HSA is enabled, the compiler attempts to
   6696        compile composite OpenMP constructs
   6697 
   6698 #pragma omp target teams distribute parallel for
   6699 
   6700        into parallel HSA GPU kernels.
   6701 
   6702   IA-32/x86-64
   6703 
   6704      * GCC now supports the Intel CPU named Skylake with AVX-512
   6705        extensions through -march=skylake-avx512. The switch enables the
   6706        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   6707        AVX-512DQ.
   6708      * Support for new AMD instructions monitorx and mwaitx has been
   6709        added. This includes new intrinsic and built-in support. It is
   6710        enabled through option -mmwaitx. The instructions monitorx and
   6711        mwaitx implement the same functionality as the old monitor and
   6712        mwait instructions. In addition, mwaitx adds a configurable timer.
   6713        The timer value is received as third argument and stored in
   6714        register %ebx.
   6715      * x86-64 targets now allow stack realignment from a word-aligned
   6716        stack pointer using the command-line option -mstackrealign or
   6717        __attribute__ ((force_align_arg_pointer)). This allows functions
   6718        compiled with a vector-aligned stack to be invoked from objects
   6719        that keep only word-alignment.
   6720      * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
   6721        can be used to access data via the %fs and %gs segments without
   6722        having to resort to inline assembly. Please refer to the
   6723        [19]documentation for usage instructions.
   6724      * Support for AMD Zen (family 17h) processors is now available
   6725        through the -march=znver1 and -mtune=znver1 options.
   6726 
   6727   MeP
   6728 
   6729      * Support for the MeP (mep-elf) architecture has been deprecated and
   6730        will be removed in a future GCC release.
   6731 
   6732   MSP430
   6733 
   6734      * The MSP430 compiler now has the ability to automatically distribute
   6735        code and data between low memory (addresses below 64K) and high
   6736        memory. This only applies to parts that actually have both memory
   6737        regions and only if the linker script for the part has been
   6738        specifically set up to support this feature.
   6739        A new attribute of either can be applied to both functions and
   6740        data, and this tells the compiler to place the object into low
   6741        memory if there is room and into high memory otherwise. Two other
   6742        new attributes - lower and upper - can be used to explicitly state
   6743        that an object should be placed in the specified memory region. If
   6744        there is not enough left in that region the compilation will fail.
   6745        Two new command-line options - -mcode-region=[lower|upper|either]
   6746        and -mdata-region=[lower|upper|either] - can be used to tell the
   6747        compiler what to do with objects that do not have one of these new
   6748        attributes.
   6749 
   6750   PowerPC / PowerPC64 / RS6000
   6751 
   6752      * PowerPC64 now supports IEEE 128-bit floating-point using the
   6753        __float128 data type. In GCC 6, this is not enabled by default, but
   6754        you can enable it with -mfloat128. The IEEE 128-bit floating-point
   6755        support requires the use of the VSX instruction set. IEEE 128-bit
   6756        floating-point values are passed and returned as a single vector
   6757        value. The software emulator for IEEE 128-bit floating-point
   6758        support is only built on PowerPC GNU/Linux systems where the
   6759        default CPU is at least power7. On future ISA 3.0 systems (POWER 9
   6760        and later), you will be able to use the -mfloat128-hardware option
   6761        to use the ISA 3.0 instructions that support IEEE 128-bit
   6762        floating-point. An additional type (__ibm128) has been added to
   6763        refer to the IBM extended double type that normally implements long
   6764        double. This will allow for a future transition to implementing
   6765        long double with IEEE 128-bit floating-point.
   6766      * Basic support has been added for POWER9 hardware that will use the
   6767        recently published OpenPOWER ISA 3.0 instructions. The following
   6768        new switches are available:
   6769           + -mcpu=power9: Implement all of the ISA 3.0 instructions
   6770             supported by the compiler.
   6771           + -mtune=power9: In the future, apply tuning for POWER9 systems.
   6772             Currently, POWER8 tunings are used.
   6773           + -mmodulo: Generate code using the ISA 3.0 integer instructions
   6774             (modulus, count trailing zeros, array index support, integer
   6775             multiply/add).
   6776           + -mpower9-fusion: Generate code to suitably fuse instruction
   6777             sequences for a POWER9 system.
   6778           + -mpower9-dform: Generate code to use the new D-form
   6779             (register+offset) memory instructions for the vector
   6780             registers.
   6781           + -mpower9-vector: Generate code using the new ISA 3.0 vector
   6782             (VSX or Altivec) instructions.
   6783           + -mpower9-minmax: Reserved for future development.
   6784           + -mtoc-fusion: Keep TOC entries together to provide more fusion
   6785             opportunities.
   6786      * New constraints have been added to support IEEE 128-bit
   6787        floating-point and ISA 3.0 instructions:
   6788           + wb: Altivec register if -mpower9-dform is enabled.
   6789           + we: VSX register if -mpower9-vector is enabled for 64-bit code
   6790             generation.
   6791           + wo: VSX register if -mpower9-vector is enabled.
   6792           + wp: Reserved for future use if long double is implemented with
   6793             IEEE 128-bit floating-point instead of IBM extended double.
   6794           + wq: VSX register if -mfloat128 is enabled.
   6795           + wF: Memory operand suitable for POWER9 fusion load/store.
   6796           + wG: Memory operand suitable for TOC fusion memory references.
   6797           + wL: Integer constant identifying the element number mfvsrld
   6798             accesses within a vector.
   6799      * Support has been added for __builtin_cpu_is() and
   6800        __builtin_cpu_supports(), allowing for very fast access to
   6801        AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
   6802        glibc 2.23 or later.
   6803      * All hardware transactional memory builtins now correctly behave as
   6804        memory barriers. Programmers can use #ifdef __TM_FENCE__ to
   6805        determine whether their "old" compiler treats the builtins as
   6806        barriers.
   6807      * Split-stack support has been added for gccgo on PowerPC64 for both
   6808        big- and little-endian (but not for 32-bit). The gold linker from
   6809        at least binutils 2.25.1 must be available in the PATH when
   6810        configuring and building gccgo to enable split stack. (The
   6811        requirement for binutils 2.25.1 applies to PowerPC64 only.) The
   6812        split-stack feature allows a small initial stack size to be
   6813        allocated for each goroutine, which increases as needed.
   6814      * GCC on PowerPC now supports the standard lround function.
   6815      * A new configuration option ---with-advance-toolchain=at was added
   6816        for PowerPC 64-bit GNU/Linux systems to use the header files,
   6817        library files, and the dynamic linker from a specific Advance
   6818        Toolchain release instead of the default versions that are provided
   6819        by the GNU/Linux distribution. In general, this option is intended
   6820        for the developers of GCC, and it is not intended for general use.
   6821      * The "q", "S", "T", and "t" asm-constraints have been removed.
   6822      * The "b", "B", "m", "M", and "W" format modifiers have been removed.
   6823 
   6824   S/390, System z, IBM z Systems
   6825 
   6826      * Support for the IBM z13 processor has been added. When using the
   6827        -march=z13 option, the compiler will generate code making use of
   6828        the new instructions and registers introduced with the vector
   6829        extension facility. The -mtune=z13 option enables z13 specific
   6830        instruction scheduling without making use of new instructions.
   6831        Compiling code with -march=z13 reduces the default alignment of
   6832        vector types bigger than 8 bytes to 8. This is an ABI change and
   6833        care must be taken when linking modules compiled with different
   6834        arch levels which interchange variables containing vector type
   6835        values. For newly compiled code the GNU linker will emit a warning.
   6836      * The -mzvector option enables a C/C++ language extension. This
   6837        extension provides a new keyword vector which can be used to define
   6838        vector type variables. (Note: This is not available when enforcing
   6839        strict standard compliance e.g. with -std=c99. Either enable GNU
   6840        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   6841        Additionally a set of overloaded builtins is provided which is
   6842        partially compatible to the PowerPC Altivec builtins. In order to
   6843        make use of these builtins the vecintrin.h header file needs to be
   6844        included.
   6845      * The new command-line options -march=native, and -mtune=native are
   6846        now available on native IBM z Systems. Specifying these options
   6847        causes GCC to auto-detect the host CPU and choose the optimal
   6848        setting for that system. If GCC is unable to detect the host CPU
   6849        these options have no effect.
   6850      * The IBM z Systems port now supports target attributes and pragmas.
   6851        Please refer to the [20]documentation for details of available
   6852        attributes and pragmas as well as usage instructions.
   6853      * -fsplit-stack is now supported as part of the IBM z Systems port.
   6854        This feature requires a recent gold linker to be used.
   6855      * Support for the g5 and g6 -march=/-mtune= CPU level switches has
   6856        been deprecated and will be removed in a future GCC release. -m31
   6857        from now on defaults to -march=z900 if not specified otherwise.
   6858        -march=native on a g5/g6 machine will default to -march=z900.
   6859 
   6860   SH
   6861 
   6862      * Support for SH5 / SH64 has been declared obsolete and will be
   6863        removed in future releases.
   6864      * Support for the FDPIC ABI has been added. It can be enabled using
   6865        the new -mfdpic target option and --enable-fdpic configure option.
   6866 
   6867   SPARC
   6868 
   6869      * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
   6870        change will break binary compatibility with earlier releases for
   6871        code it affects, but this should be pretty rare in practice. The
   6872        conditions are: a 16-byte structure containing a double or a 8-byte
   6873        vector in the second half is passed to a subprogram in slot #15,
   6874        for example as 16th parameter if the first 15 ones have at most 8
   6875        bytes. The double or vector was wrongly passed in floating-point
   6876        register %d32 in lieu of on the stack as per the SPARC calling
   6877        conventions.
   6878 
   6879 Operating Systems
   6880 
   6881   AIX
   6882 
   6883      * DWARF debugging support for AIX 7.1 has been enabled as an optional
   6884        debugging format. A more recent Technology Level (TL) and GCC built
   6885        with that level are required for full exploitation of DWARF
   6886        debugging capabilities.
   6887 
   6888   Linux
   6889 
   6890      * Support for the [21]musl C library was added for the AArch64, ARM,
   6891        MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
   6892        x86_64 targets. It can be selected using the new -mmusl option in
   6893        case musl is not the default libc. GCC defaults to musl libc if it
   6894        is built with a target triplet matching the *-linux-musl* pattern.
   6895 
   6896   RTEMS
   6897 
   6898      * The RTEMS thread model implementation changed. Mutexes now use
   6899        self-contained objects defined in newlib <sys/lock.h> instead of
   6900        Classic API semaphores. The keys for thread specific data and the
   6901        once function are directly defined via <pthread.h>. Self-contained
   6902        condition variables are provided via newlib <sys/lock.h>. The RTEMS
   6903        thread model also supports C++11 threads.
   6904      * OpenMP support now uses self-contained objects provided by newlib
   6905        <sys/lock.h> and offers a significantly better performance compared
   6906        to the POSIX configuration of libgomp. It is possible to configure
   6907        thread pools for each scheduler instance via the environment
   6908        variable GOMP_RTEMS_THREAD_POOLS.
   6909 
   6910   Solaris
   6911 
   6912      * Solaris 12 is now fully supported. Minimal support had already been
   6913        present in GCC 5.3.
   6914      * Solaris 12 provides a full set of startup files (crt1.o, crti.o,
   6915        crtn.o), which GCC now prefers over its own ones.
   6916      * Position independent executables (PIE) are now supported on Solaris
   6917        12.
   6918      * Constructor priority is now supported on Solaris 12 with the system
   6919        linker.
   6920      * libvtv has been ported to Solaris 11 and up.
   6921 
   6922   Windows
   6923 
   6924      * The option -mstackrealign is now automatically activated in 32-bit
   6925        mode whenever the use of SSE instructions is requested.
   6926 
   6927 Other significant improvements
   6928 
   6929      * The gcc and g++ driver programs will now provide suggestions for
   6930        misspelled command-line options.
   6931 
   6932 $ gcc -static-libfortran test.f95
   6933 gcc: error: unrecognized command line option '-static-libfortran'; did you mean
   6934 '-static-libgfortran'?
   6935 
   6936      * The --enable-default-pie configure option enables generation of PIE
   6937        by default.
   6938 
   6939                                     GCC 6.2
   6940 
   6941    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   6942    system that are known to be fixed in the 6.2 release. This list might
   6943    not be complete (that is, it is possible that some PRs that have been
   6944    fixed are not listed here).
   6945 
   6946 Target Specific Changes
   6947 
   6948   SPARC
   6949 
   6950      * Support for --with-cpu-32 and --with-cpu-64 configure options has
   6951        been added on bi-architecture platforms.
   6952      * Support for the SPARC M7 (Niagara 7) processor has been added.
   6953      * Support for the VIS 4.0 instruction set has been added.
   6954 
   6955                                     GCC 6.3
   6956 
   6957    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   6958    system that are known to be fixed in the 6.3 release. This list might
   6959    not be complete (that is, it is possible that some PRs that have been
   6960    fixed are not listed here).
   6961 
   6962 Target Specific Changes
   6963 
   6964   IA-32/x86-64
   6965 
   6966      * Support for the [24]deprecated pcommit instruction has been
   6967        removed.
   6968 
   6969                                     GCC 6.4
   6970 
   6971    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   6972    system that are known to be fixed in the 6.4 release. This list might
   6973    not be complete (that is, it is possible that some PRs that have been
   6974    fixed are not listed here).
   6975 
   6976 Operating Systems
   6977 
   6978   RTEMS
   6979 
   6980      * The ABI changes on ARM so that no short enums are used by default.
   6981 
   6982                                     GCC 6.5
   6983 
   6984    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   6985    system that are known to be fixed in the 6.5 release. This list might
   6986    not be complete (that is, it is possible that some PRs that have been
   6987    fixed are not listed here).
   6988 
   6989 
   6990     For questions related to the use of GCC, please consult these web
   6991     pages and the [27]GCC manuals. If that fails, the
   6992     [28]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6993     web pages and the development of GCC are welcome on our developer
   6994     list at [29]gcc (a] gcc.gnu.org. All of [30]our lists have public
   6995     archives.
   6996 
   6997    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
   6998    distribution of this entire article is permitted in any medium,
   6999    provided this notice is preserved.
   7000 
   7001    These pages are [32]maintained by the GCC team. Last modified
   7002    2023-02-20.
   7003 
   7004 References
   7005 
   7006    1. https://gcc.gnu.org/gcc-6/porting_to.html
   7007    2. https://gcc.gnu.org/onlinedocs/index.html#current
   7008    3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
   7009    4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
   7010    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
   7011    6. https://www.openacc.org/
   7012    7. https://gcc.gnu.org/wiki/OpenACC
   7013    8. https://gcc.gnu.org/wiki/Offloading
   7014    9. https://www.openmp.org/specifications/
   7015   10. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
   7016   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
   7017   12. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   7018   13. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
   7019   14. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
   7020   15. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
   7021   16. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
   7022   17. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
   7023   18. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
   7024   19. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
   7025   20. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
   7026   21. http://www.musl-libc.org/
   7027   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
   7028   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
   7029   24. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   7030   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
   7031   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
   7032   27. https://gcc.gnu.org/onlinedocs/
   7033   28. mailto:gcc-help (a] gcc.gnu.org
   7034   29. mailto:gcc (a] gcc.gnu.org
   7035   30. https://gcc.gnu.org/lists.html
   7036   31. https://www.fsf.org/
   7037   32. https://gcc.gnu.org/about.html
   7038 ======================================================================
   7039 http://gcc.gnu.org/gcc-5/index.html
   7040                               GCC 5 Release Series
   7041 
   7042    (This release series is no longer supported.)
   7043 
   7044    October 10, 2017
   7045 
   7046    The [1]GNU project and the GCC developers are pleased to announce the
   7047    release of GCC 5.5.
   7048 
   7049    This release is a bug-fix release, containing fixes for regressions in
   7050    GCC 5.4 relative to previous releases of GCC.
   7051 
   7052 Release History
   7053 
   7054    GCC 5.5
   7055           October 10, 2017 ([2]changes, [3]documentation)
   7056 
   7057    GCC 5.4
   7058           June 3, 2016 ([4]changes, [5]documentation)
   7059 
   7060    GCC 5.3
   7061           December 4, 2015 ([6]changes, [7]documentation)
   7062 
   7063    GCC 5.2
   7064           July 16, 2015 ([8]changes, [9]documentation)
   7065 
   7066    GCC 5.1
   7067           April 22, 2015 ([10]changes, [11]documentation)
   7068 
   7069 References and Acknowledgements
   7070 
   7071    GCC used to stand for the GNU C Compiler, but since the compiler
   7072    supports several other languages aside from C, it now stands for the
   7073    GNU Compiler Collection.
   7074 
   7075    A list of [12]successful builds is updated as new information becomes
   7076    available.
   7077 
   7078    The GCC developers would like to thank the numerous people that have
   7079    contributed new features, improvements, bug fixes, and other changes as
   7080    well as test results to GCC. This [13]amazing group of volunteers is
   7081    what makes GCC successful.
   7082 
   7083    For additional information about GCC please refer to the [14]GCC
   7084    project web site or contact the [15]GCC development mailing list.
   7085 
   7086    To obtain GCC please use [16]our mirror sites or [17]our version
   7087    control system.
   7088 
   7089 
   7090     For questions related to the use of GCC, please consult these web
   7091     pages and the [18]GCC manuals. If that fails, the
   7092     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7093     web pages and the development of GCC are welcome on our developer
   7094     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   7095     archives.
   7096 
   7097    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   7098    distribution of this entire article is permitted in any medium,
   7099    provided this notice is preserved.
   7100 
   7101    These pages are [23]maintained by the GCC team. Last modified
   7102    2024-05-30.
   7103 
   7104 References
   7105 
   7106    1. http://www.gnu.org/
   7107    2. https://gcc.gnu.org/gcc-5/changes.html
   7108    3. https://gcc.gnu.org/onlinedocs/5.5.0/
   7109    4. https://gcc.gnu.org/gcc-5/changes.html
   7110    5. https://gcc.gnu.org/onlinedocs/5.4.0/
   7111    6. https://gcc.gnu.org/gcc-5/changes.html
   7112    7. https://gcc.gnu.org/onlinedocs/5.3.0/
   7113    8. https://gcc.gnu.org/gcc-5/changes.html
   7114    9. https://gcc.gnu.org/onlinedocs/5.2.0/
   7115   10. https://gcc.gnu.org/gcc-5/changes.html
   7116   11. https://gcc.gnu.org/onlinedocs/5.1.0/
   7117   12. https://gcc.gnu.org/gcc-5/buildstat.html
   7118   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   7119   14. https://gcc.gnu.org/index.html
   7120   15. mailto:gcc (a] gcc.gnu.org
   7121   16. https://gcc.gnu.org/mirrors.html
   7122   17. https://gcc.gnu.org/git.html
   7123   18. https://gcc.gnu.org/onlinedocs/
   7124   19. mailto:gcc-help (a] gcc.gnu.org
   7125   20. mailto:gcc (a] gcc.gnu.org
   7126   21. https://gcc.gnu.org/lists.html
   7127   22. https://www.fsf.org/
   7128   23. https://gcc.gnu.org/about.html
   7129 ======================================================================
   7130 http://gcc.gnu.org/gcc-5/changes.html
   7131                               GCC 5 Release Series
   7132                         Changes, New Features, and Fixes
   7133 
   7134 Caveats
   7135 
   7136      * The default mode for C is now -std=gnu11 instead of -std=gnu89.
   7137      * The C++ runtime library (libstdc++) uses a new ABI by default (see
   7138        [1]below).
   7139      * The Graphite framework for loop optimizations no longer requires
   7140        the CLooG library, only ISL version 0.14 (recommended) or 0.12.2.
   7141        The installation manual contains more information about
   7142        requirements to build GCC.
   7143      * The non-standard C++0x type traits has_trivial_default_constructor,
   7144        has_trivial_copy_constructor and has_trivial_copy_assign have been
   7145        deprecated and will be removed in a future version. The standard
   7146        C++11 traits is_trivially_default_constructible,
   7147        is_trivially_copy_constructible and is_trivially_copy_assignable
   7148        should be used instead.
   7149      * On AVR, support has been added for the devices
   7150        ATtiny4/5/9/10/20/40. This requires Binutils 2.25 or newer.
   7151      * The AVR port uses a new scheme to describe supported devices: For
   7152        each supported device the compiler provides a device-specific
   7153        [2]spec file. If the compiler is used together with AVR-LibC, this
   7154        requires at least GCC 5.2 and a version of AVR-LibC which
   7155        implements [3]feature #44574.
   7156 
   7157 General Optimizer Improvements
   7158 
   7159      * Inter-procedural optimization improvements:
   7160           + An Identical Code Folding (ICF) pass (controlled via
   7161             -fipa-icf) has been added. Compared to the identical code
   7162             folding performed by the Gold linker this pass does not
   7163             require function sections. It also performs merging before
   7164             inlining, so inter-procedural optimizations are aware of the
   7165             code re-use. On the other hand not all unifications performed
   7166             by a linker are doable by GCC which must honor aliasing
   7167             information. During link-time optimization of Firefox, this
   7168             pass unifies about 31000 functions, that is 14% overall.
   7169           + The devirtualization pass was significantly improved by adding
   7170             better support for speculative devirtualization and dynamic
   7171             type detection. About 50% of virtual calls in Firefox are now
   7172             speculatively devirtualized during link-time optimization.
   7173           + A new comdat localization pass allows the linker to eliminate
   7174             more dead code in presence of C++ inline functions.
   7175           + Virtual tables are now optimized. Local aliases are used to
   7176             reduce dynamic linking time of C++ virtual tables on ELF
   7177             targets and data alignment has been reduced to limit data
   7178             segment bloat.
   7179           + A new -fno-semantic-interposition option can be used to
   7180             improve code quality of shared libraries where interposition
   7181             of exported symbols is not allowed.
   7182           + Write-only variables are now detected and optimized out.
   7183           + With profile feedback the function inliner can now bypass
   7184             --param inline-insns-auto and --param inline-insns-single
   7185             limits for hot calls.
   7186           + The IPA reference pass was significantly sped up making it
   7187             feasible to enable -fipa-reference with -fprofile-generate.
   7188             This also solves a bottleneck seen when building Chromium with
   7189             link-time optimization.
   7190           + The symbol table and call-graph API was reworked to C++ and
   7191             simplified.
   7192           + The interprocedural propagation of constants now also
   7193             propagates alignments of pointer parameters. This for example
   7194             means that the vectorizer often does not need to generate loop
   7195             prologues and epilogues to make up for potential
   7196             misalignments.
   7197      * Link-time optimization improvements:
   7198           + One Definition Rule based merging of C++ types has been
   7199             implemented. Type merging enables better devirtualization and
   7200             alias analysis. Streaming extra information needed to merge
   7201             types adds about 2-6% of memory size and object size increase.
   7202             This can be controlled by -flto-odr-type-merging.
   7203           + Command-line optimization and target options are now streamed
   7204             on a per-function basis and honored by the link-time
   7205             optimizer. This change makes link-time optimization a more
   7206             transparent replacement of per-file optimizations. It is now
   7207             possible to build projects that require different optimization
   7208             settings for different translation units (such as -ffast-math,
   7209             -mavx, or -finline). Contrary to earlier GCC releases, the
   7210             optimization and target options passed on the link command
   7211             line are ignored.
   7212             Note that this applies only to those command-line options that
   7213             can be passed to optimize and target attributes. Command-line
   7214             options affecting global code generation (such as -fpic),
   7215             warnings (such as -Wodr), optimizations affecting the way
   7216             static variables are optimized (such as -fcommon), debug
   7217             output (such as -g), and --param parameters can be applied
   7218             only to the whole link-time optimization unit. In these cases,
   7219             it is recommended to consistently use the same options at both
   7220             compile time and link time.
   7221           + GCC bootstrap now uses slim LTO object files.
   7222           + Memory usage and link times were improved. Tree merging was
   7223             sped up, memory usage of GIMPLE declarations and types was
   7224             reduced, and, support for on-demand streaming of variable
   7225             constructors was added.
   7226      * Feedback directed optimization improvements:
   7227           + A new auto-FDO mode uses profiles collected by low overhead
   7228             profiling tools (perf) instead of more expensive program
   7229             instrumentation (via -fprofile-generate). SPEC2006 benchmarks
   7230             on x86-64 improve by 4.7% with auto-FDO and by 7.3% with
   7231             traditional feedback directed optimization.
   7232           + Profile precision was improved in presence of C++ inline and
   7233             extern inline functions.
   7234           + The new gcov-tool utility allows manipulating profiles.
   7235           + Profiles are now more tolerant to source file changes (this
   7236             can be controlled by --param profile-func-internal-id).
   7237      * Register allocation improvements:
   7238           + A new local register allocator (LRA) sub-pass, controlled by
   7239             -flra-remat, implements control-flow sensitive global register
   7240             rematerialization. Instead of spilling and restoring a
   7241             register value, it is recalculated if it is profitable. The
   7242             sub-pass improved SPEC2000 generated code by 1% and 0.5%
   7243             correspondingly on ARM and x86-64.
   7244           + Reuse of the PIC hard register, instead of using a fixed
   7245             register, was implemented on x86/x86-64 targets. This improves
   7246             generated PIC code performance as more hard registers can be
   7247             used. Shared libraries can significantly benefit from this
   7248             optimization. Currently it is switched on only for x86/x86-64
   7249             targets. As RA infrastructure is already implemented for PIC
   7250             register reuse, other targets might follow this in the future.
   7251           + A simple form of inter-procedural RA was implemented. When it
   7252             is known that a called function does not use caller-saved
   7253             registers, save/restore code is not generated around the call
   7254             for such registers. This optimization can be controlled by
   7255             -fipa-ra
   7256           + LRA is now much more effective at generating spills of general
   7257             registers into vector registers instead of memory on
   7258             architectures (e.g., modern Intel processors) where this is
   7259             profitable.
   7260      * UndefinedBehaviorSanitizer gained a few new sanitization options:
   7261           + -fsanitize=float-divide-by-zero: detect floating-point
   7262             division by zero;
   7263           + -fsanitize=float-cast-overflow: check that the result of
   7264             floating-point type to integer conversions do not overflow;
   7265           + -fsanitize=bounds: enable instrumentation of array bounds and
   7266             detect out-of-bounds accesses;
   7267           + -fsanitize=alignment: enable alignment checking, detect
   7268             various misaligned objects;
   7269           + -fsanitize=object-size: enable object size checking, detect
   7270             various out-of-bounds accesses.
   7271           + -fsanitize=vptr: enable checking of C++ member function calls,
   7272             member accesses and some conversions between pointers to base
   7273             and derived classes, detect if the referenced object does not
   7274             have the correct dynamic type.
   7275      * Pointer Bounds Checker, a bounds violation detector, has been added
   7276        and can be enabled via -fcheck-pointer-bounds. Memory accesses are
   7277        instrumented with run-time checks of used pointers against their
   7278        bounds to detect pointer bounds violations (overflows). The Pointer
   7279        Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
   7280        new ISA extension Intel MPX support. See the Pointer Bounds Checker
   7281        [4]Wiki page for more details.
   7282 
   7283 New Languages and Language specific improvements
   7284 
   7285      * [5]OpenMP 4.0 specification offloading features are now supported
   7286        by the C, C++, and Fortran compilers. Generic changes:
   7287           + Infrastructure (suitable for any vendor).
   7288           + Testsuite which covers offloading from the [6]OpenMP 4.0
   7289             Examples document.
   7290        Specific for upcoming Intel Xeon Phi products:
   7291           + Run-time library.
   7292           + Card emulator.
   7293      * GCC 5 includes a preliminary implementation of the OpenACC 2.0a
   7294        specification. OpenACC is intended for programming accelerator
   7295        devices such as GPUs. See [7]the OpenACC wiki page for more
   7296        information.
   7297 
   7298   C family
   7299 
   7300      * The default setting of the -fdiagnostics-color= command-line option
   7301        is now [8]configurable when building GCC using configuration option
   7302        --with-diagnostics-color=. The possible values are: never, always,
   7303        auto and auto-if-env. The new default auto uses color only when the
   7304        standard error is a terminal. The default in GCC 4.9 was
   7305        auto-if-env, which is equivalent to auto if there is a non-empty
   7306        GCC_COLORS environment variable, and never otherwise. As in GCC
   7307        4.9, an empty GCC_COLORS variable in the environment will always
   7308        disable colors, no matter what the default is or what command-line
   7309        options are used.
   7310      * A new command-line option -Wswitch-bool has been added for the C
   7311        and C++ compilers, which warns whenever a switch statement has an
   7312        index of boolean type.
   7313      * A new command-line option -Wlogical-not-parentheses has been added
   7314        for the C and C++ compilers, which warns about "logical not" used
   7315        on the left hand side operand of a comparison.
   7316      * A new command-line option -Wsizeof-array-argument has been added
   7317        for the C and C++ compilers, which warns when the sizeof operator
   7318        is applied to a parameter that has been declared as an array in a
   7319        function definition.
   7320      * A new command-line option -Wbool-compare has been added for the C
   7321        and C++ compilers, which warns about boolean expressions compared
   7322        with an integer value different from true/false.
   7323      * Full support for Cilk Plus has been added to the GCC compiler. Cilk
   7324        Plus is an extension to the C and C++ languages to support data and
   7325        task parallelism.
   7326      * A new attribute no_reorder prevents reordering of selected symbols
   7327        against other such symbols or inline assembler. This enables to
   7328        link-time optimize the Linux kernel without having to resort to
   7329        -fno-toplevel-reorder that disables several optimizations.
   7330      * New preprocessor constructs, __has_include and __has_include_next,
   7331        to test the availability of headers have been added.
   7332        This demonstrates a way to include the header <optional> only if it
   7333        is available:
   7334 
   7335 #ifdef __has_include
   7336 #  if __has_include(<optional>)
   7337 #    include <optional>
   7338 #    define have_optional 1
   7339 #  elif __has_include(<experimental/optional>)
   7340 #    include <experimental/optional>
   7341 #    define have_optional 1
   7342 #    define experimental_optional
   7343 #  else
   7344 #    define have_optional 0
   7345 #  endif
   7346 #endif
   7347 
   7348        The header search paths for __has_include and __has_include_next
   7349        are equivalent to those of the standard directive #include and the
   7350        extension #include_next respectively.
   7351      * A new built-in function-like macro to determine the existence of an
   7352        attribute, __has_attribute, has been added. The equivalent built-in
   7353        macro __has_cpp_attribute was added to C++ to support
   7354        [9]Feature-testing recommendations for C++. The macro
   7355        __has_attribute is added to all C-like languages as an extension:
   7356 
   7357 int
   7358 #ifdef __has_attribute
   7359 #  if __has_attribute(__noinline__)
   7360   __attribute__((__noinline__))
   7361 #  endif
   7362 #endif
   7363 foo(int x);
   7364 
   7365        If an attribute exists, a nonzero constant integer is returned. For
   7366        standardized C++ attributes a date is returned, otherwise the
   7367        constant returned is 1. Both __has_attribute and
   7368        __has_cpp_attribute will add underscores to an attribute name if
   7369        necessary to resolve the name. For C++11 and onwards the attribute
   7370        may be scoped.
   7371      * A new set of built-in functions for arithmetics with overflow
   7372        checking has been added: __builtin_add_overflow,
   7373        __builtin_sub_overflow and __builtin_mul_overflow and for
   7374        compatibility with clang also other variants. These builtins have
   7375        two integral arguments (which don't need to have the same type),
   7376        the arguments are extended to infinite precision signed type, +, -
   7377        or * is performed on those, and the result is stored in an integer
   7378        variable pointed to by the last argument. If the stored value is
   7379        equal to the infinite precision result, the built-in functions
   7380        return false, otherwise true. The type of the integer variable that
   7381        will hold the result can be different from the types of the first
   7382        two arguments. The following snippet demonstrates how this can be
   7383        used in computing the size for the calloc function:
   7384 
   7385 void *
   7386 calloc (size_t x, size_t y)
   7387 {
   7388   size_t sz;
   7389   if (__builtin_mul_overflow (x, y, &sz))
   7390     return NULL;
   7391   void *ret = malloc (sz);
   7392   if (ret) memset (res, 0, sz);
   7393   return ret;
   7394 }
   7395 
   7396        On e.g. i?86 or x86-64 the above will result in a mul instruction
   7397        followed by a jump on overflow.
   7398      * The option -fextended-identifiers is now enabled by default for
   7399        C++, and for C99 and later C versions. Various bugs in the
   7400        implementation of extended identifiers have been fixed.
   7401 
   7402   C
   7403 
   7404      * The default mode has been changed to -std=gnu11.
   7405      * A new command-line option -Wc90-c99-compat has been added to warn
   7406        about features not present in ISO C90, but present in ISO C99.
   7407      * A new command-line option -Wc99-c11-compat has been added to warn
   7408        about features not present in ISO C99, but present in ISO C11.
   7409      * It is possible to disable warnings about conversions between
   7410        pointers that have incompatible types via a new warning option
   7411        -Wno-incompatible-pointer-types; warnings about implicit
   7412        incompatible integer to pointer and pointer to integer conversions
   7413        via a new warning option -Wno-int-conversion; and warnings about
   7414        qualifiers on pointers being discarded via a new warning option
   7415        -Wno-discarded-qualifiers.
   7416      * To allow proper use of const qualifiers with multidimensional
   7417        arrays, GCC will not warn about incompatible pointer types anymore
   7418        for conversions between pointers to arrays with and without const
   7419        qualifier (except when using -pedantic). Instead, a new warning is
   7420        emitted only if the const qualifier is lost. This can be controlled
   7421        with a new warning option -Wno-discarded-array-qualifiers.
   7422      * The C front end now generates more precise caret diagnostics.
   7423      * The -pg command-line option now only affects the current file in an
   7424        LTO build.
   7425 
   7426   C++
   7427 
   7428      * G++ now supports [10]C++14 variable templates.
   7429      * -Wnon-virtual-dtor doesn't warn anymore for final classes.
   7430      * Excessive template instantiation depth is now a fatal error. This
   7431        prevents excessive diagnostics that usually do not help to identify
   7432        the problem.
   7433      * G++ and libstdc++ now implement the feature-testing macros from
   7434        [11]Feature-testing recommendations for C++.
   7435      * G++ now allows typename in a template template parameter.
   7436 
   7437 template<template<typename> typename X> struct D; // OK
   7438 
   7439      * G++ now supports [12]C++14 aggregates with non-static data member
   7440        initializers.
   7441 
   7442 struct A { int i, j = i; };
   7443 A a = { 42 }; // a.j is also 42
   7444 
   7445      * G++ now supports [13]C++14 extended constexpr.
   7446 
   7447 constexpr int f (int i)
   7448 {
   7449   int j = 0;
   7450   for (; i > 0; --i)
   7451     ++j;
   7452   return j;
   7453 }
   7454 
   7455 constexpr int i = f(42); // i is 42
   7456 
   7457      * G++ now supports the [14]C++14 sized deallocation functions.
   7458 
   7459 void operator delete (void *, std::size_t) noexcept;
   7460 void operator delete[] (void *, std::size_t) noexcept;
   7461 
   7462      * A new One Definition Rule violation warning (controlled by -Wodr)
   7463        detects mismatches in type definitions and virtual table contents
   7464        during link-time optimization.
   7465      * New warnings -Wsuggest-final-types and -Wsuggest-final-methods help
   7466        developers to annotate programs with final specifiers (or anonymous
   7467        namespaces) to improve code generation. These warnings can be used
   7468        at compile time, but they are more useful in combination with
   7469        link-time optimization.
   7470      * G++ no longer supports [15]N3639 variable length arrays, as they
   7471        were removed from the C++14 working paper prior to ratification.
   7472        GNU VLAs are still supported, so VLA support is now the same in
   7473        C++14 mode as in C++98 and C++11 modes.
   7474      * G++ now allows passing a non-trivially-copyable class via C
   7475        varargs, which is conditionally-supported with
   7476        implementation-defined semantics in the standard. This uses the
   7477        same calling convention as a normal value parameter.
   7478      * G++ now defaults to -fabi-version=9 and -fabi-compat-version=2. So
   7479        various mangling bugs are fixed, but G++ will still emit aliases
   7480        with the old, wrong mangling where feasible. -Wabi=2 will warn
   7481        about differences between ABI version 2 and the current setting.
   7482      * G++ 5.2 fixes the alignment of std::nullptr_t. Most code is likely
   7483        to be unaffected, but -Wabi=8 will warn about a non-static data
   7484        member with type std::nullptr_t which changes position due to this
   7485        change.
   7486 
   7487     Runtime Library (libstdc++)
   7488 
   7489      * A [16]Dual ABI is provided by the library. A new ABI is enabled by
   7490        default. The old ABI is still supported and can be used by defining
   7491        the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
   7492        standard library headers.
   7493      * A new implementation of std::string is enabled by default, using
   7494        the small string optimization instead of copy-on-write reference
   7495        counting.
   7496      * A new implementation of std::list is enabled by default, with an
   7497        O(1) size() function;
   7498      * [17]Full support for C++11, including the following new features:
   7499           + std::deque and std::vector<bool> meet the allocator-aware
   7500             container requirements;
   7501           + movable and swappable iostream classes;
   7502           + support for std::align and std::aligned_union;
   7503           + type traits std::is_trivially_copyable,
   7504             std::is_trivially_constructible, std::is_trivially_assignable
   7505             etc.;
   7506           + I/O manipulators std::put_time, std::get_time, std::hexfloat
   7507             and std::defaultfloat;
   7508           + generic locale-aware std::isblank;
   7509           + locale facets for Unicode conversion;
   7510           + atomic operations for std::shared_ptr;
   7511           + std::notify_all_at_thread_exit() and functions for making
   7512             futures ready at thread exit.
   7513      * Support for the C++11 hexfloat manipulator changes how the num_put
   7514        facet formats floating point types when
   7515        ios_base::fixed|ios_base::scientific is set in a stream's fmtflags.
   7516        This change affects all language modes, even though the C++98
   7517        standard gave no special meaning to that combination of flags. To
   7518        prevent the use of hexadecimal notation for floating point types
   7519        use str.unsetf(std::ios_base::floatfield) to clear the relevant
   7520        bits in str.flags().
   7521      * [18]Full experimental support for C++14, including the following
   7522        new features:
   7523           + std::is_final type trait;
   7524           + heterogeneous comparison lookup in associative containers.
   7525           + global functions cbegin, cend, rbegin, rend, crbegin, and
   7526             crend for range access to containers, arrays and initializer
   7527             lists.
   7528      * [19]Improved experimental support for the Library Fundamentals TS,
   7529        including:
   7530           + class std::experimental::any;
   7531           + function template std::experimental::apply;
   7532           + function template std::experimental::sample;
   7533           + function template std::experimental::search and related
   7534             searcher types;
   7535           + variable templates for type traits;
   7536           + function template std::experimental::not_fn.
   7537      * New random number distributions logistic_distribution and
   7538        uniform_on_sphere_distribution as extensions.
   7539      * [20]GDB Xmethods for containers and std::unique_ptr.
   7540 
   7541   Fortran
   7542 
   7543      * Compatibility notice:
   7544           + The version of the module files (.mod) has been incremented.
   7545           + For free-form source files [21]-Werror=line-truncation is now
   7546             enabled by default. Note that comments exceeding the line
   7547             length are not diagnosed. (For fixed-form source code, the
   7548             same warning is available but turned off by default, such that
   7549             excess characters are ignored. -ffree-line-length-n and
   7550             -ffixed-line-length-n can be used to modify the default line
   7551             lengths of 132 and 72 columns, respectively.)
   7552           + The -Wtabs option is now more sensible: with -Wtabs the
   7553             compiler warns if it encounters tabs and with -Wno-tabs this
   7554             warning is turned off. Before, -Wno-tabs warned and -Wtabs
   7555             disabled the warning. As before, this warning is also enabled
   7556             by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
   7557             options of -std=.
   7558      * Incomplete support for colorizing diagnostics emitted by gfortran
   7559        has been added. The option [22]-fdiagnostics-color controls when
   7560        color is used in diagnostics. The default value of this option can
   7561        be [23]configured when building GCC. The GCC_COLORS environment
   7562        variable can be used to customize the colors or disable coloring
   7563        completely. Sample diagnostics output:
   7564       $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
   7565       test.f90:6:1:
   7566 
   7567        0 continue
   7568        1
   7569       Error: Zero is not a valid statement label at (1)
   7570       test.f90:9:6:
   7571 
   7572          USE foo
   7573             1
   7574       Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
   7575 
   7576      * The -Wuse-without-only option has been added to warn when a USE
   7577        statement has no ONLY qualifier and thus implicitly imports all
   7578        public entities of the used module.
   7579      * Formatted READ and WRITE statements now work correctly in
   7580        locale-aware programs. For more information and potential caveats,
   7581        see [24]Section 5.3 Thread-safety of the runtime library in the
   7582        manual.
   7583      * [25]Fortran 2003:
   7584           + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
   7585             IEEE_ARITHMETIC) are now supported.
   7586      * [26]Fortran 2008:
   7587           + [27]Coarrays: Full experimental support of Fortran 2008's
   7588             coarrays with -fcoarray=lib except for allocatable/pointer
   7589             components of derived-type coarrays. GCC currently only ships
   7590             with a single-image library (libcaf_single), but multi-image
   7591             support based on MPI and GASNet is provided by the libraries
   7592             of the [28]OpenCoarrays project.
   7593      * TS18508 Additional Parallel Features in Fortran:
   7594           + Support for the collective intrinsic subroutines CO_MAX,
   7595             CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
   7596             including -fcoarray=lib support.
   7597           + Support for the new atomic intrinsics has been added,
   7598             including -fcoarray=lib support.
   7599      * Fortran 2015:
   7600           + Support for IMPLICIT NONE (external, type).
   7601           + ERROR STOP is now permitted in pure procedures.
   7602 
   7603   Go
   7604 
   7605      * GCC 5 provides a complete implementation of the Go 1.4.2 release.
   7606      * Building GCC 5 with Go enabled will install two new programs:
   7607        [29]go and [30]gofmt.
   7608 
   7609 libgccjit
   7610 
   7611    New in GCC 5 is the ability to build GCC as a shared library for
   7612    embedding in other processes (such as interpreters), suitable for
   7613    Just-In-Time compilation to machine code.
   7614 
   7615    The shared library has a [31]C API and a [32]C++ wrapper API providing
   7616    some "syntactic sugar". There are also bindings available from 3rd
   7617    parties for [33]Python and for [34]D.
   7618 
   7619    For example, this library can be used by interpreters for [35]compiling
   7620    functions from bytecode to machine code.
   7621 
   7622    The library can also be used for ahead-of-time compilation, enabling
   7623    GCC to be plugged into a pre-existing front end. An example of using
   7624    this to build a compiler for an esoteric language we'll refer to as
   7625    "brainf" can be seen [36]here.
   7626 
   7627    libgccjit is licensed under the GPLv3 (or at your option, any later
   7628    version)
   7629 
   7630    It should be regarded as experimental at this time.
   7631 
   7632 New Targets and Target Specific Improvements
   7633 
   7634   Reporting stack usage
   7635 
   7636      * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
   7637        -fstack-usage option.
   7638 
   7639   AArch64
   7640 
   7641      * Code generation for the ARM Cortex-A57 processor has been improved.
   7642        A more accurate instruction scheduling model for the processor is
   7643        now used, and a number of compiler tuning parameters have been set
   7644        to offer increased performance when compiling with -mcpu=cortex-a57
   7645        or -mtune=cortex-a57.
   7646      * A workaround for the ARM Cortex-A53 erratum 835769 has been added
   7647        and can be enabled by giving the -mfix-cortex-a53-835769 option.
   7648        Alternatively it can be enabled by default by configuring GCC with
   7649        the --enable-fix-cortex-a53-835769 option.
   7650      * The optional cryptographic extensions to the ARMv8-A architecture
   7651        are no longer enabled by default when specifying the
   7652        -mcpu=cortex-a53, -mcpu=cortex-a57 or -mcpu=cortex-a57.cortex-a53
   7653        options. To enable these extensions add +crypto to the value of
   7654        -mcpu or -march e.g. -mcpu=cortex-a53+crypto.
   7655      * Support has been added for the following processors (GCC
   7656        identifiers in parentheses): ARM Cortex-A72 (cortex-a72) and
   7657        initial support for its big.LITTLE combination with the ARM
   7658        Cortex-A53 (cortex-a72.cortex-a53), Cavium ThunderX (thunderx),
   7659        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   7660        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7661        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   7662        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   7663        support for the Cortex-A72.
   7664      * The transitional options -mlra and -mno-lra have been removed. The
   7665        AArch64 back end now uses the local register allocator (LRA) only.
   7666 
   7667   ARM
   7668 
   7669      * Thumb-1 assembly code is now generated in unified syntax. The new
   7670        option -masm-syntax-unified specifies whether inline assembly code
   7671        is using unified syntax. By default the option is off which means
   7672        non-unified syntax is used. However this is subject to change in
   7673        future releases. Eventually the non-unified syntax will be
   7674        deprecated.
   7675      * It is now a configure-time error to use the --with-cpu configure
   7676        option with either of --with-tune or --with-arch.
   7677      * Code generation for the ARM Cortex-A57 processor has been improved.
   7678        A more accurate instruction scheduling model for the processor is
   7679        now used, and a number of compiler tuning parameters have been set
   7680        to offer increased performance when compiling with -mcpu=cortex-a57
   7681        or -mtune=cortex-a57.
   7682      * Support has been added for the following processors (GCC
   7683        identifiers in parentheses): ARM Cortex-A17 (cortex-a17) and
   7684        initial support for its big.LITTLE combination with the ARM
   7685        Cortex-A7 (cortex-a17.cortex-a7), ARM Cortex-A72 (cortex-a72) and
   7686        initial support for its big.LITTLE combination with the ARM
   7687        Cortex-A53 (cortex-a72.cortex-a53), ARM Cortex-M7 (cortex-m7),
   7688        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   7689        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7690        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   7691        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   7692        support for the Cortex-A72.
   7693      * The deprecated option -mwords-little-endian has been removed.
   7694      * The options -mapcs, -mapcs-frame, -mtpcs-frame and
   7695        -mtpcs-leaf-frame which are only applicable to the old ABI have
   7696        been deprecated.
   7697      * The transitional options -mlra and -mno-lra have been removed. The
   7698        ARM back end now uses the local register allocator (LRA) only.
   7699 
   7700   AVR
   7701 
   7702      * The compiler no more supports individual devices like ATmega8.
   7703        Specifying, say, -mmcu=atmega8 triggers the usage of the
   7704        device-specific [37]spec file specs-atmega8 which is part of the
   7705        installation and describes options for the sub-processes like
   7706        compiler proper, assembler and linker. You can add support for a
   7707        new device -mmcu=mydevice as follows:
   7708          1. In an empty directory /someplace, create a new directory
   7709             device-specs.
   7710          2. Copy a device spec file from the installed device-specs
   7711             folder, follow the comments in that file and then save it as
   7712             /someplace/device-specs/specs-mydevice.
   7713          3. Add -B /someplace -mmcu=mydevice to the compiler's
   7714             command-line options. Notice that /someplace must specify an
   7715             absolute path and that mydevice must not start with "avr".
   7716          4. Provided you have a device-specific library libmydevice.a
   7717             available, you can put it at /someplace, dito for a
   7718             device-specific startup file crtmydevice.o.
   7719        The contents of the device spec files depend on the compiler's
   7720        configuration, in particular on --with-avrlibc=no and whether or
   7721        not it is configured for RTEMS.
   7722      * A new command-line option -nodevicelib has been added. It prevents
   7723        the compiler from linking against AVR-LibC's device-specific
   7724        library libdevice.a.
   7725      * The following three command-line options have been added:
   7726 
   7727         -mrmw
   7728                 Set if the device supports the read-modify-write
   7729                 instructions LAC, LAS, LAT and XCH.
   7730 
   7731         -mn-flash=size
   7732                 Specify the flash size of the device in units of 64 KiB,
   7733                 rounded up to the next integer as needed. This option
   7734                 affects the availability of the [38]AVR address-spaces.
   7735 
   7736         -mskip-bug
   7737                 Set if the device is affected by the respective silicon
   7738                 bug.
   7739 
   7740        In general, you don't need to set these options by hand. The new
   7741        device-specific spec file will set them as needed.
   7742 
   7743   IA-32/x86-64
   7744 
   7745      * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
   7746        CPU codenamed Skylake Server was added to GCC. That includes inline
   7747        assembly support, new intrinsics, and basic autovectorization.
   7748        These new AVX-512 extensions are available via the following GCC
   7749        switches: AVX-512 Vector Length EVEX feature: -mavx512vl, AVX-512
   7750        Byte and Word instructions: -mavx512bw, AVX-512 Dword and Qword
   7751        instructions: -mavx512dq, AVX-512 FMA-52 instructions: -mavx512ifma
   7752        and for AVX-512 Vector Bit Manipulation Instructions: -mavx512vbmi.
   7753      * New ISA extensions support Intel MPX was added to GCC. This new
   7754        extension is available via the -mmpx compiler switch. Intel MPX is
   7755        a set of processor features which, with compiler, run-time library
   7756        and OS support, brings increased robustness to software by run-time
   7757        checking pointer references against their bounds. In GCC Intel MPX
   7758        is supported by Pointer Bounds Checker and libmpx run-time
   7759        libraries.
   7760      * The new -mrecord-mcount option for -pg generates a Linux kernel
   7761        style table of pointers to mcount or __fentry__ calls at the
   7762        beginning of functions. The new -mnop-mcount option in addition
   7763        also generates nops in place of the __fentry__ or mcount call, so
   7764        that a call per function can be later patched in. This can be used
   7765        for low overhead tracing or hot code patching.
   7766      * The new -malign-data option controls how GCC aligns variables.
   7767        -malign-data=compat uses increased alignment compatible with GCC
   7768        4.8 and earlier, -malign-data=abi uses alignment as specified by
   7769        the psABI, and -malign-data=cacheline uses increased alignment to
   7770        match the cache line size. -malign-data=compat is the default.
   7771      * The new -mskip-rax-setup option skips setting up the RAX register
   7772        when SSE is disabled and there are no variable arguments passed in
   7773        vector registers. This can be used to optimize the Linux kernel.
   7774 
   7775   MIPS
   7776 
   7777      * MIPS Releases 3 and 5 are now directly supported. Use the
   7778        command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
   7779        to enable code-generation for these processors.
   7780      * The Imagination P5600 processor is now supported using the
   7781        -march=p5600 command-line option.
   7782      * The Cavium Octeon3 processor is now supported using the
   7783        -march=octeon3 command-line option.
   7784      * MIPS Release 6 is now supported using the -mips32r6 and -mips64r6
   7785        command-line options.
   7786      * The o32 ABI has been modified and extended. The o32 64-bit
   7787        floating-point register support is now obsolete and has been
   7788        removed. It has been replaced by three ABI extensions FPXX, FP64A,
   7789        and FP64. The meaning of the -mfp64 command-line option has
   7790        changed. It is now used to enable the FP64A and FP64 ABI
   7791        extensions.
   7792           + The FPXX extension requires that code generated to access
   7793             double-precision values use even-numbered registers. Code that
   7794             adheres to this extension is link-compatible with all other
   7795             o32 double-precision ABI variants and will execute correctly
   7796             in all hardware FPU modes. The command-line options -mabi=32
   7797             -mfpxx can be used to enable this extension. MIPS II is the
   7798             minimum processor required.
   7799           + The o32 FP64A extension requires that floating-point registers
   7800             be 64-bit and odd-numbered single-precision registers are not
   7801             allowed. Code that adheres to the o32 FP64A variant is
   7802             link-compatible with all other o32 double-precision ABI
   7803             variants. The command-line options -mabi=32 -mfp64
   7804             -mno-odd-spreg can be used to enable this extension. MIPS32R2
   7805             is the minimum processor required.
   7806           + The o32 FP64 extension also requires that floating-point
   7807             registers be 64-bit, but permits the use of single-precision
   7808             registers. Code that adheres to the o32 FP64 variant is
   7809             link-compatible with o32 FPXX and o32 FP64A variants only,
   7810             i.e. it is not compatible with the original o32
   7811             double-precision ABI. The command-line options -mabi=32 -mfp64
   7812             -modd-spreg can be used to enable this extension. MIPS32R2 is
   7813             the minimum processor required.
   7814        The new ABI variants can be enabled by default using the configure
   7815        time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32.
   7816        It is strongly recommended that all vendors begin to set o32 FPXX
   7817        as the default ABI. This will be required to run the generated code
   7818        on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and
   7819        MIPSR6 cores.
   7820      * GCC will now pass all floating-point options to the assembler if
   7821        GNU binutils 2.25 is used. As a result, any inline assembly code
   7822        that uses hard-float instructions should be amended to include a
   7823        .set directive to override the global assembler options when
   7824        compiling for soft-float targets.
   7825 
   7826   NDS32
   7827 
   7828      * The variadic function ABI implementation is now compatible with
   7829        past Andes toolchains where the caller uses registers to pass
   7830        arguments and the callee is in charge of pushing them on stack.
   7831      * The options -mforce-fp-as-gp, -mforbid-fp-as-gp, and -mex9 have
   7832        been removed since they are not yet available in the nds32 port of
   7833        GNU binutils.
   7834      * A new option -mcmodel=[small|medium|large] supports varied code
   7835        models on code generation. The -mgp-direct option became
   7836        meaningless and can be discarded.
   7837 
   7838   RX
   7839 
   7840      * A new command line option -mno-allow-string-insns can be used to
   7841        disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
   7842        SWHILE and RMPA instructions. An erratum released by Renesas shows
   7843        that it is unsafe to use these instructions on addresses within the
   7844        I/O space of the processor. The new option can be used when the
   7845        programmer is concerned that the I/O space might be accessed. The
   7846        default is still to enable these instructions.
   7847 
   7848   SH
   7849 
   7850      * The compiler will now pass the appropriate --isa= option to the
   7851        assembler.
   7852      * The default handling for the GBR has been changed from call
   7853        clobbered to call preserved. The old behavior can be reinstated by
   7854        specifying the option -fcall-used-gbr.
   7855      * Support for the SH4A fpchg instruction has been added which will be
   7856        utilized when switching between single and double precision FPU
   7857        modes.
   7858      * The compiler no longer uses the __fpscr_values array for switching
   7859        between single and double FPU precision modes on non-SH4A targets.
   7860        Instead mode switching will now be performed by storing, modifying
   7861        and reloading the FPSCR, so that other FPSCR bits are preserved
   7862        across mode switches. The __fpscr_values array that is defined in
   7863        libgcc is still present for backwards compatibility, but it will
   7864        not be referenced by compiler generated code anymore.
   7865      * New builtin functions __builtin_sh_get_fpscr and
   7866        __builtin_sh_set_fpscr have been added. The __builtin_sh_set_fpscr
   7867        function will mask the specified bits in such a way that the SZ, PR
   7868        and FR mode bits will be preserved, while changing the other bits.
   7869        These new functions do not reference the __fpscr_values array. The
   7870        old functions __set_fpscr and __get_fpscr in libgcc which access
   7871        the __fpscr_values array are still present for backwards
   7872        compatibility, but their usage is highly discouraged.
   7873      * Some improvements to code generated for __atomic built-in
   7874        functions.
   7875      * When compiling for SH2E the compiler will no longer force the usage
   7876        of delay slots for conditional branch instructions bt and bf. The
   7877        old behavior can be reinstated (e.g. to work around a hardware bug
   7878        in the original SH7055) by specifying the new option
   7879        -mcbranch-force-delay-slot.
   7880 
   7881 Operating Systems
   7882 
   7883   AIX
   7884 
   7885      * GCC now supports stabs debugging continuation lines to allow long
   7886        stabs debug information without overflow that generates AIX linker
   7887        errors.
   7888 
   7889   DragonFly BSD
   7890 
   7891      * GCC now supports the DragonFly BSD operating system.
   7892 
   7893   FreeBSD
   7894 
   7895      * GCC now supports the FreeBSD operating system for the arm port
   7896        through the arm*-*-freebsd* target triplets.
   7897 
   7898   VxWorks MILS
   7899 
   7900      * GCC now supports the MILS (Multiple Independent Levels of Security)
   7901        variant of WindRiver's VxWorks operating system for PowerPC
   7902        targets.
   7903 
   7904 Other significant improvements
   7905 
   7906      * The gcc-ar, gcc-nm, gcc-ranlib wrappers now understand a -B option
   7907        to set the compiler to use.
   7908 
   7909      * When the new command-line option -freport-bug is used, GCC
   7910        automatically generates a developer-friendly reproducer whenever an
   7911        internal compiler error is encountered.
   7912 
   7913                                     GCC 5.2
   7914 
   7915    This is the [39]list of problem reports (PRs) from GCC's bug tracking
   7916    system that are known to be fixed in the 5.2 release. This list might
   7917    not be complete (that is, it is possible that some PRs that have been
   7918    fixed are not listed here).
   7919 
   7920 Target Specific Changes
   7921 
   7922   IA-32/x86-64
   7923 
   7924      * Support for new AMD instructions monitorx and mwaitx has been
   7925        added. This includes new intrinsic and built-in support. It is
   7926        enabled through option -mmwaitx. The instructions monitorx and
   7927        mwaitx implement the same functionality as the old monitor and
   7928        mwait instructions. In addition, mwaitx adds a configurable timer.
   7929        The timer value is received as third argument and stored in
   7930        register %ebx.
   7931 
   7932   S/390, System z, IBM z Systems
   7933 
   7934      * Support for the IBM z13 processor has been added. When using the
   7935        -march=z13 option, the compiler will generate code making use of
   7936        the new instructions and registers introduced with the vector
   7937        extension facility. The -mtune=z13 option enables z13 specific
   7938        instruction scheduling without making use of new instructions.
   7939        Compiling code with -march=z13 reduces the default alignment of
   7940        vector types bigger than 8 bytes to 8. This is an ABI change and
   7941        care must be taken when linking modules compiled with different
   7942        arch levels which interchange variables containing vector type
   7943        values. For newly compiled code the GNU linker will emit a warning.
   7944      * The -mzvector option enables a C/C++ language extension. This
   7945        extension provides a new keyword vector which can be used to define
   7946        vector type variables. (Note: This is not available when enforcing
   7947        strict standard compliance e.g. with -std=c99. Either enable GNU
   7948        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   7949        Additionally a set of overloaded builtins is provided which is
   7950        partially compatible to the PowerPC Altivec builtins. In order to
   7951        make use of these builtins the vecintrin.h header file needs to be
   7952        included.
   7953 
   7954                                     GCC 5.3
   7955 
   7956    This is the [40]list of problem reports (PRs) from GCC's bug tracking
   7957    system that are known to be fixed in the 5.3 release. This list might
   7958    not be complete (that is, it is possible that some PRs that have been
   7959    fixed are not listed here).
   7960 
   7961 Target Specific Changes
   7962 
   7963   IA-32/x86-64
   7964 
   7965      * GCC now supports the Intel CPU named Skylake with AVX-512
   7966        extensions through -march=skylake-avx512. The switch enables the
   7967        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   7968        AVX-512DQ.
   7969 
   7970   S/390, System z, IBM z Systems
   7971 
   7972      * With this version of GCC IBM z Systems support has been added to
   7973        the GO runtime environment. GCC 5.3 has proven to be able to
   7974        compile larger GO applications on IBM z Systems.
   7975 
   7976                                     GCC 5.4
   7977 
   7978    This is the [41]list of problem reports (PRs) from GCC's bug tracking
   7979    system that are known to be fixed in the 5.4 release. This list might
   7980    not be complete (that is, it is possible that some PRs that have been
   7981    fixed are not listed here).
   7982 
   7983                                     GCC 5.5
   7984 
   7985    This is the [42]list of problem reports (PRs) from GCC's bug tracking
   7986    system that are known to be fixed in the 5.5 release. This list might
   7987    not be complete (that is, it is possible that some PRs that have been
   7988    fixed are not listed here).
   7989 
   7990 Target Specific Changes
   7991 
   7992   IA-32/x86-64
   7993 
   7994      * Support for the [43]deprecated pcommit instruction has been
   7995        removed.
   7996 
   7997 
   7998     For questions related to the use of GCC, please consult these web
   7999     pages and the [44]GCC manuals. If that fails, the
   8000     [45]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8001     web pages and the development of GCC are welcome on our developer
   8002     list at [46]gcc (a] gcc.gnu.org. All of [47]our lists have public
   8003     archives.
   8004 
   8005    Copyright (C) [48]Free Software Foundation, Inc. Verbatim copying and
   8006    distribution of this entire article is permitted in any medium,
   8007    provided this notice is preserved.
   8008 
   8009    These pages are [49]maintained by the GCC team. Last modified
   8010    2024-06-08.
   8011 
   8012 References
   8013 
   8014    1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   8015    2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   8016    3. https://savannah.nongnu.org/bugs/?44574
   8017    4. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
   8018    5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
   8019    6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
   8020    7. https://gcc.gnu.org/wiki/OpenACC
   8021    8. https://gcc.gnu.org/install/configure.html
   8022    9. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   8023   10. https://gcc.gnu.org/projects/cxx1y.html
   8024   11. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   8025   12. https://gcc.gnu.org/projects/cxx1y.html
   8026   13. https://gcc.gnu.org/projects/cxx1y.html
   8027   14. https://gcc.gnu.org/projects/cxx1y.html
   8028   15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
   8029   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
   8030   17. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
   8031   18. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   8032   19. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   8033   20. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
   8034   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
   8035   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
   8036   23. https://gcc.gnu.org/install/configure.html
   8037   24. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
   8038   25. https://gcc.gnu.org/wiki/Fortran2003Status
   8039   26. https://gcc.gnu.org/wiki/Fortran2008Status
   8040   27. https://gcc.gnu.org/wiki/Coarray
   8041   28. http://www.opencoarrays.org/
   8042   29. https://pkg.go.dev/cmd/go
   8043   30. https://pkg.go.dev/cmd/gofmt
   8044   31. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
   8045   32. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
   8046   33. https://github.com/davidmalcolm/pygccjit
   8047   34. https://github.com/ibuclaw/gccjitd
   8048   35. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
   8049   36. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
   8050   37. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   8051   38. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
   8052   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
   8053   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
   8054   41. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
   8055   42. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
   8056   43. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   8057   44. https://gcc.gnu.org/onlinedocs/
   8058   45. mailto:gcc-help (a] gcc.gnu.org
   8059   46. mailto:gcc (a] gcc.gnu.org
   8060   47. https://gcc.gnu.org/lists.html
   8061   48. https://www.fsf.org/
   8062   49. https://gcc.gnu.org/about.html
   8063 ======================================================================
   8064 http://gcc.gnu.org/gcc-4.9/index.html
   8065                              GCC 4.9 Release Series
   8066 
   8067    (This release series is no longer supported.)
   8068 
   8069    Aug 3, 2016
   8070 
   8071    The [1]GNU project and the GCC developers are pleased to announce the
   8072    release of GCC 4.9.4.
   8073 
   8074    This release is a bug-fix release, containing fixes for regressions in
   8075    GCC 4.9.3 relative to previous releases of GCC.
   8076 
   8077 Release History
   8078 
   8079    GCC 4.9.4
   8080           Aug 3, 2016 ([2]changes, [3]documentation)
   8081 
   8082    GCC 4.9.3
   8083           June 26, 2015 ([4]changes, [5]documentation)
   8084 
   8085    GCC 4.9.2
   8086           October 30, 2014 ([6]changes, [7]documentation)
   8087 
   8088    GCC 4.9.1
   8089           July 16, 2014 ([8]changes, [9]documentation)
   8090 
   8091    GCC 4.9.0
   8092           April 22, 2014 ([10]changes, [11]documentation)
   8093 
   8094 References and Acknowledgements
   8095 
   8096    GCC used to stand for the GNU C Compiler, but since the compiler
   8097    supports several other languages aside from C, it now stands for the
   8098    GNU Compiler Collection.
   8099 
   8100    A list of [12]successful builds is updated as new information becomes
   8101    available.
   8102 
   8103    The GCC developers would like to thank the numerous people that have
   8104    contributed new features, improvements, bug fixes, and other changes as
   8105    well as test results to GCC. This [13]amazing group of volunteers is
   8106    what makes GCC successful.
   8107 
   8108    For additional information about GCC please refer to the [14]GCC
   8109    project web site or contact the [15]GCC development mailing list.
   8110 
   8111    To obtain GCC please use [16]our mirror sites or [17]our version
   8112    control system.
   8113 
   8114 
   8115     For questions related to the use of GCC, please consult these web
   8116     pages and the [18]GCC manuals. If that fails, the
   8117     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8118     web pages and the development of GCC are welcome on our developer
   8119     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   8120     archives.
   8121 
   8122    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   8123    distribution of this entire article is permitted in any medium,
   8124    provided this notice is preserved.
   8125 
   8126    These pages are [23]maintained by the GCC team. Last modified
   8127    2024-05-30.
   8128 
   8129 References
   8130 
   8131    1. http://www.gnu.org/
   8132    2. https://gcc.gnu.org/gcc-4.9/changes.html
   8133    3. https://gcc.gnu.org/onlinedocs/4.9.4/
   8134    4. https://gcc.gnu.org/gcc-4.9/changes.html
   8135    5. https://gcc.gnu.org/onlinedocs/4.9.3/
   8136    6. https://gcc.gnu.org/gcc-4.9/changes.html
   8137    7. https://gcc.gnu.org/onlinedocs/4.9.2/
   8138    8. https://gcc.gnu.org/gcc-4.9/changes.html
   8139    9. https://gcc.gnu.org/onlinedocs/4.9.1/
   8140   10. https://gcc.gnu.org/gcc-4.9/changes.html
   8141   11. https://gcc.gnu.org/onlinedocs/4.9.0/
   8142   12. https://gcc.gnu.org/gcc-4.9/buildstat.html
   8143   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   8144   14. https://gcc.gnu.org/index.html
   8145   15. mailto:gcc (a] gcc.gnu.org
   8146   16. https://gcc.gnu.org/mirrors.html
   8147   17. https://gcc.gnu.org/git.html
   8148   18. https://gcc.gnu.org/onlinedocs/
   8149   19. mailto:gcc-help (a] gcc.gnu.org
   8150   20. mailto:gcc (a] gcc.gnu.org
   8151   21. https://gcc.gnu.org/lists.html
   8152   22. https://www.fsf.org/
   8153   23. https://gcc.gnu.org/about.html
   8154 ======================================================================
   8155 http://gcc.gnu.org/gcc-4.9/changes.html
   8156                              GCC 4.9 Release Series
   8157                         Changes, New Features, and Fixes
   8158 
   8159 Caveats
   8160 
   8161      * The mudflap run time checker has been removed. The mudflap options
   8162        remain, but do nothing.
   8163      * Support for a number of older systems and recently unmaintained or
   8164        untested target ports of GCC has been declared obsolete in GCC 4.9.
   8165        Unless there is activity to revive them, the next release of GCC
   8166        will have their sources permanently removed.
   8167        The following ports for individual systems on particular
   8168        architectures have been obsoleted:
   8169           + Solaris 9 (*-*-solaris2.9). Details can be found in the
   8170             [1]announcement.
   8171      * On AArch64, the singleton vector types int64x1_t, uint64x1_t and
   8172        float64x1_t exported by arm_neon.h are defined to be the same as
   8173        their base types. This results in incorrect application of
   8174        parameter passing rules to arguments of types int64x1_t and
   8175        uint64x1_t, with respect to the AAPCS64 ABI specification. In
   8176        addition, names of C++ functions with parameters of these types
   8177        (including float64x1_t) are not mangled correctly. The current
   8178        typedef declarations also unintentionally allow implicit casting
   8179        between singleton vector types and their base types. These issues
   8180        will be resolved in a near future release. See [2]PR60825 for more
   8181        information.
   8182 
   8183    More information on porting to GCC 4.9 from previous versions of GCC
   8184    can be found in the [3]porting guide for this release.
   8185 
   8186 General Optimizer Improvements
   8187 
   8188      * AddressSanitizer, a fast memory error detector, is now available on
   8189        ARM.
   8190      * UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior
   8191        detector, has been added and can be enabled via
   8192        -fsanitize=undefined. Various computations will be instrumented to
   8193        detect undefined behavior at runtime. UndefinedBehaviorSanitizer is
   8194        currently available for the C and C++ languages.
   8195      * Link-time optimization (LTO) improvements:
   8196           + Type merging was rewritten. The new implementation is
   8197             significantly faster and uses less memory.
   8198           + Better partitioning algorithm resulting in less streaming
   8199             during link time.
   8200           + Early removal of virtual methods reduces the size of object
   8201             files and improves link-time memory usage and compile time.
   8202           + Function bodies are now loaded on-demand and released early
   8203             improving overall memory usage at link time.
   8204           + C++ hidden keyed methods can now be optimized out.
   8205           + When using a linker plugin, compiling with the -flto option
   8206             now generates slim object files (.o) which only contain
   8207             intermediate language representation for LTO. Use
   8208             -ffat-lto-objects to create files which contain additionally
   8209             the object code. To generate static libraries suitable for LTO
   8210             processing, use gcc-ar and gcc-ranlib; to list symbols from a
   8211             slim object file use gcc-nm. (This requires that ar, ranlib
   8212             and nm have been compiled with plugin support.)
   8213        Memory usage building Firefox with debug enabled was reduced from
   8214        15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
   8215      * Inter-procedural optimization improvements:
   8216           + New type inheritance analysis module improving
   8217             devirtualization. Devirtualization now takes into account
   8218             anonymous name-spaces and the C++11 final keyword.
   8219           + New speculative devirtualization pass (controlled by
   8220             -fdevirtualize-speculatively.
   8221           + Calls that were speculatively made direct are turned back to
   8222             indirect where direct call is not cheaper.
   8223           + Local aliases are introduced for symbols that are known to be
   8224             semantically equivalent across shared libraries improving
   8225             dynamic linking times.
   8226      * Feedback directed optimization improvements:
   8227           + Profiling of programs using C++ inline functions is now more
   8228             reliable.
   8229           + New time profiling determines typical order in which functions
   8230             are executed.
   8231           + A new function reordering pass (controlled by
   8232             -freorder-functions) significantly reduces startup time of
   8233             large applications. Until binutils support is completed, it is
   8234             effective only with link-time optimization.
   8235           + Feedback driven indirect call removal and devirtualization now
   8236             handle cross-module calls when link-time optimization is
   8237             enabled.
   8238 
   8239 New Languages and Language specific improvements
   8240 
   8241      * Version 4.0 of the [4]OpenMP specification is now supported in the
   8242        C and C++ compilers and starting with the 4.9.1 release also in the
   8243        Fortran compiler. The new -fopenmp-simd option can be used to
   8244        enable OpenMP's SIMD directives while ignoring other OpenMP
   8245        directives. The new [5]-fsimd-cost-model= option permits to tune
   8246        the vectorization cost model for loops annotated with OpenMP and
   8247        Cilk Plus simd directives. -Wopenmp-simd warns when the current
   8248        cost model overrides simd directives set by the user.
   8249      * The -Wdate-time option has been added for the C, C++ and Fortran
   8250        compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__
   8251        macros are used. Those macros might prevent bit-wise-identical
   8252        reproducible compilations.
   8253 
   8254   Ada
   8255 
   8256      * GNAT switched to Ada 2012 instead of Ada 2005 by default.
   8257 
   8258   C family
   8259 
   8260      * Support for colorizing diagnostics emitted by GCC has been added.
   8261        The [6]-fdiagnostics-color=auto will enable it when outputting to
   8262        terminals, -fdiagnostics-color=always unconditionally. The
   8263        GCC_COLORS environment variable can be used to customize the colors
   8264        or disable coloring. If GCC_COLORS variable is present in the
   8265        environment, the default is -fdiagnostics-color=auto, otherwise
   8266        -fdiagnostics-color=never.
   8267        Sample diagnostics output:
   8268     $ g++ -fdiagnostics-color=always -S -Wall test.C
   8269     test.C: In function int foo():
   8270     test.C:1:14: warning: no return statement in function returning non-void [-W
   8271 return-type]
   8272      int foo () { }
   8273                   ^
   8274     test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
   8275  -ftemplate-depth= to increase the maximum) instantiating struct X<100>
   8276      template <int N> struct X { static const int value = X<N-1>::value; }; temp
   8277 late struct X<1000>;
   8278                                                   ^
   8279     test.C:2:46:   recursively required from const int X<999>::value
   8280     test.C:2:46:   required from const int X<1000>::value
   8281     test.C:2:88:   required from here
   8282 
   8283     test.C:2:46: error: incomplete type X<100> used in nested name specifier
   8284 
   8285      * With the new [7]#pragma GCC ivdep, the user can assert that there
   8286        are no loop-carried dependencies which would prevent concurrent
   8287        execution of consecutive iterations using SIMD (single instruction
   8288        multiple data) instructions.
   8289      * Support for Cilk Plus has been added and can be enabled with the
   8290        -fcilkplus option. Cilk Plus is an extension to the C and C++
   8291        languages to support data and task parallelism. The present
   8292        implementation follows ABI version 1.2; all features but _Cilk_for
   8293        have been implemented.
   8294 
   8295   C
   8296 
   8297      * ISO C11 atomics (the _Atomic type specifier and qualifier and the
   8298        <stdatomic.h> header) are now supported.
   8299      * ISO C11 generic selections (_Generic keyword) are now supported.
   8300      * ISO C11 thread-local storage (_Thread_local, similar to GNU C
   8301        __thread) is now supported.
   8302      * ISO C11 support is now at a similar level of completeness to ISO
   8303        C99 support: substantially complete modulo bugs, extended
   8304        identifiers (supported except for corner cases when
   8305        -fextended-identifiers is used), floating-point issues (mainly but
   8306        not entirely relating to optional C99 features from Annexes F and
   8307        G) and the optional Annexes K (Bounds-checking interfaces) and L
   8308        (Analyzability).
   8309      * A new C extension __auto_type provides a subset of the
   8310        functionality of C++11 auto in GNU C.
   8311 
   8312   C++
   8313 
   8314      * The G++ implementation of [8]C++1y return type deduction for normal
   8315        functions has been updated to conform to [9]N3638, the proposal
   8316        accepted into the working paper. Most notably, it adds
   8317        decltype(auto) for getting decltype semantics rather than the
   8318        template argument deduction semantics of plain auto:
   8319 
   8320 int& f();
   8321          auto  i1 = f(); // int
   8322 decltype(auto) i2 = f(); // int&
   8323 
   8324      * G++ supports [10]C++1y lambda capture initializers:
   8325 
   8326 [x = 42]{ ... };
   8327 
   8328        Actually, they have been accepted since GCC 4.5, but now the
   8329        compiler doesn't warn about them with -std=c++1y, and supports
   8330        parenthesized and brace-enclosed initializers as well.
   8331      * G++ supports [11]C++1y variable length arrays. G++ has supported
   8332        GNU/C99-style VLAs for a long time, but now additionally supports
   8333        initializers and lambda capture by reference. In C++1y mode G++
   8334        will complain about VLA uses that are not permitted by the draft
   8335        standard, such as forming a pointer to VLA type or applying sizeof
   8336        to a VLA variable. Note that it now appears that VLAs will not be
   8337        part of C++14, but will be part of a separate document and then
   8338        perhaps C++17.
   8339 
   8340 void f(int n) {
   8341   int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
   8342   [&a]{ for (int i : a) { cout << i << endl; } }();
   8343   &a; // error, taking address of VLA
   8344 }
   8345 
   8346      * G++ supports the [12]C++1y [[deprecated]] attribute modulo bugs in
   8347        the underlying [[gnu::deprecated]] attribute. Classes and functions
   8348        can be marked deprecated and a diagnostic message added:
   8349 
   8350 class A;
   8351 int bar(int n);
   8352 #if __cplusplus > 201103
   8353 class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
   8354 [[deprecated("bar is unsafe; use foo() instead")]]
   8355 int bar(int n);
   8356 
   8357 int foo(int n);
   8358 class B;
   8359 #endif
   8360 A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
   8361 int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
   8362 o() instead
   8363 
   8364      * G++ supports [13]C++1y digit separators. Long numeric literals can
   8365        be subdivided with a single quote ' to enhance readability:
   8366 
   8367 int i = 1048576;
   8368 int j = 1'048'576;
   8369 int k = 0x10'0000;
   8370 int m = 0'004'000'000;
   8371 int n = 0b0001'0000'0000'0000'0000'0000;
   8372 
   8373 double x = 1.602'176'565e-19;
   8374 double y = 1.602'176'565e-1'9;
   8375 
   8376      * G++ supports [14]C++1y generic (polymorphic) lambdas.
   8377 
   8378 // a functional object that will increment any type
   8379 auto incr = [](auto x) { return x++; };
   8380 
   8381      * As a GNU extension, G++ supports explicit template parameter syntax
   8382        for generic lambdas. This can be combined in the expected way with
   8383        the standard auto syntax.
   8384 
   8385 // a functional object that will add two like-type objects
   8386 auto add = [] <typename T> (T a, T b) { return a + b; };
   8387 
   8388      * G++ supports unconstrained generic functions as specified by 4.1.2
   8389        and 5.1.1 of [15]N3889: Concepts Lite Specification. Briefly, auto
   8390        may be used as a type-specifier in a parameter declaration of any
   8391        function declarator in order to introduce an implicit function
   8392        template parameter, akin to generic lambdas.
   8393 
   8394 // the following two function declarations are equivalent
   8395 auto incr(auto x) { return x++; }
   8396 template <typename T>
   8397 auto incr(T x) { return x++; }
   8398 
   8399     Runtime Library (libstdc++)
   8400 
   8401      * [16]Improved support for C++11, including:
   8402           + support for <regex>;
   8403           + The associative containers in <map> and <set> and the
   8404             unordered associative containers in <unordered_map> and
   8405             <unordered_set> meet the allocator-aware container
   8406             requirements;
   8407      * [17]Improved experimental support for the upcoming ISO C++
   8408        standard, C++14, including:
   8409           + fixing constexpr member functions without const;
   8410           + implementation of the std::exchange() utility function;
   8411           + addressing tuples by type;
   8412           + implemention of std::make_unique;
   8413           + implemention of std::shared_lock;
   8414           + making std::result_of SFINAE-friendly;
   8415           + adding operator() to std::integral_constant;
   8416           + adding user-defined literals for standard library types
   8417             std::basic_string, std::chrono::duration, and std::complex;
   8418           + adding two range overloads to non-modifying sequence oprations
   8419             std::equal and std::mismatch;
   8420           + adding IO manipulators for quoted strings;
   8421           + adding constexpr members to <utility>, <complex>, <chrono>,
   8422             and some containers;
   8423           + adding compile-time std::integer_sequence;
   8424           + adding cleaner transformation traits;
   8425           + making <functional>s operator functors easier to use and more
   8426             generic;
   8427      * An implementation of std::experimental::optional.
   8428      * An implementation of std::experimental::string_view.
   8429      * The non-standard function std::copy_exception has been deprecated
   8430        and will be removed in a future version. std::make_exception_ptr
   8431        should be used instead.
   8432 
   8433   Fortran
   8434 
   8435      * Compatibility notice:
   8436           + Module files: The version of the module files (.mod) has been
   8437             incremented; additionally, module files are now compressed.
   8438             Fortran MODULEs compiled by earlier GCC versions have to be
   8439             recompiled, when they are USEd by files compiled with GCC 4.9.
   8440             GCC 4.9 is not able to read .mod files of earlier GCC
   8441             versions; attempting to do so gives an error message. Note:
   8442             The ABI of the produced assembler data itself has not changed:
   8443             object files and libraries are fully compatible with older
   8444             versions (except as stated below).
   8445           + ABI changes:
   8446                o The [18]argument passing ABI has changed for scalar dummy
   8447                  arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
   8448                  which have both the VALUE and the OPTIONAL attributes.
   8449                o To support finalization the virtual table associated with
   8450                  polymorphic variables has changed. Code containing CLASS
   8451                  should be recompiled, including all files which define
   8452                  derived types involved in the type definition used by
   8453                  polymorphic variables. (Note: Due to the incremented
   8454                  module version, trying to mix old code with new code will
   8455                  usually give an error message.)
   8456           + GNU Fortran no longer deallocates allocatable variables or
   8457             allocatable components of variables declared in the main
   8458             program. Since Fortran 2008, the standard explicitly states
   8459             that variables declared in the Fortran main program
   8460             automatically have the SAVE attribute.
   8461           + When opening files, the close-on-exec flag is set if the
   8462             system supports such a feature. This is generally considered
   8463             good practice these days, but if there is a need to pass file
   8464             descriptors to child processes the parent process must now
   8465             remember to clear the close-on-exec flag by calling fcntl(),
   8466             e.g. via ISO_C_BINDING, before executing the child process.
   8467      * The deprecated command-line option -fno-whole-file has been
   8468        removed. (-fwhole-file is the default since GCC 4.6.)
   8469        -fwhole-file/-fno-whole-file continue to be accepted but do not
   8470        influence the code generation.
   8471      * The compiler no longer unconditionally warns about DO loops with
   8472        zero iterations. This warning is now controlled by the -Wzerotrip
   8473        option, which is implied by -Wall.
   8474      * The new NO_ARG_CHECK attribute of the [19]!GCC$ directive can be
   8475        used to disable the type-kind-rank (TKR) argument check for a dummy
   8476        argument. The feature is similar to ISO/IEC TS 29133:2012's
   8477        TYPE(*), except that it additionally also disables the rank check.
   8478        Variables with NO_ARG_CHECK have to be dummy arguments and may only
   8479        be used as argument to ISO_C_BINDING's C_LOC and as actual argument
   8480        to another NO_ARG_CHECK dummy argument; also the other constraints
   8481        of TYPE(*) apply. The dummy arguments should be declared as scalar
   8482        or assumed-size variable of type type(*) (recommended)  or of type
   8483        integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
   8484        the data without further type or shape information is passed,
   8485        similar to C's void*. Note that also TS 29113's
   8486        type(*),dimension(..) accepts arguments of any type and rank;
   8487        contrary to NO_ARG_CHECK assumed-rank arguments pass an array
   8488        descriptor which contains the array shape and stride of the
   8489        argument.
   8490      * [20]Fortran 2003:
   8491           + Finalization is now supported. It is currently only done for a
   8492             subset of those situations in which it should occur.
   8493           + Experimental support for scalar character components with
   8494             deferred length (i.e. allocatable string length) in derived
   8495             types has been added. (Deferred-length character variables are
   8496             supported since GCC 4.6.)
   8497      * [21]Fortran 2008:
   8498           + When STOP or ERROR STOP are used to terminate the execution
   8499             and any exception (but inexact) is signaling, a warning is
   8500             printed to ERROR_UNIT, indicating which exceptions are
   8501             signaling. The [22]-ffpe-summary= command-line option can be
   8502             used to fine-tune for which exceptions the warning should be
   8503             shown.
   8504           + Rounding on input (READ) is now handled on systems where
   8505             strtod honours the rounding mode. (For output, rounding is
   8506             supported since GCC 4.5.) Note that for input, the compatible
   8507             rounding mode is handled as nearest (i.e., rounding to an even
   8508             least significant [cf. IEC 60559:1989] for a tie, while
   8509             compatible rounds away from zero in that case).
   8510 
   8511   Go
   8512 
   8513      * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
   8514 
   8515 New Targets and Target Specific Improvements
   8516 
   8517   AArch64
   8518 
   8519      * The ARMv8-A crypto and CRC instructions are now supported through
   8520        intrinsics. These are enabled when the architecture supports these
   8521        and are available through the -march=armv8-a+crc and
   8522        -march=armv8-a+crypto options.
   8523      * Initial support for ILP32 has now been added to the compiler. This
   8524        is now available through the command-line option -mabi=ilp32.
   8525        Support for ILP32 is considered experimental as the ABI
   8526        specification is still beta.
   8527      * Coverage of more of the ISA including the SIMD extensions has been
   8528        added. The Advanced SIMD intrinsics have also been improved.
   8529      * The new local register allocator (LRA) is now on by default for the
   8530        AArch64 back end.
   8531      * The REE (Redundant extension elimination) pass has now been enabled
   8532        by default for the AArch64 back end.
   8533      * Tuning for the Cortex-A53 and Cortex-A57 has been improved.
   8534      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   8535        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   8536        option.
   8537      * A number of structural changes have been made to both the ARM and
   8538        AArch64 back ends to facilitate improved code-generation.
   8539      * As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
   8540        has been added and can be enabled by giving the
   8541        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   8542        default by configuring GCC with the --enable-fix-cortex-a53-835769
   8543        option.
   8544 
   8545   ARC
   8546 
   8547      * A port for Synopsys Designware ARC has been contributed by Embecosm
   8548        and Synopsys Inc.
   8549 
   8550   ARM
   8551 
   8552      * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
   8553        disabled by default. This was found to generate better code in only
   8554        a small number of cases. It can be turned back on with the
   8555        -mneon-for-64bits option.
   8556      * Further support for the ARMv8-A architecture, notably implementing
   8557        the restriction around IT blocks in the Thumb32 instruction set has
   8558        been added. The -mrestrict-it option can be used with
   8559        -march=armv7-a or the -march=armv7ve options to make code
   8560        generation fully compatible with the deprecated instructions in
   8561        ARMv8-A.
   8562      * Support has now been added for the ARMv7ve variant of the
   8563        architecture. This can be used by the -march=armv7ve option.
   8564      * The ARMv8-A crypto and CRC instructions are now supported through
   8565        intrinsics and are available through the -march=armv8-a+crc and
   8566        mfpu=crypto-neon-fp-armv8 options.
   8567      * LRA is now on by default for the ARM target. This can be turned off
   8568        using the -mno-lra option. This option is a purely transitionary
   8569        command-line option and will be removed in a future release. We are
   8570        interested in any bug reports regarding functional and performance
   8571        regressions with LRA.
   8572      * A new option -mslow-flash-data to improve performance of programs
   8573        fetching data on slow flash memory has now been introduced for the
   8574        ARMv7-M profile cores.
   8575      * A new option -mpic-data-is-text-relative for targets that allows
   8576        data segments to be relative to text segments has been added. This
   8577        is on by default for all targets except VxWorks RTP.
   8578      * A number of infrastructural changes have been made to both the ARM
   8579        and AArch64 back ends to facilitate improved code-generation.
   8580      * GCC now supports Cortex-A12 and the Cortex-R7 through the
   8581        -mcpu=cortex-a12 and -mcpu=cortex-r7 options.
   8582      * GCC now has tuning for the Cortex-A57 and Cortex-A53 through the
   8583        -mcpu=cortex-a57 and -mcpu=cortex-a53 options.
   8584      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   8585        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   8586        option. Similar support was added for the combination of Cortex-A15
   8587        and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7 option.
   8588      * Further performance optimizations for the Cortex-A15 and the
   8589        Cortex-M4 have been added.
   8590      * A number of code generation improvements for Thumb2 to reduce code
   8591        size when compiling for the M-profile processors.
   8592 
   8593   AVR
   8594 
   8595      * A new command-line option -mfract-convert-truncate has been added.
   8596        It allows compiler to use truncation instead of rounding towards
   8597        zero for fractional fixed-point types.
   8598 
   8599   IA-32/x86-64
   8600 
   8601      * -mfpmath=sse is now implied by -ffast-math on all targets where
   8602        SSE2 is supported.
   8603      * Intel AVX-512 support was added to GCC. That includes inline
   8604        assembly support, new registers and extending existing ones, new
   8605        intrinsics (covered by corresponding testsuite), and basic
   8606        autovectorization. AVX-512 instructions are available via the
   8607        following GCC switches: AVX-512 foundation instructions: -mavx512f,
   8608        AVX-512 prefetch instructions: -mavx512pf, AVX-512 exponential and
   8609        reciprocal instructions: -mavx512er, AVX-512 conflict detection
   8610        instructions: -mavx512cd.
   8611      * It is now possible to call x86 intrinsics from select functions in
   8612        a file that are tagged with the corresponding target attribute
   8613        without having to compile the entire file with the -mxxx option.
   8614        This improves the usability of x86 intrinsics and is particularly
   8615        useful when doing [23]Function Multiversioning.
   8616      * GCC now supports the new Intel microarchitecture named Silvermont
   8617        through -march=silvermont.
   8618      * GCC now supports the new Intel microarchitecture named Broadwell
   8619        through -march=broadwell.
   8620      * Optimizing for other Intel microarchitectures have been renamed to
   8621        -march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
   8622      * -march=generic has been retuned for better support of Intel core
   8623        and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel
   8624        Pentium-M, and Pentium4 based CPUs is no longer considered
   8625        important for generic.
   8626      * -mtune=intel can now be used to generate code running well on the
   8627        most current Intel processors, which are Haswell and Silvermont for
   8628        GCC 4.9.
   8629      * Support to encode 32-bit assembly instructions in 16-bit format is
   8630        now available through the -m16 command-line option.
   8631      * Better inlining of memcpy and memset that is aware of value ranges
   8632        and produces shorter alignment prologues.
   8633      * -mno-accumulate-outgoing-args is now honored when unwind
   8634        information is output. Argument accumulation is also now turned off
   8635        for portions of programs optimized for size.
   8636      * Support for new AMD family 15h processors (Excavator core) is now
   8637        available through the -march=bdver4 and -mtune=bdver4 options.
   8638 
   8639   MSP430
   8640 
   8641      * A new command-line option -mcpu= has been added to the MSP430 back
   8642        end. This option is used to specify the ISA to be used. Accepted
   8643        values are msp430 (the default), msp430x and msp430xv2. The ISA is
   8644        no longer deduced from the -mmcu= option as there are far too many
   8645        different MCU names. The -mmcu= option is still supported, and this
   8646        is still used to select linker scripts and generate a C
   8647        preprocessor symbol that will be recognised by the msp430.h header
   8648        file.
   8649 
   8650   NDS32
   8651 
   8652      * A new nds32 port supports the 32-bit architecture from Andes
   8653        Technology Corporation.
   8654      * The port provides initial support for the V2, V3, V3m instruction
   8655        set architectures.
   8656 
   8657   Nios II
   8658 
   8659      * A port for the Altera Nios II has been contributed by Mentor
   8660        Graphics.
   8661 
   8662   PowerPC / PowerPC64 / RS6000
   8663 
   8664      * GCC now supports Power ISA 2.07, which includes support for
   8665        Hardware Transactional Memory (HTM), Quadword atomics and several
   8666        VMX and VSX additions, including Crypto, 64-bit integer, 128-bit
   8667        integer and decimal integer operations.
   8668      * Support for the POWER8 processor is now available through the
   8669        -mcpu=power8 and -mtune=power8 options.
   8670      * The libitm library has been modified to add a HTM fastpath that
   8671        automatically uses POWER's HTM hardware instructions when it is
   8672        executing on a HTM enabled processor.
   8673      * Support for the new powerpc64le-linux platform has been added. It
   8674        defaults to generating code that conforms to the ELFV2 ABI.
   8675 
   8676   S/390, System z
   8677 
   8678      * Support for the Transactional Execution Facility included with the
   8679        IBM zEnterprise zEC12 processor has been added. A set of GCC style
   8680        builtins as well as XLC style builtins are provided. The builtins
   8681        are enabled by default when using the -march=zEC12 option but can
   8682        explicitly be disabled with -mno-htm. Using the GCC builtins also
   8683        libitm supports hardware transactions on S/390.
   8684      * The hotpatch features allows to prepare functions for hotpatching.
   8685        A certain amount of bytes is reserved before the function entry
   8686        label plus a NOP is inserted at its very beginning to implement a
   8687        backward jump when applying a patch. The feature can either be
   8688        enabled per compilation unit via the command-line option -mhotpatch
   8689        or per function using the hotpatch attribute.
   8690      * The shrink wrap optimization is now supported on S/390 and enabled
   8691        by default.
   8692      * A major rework of the routines to determine which registers need to
   8693        be saved and restored in function prologue/epilogue now allow to
   8694        use floating point registers as save slots. This will happen for
   8695        certain leaf function with -march=z10 or higher.
   8696      * The LRA rtl pass replaces reload by default on S/390.
   8697 
   8698   RX
   8699 
   8700      * The port now allows to specify the RX100, RX200, and RX600
   8701        processors with the command-line options -mcpu=rx100, -mcpu=rx200
   8702        and -mcpu=rx600.
   8703 
   8704   SH
   8705 
   8706      * Minor improvements to code generated for integer arithmetic and
   8707        code that involves the T bit.
   8708      * Added support for the SH2A clips and clipu instructions. The
   8709        compiler will now try to utilize them for min/max expressions such
   8710        as max (-128, min (127, x)).
   8711      * Added support for the cmp/str instruction through built-in
   8712        functions such as __builtin_strlen. When not optimizing for size,
   8713        the compiler will now expand calls to e.g. strlen as an inlined
   8714        sequences which utilize the cmp/str instruction.
   8715      * Improved code generated around volatile memory loads and stores.
   8716      * The option -mcbranchdi has been deprecated. Specifying it will
   8717        result in a warning and will not influence code generation.
   8718      * The option -mcmpeqdi has been deprecated. Specifying it will result
   8719        in a warning and will not influence code generation.
   8720 
   8721 GCC 4.9.1
   8722 
   8723    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   8724    system that are known to be fixed in the 4.9.1 release. This list might
   8725    not be complete (that is, it is possible that some PRs that have been
   8726    fixed are not listed here).
   8727 
   8728    Version 4.0 of the OpenMP specification is supported even in Fortran,
   8729    not just C and C++.
   8730 
   8731 GCC 4.9.2
   8732 
   8733    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   8734    system that are known to be fixed in the 4.9.2 release. This list might
   8735    not be complete (that is, it is possible that some PRs that have been
   8736    fixed are not listed here).
   8737 
   8738 GCC 4.9.3
   8739 
   8740    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   8741    system that are known to be fixed in the 4.9.3 release. This list might
   8742    not be complete (that is, it is possible that some PRs that have been
   8743    fixed are not listed here).
   8744 
   8745 GCC 4.9.4
   8746 
   8747    This is the [27]list of problem reports (PRs) from GCC's bug tracking
   8748    system that are known to be fixed in the 4.9.4 release. This list might
   8749    not be complete (that is, it is possible that some PRs that have been
   8750    fixed are not listed here).
   8751 
   8752 
   8753     For questions related to the use of GCC, please consult these web
   8754     pages and the [28]GCC manuals. If that fails, the
   8755     [29]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8756     web pages and the development of GCC are welcome on our developer
   8757     list at [30]gcc (a] gcc.gnu.org. All of [31]our lists have public
   8758     archives.
   8759 
   8760    Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
   8761    distribution of this entire article is permitted in any medium,
   8762    provided this notice is preserved.
   8763 
   8764    These pages are [33]maintained by the GCC team. Last modified
   8765    2023-09-02.
   8766 
   8767 References
   8768 
   8769    1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
   8770    2. https://gcc.gnu.org/PR60825
   8771    3. https://gcc.gnu.org/gcc-4.9/porting_to.html
   8772    4. https://www.openmp.org/specifications/
   8773    5. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
   8774    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
   8775    7. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
   8776    8. https://gcc.gnu.org/projects/cxx1y.html
   8777    9. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
   8778   10. https://gcc.gnu.org/projects/cxx1y.html
   8779   11. https://gcc.gnu.org/projects/cxx1y.html
   8780   12. https://gcc.gnu.org/projects/cxx1y.html
   8781   13. https://gcc.gnu.org/projects/cxx1y.html
   8782   14. https://gcc.gnu.org/projects/cxx1y.html
   8783   15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
   8784   16. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
   8785   17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
   8786   18. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
   8787   19. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
   8788   20. https://gcc.gnu.org/wiki/Fortran2003Status
   8789   21. https://gcc.gnu.org/wiki/Fortran2008Status
   8790   22. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
   8791   23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
   8792   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
   8793   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
   8794   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
   8795   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
   8796   28. https://gcc.gnu.org/onlinedocs/
   8797   29. mailto:gcc-help (a] gcc.gnu.org
   8798   30. mailto:gcc (a] gcc.gnu.org
   8799   31. https://gcc.gnu.org/lists.html
   8800   32. https://www.fsf.org/
   8801   33. https://gcc.gnu.org/about.html
   8802 ======================================================================
   8803 http://gcc.gnu.org/gcc-4.8/index.html
   8804                              GCC 4.8 Release Series
   8805 
   8806    (This release series is no longer supported.)
   8807 
   8808    June 23, 2015
   8809 
   8810    The [1]GNU project and the GCC developers are pleased to announce the
   8811    release of GCC 4.8.5.
   8812 
   8813    This release is a bug-fix release, containing fixes for regressions in
   8814    GCC 4.8.4 relative to previous releases of GCC.
   8815 
   8816 Release History
   8817 
   8818    GCC 4.8.5
   8819           June 23, 2015 ([2]changes, [3]documentation)
   8820 
   8821    GCC 4.8.4
   8822           December 19, 2014 ([4]changes, [5]documentation)
   8823 
   8824    GCC 4.8.3
   8825           May 22, 2014 ([6]changes, [7]documentation)
   8826 
   8827    GCC 4.8.2
   8828           October 16, 2013 ([8]changes, [9]documentation)
   8829 
   8830    GCC 4.8.1
   8831           May 31, 2013 ([10]changes, [11]documentation)
   8832 
   8833    GCC 4.8.0
   8834           March 22, 2013 ([12]changes, [13]documentation)
   8835 
   8836 References and Acknowledgements
   8837 
   8838    GCC used to stand for the GNU C Compiler, but since the compiler
   8839    supports several other languages aside from C, it now stands for the
   8840    GNU Compiler Collection.
   8841 
   8842    A list of [14]successful builds is updated as new information becomes
   8843    available.
   8844 
   8845    The GCC developers would like to thank the numerous people that have
   8846    contributed new features, improvements, bug fixes, and other changes as
   8847    well as test results to GCC. This [15]amazing group of volunteers is
   8848    what makes GCC successful.
   8849 
   8850    For additional information about GCC please refer to the [16]GCC
   8851    project web site or contact the [17]GCC development mailing list.
   8852 
   8853    To obtain GCC please use [18]our mirror sites or [19]our version
   8854    control system.
   8855 
   8856 
   8857     For questions related to the use of GCC, please consult these web
   8858     pages and the [20]GCC manuals. If that fails, the
   8859     [21]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8860     web pages and the development of GCC are welcome on our developer
   8861     list at [22]gcc (a] gcc.gnu.org. All of [23]our lists have public
   8862     archives.
   8863 
   8864    Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
   8865    distribution of this entire article is permitted in any medium,
   8866    provided this notice is preserved.
   8867 
   8868    These pages are [25]maintained by the GCC team. Last modified
   8869    2022-10-26.
   8870 
   8871 References
   8872 
   8873    1. http://www.gnu.org/
   8874    2. https://gcc.gnu.org/gcc-4.8/changes.html
   8875    3. https://gcc.gnu.org/onlinedocs/4.8.5/
   8876    4. https://gcc.gnu.org/gcc-4.8/changes.html
   8877    5. https://gcc.gnu.org/onlinedocs/4.8.4/
   8878    6. https://gcc.gnu.org/gcc-4.8/changes.html
   8879    7. https://gcc.gnu.org/onlinedocs/4.8.3/
   8880    8. https://gcc.gnu.org/gcc-4.8/changes.html
   8881    9. https://gcc.gnu.org/onlinedocs/4.8.2/
   8882   10. https://gcc.gnu.org/gcc-4.8/changes.html
   8883   11. https://gcc.gnu.org/onlinedocs/4.8.1/
   8884   12. https://gcc.gnu.org/gcc-4.8/changes.html
   8885   13. https://gcc.gnu.org/onlinedocs/4.8.0/
   8886   14. https://gcc.gnu.org/gcc-4.8/buildstat.html
   8887   15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   8888   16. https://gcc.gnu.org/index.html
   8889   17. mailto:gcc (a] gcc.gnu.org
   8890   18. https://gcc.gnu.org/mirrors.html
   8891   19. https://gcc.gnu.org/git.html
   8892   20. https://gcc.gnu.org/onlinedocs/
   8893   21. mailto:gcc-help (a] gcc.gnu.org
   8894   22. mailto:gcc (a] gcc.gnu.org
   8895   23. https://gcc.gnu.org/lists.html
   8896   24. https://www.fsf.org/
   8897   25. https://gcc.gnu.org/about.html
   8898 ======================================================================
   8899 http://gcc.gnu.org/gcc-4.8/changes.html
   8900                              GCC 4.8 Release Series
   8901                         Changes, New Features, and Fixes
   8902 
   8903 Caveats
   8904 
   8905    GCC now uses C++ as its implementation language. This means that to
   8906    build GCC from sources, you will need a C++ compiler that understands
   8907    C++ 2003. For more details on the rationale and specific changes,
   8908    please refer to the [1]C++ conversion page.
   8909 
   8910    To enable the Graphite framework for loop optimizations you now need
   8911    CLooG version 0.18.0 and ISL version 0.11.1. Both can be obtained from
   8912    the [2]GCC infrastructure directory. The installation manual contains
   8913    more information about requirements to build GCC.
   8914 
   8915    GCC now uses a more aggressive analysis to derive an upper bound for
   8916    the number of iterations of loops using constraints imposed by language
   8917    standards. This may cause non-conforming programs to no longer work as
   8918    expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new
   8919    option, -fno-aggressive-loop-optimizations, was added to disable this
   8920    aggressive analysis. In some loops that have known constant number of
   8921    iterations, but undefined behavior is known to occur in the loop before
   8922    reaching or during the last iteration, GCC will warn about the
   8923    undefined behavior in the loop instead of deriving lower upper bound of
   8924    the number of iterations for the loop. The warning can be disabled with
   8925    -Wno-aggressive-loop-optimizations.
   8926 
   8927    On ARM, a bug has been fixed in GCC's implementation of the AAPCS rules
   8928    for the layout of vectors that could lead to wrong code being
   8929    generated. Vectors larger than 8 bytes in size are now by default
   8930    aligned to an 8-byte boundary. This is an ABI change: code that makes
   8931    explicit use of vector types may be incompatible with binary objects
   8932    built with older versions of GCC. Auto-vectorized code is not affected
   8933    by this change.
   8934 
   8935    On AVR, support has been removed for the command-line option
   8936    -mshort-calls deprecated in GCC 4.7.
   8937 
   8938    On AVR, the configure option --with-avrlibc supported since GCC 4.7.2
   8939    is turned on per default for all non-RTEMS configurations. This option
   8940    arranges for a better integration of [3]AVR Libc with avr-gcc. For
   8941    technical details, see [4]PR54461. To turn off the option in non-RTEMS
   8942    configurations, use --with-avrlibc=no. If the compiler is configured
   8943    for RTEMS, the option is always turned off.
   8944 
   8945    More information on porting to GCC 4.8 from previous versions of GCC
   8946    can be found in the [5]porting guide for this release.
   8947 
   8948 General Optimizer Improvements (and Changes)
   8949 
   8950      * DWARF4 is now the default when generating DWARF debug information.
   8951        When -g is used on a platform that uses DWARF debugging
   8952        information, GCC will now default to -gdwarf-4
   8953        -fno-debug-types-section.
   8954        GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information
   8955        consumers support DWARF4 by default. Before GCC 4.8 the default
   8956        version used was DWARF2. To make GCC 4.8 generate an older DWARF
   8957        version use -g together with -gdwarf-2 or -gdwarf-3. The default
   8958        for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.
   8959      * A new general optimization level, -Og, has been introduced. It
   8960        addresses the need for fast compilation and a superior debugging
   8961        experience while providing a reasonable level of run-time
   8962        performance. Overall experience for development should be better
   8963        than the default optimization level -O0.
   8964      * A new option -ftree-partial-pre was added to control the partial
   8965        redundancy elimination (PRE) optimization. This option is enabled
   8966        by default at the -O3 optimization level, and it makes PRE more
   8967        aggressive.
   8968      * The option -fconserve-space has been removed; it was no longer
   8969        useful on most targets since GCC supports putting variables into
   8970        BSS without making them common.
   8971      * The struct reorg and matrix reorg optimizations (command-line
   8972        options -fipa-struct-reorg and -fipa-matrix-reorg) have been
   8973        removed. They did not always work correctly, nor did they work with
   8974        link-time optimization (LTO), hence were only applicable to
   8975        programs consisting of a single translation unit.
   8976      * Several scalability bottle-necks have been removed from GCC's
   8977        optimization passes. Compilation of extremely large functions, e.g.
   8978        due to the use of the flatten attribute in the "Eigen" C++ linear
   8979        algebra templates library, is significantly faster than previous
   8980        releases of GCC.
   8981      * Link-time optimization (LTO) improvements:
   8982           + LTO partitioning has been rewritten for better reliability and
   8983             maintanibility. Several important bugs leading to link
   8984             failures have been fixed.
   8985      * Interprocedural optimization improvements:
   8986           + A new symbol table has been implemented. It builds on existing
   8987             callgraph and varpool modules and provide a new API. Unusual
   8988             symbol visibilities and aliases are handled more consistently
   8989             leading to, for example, more aggressive unreachable code
   8990             removal with LTO.
   8991           + The inline heuristic can now bypass limits on the size of of
   8992             inlined functions when the inlining is particularly
   8993             profitable. This happens, for example, when loop bounds or
   8994             array strides get propagated.
   8995           + Values passed through aggregates (either by value or
   8996             reference) are now propagated at the inter-procedural level
   8997             leading to better inlining decisions (for example in the case
   8998             of Fortran array descriptors) and devirtualization.
   8999      * [6]AddressSanitizer , a fast memory error detector, has been added
   9000        and can be enabled via -fsanitize=address. Memory access
   9001        instructions will be instrumented to detect heap-, stack-, and
   9002        global-buffer overflow as well as use-after-free bugs. To get nicer
   9003        stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
   9004        available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
   9005        x86-64 Darwin.
   9006      * [7]ThreadSanitizer has been added and can be enabled via
   9007        -fsanitize=thread. Instructions will be instrumented to detect data
   9008        races. The ThreadSanitizer is available on x86-64 GNU/Linux.
   9009      * A new local register allocator (LRA) has been implemented, which
   9010        replaces the 26 year old reload pass and improves generated code
   9011        quality. For now it is active on the IA-32 and x86-64 targets.
   9012      * Support for transactional memory has been implemented on the
   9013        following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
   9014        Alpha.
   9015 
   9016 New Languages and Language specific improvements
   9017 
   9018   C family
   9019 
   9020      * Each diagnostic emitted now includes the original source line and a
   9021        caret '^' indicating the column. The option
   9022        -fno-diagnostics-show-caret suppresses this information.
   9023      * The option -ftrack-macro-expansion=2 is now enabled by default.
   9024        This allows the compiler to display the macro expansion stack in
   9025        diagnostics. Combined with the caret information, an example
   9026        diagnostic showing these two features is:
   9027 
   9028 t.c:1:94: error: invalid operands to binary < (have struct mystruct and float
   9029 )
   9030  #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
   9031 _b = (B); __a < __b ? __b : __a; })
   9032 
   9033               ^
   9034 t.c:7:7: note: in expansion of macro 'MYMAX'
   9035    X = MYMAX(P, F);
   9036        ^
   9037 
   9038      * A new -Wsizeof-pointer-memaccess warning has been added (also
   9039        enabled by -Wall) to warn about suspicious length parameters to
   9040        certain string and memory built-in functions if the argument uses
   9041        sizeof. This warning warns e.g. about memset (ptr, 0, sizeof
   9042        (ptr)); if ptr is not an array, but a pointer, and suggests a
   9043        possible fix, or about memcpy (&foo, ptr, sizeof (&foo));.
   9044      * The new option -Wpedantic is an alias for -pedantic, which is now
   9045        deprecated. The forms -Wno-pedantic, -Werror=pedantic, and
   9046        -Wno-error=pedantic work in the same way as for any other -W
   9047        option. One caveat is that -Werror=pedantic is not equivalent to
   9048        -pedantic-errors, since the latter makes into errors some warnings
   9049        that are not controlled by -Wpedantic, and the former only affects
   9050        diagnostics that are disabled when using -Wno-pedantic.
   9051      * The option -Wshadow no longer warns if a declaration shadows a
   9052        function declaration, unless the former declares a function or
   9053        pointer to function, because this is [8]a common and valid case in
   9054        real-world code.
   9055 
   9056   C++
   9057 
   9058      * G++ now implements the [9]C++11 thread_local keyword; this differs
   9059        from the GNU __thread keyword primarily in that it allows dynamic
   9060        initialization and destruction semantics. Unfortunately, this
   9061        support requires a run-time penalty for references to
   9062        non-function-local thread_local variables defined in a different
   9063        translation unit even if they don't need dynamic initialization, so
   9064        users may want to continue to use __thread for TLS variables with
   9065        static initialization semantics.
   9066        If the programmer can be sure that no use of the variable in a
   9067        non-defining TU needs to trigger dynamic initialization (either
   9068        because the variable is statically initialized, or a use of the
   9069        variable in the defining TU will be executed before any uses in
   9070        another TU), they can avoid this overhead with the
   9071        -fno-extern-tls-init option.
   9072        OpenMP threadprivate variables now also support dynamic
   9073        initialization and destruction by the same mechanism.
   9074      * G++ now implements the [10]C++11 attribute syntax, e.g.
   9075 
   9076 [[noreturn]] void f();
   9077 
   9078        and also the alignment specifier, e.g.
   9079 
   9080 alignas(double) int i;
   9081 
   9082      * G++ now implements [11]C++11 inheriting constructors, e.g.
   9083 
   9084 struct A { A(int); };
   9085 struct B: A { using A::A; }; // defines B::B(int)
   9086 B b(42); // OK
   9087 
   9088      * As of GCC 4.8.1, G++ implements the change to decltype semantics
   9089        from [12]N3276.
   9090 
   9091 struct A f();
   9092 decltype(f()) g();    // OK, return type of f() is not required to be complete.
   9093 
   9094      * As of GCC 4.8.1, G++ implements [13]C++11 ref-qualifiers, e.g.
   9095 
   9096 struct A { int f() &; };
   9097 int i = A().f();  // error, f() requires an lvalue object
   9098 
   9099      * G++ now supports a -std=c++1y option for experimentation with
   9100        features proposed for the next revision of the standard, expected
   9101        around 2014. Currently the only difference from -std=c++11 is
   9102        support for return type deduction in normal functions, as proposed
   9103        in [14]N3386. Status of C++1y features in GCC 4.8 can be found
   9104        [15]here.
   9105      * The G++ namespace association extension, __attribute ((strong)),
   9106        has been deprecated. Inline namespaces should be used instead.
   9107      * G++ now supports a -fext-numeric-literal option to control whether
   9108        GNU numeric literal suffixes are accepted as extensions or
   9109        processed as C++11 user-defined numeric literal suffixes. The flag
   9110        is on (use suffixes for GNU literals) by default for -std=gnu++*,
   9111        and -std=c++98. The flag is off (use suffixes for user-defined
   9112        literals) by default for -std=c++11 and later.
   9113 
   9114     Runtime Library (libstdc++)
   9115 
   9116      * [16]Improved experimental support for the new ISO C++ standard,
   9117        C++11, including:
   9118           + forward_list meets the allocator-aware container requirements;
   9119           + this_thread::sleep_for(), this_thread::sleep_until() and
   9120             this_thread::yield() are defined without requiring the
   9121             configure option --enable-libstdcxx-time;
   9122      * Improvements to <random>:
   9123           + SSE optimized normal_distribution.
   9124           + Use of hardware RNG instruction for random_device on new x86
   9125             processors (requires the assembler to support the
   9126             instruction.)
   9127        and <ext/random>:
   9128           + New random number engine simd_fast_mersenne_twister_engine
   9129             with an optimized SSE implementation.
   9130           + New random number distributions beta_distribution,
   9131             normal_mv_distribution, rice_distribution,
   9132             nakagami_distribution, pareto_distribution, k_distribution,
   9133             arcsine_distribution, hoyt_distribution.
   9134      * Added --disable-libstdcxx-verbose configure option to disable
   9135        diagnostic messages issued when a process terminates abnormally.
   9136        This may be useful for embedded systems to reduce the size of
   9137        executables that link statically to the library.
   9138 
   9139   Fortran
   9140 
   9141      * Compatibility notice:
   9142           + Module files: The version of module files (.mod) has been
   9143             incremented. Fortran MODULEs compiled by earlier GCC versions
   9144             have to be recompiled, when they are USEd by files compiled
   9145             with GCC 4.8. GCC 4.8 is not able to read .mod files created
   9146             by earlier versions; attempting to do so gives an error
   9147             message.
   9148             Note: The ABI of the produced assembler data itself has not
   9149             changed; object files and libraries are fully compatible with
   9150             older versions except as noted below.
   9151           + ABI: Some internal names (used in the assembler/object file)
   9152             have changed for symbols declared in the specification part of
   9153             a module. If an affected module  or a file using it via use
   9154             association  is recompiled, the module and all files which
   9155             directly use such symbols have to be recompiled as well. This
   9156             change only affects the following kind of module symbols:
   9157                o Procedure pointers. Note: C-interoperable function
   9158                  pointers (type(c_funptr)) are not affected nor are
   9159                  procedure-pointer components.
   9160                o Deferred-length character strings.
   9161      * The [17]BACKTRACE intrinsic subroutine has been added. It shows a
   9162        backtrace at an arbitrary place in user code; program execution
   9163        continues normally afterwards.
   9164      * The [18]-Wc-binding-type warning option has been added (disabled by
   9165        default). It warns if the a variable might not be C interoperable;
   9166        in particular, if the variable has been declared using an intrinsic
   9167        type with default kind instead of using a kind parameter defined
   9168        for C interoperability in the intrinsic ISO_C_Binding module.
   9169        Before, this warning was always printed. The -Wc-binding-type
   9170        option is enabled by -Wall.
   9171      * The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
   9172        options have been added, which diagnose when code is inserted for
   9173        automatic (re)allocation of a variable during assignment. This
   9174        option can be used to decide whether it is safe to use
   9175        [20]-fno-realloc-lhs. Additionally, it can be used to find
   9176        automatic (re)allocation in hot loops. (For arrays, replacing
   9177        "var=" by "var(:)=" disables the automatic reallocation.)
   9178      * The [21]-Wcompare-reals command-line option has been added. When
   9179        this is set, warnings are issued when comparing REAL or COMPLEX
   9180        types for equality and inequality; consider replacing a == b by
   9181        abs(ab) < eps with a suitable eps. -Wcompare-reals is enabled by
   9182        -Wextra.
   9183      * The [22]-Wtarget-lifetime command-line option has been added
   9184        (enabled with -Wall), which warns if the pointer in a pointer
   9185        assignment might outlive its target.
   9186      * Reading floating point numbers which use "q" for the exponential
   9187        (such as 4.0q0) is now supported as vendor extension for better
   9188        compatibility with old data files. It is strongly recommended to
   9189        use for I/O the equivalent but standard conforming "e" (such as
   9190        4.0e0).
   9191        (For Fortran source code, consider replacing the "q" in
   9192        floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
   9193        suitable qp). Note that  in Fortran source code  replacing "q" by
   9194        a simple "e" is not equivalent.)
   9195      * The GFORTRAN_TMPDIR environment variable for specifying a
   9196        non-default directory for files opened with STATUS="SCRATCH", is
   9197        not used anymore. Instead gfortran checks the POSIX/GNU standard
   9198        TMPDIR environment variable. If TMPDIR is not defined, gfortran
   9199        falls back to other methods to determine the directory for
   9200        temporary files as documented in the [23]user manual.
   9201      * [24]Fortran 2003:
   9202           + Support for unlimited polymorphic variables (CLASS(*)) has
   9203             been added. Nonconstant character lengths are not yet
   9204             supported.
   9205      * [25]TS 29113:
   9206           + Assumed types (TYPE(*)) are now supported.
   9207           + Experimental support for assumed-rank arrays (dimension(..))
   9208             has been added. Note that currently gfortran's own array
   9209             descriptor is used, which is different from the one defined in
   9210             TS29113, see [26]gfortran's header file or use the [27]Chasm
   9211             Language Interoperability Tools.
   9212 
   9213   Go
   9214 
   9215      * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
   9216        release.
   9217      * GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
   9218        release. The library support is not quite complete.
   9219      * Go has been tested on GNU/Linux and Solaris platforms for various
   9220        processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
   9221        work on other platforms as well.
   9222 
   9223 New Targets and Target Specific Improvements
   9224 
   9225   AArch64
   9226 
   9227      * A new port has been added to support AArch64, the new 64-bit
   9228        architecture from ARM. Note that this is a separate port from the
   9229        existing 32-bit ARM port.
   9230      * The port provides initial support for the Cortex-A53 and the
   9231        Cortex-A57 processors with the command line options
   9232        -mcpu=cortex-a53 and -mcpu=cortex-a57.
   9233      * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
   9234        has been added and can be enabled by giving the
   9235        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   9236        default by configuring GCC with the --enable-fix-cortex-a53-835769
   9237        option.
   9238 
   9239   ARM
   9240 
   9241      * Initial support has been added for the AArch32 extensions defined
   9242        in the ARMv8 architecture.
   9243      * Code generation improvements for the Cortex-A7 and Cortex-A15 CPUs.
   9244      * A new option, -mcpu=marvell-pj4, has been added to generate code
   9245        for the Marvell PJ4 processor.
   9246      * The compiler can now automatically generate the VFMA, VFMS, REVSH
   9247        and REV16 instructions.
   9248      * A new vectorizer cost model for Advanced SIMD configurations to
   9249        improve the auto-vectorization strategies used.
   9250      * The scheduler now takes into account the number of live registers
   9251        to reduce the amount of spilling that can occur. This should
   9252        improve code performance in large functions. The limit can be
   9253        removed by using the option -fno-sched-pressure.
   9254      * Improvements have been made to the Marvell iWMMX code generation
   9255        and support for the iWMMX2 SIMD unit has been added. The option
   9256        -mcpu=iwmmxt2 can be used to enable code generation for the latter.
   9257      * A number of code generation improvements for Thumb2 to reduce code
   9258        size when compiling for the M-profile processors.
   9259      * The RTEMS (arm-rtems) port has been updated to use the EABI.
   9260      * Code generation support for the old FPA and Maverick floating-point
   9261        architectures has been removed. Ports that previously relied on
   9262        these features have also been removed. This includes the targets:
   9263           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   9264           + arm*-*-elf (use arm*-*-eabi)
   9265           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   9266           + arm*-*-ecos-elf (no alternative)
   9267           + arm*-*-freebsd (no alternative)
   9268           + arm*-wince-pe* (no alternative).
   9269 
   9270   AVR
   9271 
   9272      * Support for the "Embedded C" fixed-point has been added. For
   9273        details, see the [28]GCC wiki and the [29]user manual. The support
   9274        is not complete.
   9275      * A new print modifier %r for register operands in inline assembler
   9276        is supported. It will print the raw register number without the
   9277        register prefix 'r':
   9278     /* Return the most significant byte of 'val', a 64-bit value.  */
   9279 
   9280     unsigned char msb (long long val)
   9281     {
   9282       unsigned char c;
   9283       __asm__ ("mov %0, %r1+7" : "=r" (c) : "r" (val));
   9284       return c;
   9285     }
   9286        The inline assembler in this example will generate code like
   9287     mov r24, 8+7
   9288        provided c is allocated to R24 and val is allocated to R8R15. This
   9289        works because the GNU assembler accepts plain register numbers
   9290        without register prefix.
   9291      * Static initializers with 3-byte symbols are supported now:
   9292     extern const __memx char foo;
   9293     const __memx void *pfoo = &foo;
   9294        This requires at least Binutils 2.23.
   9295 
   9296   IA-32/x86-64
   9297 
   9298      * Allow -mpreferred-stack-boundary=3 for the x86-64 architecture with
   9299        SSE extensions disabled. Since the x86-64 ABI requires 16 byte
   9300        stack alignment, this is ABI incompatible and intended to be used
   9301        in controlled environments where stack space is an important
   9302        limitation. This option will lead to wrong code when functions
   9303        compiled with 16 byte stack alignment (such as functions from a
   9304        standard library) are called with misaligned stack. In this case,
   9305        SSE instructions may lead to misaligned memory access traps. In
   9306        addition, variable arguments will be handled incorrectly for 16
   9307        byte aligned objects (including x87 long double and __int128),
   9308        leading to wrong results. You must build all modules with
   9309        -mpreferred-stack-boundary=3, including any libraries. This
   9310        includes the system libraries and startup modules.
   9311      * Support for the new Intel processor codename Broadwell with RDSEED,
   9312        ADCX, ADOX, PREFETCHW is available through -madx, -mprfchw,
   9313        -mrdseed command-line options.
   9314      * Support for the Intel RTM and HLE intrinsics, built-in functions
   9315        and code generation is available via -mrtm and -mhle.
   9316      * Support for the Intel FXSR, XSAVE and XSAVEOPT instruction sets.
   9317        Intrinsics and built-in functions are available via -mfxsr, -mxsave
   9318        and -mxsaveopt respectively.
   9319      * New -maddress-mode=[short|long] options for x32.
   9320        -maddress-mode=short overrides default 64-bit addresses to 32-bit
   9321        by emitting the 0x67 address-size override prefix. This is the
   9322        default address mode for x32.
   9323      * New built-in functions to detect run-time CPU type and ISA:
   9324           + A built-in function __builtin_cpu_is has been added to detect
   9325             if the run-time CPU is of a particular type. It returns a
   9326             positive integer on a match and zero otherwise. It accepts one
   9327             string literal argument, the CPU name. For example,
   9328             __builtin_cpu_is("westmere") returns a positive integer if the
   9329             run-time CPU is an Intel Core i7 Westmere processor. Please
   9330             refer to the [30]user manual for the list of valid CPU names
   9331             recognized.
   9332           + A built-in function __builtin_cpu_supports has been added to
   9333             detect if the run-time CPU supports a particular ISA feature.
   9334             It returns a positive integer on a match and zero otherwise.
   9335             It accepts one string literal argument, the ISA feature. For
   9336             example, __builtin_cpu_supports("ssse3") returns a positive
   9337             integer if the run-time CPU supports SSSE3 instructions.
   9338             Please refer to the [31]user manual for the list of valid ISA
   9339             names recognized.
   9340        Caveat: If these built-in functions are called before any static
   9341        constructors are invoked, like during IFUNC initialization, then
   9342        the CPU detection initialization must be explicitly run using this
   9343        newly provided built-in function, __builtin_cpu_init. The
   9344        initialization needs to be done only once. For example, this is how
   9345        the invocation would look like inside an IFUNC initializer:
   9346     static void (*some_ifunc_resolver(void))(void)
   9347     {
   9348       __builtin_cpu_init();
   9349       if (__builtin_cpu_is("amdfam10h") ...
   9350       if (__builtin_cpu_supports("popcnt") ...
   9351     }
   9352 
   9353      * Function Multiversioning Support with G++:
   9354        It is now possible to create multiple function versions each
   9355        targeting a specific processor and/or ISA. Function versions have
   9356        the same signature but different target attributes. For example,
   9357        here is a program with function versions:
   9358     __attribute__ ((target ("default")))
   9359     int foo(void)
   9360     {
   9361       return 1;
   9362     }
   9363 
   9364     __attribute__ ((target ("sse4.2")))
   9365     int foo(void)
   9366     {
   9367       return 2;
   9368     }
   9369 
   9370     int main (void)
   9371     {
   9372       int (*p) = &foo;
   9373       assert ((*p)() == foo());
   9374       return 0;
   9375     }
   9376 
   9377        Please refer to this [32]wiki for more information.
   9378      * The x86 back end has been improved to allow option -fschedule-insns
   9379        to work reliably. This option can be used to schedule instructions
   9380        better and leads to improved performace in certain cases.
   9381      * Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
   9382        from the Mingw-w64 trunk.
   9383      * Support for new AMD family 15h processors (Steamroller core) is now
   9384        available through the -march=bdver3 and -mtune=bdver3 options.
   9385      * Support for new AMD family 16h processors (Jaguar core) is now
   9386        available through the -march=btver2 and -mtune=btver2 options.
   9387 
   9388   FRV
   9389 
   9390      * This target now supports the -fstack-usage command-line option.
   9391 
   9392   MIPS
   9393 
   9394      * GCC can now generate code specifically for the R4700, Broadcom XLP
   9395        and MIPS 34kn processors. The associated -march options are
   9396        -march=r4700, -march=xlp and -march=34kn respectively.
   9397      * GCC now generates better DSP code for MIPS 74k cores thanks to
   9398        further scheduling optimizations.
   9399      * The MIPS port now supports the -fstack-check option.
   9400      * GCC now passes the -mmcu and -mno-mcu options to the assembler.
   9401      * Previous versions of GCC would silently accept -fpic and -fPIC for
   9402        -mno-abicalls targets like mips*-elf. This combination was not
   9403        intended or supported, and did not generate position-independent
   9404        code. GCC 4.8 now reports an error when this combination is used.
   9405 
   9406   PowerPC / PowerPC64 / RS6000
   9407 
   9408      * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
   9409        restore or update the VRSAVE register by default. The respective
   9410        operating systems manage the VRSAVE register directly.
   9411      * Large TOC support has been added for AIX through the command line
   9412        option -mcmodel=large.
   9413      * Native Thread-Local Storage support has been added for AIX.
   9414      * VMX (Altivec) and VSX instruction sets now are enabled implicitly
   9415        when targetting processors that support those hardware features on
   9416        AIX 6.1 and above.
   9417 
   9418   RX
   9419 
   9420      * This target will now issue a warning message whenever multiple fast
   9421        interrupt handlers are found in the same compilation unit. This
   9422        feature can be turned off by the new
   9423        -mno-warn-multiple-fast-interrupts command-line option.
   9424 
   9425   S/390, System z
   9426 
   9427      * Support for the IBM zEnterprise zEC12 processor has been added.
   9428        When using the -march=zEC12 option, the compiler will generate code
   9429        making use of the following new instructions:
   9430           + load and trap instructions
   9431           + 2 new compare and trap instructions
   9432           + rotate and insert selected bits - without CC clobber
   9433        The -mtune=zEC12 option enables zEC12 specific instruction
   9434        scheduling without making use of new instructions.
   9435      * Register pressure sensitive instruction scheduling is enabled by
   9436        default.
   9437      * The ifunc function attribute is enabled by default.
   9438      * memcpy and memcmp invokations on big memory chunks or with run time
   9439        lengths are not generated inline anymore when tuning for z10 or
   9440        higher. The purpose is to make use of the IFUNC optimized versions
   9441        in Glibc.
   9442 
   9443   SH
   9444 
   9445      * The default alignment settings have been reduced to be less
   9446        aggressive. This results in more compact code for optimization
   9447        levels other than -Os.
   9448      * Improved support for the __atomic built-in functions:
   9449           + A new option -matomic-model=model selects the model for the
   9450             generated atomic sequences. The following models are
   9451             supported:
   9452 
   9453               soft-gusa
   9454                       Software gUSA sequences (SH3* and SH4* only). On
   9455                       SH4A targets this will now also partially utilize
   9456                       the movco.l and movli.l instructions. This is the
   9457                       default when the target is sh3*-*-linux* or
   9458                       sh4*-*-linux*.
   9459 
   9460               hard-llcs
   9461                       Hardware movco.l / movli.l sequences (SH4A only).
   9462 
   9463               soft-tcb
   9464                       Software thread control block sequences.
   9465 
   9466               soft-imask
   9467                       Software interrupt flipping sequences (privileged
   9468                       mode only). This is the default when the target is
   9469                       sh1*-*-linux* or sh2*-*-linux*.
   9470 
   9471               none
   9472                       Generates function calls to the respective __atomic
   9473                       built-in functions. This is the default for SH64
   9474                       targets or when the target is not sh*-*-linux*.
   9475 
   9476           + The option -msoft-atomic has been deprecated. It is now an
   9477             alias for -matomic-model=soft-gusa.
   9478           + A new option -mtas makes the compiler generate the tas.b
   9479             instruction for the __atomic_test_and_set built-in function
   9480             regardless of the selected atomic model.
   9481           + The __sync functions in libgcc now reflect the selected atomic
   9482             model when building the toolchain.
   9483      * Added support for the mov.b and mov.w instructions with
   9484        displacement addressing.
   9485      * Added support for the SH2A instructions movu.b and movu.w.
   9486      * Various improvements to code generated for integer arithmetic.
   9487      * Improvements to conditional branches and code that involves the T
   9488        bit. A new option -mzdcbranch tells the compiler to favor
   9489        zero-displacement branches. This is enabled by default for SH4*
   9490        targets.
   9491      * The pref instruction will now be emitted by the __builtin_prefetch
   9492        built-in function for SH3* targets.
   9493      * The fmac instruction will now be emitted by the fmaf standard
   9494        function and the __builtin_fmaf built-in function.
   9495      * The -mfused-madd option has been deprecated in favor of the
   9496        machine-independent -ffp-contract option. Notice that the fmac
   9497        instruction will now be generated by default for expressions like a
   9498        * b + c. This is due to the compiler default setting
   9499        -ffp-contract=fast.
   9500      * Added new options -mfsrra and -mfsca to allow the compiler using
   9501        the fsrra and fsca instructions on targets other than SH4A (where
   9502        they are already enabled by default).
   9503      * Added support for the __builtin_bswap32 built-in function. It is
   9504        now expanded as a sequence of swap.b and swap.w instructions
   9505        instead of a library function call.
   9506      * The behavior of the -mieee option has been fixed and the negative
   9507        form -mno-ieee has been added to control the IEEE conformance of
   9508        floating point comparisons. By default -mieee is now enabled and
   9509        the option -ffinite-math-only implicitly sets -mno-ieee.
   9510      * Added support for the built-in functions __builtin_thread_pointer
   9511        and __builtin_set_thread_pointer. This assumes that GBR is used to
   9512        hold the thread pointer of the current thread. Memory loads and
   9513        stores relative to the address returned by __builtin_thread_pointer
   9514        will now also utilize GBR based displacement address modes.
   9515      * The -mdiv= option for targets other than SHmedia has been fixed and
   9516        documented.
   9517 
   9518   SPARC
   9519 
   9520      * Added optimized instruction scheduling for Niagara4.
   9521 
   9522   TILE-Gx
   9523 
   9524      * Added support for the -mcmodel=MODEL command-line option. The
   9525        models supported are small and large.
   9526 
   9527   V850
   9528 
   9529      * This target now supports the E3V5 architecture via the use of the
   9530        new -mv850e3v5 command-line option. It also has experimental
   9531        support for the e3v5 LOOP instruction which can be enabled via the
   9532        new -mloop command-line option.
   9533 
   9534   XStormy16
   9535 
   9536      * This target now supports the -fstack-usage command-line option.
   9537 
   9538 Operating Systems
   9539 
   9540   OpenBSD
   9541 
   9542      * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
   9543        support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
   9544 
   9545   Windows (Cygwin)
   9546 
   9547      * Executables are now linked against shared libgcc by default. The
   9548        previous default was to link statically, which can still be done by
   9549        explicitly specifying -static or static-libgcc on the command line.
   9550        However it is strongly advised against, as it will cause problems
   9551        for any application that makes use of DLLs compiled by GCC. It
   9552        should be alright for a monolithic stand-alone application that
   9553        only links against the Windows DLLs, but offers little or no
   9554        benefit.
   9555 
   9556 GCC 4.8.1
   9557 
   9558    This is the [33]list of problem reports (PRs) from GCC's bug tracking
   9559    system that are known to be fixed in the 4.8.1 release. This list might
   9560    not be complete (that is, it is possible that some PRs that have been
   9561    fixed are not listed here).
   9562 
   9563    The C++11 <chrono> std::chrono::system_clock and
   9564    std::chrono::steady_clock classes have changed ABI in GCC 4.8.1, they
   9565    both are now separate (never typedefs of each other), both use
   9566    std::chrono::nanoseconds resolution, on most GNU/Linux configurations
   9567    std::chrono::steady_clock is now finally monotonic, and both classes
   9568    are mangled differently than in the previous GCC releases.
   9569    std::chrono::system_clock::now() with std::chrono::microseconds resp.
   9570    std::chrono::seconds resolution is still exported for backwards
   9571    compatibility with default configured libstdc++. Note that libstdc++
   9572    configured with --enable-libstdcxx-time= used to be ABI incompatible
   9573    with default configured libstdc++ for those two classes and no ABI
   9574    compatibility can be offered for those configurations, so any C++11
   9575    code that uses those classes and has been compiled and linked against
   9576    libstdc++ configured with the non-default --enable-libstdcxx-time=
   9577    configuration option needs to be recompiled.
   9578 
   9579 GCC 4.8.2
   9580 
   9581    This is the [34]list of problem reports (PRs) from GCC's bug tracking
   9582    system that are known to be fixed in the 4.8.2 release. This list might
   9583    not be complete (that is, it is possible that some PRs that have been
   9584    fixed are not listed here).
   9585 
   9586 GCC 4.8.3
   9587 
   9588    This is the [35]list of problem reports (PRs) from GCC's bug tracking
   9589    system that are known to be fixed in the 4.8.3 release. This list might
   9590    not be complete (that is, it is possible that some PRs that have been
   9591    fixed are not listed here).
   9592 
   9593    Support for the new powerpc64le-linux platform has been added. It
   9594    defaults to generating code that conforms to the ELFV2 ABI.
   9595 
   9596 GCC 4.8.4
   9597 
   9598    This is the [36]list of problem reports (PRs) from GCC's bug tracking
   9599    system that are known to be fixed in the 4.8.4 release. This list might
   9600    not be complete (that is, it is possible that some PRs that have been
   9601    fixed are not listed here).
   9602 
   9603 GCC 4.8.5
   9604 
   9605    This is the [37]list of problem reports (PRs) from GCC's bug tracking
   9606    system that are known to be fixed in the 4.8.5 release. This list might
   9607    not be complete (that is, it is possible that some PRs that have been
   9608    fixed are not listed here).
   9609 
   9610 
   9611     For questions related to the use of GCC, please consult these web
   9612     pages and the [38]GCC manuals. If that fails, the
   9613     [39]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9614     web pages and the development of GCC are welcome on our developer
   9615     list at [40]gcc (a] gcc.gnu.org. All of [41]our lists have public
   9616     archives.
   9617 
   9618    Copyright (C) [42]Free Software Foundation, Inc. Verbatim copying and
   9619    distribution of this entire article is permitted in any medium,
   9620    provided this notice is preserved.
   9621 
   9622    These pages are [43]maintained by the GCC team. Last modified
   9623    2022-11-05.
   9624 
   9625 References
   9626 
   9627    1. https://gcc.gnu.org/wiki/cxx-conversion
   9628    2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
   9629    3. http://www.nongnu.org/avr-libc/
   9630    4. https://gcc.gnu.org/PR54461
   9631    5. https://gcc.gnu.org/gcc-4.8/porting_to.html
   9632    6. https://github.com/google/sanitizers
   9633    7. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
   9634    8. https://lkml.org/lkml/2006/11/28/239
   9635    9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9636   10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9637   11. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9638   12. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
   9639   13. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   9640   14. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   9641   15. https://gcc.gnu.org/projects/cxx1y.html
   9642   16. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
   9643   17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
   9644   18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9645   19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9646   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   9647   21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9648   22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   9649   23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
   9650   24. https://gcc.gnu.org/wiki/Fortran2003Status
   9651   25. https://gcc.gnu.org/wiki/TS29113Status
   9652   26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
   9653   27. https://chasm-interop.sourceforge.net/
   9654   28. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
   9655   29. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
   9656   30. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   9657   31. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   9658   32. https://gcc.gnu.org/wiki/FunctionMultiVersioning
   9659   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
   9660   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
   9661   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
   9662   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
   9663   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
   9664   38. https://gcc.gnu.org/onlinedocs/
   9665   39. mailto:gcc-help (a] gcc.gnu.org
   9666   40. mailto:gcc (a] gcc.gnu.org
   9667   41. https://gcc.gnu.org/lists.html
   9668   42. https://www.fsf.org/
   9669   43. https://gcc.gnu.org/about.html
   9670 ======================================================================
   9671 http://gcc.gnu.org/gcc-4.7/index.html
   9672                              GCC 4.7 Release Series
   9673 
   9674    (This release series is no longer supported.)
   9675 
   9676    June 12, 2014
   9677 
   9678    The [1]GNU project and the GCC developers are pleased to announce the
   9679    release of GCC 4.7.4.
   9680 
   9681    This release is a bug-fix release, containing fixes for regressions in
   9682    GCC 4.7.3 relative to previous releases of GCC.
   9683 
   9684 Release History
   9685 
   9686    GCC 4.7.4
   9687           June 12, 2014 ([2]changes, [3]documentation)
   9688 
   9689    GCC 4.7.3
   9690           April 11, 2013 ([4]changes, [5]documentation)
   9691 
   9692    GCC 4.7.2
   9693           September 20, 2012 ([6]changes, [7]documentation)
   9694 
   9695    GCC 4.7.1
   9696           June 14, 2012 ([8]changes, [9]documentation)
   9697 
   9698    GCC 4.7.0
   9699           March 22, 2012 ([10]changes, [11]documentation)
   9700 
   9701 References and Acknowledgements
   9702 
   9703    GCC used to stand for the GNU C Compiler, but since the compiler
   9704    supports several other languages aside from C, it now stands for the
   9705    GNU Compiler Collection.
   9706 
   9707    A list of [12]successful builds is updated as new information becomes
   9708    available.
   9709 
   9710    The GCC developers would like to thank the numerous people that have
   9711    contributed new features, improvements, bug fixes, and other changes as
   9712    well as test results to GCC. This [13]amazing group of volunteers is
   9713    what makes GCC successful.
   9714 
   9715    For additional information about GCC please refer to the [14]GCC
   9716    project web site or contact the [15]GCC development mailing list.
   9717 
   9718    To obtain GCC please use [16]our mirror sites or [17]our version
   9719    control system.
   9720 
   9721 
   9722     For questions related to the use of GCC, please consult these web
   9723     pages and the [18]GCC manuals. If that fails, the
   9724     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9725     web pages and the development of GCC are welcome on our developer
   9726     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   9727     archives.
   9728 
   9729    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   9730    distribution of this entire article is permitted in any medium,
   9731    provided this notice is preserved.
   9732 
   9733    These pages are [23]maintained by the GCC team. Last modified
   9734    2022-10-26.
   9735 
   9736 References
   9737 
   9738    1. http://www.gnu.org/
   9739    2. https://gcc.gnu.org/gcc-4.7/changes.html
   9740    3. https://gcc.gnu.org/onlinedocs/4.7.4/
   9741    4. https://gcc.gnu.org/gcc-4.7/changes.html
   9742    5. https://gcc.gnu.org/onlinedocs/4.7.3/
   9743    6. https://gcc.gnu.org/gcc-4.7/changes.html
   9744    7. https://gcc.gnu.org/onlinedocs/4.7.2/
   9745    8. https://gcc.gnu.org/gcc-4.7/changes.html
   9746    9. https://gcc.gnu.org/onlinedocs/4.7.1/
   9747   10. https://gcc.gnu.org/gcc-4.7/changes.html
   9748   11. https://gcc.gnu.org/onlinedocs/4.7.0/
   9749   12. https://gcc.gnu.org/gcc-4.7/buildstat.html
   9750   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   9751   14. https://gcc.gnu.org/index.html
   9752   15. mailto:gcc (a] gcc.gnu.org
   9753   16. https://gcc.gnu.org/mirrors.html
   9754   17. https://gcc.gnu.org/git.html
   9755   18. https://gcc.gnu.org/onlinedocs/
   9756   19. mailto:gcc-help (a] gcc.gnu.org
   9757   20. mailto:gcc (a] gcc.gnu.org
   9758   21. https://gcc.gnu.org/lists.html
   9759   22. https://www.fsf.org/
   9760   23. https://gcc.gnu.org/about.html
   9761 ======================================================================
   9762 http://gcc.gnu.org/gcc-4.7/changes.html
   9763                              GCC 4.7 Release Series
   9764                         Changes, New Features, and Fixes
   9765 
   9766 Caveats
   9767 
   9768      * The -fconserve-space flag has been deprecated. The flag had no
   9769        effect for most targets: only targets without a global .bss section
   9770        and without support for switchable sections. Furthermore, the flag
   9771        only had an effect for G++, where it could result in wrong
   9772        semantics (please refer to the GCC manual for further details). The
   9773        flag will be removed in GCC 4.8
   9774      * Support for a number of older systems and recently unmaintained or
   9775        untested target ports of GCC has been declared obsolete in GCC 4.7.
   9776        Unless there is activity to revive them, the next release of GCC
   9777        will have their sources permanently removed.
   9778        All GCC ports for the following processor architectures have been
   9779        declared obsolete:
   9780           + picoChip (picochip-*)
   9781        The following ports for individual systems on particular
   9782        architectures have been obsoleted:
   9783           + IRIX 6.5 (mips-sgi-irix6.5)
   9784           + MIPS OpenBSD (mips*-*-openbsd*)
   9785           + Solaris 8 (*-*-solaris2.8). Details can be found in the
   9786             [1]announcement.
   9787           + Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
   9788      * On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
   9789        ARMv7-R, or ARMv7-M, the new option -munaligned-access is active by
   9790        default, which for some sources generates code that accesses memory
   9791        on unaligned addresses. This requires the kernel of those systems
   9792        to enable such accesses (controlled by CP15 register c1, refer to
   9793        ARM documentation). Alternatively, or for compatibility with
   9794        kernels where unaligned accesses are not supported, all code has to
   9795        be compiled with -mno-unaligned-access. Upstream Linux kernel
   9796        releases have automatically and unconditionally supported unaligned
   9797        accesses as emitted by GCC due to this option being active since
   9798        version 2.6.28.
   9799      * Support on ARM for the legacy floating-point accelerator (FPA) and
   9800        the mixed-endian floating-point format that it used has been
   9801        obsoleted. The ports that still use this format have been obsoleted
   9802        as well. Many legacy ARM ports already provide an alternative that
   9803        uses the VFP floating-point format. The obsolete ports will be
   9804        deleted in the next release.
   9805        The obsolete ports with alternatives are:
   9806           + arm*-*-rtems (use arm*-*-rtemseabi)
   9807           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   9808           + arm*-*-elf (use arm*-*-eabi)
   9809           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   9810        Note, however, that these alternatives are not binary compatible
   9811        with their legacy counterparts (although some can support running
   9812        legacy applications).
   9813        The obsolete ports that currently lack a modern alternative are:
   9814           + arm*-*-ecos-elf
   9815           + arm*-*-freebsd
   9816           + arm*-wince-pe*
   9817        New ports that support more recent versions of the architecture are
   9818        welcome.
   9819      * Support for the Maverick co-processor on ARM has been obsoleted.
   9820        Code to support it will be deleted in the next release.
   9821      * Support has been removed for Unix International threads on Solaris
   9822        2, so the --enable-threads=solaris configure option and the
   9823        -threads compiler option don't work any longer.
   9824      * Support has been removed for the Solaris BSD Compatibility Package,
   9825        which lives in /usr/ucbinclude and /usr/ucblib. It has been removed
   9826        from Solaris 11, and was only intended as a migration aid from
   9827        SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
   9828        recognized any longer.
   9829      * The AVR port's libgcc has been improved and its multilib structure
   9830        has been enhanced. As a result, all objects contributing to an
   9831        application must either be compiled with GCC versions up to 4.6.x
   9832        or with GCC versions 4.7.1 or later. If the compiler is used with
   9833        AVR Libc, you need a version that supports the new layout, i.e.
   9834        implements [2]#35407.
   9835      * The AVR port's -mshort-calls command-line option has been
   9836        deprecated. It will be removed in the GCC 4.8 release. See -mrelax
   9837        for a replacement.
   9838      * The AVR port only references startup code that clears .bss and the
   9839        common section resp. initializes the .data and .rodata section
   9840        provided respective sections (or subsections thereof) are not
   9841        empty, see [3]PR18145. Applications that put all static storage
   9842        objects into non-standard sections and / or define all static
   9843        storage objects in assembler modules, must reference __do_clear_bss
   9844        resp. __do_copy_data by hand or undefine the symbol(s) by means of
   9845        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
   9846      * The ARM port's -mwords-little-endian option has been deprecated. It
   9847        will be removed in a future release.
   9848      * Support has been removed for the NetWare x86 configuration
   9849        obsoleted in GCC 4.6.
   9850      * It is no longer possible to use the "l" constraint in MIPS16 asm
   9851        statements.
   9852      * GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard
   9853        library which affected the ABI in C++11 mode: a data member was
   9854        added to std::list changing its size and altering the definitions
   9855        of some member functions, and std::pair's move constructor was
   9856        non-trivial which altered the calling convention for functions with
   9857        std::pair arguments or return types. The ABI incompatibilities have
   9858        been fixed for GCC version 4.7.2 but as a result C++11 code
   9859        compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11
   9860        code compiled with different GCC versions and with C++98/C++03 code
   9861        compiled with any version.
   9862      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   9863        rules for the layout of vectors that could lead to wrong code being
   9864        generated. Vectors larger than 8 bytes in size are now by default
   9865        aligned to an 8-byte boundary. This is an ABI change: code that
   9866        makes explicit use of vector types may be incompatible with binary
   9867        objects built with older versions of GCC. Auto-vectorized code is
   9868        not affected by this change. (This change affects GCC versions
   9869        4.7.2 and later.)
   9870      * More information on porting to GCC 4.7 from previous versions of
   9871        GCC can be found in the [4]porting guide for this release.
   9872 
   9873 General Optimizer Improvements
   9874 
   9875      * Support for a new parameter --param case-values-threshold=n was
   9876        added to allow users to control the cutoff between doing switch
   9877        statements as a series of if statements and using a jump table.
   9878      * Link-time optimization (LTO) improvements:
   9879           + Improved scalability and reduced memory usage. Link time
   9880             optimization of Firefox now requires 3GB of RAM on a 64-bit
   9881             system, while over 8GB was needed previously. Linking time has
   9882             been improved, too. The serial stage of linking Firefox has
   9883             been sped up by about a factor of 10.
   9884           + Reduced size of object files and temporary storage used during
   9885             linking.
   9886           + Streaming performance (both outbound and inbound) has been
   9887             improved.
   9888           + ld -r is now supported with LTO.
   9889           + Several bug fixes, especially in symbol table handling and
   9890             merging.
   9891      * Interprocedural optimization improvements:
   9892           + Heuristics now take into account that after inlining code will
   9893             be optimized out because of known values (or properties) of
   9894             function parameters. For example:
   9895 void foo(int a)
   9896 {
   9897   if (a > 10)
   9898     ... huge code ...
   9899 }
   9900 void bar (void)
   9901 {
   9902   foo (0);
   9903 }
   9904 
   9905             The call of foo will be inlined into bar even when optimizing
   9906             for code size. Constructs based on __builtin_constant_p are
   9907             now understood by the inliner and code size estimates are
   9908             evaluated a lot more realistically.
   9909           + The representation of C++ virtual thunks and aliases (both
   9910             implicit and defined via the alias attribute) has been
   9911             re-engineered. Aliases no longer pose optimization barriers
   9912             and calls to an alias can be inlined and otherwise optimized.
   9913           + The inter-procedural constant propagation pass has been
   9914             rewritten. It now performs generic function specialization.
   9915             For example when compiling the following:
   9916 void foo(bool flag)
   9917 {
   9918   if (flag)
   9919     ... do something ...
   9920   else
   9921     ... do something else ...
   9922 }
   9923 void bar (void)
   9924 {
   9925   foo (false);
   9926   foo (true);
   9927   foo (false);
   9928   foo (true);
   9929   foo (false);
   9930   foo (true);
   9931 }
   9932 
   9933             GCC will now produce two copies of foo. One with flag being
   9934             true, while other with flag being false. This leads to
   9935             performance improvements previously possible only by inlining
   9936             all calls. Cloning causes a lot less code size growth.
   9937      * A string length optimization pass has been added. It attempts to
   9938        track string lengths and optimize various standard C string
   9939        functions like strlen, strchr, strcpy, strcat, stpcpy and their
   9940        _FORTIFY_SOURCE counterparts into faster alternatives. This pass is
   9941        enabled by default at -O2 or above, unless optimizing for size, and
   9942        can be disabled by the -fno-optimize-strlen option. The pass can
   9943        e.g. optimize
   9944 char *bar (const char *a)
   9945 {
   9946   size_t l = strlen (a) + 2;
   9947   char *p = malloc (l); if (p == NULL) return p;
   9948   strcpy (p, a); strcat (p, "/"); return p;
   9949 }
   9950 
   9951        into:
   9952 char *bar (const char *a)
   9953 {
   9954   size_t tmp = strlen (a);
   9955   char *p = malloc (tmp + 2); if (p == NULL) return p;
   9956   memcpy (p, a, tmp); memcpy (p + tmp, "/", 2); return p;
   9957 }
   9958 
   9959        or for hosted compilations where stpcpy is available in the runtime
   9960        and headers provide its prototype, e.g.
   9961 void foo (char *a, const char *b, const char *c, const char *d)
   9962 {
   9963   strcpy (a, b); strcat (a, c); strcat (a, d);
   9964 }
   9965 
   9966        can be optimized into:
   9967 void foo (char *a, const char *b, const char *c, const char *d)
   9968 {
   9969   strcpy (stpcpy (stpcpy (a, b), c), d);
   9970 }
   9971 
   9972 New Languages and Language specific improvements
   9973 
   9974      * Version 3.1 of the OpenMP specification is now supported for the C,
   9975        C++, and Fortran compilers.
   9976 
   9977   Ada
   9978 
   9979      * The command-line option -feliminate-unused-debug-types has been
   9980        re-enabled by default, as it is for the other languages, leading to
   9981        a reduction in debug info size of 12.5% and more for relevant
   9982        cases, as well as to a small compilation speedup.
   9983 
   9984   C family
   9985 
   9986      * A new built-in, __builtin_assume_aligned, has been added, through
   9987        which the compiler can be hinted about pointer alignment and can
   9988        use it to improve generated code.
   9989      * A new warning option -Wunused-local-typedefs was added for C, C++,
   9990        Objective-C and Objective-C++. This warning diagnoses typedefs
   9991        locally defined in a function, and otherwise not used.
   9992      * A new experimental command-line option -ftrack-macro-expansion was
   9993        added for C, C++, Objective-C, Objective-C++ and Fortran. It allows
   9994        the compiler to emit diagnostic about the current macro expansion
   9995        stack when a compilation error occurs in a macro expansion.
   9996      * Experimental support for transactional memory has been added. It
   9997        includes support in the compiler, as well as a supporting runtime
   9998        library called libitm. To compile code with transactional memory
   9999        constructs, use the -fgnu-tm option.
   10000        Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
   10001        and 32-bit/64-bit x86 platforms.
   10002        For more details on transactional memory see [5]the GCC WiKi.
   10003      * Support for atomic operations specifying the C++11/C11 memory model
   10004        has been added. These new __atomic routines replace the existing
   10005        __sync built-in routines.
   10006        Atomic support is also available for memory blocks. Lock-free
   10007        instructions will be used if a memory block is the same size and
   10008        alignment as a supported integer type. Atomic operations which do
   10009        not have lock-free support are left as function calls. A set of
   10010        library functions is available on the GCC atomic wiki in the
   10011        "External Atomics Library" section.
   10012        For more details on the memory models and features, see the
   10013        [6]atomic wiki.
   10014      * When a binary operation is performed on vector types and one of the
   10015        operands is a uniform vector, it is possible to replace the vector
   10016        with the generating element. For example:
   10017 typedef int v4si __attribute__ ((vector_size (16)));
   10018 v4si res, a = {1,2,3,4};
   10019 int x;
   10020 
   10021 res = 2 + a;  /* means {2,2,2,2} + a  */
   10022 res = a - x;  /* means a - {x,x,x,x}  */
   10023 
   10024   C
   10025 
   10026      * There is support for some more features from the C11 revision of
   10027        the ISO C standard. GCC now accepts the options -std=c11 and
   10028        -std=gnu11, in addition to the previous -std=c1x and -std=gnu1x.
   10029           + Unicode strings (previously supported only with options such
   10030             as -std=gnu11, now supported with -std=c11), and the
   10031             predefined macros __STDC_UTF_16__ and __STDC_UTF_32__.
   10032           + Nonreturning functions (_Noreturn and <stdnoreturn.h>).
   10033           + Alignment support (_Alignas, _Alignof, max_align_t,
   10034             <stdalign.h>).
   10035           + A built-in function __builtin_complex is provided to support C
   10036             library implementation of the CMPLX family of macros.
   10037 
   10038   C++
   10039 
   10040      * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
   10041        options, which are equivalent to -std=c++0x, -std=gnu++0x, and
   10042        -Wc++0x-compat, respectively.
   10043      * G++ now implements [7]C++11 extended friend syntax:
   10044 
   10045 template<class W>
   10046 class Q
   10047 {
   10048   static const int I = 2;
   10049 public:
   10050   friend W;
   10051 };
   10052 
   10053 struct B
   10054 {
   10055   int ar[Q<B>::I];
   10056 };
   10057 
   10058      * Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
   10059        override control.
   10060 
   10061 struct B {
   10062   virtual void f() const final;
   10063   virtual void f(int);
   10064 };
   10065 
   10066 struct D : B {
   10067   void f() const;            // error: D::f attempts to override final B::f
   10068   void f(long) override;     // error: doesn't override anything
   10069   void f(int) override;      // ok
   10070 };
   10071 
   10072 struct E final { };
   10073 struct F: E { }; // error: deriving from final class
   10074 
   10075      * G++ now implements [9]C++11 non-static data member initializers.
   10076 
   10077 struct A {
   10078   int i = 42;
   10079 } a; // initializes a.i to 42
   10080 
   10081      * Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
   10082        user-defined literals.
   10083 
   10084 // Not actually a good approximation.  :)
   10085 constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
   10086 long double pi = 180.0_degrees;
   10087 
   10088      * G++ now implements [11]C++11 alias-declarations.
   10089 
   10090 template <class T> using Ptr = T*;
   10091 Ptr<int> ip;  // decltype(ip) is int*
   10092 
   10093      * Thanks to Ville Voutilainen and Pedro Lamaro, G++ now implements
   10094        [12]C++11 delegating constructors.
   10095 
   10096 struct A {
   10097   A(int);
   10098   A(): A(42) { } // delegate to the A(int) constructor
   10099 };
   10100 
   10101      * G++ now fully implements C++11 atomic classes rather than just
   10102        integer derived classes.
   10103 
   10104 class POD {
   10105   int a;
   10106   int b;
   10107 };
   10108 std::atomic<POD> my_atomic_POD;
   10109 
   10110      * G++ now sets the predefined macro __cplusplus to the correct value,
   10111        199711L for C++98/03, and 201103L for C++11.
   10112      * G++ now correctly implements the two-phase lookup rules such that
   10113        an unqualified name used in a template must have an appropriate
   10114        declaration found either in scope at the point of definition of the
   10115        template or by argument-dependent lookup at the point of
   10116        instantiation. As a result, code that relies on a second
   10117        unqualified lookup at the point of instantiation to find functions
   10118        declared after the template or in dependent bases will be rejected.
   10119        The compiler will suggest ways to fix affected code, and using the
   10120        -fpermissive compiler flag will allow the code to compile with a
   10121        warning.
   10122 
   10123 template <class T>
   10124 void f() { g(T()); } // error, g(int) not found by argument-dependent lookup
   10125 void g(int) { } // fix by moving this declaration before the declaration of f
   10126 
   10127 template <class T>
   10128 struct A: T {
   10129   // error, B::g(B) not found by argument-dependent lookup
   10130   void f() { g(T()); } // fix by using this->g or A::g
   10131 };
   10132 
   10133 struct B { void g(B); };
   10134 
   10135 int main()
   10136 {
   10137   f<int>();
   10138   A<B>().f();
   10139 }
   10140 
   10141      * G++ now properly re-uses stack space allocated for temporary
   10142        objects when their lifetime ends, which can significantly lower
   10143        stack consumption for some C++ functions. As a result of this, some
   10144        code with undefined behavior will now break:
   10145 
   10146 const int &f(const int &i) { return i; }
   10147 ....
   10148 const int &x = f(1);
   10149 const int &y = f(2);
   10150 
   10151        Here, x refers to the temporary allocated to hold the 1 argument,
   10152        which only lives until the end of the initialization; it
   10153        immediately becomes a dangling reference. So the next statement
   10154        re-uses the stack slot to hold the 2 argument, and users of x get
   10155        that value instead.
   10156        Note that this should not cause any change of behavior for
   10157        temporaries of types with non-trivial destructors, as they are
   10158        already destroyed at end of full-expression; the change is that now
   10159        the storage is released as well.
   10160      * A new command-line option -Wdelete-non-virtual-dtor has been added
   10161        to warn when delete is used to destroy an instance of a class which
   10162        has virtual functions and non-virtual destructor. It is unsafe to
   10163        delete an instance of a derived class through a pointer to a base
   10164        class if the base class does not have a virtual destructor. This
   10165        warning is enabled by -Wall.
   10166      * A new command-line option -Wzero-as-null-pointer-constant has been
   10167        added to warn when a literal '0' is used as null pointer constant.
   10168        It can be useful to facilitate the conversion to nullptr in C++11.
   10169      * As per C++98, access-declarations are now deprecated by G++.
   10170        Using-declarations are to be used instead. Furthermore, some
   10171        efforts have been made to improve the support of class scope
   10172        using-declarations. In particular, using-declarations referring to
   10173        a dependent type now work as expected ([13]bug c++/14258).
   10174      * The ELF symbol visibility of a template instantiation is now
   10175        properly constrained by the visibility of its template arguments
   10176        ([14]bug c++/35688).
   10177 
   10178     Runtime Library (libstdc++)
   10179 
   10180      * [15]Improved experimental support for the new ISO C++ standard,
   10181        C++11, including:
   10182           + using noexcept in most of the library;
   10183           + implementations of pointer_traits, allocator_traits and
   10184             scoped_allocator_adaptor;
   10185           + uses-allocator construction for tuple;
   10186           + vector meets the allocator-aware container requirements;
   10187           + replacing monotonic_clock with steady_clock;
   10188           + enabling the thread support library on most POSIX targets;
   10189           + many small improvements to conform to the FDIS.
   10190      * Added --enable-clocale=newlib configure option.
   10191      * Debug Mode iterators for unordered associative containers.
   10192      * Avoid polluting the global namespace and do not include <unistd.h>.
   10193 
   10194   Fortran
   10195 
   10196      * The compile flag [16]-fstack-arrays has been added, which causes
   10197        all local arrays to be put on stack memory. For some programs this
   10198        will improve the performance significantly. If your program uses
   10199        very large local arrays, it is possible that you will have to
   10200        extend your runtime limits for stack memory.
   10201      * The [17]-Ofast flag now also implies [18]-fno-protect-parens and
   10202        [19]-fstack-arrays.
   10203      * Front-end optimizations can now be selected by the
   10204        [20]-ffrontend-optimize option and deselected by the
   10205        -fno-frontend-optimize option.
   10206      * When front-end optimization removes a function call,
   10207        [21]-Wfunction-elimination warns about that.
   10208      * When performing front-end-optimization, the
   10209        [22]-faggressive-function-elimination option allows the removal of
   10210        duplicate function calls even for impure functions.
   10211      * The flag [23]-Wreal-q-constant has been added, which warns if
   10212        floating-point literals have been specified using q (such as
   10213        1.0q0); the q marker is now supported as a vendor extension to
   10214        denote quad precision (REAL(16) or, if not available, REAL(10)).
   10215        Consider using a kind parameter (such as in 1.0_qp) instead, which
   10216        can be obtained via [24]SELECTED_REAL_KIND.
   10217      * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
   10218        Fortran now always prints error messages to standard error. If you
   10219        wish to redirect standard error, please consult the manual for your
   10220        OS, shell, batch environment etc. as appropriate.
   10221      * The -fdump-core option and GFORTRAN_ERROR_DUMPCORE environment
   10222        variable have been removed. When encountering a serious error,
   10223        gfortran will now always abort the program. Whether a core dump is
   10224        generated depends on the user environment settings; see the ulimit
   10225        -c setting for POSIX shells, limit coredumpsize for C shells, and
   10226        the [25]WER user-mode dumps settings on Windows.
   10227      * The [26]-fbacktrace option is now enabled by default. When
   10228        encountering a fatal error, gfortran will attempt to print a
   10229        backtrace to standard error before aborting. It can be disabled
   10230        with -fno-backtrace. Note: On POSIX targets with the addr2line
   10231        utility from GNU binutils, GNU Fortran can print a backtrace with
   10232        function name, file name, line number information in addition to
   10233        the addresses; otherwise only the addresses are printed.
   10234      * [27]Fortran 2003:
   10235           + Generic interface names which have the same name as derived
   10236             types are now supported, which allows to write constructor
   10237             functions. Note that Fortran does not support static
   10238             constructor functions; only default initialization or an
   10239             explicit structure-constructor initialization are available.
   10240           + [28]Polymorphic (class) arrays are now supported.
   10241      * [29]Fortran 2008:
   10242           + Support for the DO CONCURRENT construct has been added, which
   10243             allows the user to specify that individual loop iterations
   10244             have no interdependencies.
   10245           + [30]Coarrays: Full single-image support except for polymorphic
   10246             coarrays. Additionally, preliminary support for multiple
   10247             images via an MPI-based [31]coarray communication library has
   10248             been added. Note: The library version is not yet usable as
   10249             remote coarray access is not yet possible.
   10250      * [32]TS 29113:
   10251           + New flag [33]-std=f2008ts permits programs that are expected
   10252             to conform to the Fortran 2008 standard and the draft
   10253             Technical Specification (TS) 29113 on Further Interoperability
   10254             of Fortran with C.
   10255           + The OPTIONAL attribute is now allowed for dummy arguments of
   10256             BIND(C) procedures.
   10257           + The RANK intrinsic has been added.
   10258           + The implementation of the ASYNCHRONOUS attribute in GCC is
   10259             compatible with the candidate draft of TS 29113 (since GCC
   10260             4.6).
   10261 
   10262   Go
   10263 
   10264      * GCC 4.7 implements the [34]Go 1 language standard. The library
   10265        support in 4.7.0 is not quite complete, due to release timing.
   10266        Release 4.7.1 includes complete support for Go 1. The Go library is
   10267        from the Go 1.0.1 release.
   10268      * Go has been tested on GNU/Linux and Solaris platforms. It may work
   10269        on other platforms as well.
   10270 
   10271 New Targets and Target Specific Improvements
   10272 
   10273   ARM
   10274 
   10275      * GCC now supports the Cortex-A7 processor implementing the v7-a
   10276        version of the architecture using the option -mcpu=cortex-a7.
   10277      * The default vector size in auto-vectorization for NEON is now 128
   10278        bits. If vectorization fails thusly, the vectorizer tries again
   10279        with 64-bit vectors.
   10280      * A new option -mvectorize-with-neon-double was added to allow users
   10281        to change the vector size to 64 bits.
   10282 
   10283   AVR
   10284 
   10285      * GCC now supports the XMEGA architecture. This requires GNU binutils
   10286        2.22 or later.
   10287      * Support for the [35]named address spaces __flash, __flash1, ,
   10288        __flash5 and __memx has been added. These address spaces locate
   10289        read-only data in flash memory and allow reading from flash memory
   10290        by means of ordinary C code, i.e. without the need of (inline)
   10291        assembler code:
   10292 
   10293 const __flash int values[] = { 42, 31 };
   10294 
   10295 int add_values (const __flash int *p, int i)
   10296 {
   10297     return values[i] + *p;
   10298 }
   10299 
   10300      * Support has been added for the AVR-specific configure option
   10301        --with-avrlibc=yes in order to arrange for better integration of
   10302        [36]AVR-Libc. This configure option is supported in avr-gcc 4.7.2
   10303        and newer and will only take effect in non-RTEMS configurations. If
   10304        avr-gcc is configured for RTEMS, the option will be ignored which
   10305        is the same as specifying --with-avrlibc=no. See [37]PR54461 for
   10306        more technical details.
   10307      * Support for AVR-specific [38]built-in functions has been added.
   10308      * Support has been added for the signed and unsigned 24-bit scalar
   10309        integer types __int24 and __uint24.
   10310      * New command-line options -maccumulate-args, -mbranch-cost=cost and
   10311        -mstrict-X were added to allow better fine-tuning of code
   10312        optimization.
   10313      * The command-line option -fdata-sections now also takes affect on
   10314        the section names of variables with the progmem attribute.
   10315      * A new inline assembler print modifier %i to print a RAM address as
   10316        I/O address has been added:
   10317 
   10318 #include <avr/io.h> /* Port Definitions from AVR-LibC */
   10319 
   10320 void set_portb (uint8_t value)
   10321 {
   10322     asm volatile ("out %i0, %1" :: "n" (&PORTB), "r" (value) : "memory");
   10323 }
   10324 
   10325        The offset between an I/O address and the RAM address for that I/O
   10326        location is device-specific. This offset is taken into account when
   10327        printing a RAM address with the %i modifier so that the address is
   10328        suitable to be used as operand in an I/O command. The address must
   10329        be a constant integer known at compile time.
   10330      * The inline assembler constraint "R" to represent integers in the
   10331        range 6  5 has been removed without replacement.
   10332      * Many optimizations to:
   10333           + 64-bit integer arithmetic
   10334           + Widening multiplication
   10335           + Integer division by a constant
   10336           + Avoid constant reloading in multi-byte instructions.
   10337           + Micro-optimizations for special instruction sequences.
   10338           + Generic built-in functions like __builtin_ffs*,
   10339             __builtin_clz*, etc.
   10340           + If-else decision trees generated by switch instructions
   10341           + Merging of data located in flash memory
   10342           + New libgcc variants for devices with 8-bit wide stack pointer
   10343           + 
   10344      * Better documentation:
   10345           + Handling of EIND and indirect jumps on devices with more than
   10346             128 KiB of program memory.
   10347           + Handling of the RAMPD, RAMPX, RAMPY and RAMPZ special function
   10348             registers.
   10349           + Function attributes OS_main and OS_task.
   10350           + AVR-specific built-in macros.
   10351 
   10352   C6X
   10353 
   10354      * Support has been added for the Texas Instruments C6X family of
   10355        processors.
   10356 
   10357   CR16
   10358 
   10359      * Support has been added for National Semiconductor's CR16
   10360        architecture.
   10361 
   10362   Epiphany
   10363 
   10364      * Support has been added for Adapteva's Epiphany architecture.
   10365 
   10366   IA-32/x86-64
   10367 
   10368      * Support for Intel AVX2 intrinsics, built-in functions and code
   10369        generation is available via -mavx2.
   10370      * Support for Intel BMI2 intrinsics, built-in functions and code
   10371        generation is available via -mbmi2.
   10372      * Implementation and automatic generation of __builtin_clz* using the
   10373        lzcnt instruction is available via -mlzcnt.
   10374      * Support for Intel FMA3 intrinsics and code generation is available
   10375        via -mfma.
   10376      * A new -mfsgsbase command-line option is available that makes GCC
   10377        generate new segment register read/write instructions through
   10378        dedicated built-ins.
   10379      * Support for the new Intel rdrnd instruction is available via
   10380        -mrdrnd.
   10381      * Two additional AVX vector conversion instructions are available via
   10382        -mf16c.
   10383      * Support for new Intel processor codename IvyBridge with RDRND,
   10384        FSGSBASE and F16C is available through -march=core-avx-i.
   10385      * Support for the new Intel processor codename Haswell with AVX2,
   10386        FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
   10387      * Support for new AMD family 15h processors (Piledriver core) is now
   10388        available through -march=bdver2 and -mtune=bdver2 options.
   10389      * Support for [39]the x32 psABI is now available through the -mx32
   10390        option.
   10391      * Windows mingw targets are using the -mms-bitfields option by
   10392        default.
   10393      * Windows x86 targets are using the __thiscall calling convention for
   10394        C++ class-member functions.
   10395      * Support for the configure option --with-threads=posix for Windows
   10396        mingw targets.
   10397 
   10398   MIPS
   10399 
   10400      * GCC now supports thread-local storage (TLS) for MIPS16. This
   10401        requires GNU binutils 2.22 or later.
   10402      * GCC can now generate code specifically for the Cavium Octeon+ and
   10403        Octeon2 processors. The associated command-line options are
   10404        -march=octeon+ and -march=octeon2 respectively. Both options
   10405        require GNU binutils 2.22 or later.
   10406      * GCC can now work around certain 24k errata, under the control of
   10407        the command-line option -mfix-24k. These workarounds require GNU
   10408        binutils 2.20 or later.
   10409      * 32-bit MIPS GNU/Linux targets such as mips-linux-gnu can now build
   10410        n32 and n64 multilibs. The result is effectively a 64-bit GNU/Linux
   10411        toolchain that generates 32-bit code by default. Use the
   10412        configure-time option --enable-targets=all to select these extra
   10413        multilibs.
   10414      * Passing -fno-delayed-branch now also stops the assembler from
   10415        automatically filling delay slots.
   10416 
   10417   PowerPC/PowerPC64
   10418 
   10419      * Vectors of type vector long long or vector long are passed and
   10420        returned using the same method as other vectors with the VSX
   10421        instruction set. Previously GCC did not adhere to the ABI for
   10422        128-bit vectors with 64-bit integer base types (PR 48857). This
   10423        will also be fixed in the GCC 4.6.1 and 4.5.4 releases.
   10424      * A new option -mno-pointers-to-nested-functions was added to allow
   10425        AIX 32-bit/64-bit and GNU/Linux 64-bit PowerPC users to specify
   10426        that the compiler should not load up the chain register (r11)
   10427        before calling a function through a pointer. If you use this
   10428        option, you cannot call nested functions through a pointer, or call
   10429        other languages that might use the static chain.
   10430      * A new option msave-toc-indirect was added to allow AIX
   10431        32-bit/64-bit and GNU/Linux 64-bit PowerPC users control whether we
   10432        save the TOC in the prologue for indirect calls or generate the
   10433        save inline. This can speed up some programs that call through a
   10434        function pointer a lot, but it can slow down other functions that
   10435        only call through a function pointer in exceptional cases.
   10436      * The PowerPC port will now enable machine-specific built-in
   10437        functions when the user switches the target machine using the
   10438        #pragma GCC target or __attribute__ ((__target__ ("target"))) code
   10439        sequences. In addition, the target macros are updated. However, due
   10440        to the way the -save-temps switch is implemented, you won't see the
   10441        effect of these additional macros being defined in preprocessor
   10442        output.
   10443 
   10444   SH
   10445 
   10446      * A new option -msoft-atomic has been added. When it is specified,
   10447        GCC will generate GNU/Linux-compatible gUSA atomic sequences for
   10448        the new __atomic routines.
   10449      * Since it is neither supported by GAS nor officially documented,
   10450        code generation for little endian SH2A has been disabled.
   10451        Specifying -ml with -m2a* will now result in a compiler error.
   10452      * The defunct -mbranch-cost option has been fixed.
   10453      * Some improvements to the generated code of:
   10454           + Utilization of the tst #imm,R0 instruction.
   10455           + Dynamic shift instructions on SH2A.
   10456           + Integer absolute value calculations.
   10457      * The -mdiv= option for targets other than SHmedia has been fixed and
   10458        documented.
   10459 
   10460   SPARC
   10461 
   10462      * The option -mflat has been reinstated. When it is specified, the
   10463        compiler will generate code for a single register window model.
   10464        This is essentially a new implementation and the corresponding
   10465        debugger support has been added to GDB 7.4.
   10466      * Support for the options -mtune=native and -mcpu=native has been
   10467        added on selected native platforms (GNU/Linux and Solaris).
   10468      * Support for the SPARC T3 (Niagara 3) processor has been added.
   10469      * VIS:
   10470           + An intrinsics header visintrin.h has been added.
   10471           + Builtin intrinsics for the VIS 1.0 edge handling and pixel
   10472             compare instructions have been added.
   10473           + The little-endian version of alignaddr is now supported.
   10474           + When possible, VIS builtins are marked const, which should
   10475             increase the compiler's ability to optimize VIS operations.
   10476           + The compiler now properly tracks the %gsr register and how it
   10477             behaves as an input for various VIS instructions.
   10478           + Akin to fzero, the compiler can now generate fone instructions
   10479             in order to set all of the bits of a floating-point register
   10480             to 1.
   10481           + The documentation for the VIS intrinsics in the GCC manual has
   10482             been brought up to date and many inaccuracies were fixed.
   10483           + Intrinsics for the VIS 2.0 bmask, bshuffle, and
   10484             non-condition-code setting edge instructions have been added.
   10485             Their availability is controlled by the new -mvis2 and
   10486             -mno-vis2 options. They are enabled by default on
   10487             UltraSPARC-III and later CPUs.
   10488      * Support for UltraSPARC Fused Multiply-Add floating-point extensions
   10489        has been added. These instructions are enabled by default on SPARC
   10490        T3 (Niagara 3) and later CPUs.
   10491 
   10492   TILE-Gx/TILEPro
   10493 
   10494      * Support has been added for the Tilera TILE-Gx and TILEPro families
   10495        of processors.
   10496 
   10497 Other significant improvements
   10498 
   10499      * A new option (-grecord-gcc-switches) was added that appends
   10500        compiler command-line options that might affect code generation to
   10501        the DW_AT_producer attribute string in the DWARF debugging
   10502        information.
   10503      * GCC now supports various new GNU extensions to the DWARF debugging
   10504        information format, like [40]entry value and [41]call site
   10505        information, [42]typed DWARF stack or [43]a more compact macro
   10506        representation. Support for these extensions has been added to GDB
   10507        7.4. They can be disabled through the -gstrict-dwarf command-line
   10508        option.
   10509 
   10510 GCC 4.7.1
   10511 
   10512    This is the [44]list of problem reports (PRs) from GCC's bug tracking
   10513    system that are known to be fixed in the 4.7.1 release. This list might
   10514    not be complete (that is, it is possible that some PRs that have been
   10515    fixed are not listed here).
   10516 
   10517    The Go front end in the 4.7.1 release fully supports the [45]Go 1
   10518    language standard.
   10519 
   10520 GCC 4.7.2
   10521 
   10522    This is the [46]list of problem reports (PRs) from GCC's bug tracking
   10523    system that are known to be fixed in the 4.7.2 release. This list might
   10524    not be complete (that is, it is possible that some PRs that have been
   10525    fixed are not listed here).
   10526 
   10527 GCC 4.7.3
   10528 
   10529    This is the [47]list of problem reports (PRs) from GCC's bug tracking
   10530    system that are known to be fixed in the 4.7.3 release. This list might
   10531    not be complete (that is, it is possible that some PRs that have been
   10532    fixed are not listed here).
   10533 
   10534 GCC 4.7.4
   10535 
   10536    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   10537    system that are known to be fixed in the 4.7.4 release. This list might
   10538    not be complete (that is, it is possible that some PRs that have been
   10539    fixed are not listed here).
   10540 
   10541 
   10542     For questions related to the use of GCC, please consult these web
   10543     pages and the [49]GCC manuals. If that fails, the
   10544     [50]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10545     web pages and the development of GCC are welcome on our developer
   10546     list at [51]gcc (a] gcc.gnu.org. All of [52]our lists have public
   10547     archives.
   10548 
   10549    Copyright (C) [53]Free Software Foundation, Inc. Verbatim copying and
   10550    distribution of this entire article is permitted in any medium,
   10551    provided this notice is preserved.
   10552 
   10553    These pages are [54]maintained by the GCC team. Last modified
   10554    2023-03-29.
   10555 
   10556 References
   10557 
   10558    1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
   10559    2. http://savannah.nongnu.org/bugs/?35407
   10560    3. https://gcc.gnu.org/PR18145
   10561    4. https://gcc.gnu.org/gcc-4.7/porting_to.html
   10562    5. https://gcc.gnu.org/wiki/TransactionalMemory
   10563    6. https://gcc.gnu.org/wiki/Atomic/GCCMM
   10564    7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10565    8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10566    9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10567   10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10568   11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10569   12. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10570   13. https://gcc.gnu.org/PR14258
   10571   14. https://gcc.gnu.org/PR35688
   10572   15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
   10573   16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   10574   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
   10575   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
   10576   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   10577   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
   10578   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
   10579   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
   10580   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
   10581   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
   10582   25. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
   10583   26. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
   10584   27. https://gcc.gnu.org/wiki/Fortran2003Status
   10585   28. https://gcc.gnu.org/wiki/OOP
   10586   29. https://gcc.gnu.org/wiki/Fortran2008Status
   10587   30. https://gcc.gnu.org/wiki/Coarray
   10588   31. https://gcc.gnu.org/wiki/CoarrayLib
   10589   32. https://gcc.gnu.org/wiki/TS29113Status
   10590   33. 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
   10591   34. https://go.dev/doc/go1
   10592   35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
   10593   36. http://www.nongnu.org/avr-libc/
   10594   37. https://gcc.gnu.org/PR54461
   10595   38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
   10596   39. https://sites.google.com/site/x32abi/
   10597   40. https://dwarfstd.org/issues/100909.1.html
   10598   41. https://dwarfstd.org/issues/100909.2.html
   10599   42. https://dwarfstd.org/issues/140425.1.html
   10600   43. https://dwarfstd.org/issues/110722.1.html
   10601   44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
   10602   45. https://go.dev/doc/go1
   10603   46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
   10604   47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
   10605   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
   10606   49. https://gcc.gnu.org/onlinedocs/
   10607   50. mailto:gcc-help (a] gcc.gnu.org
   10608   51. mailto:gcc (a] gcc.gnu.org
   10609   52. https://gcc.gnu.org/lists.html
   10610   53. https://www.fsf.org/
   10611   54. https://gcc.gnu.org/about.html
   10612 ======================================================================
   10613 http://gcc.gnu.org/gcc-4.6/index.html
   10614                              GCC 4.6 Release Series
   10615 
   10616    (This release series is no longer supported.)
   10617 
   10618    April 12, 2013
   10619 
   10620    The [1]GNU project and the GCC developers are pleased to announce the
   10621    release of GCC 4.6.4.
   10622 
   10623    This release is a bug-fix release, containing fixes for regressions in
   10624    GCC 4.6.3 relative to previous releases of GCC.
   10625 
   10626 Release History
   10627 
   10628    GCC 4.6.4
   10629           April 12, 2013 ([2]changes, [3]documentation)
   10630 
   10631    GCC 4.6.3
   10632           March 1, 2012 ([4]changes, [5]documentation)
   10633 
   10634    GCC 4.6.2
   10635           October 26, 2011 ([6]changes, [7]documentation)
   10636 
   10637    GCC 4.6.1
   10638           June 27, 2011 ([8]changes, [9]documentation)
   10639 
   10640    GCC 4.6.0
   10641           March 25, 2011 ([10]changes, [11]documentation)
   10642 
   10643 References and Acknowledgements
   10644 
   10645    GCC used to stand for the GNU C Compiler, but since the compiler
   10646    supports several other languages aside from C, it now stands for the
   10647    GNU Compiler Collection.
   10648 
   10649    A list of [12]successful builds is updated as new information becomes
   10650    available.
   10651 
   10652    The GCC developers would like to thank the numerous people that have
   10653    contributed new features, improvements, bug fixes, and other changes as
   10654    well as test results to GCC. This [13]amazing group of volunteers is
   10655    what makes GCC successful.
   10656 
   10657    For additional information about GCC please refer to the [14]GCC
   10658    project web site or contact the [15]GCC development mailing list.
   10659 
   10660    To obtain GCC please use [16]our mirror sites or [17]our version
   10661    control system.
   10662 
   10663 
   10664     For questions related to the use of GCC, please consult these web
   10665     pages and the [18]GCC manuals. If that fails, the
   10666     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10667     web pages and the development of GCC are welcome on our developer
   10668     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   10669     archives.
   10670 
   10671    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   10672    distribution of this entire article is permitted in any medium,
   10673    provided this notice is preserved.
   10674 
   10675    These pages are [23]maintained by the GCC team. Last modified
   10676    2022-10-26.
   10677 
   10678 References
   10679 
   10680    1. http://www.gnu.org/
   10681    2. https://gcc.gnu.org/gcc-4.6/changes.html
   10682    3. https://gcc.gnu.org/onlinedocs/4.6.4/
   10683    4. https://gcc.gnu.org/gcc-4.6/changes.html
   10684    5. https://gcc.gnu.org/onlinedocs/4.6.3/
   10685    6. https://gcc.gnu.org/gcc-4.6/changes.html
   10686    7. https://gcc.gnu.org/onlinedocs/4.6.2/
   10687    8. https://gcc.gnu.org/gcc-4.6/changes.html
   10688    9. https://gcc.gnu.org/onlinedocs/4.6.1/
   10689   10. https://gcc.gnu.org/gcc-4.6/changes.html
   10690   11. https://gcc.gnu.org/onlinedocs/4.6.0/
   10691   12. https://gcc.gnu.org/gcc-4.6/buildstat.html
   10692   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   10693   14. https://gcc.gnu.org/index.html
   10694   15. mailto:gcc (a] gcc.gnu.org
   10695   16. https://gcc.gnu.org/mirrors.html
   10696   17. https://gcc.gnu.org/git.html
   10697   18. https://gcc.gnu.org/onlinedocs/
   10698   19. mailto:gcc-help (a] gcc.gnu.org
   10699   20. mailto:gcc (a] gcc.gnu.org
   10700   21. https://gcc.gnu.org/lists.html
   10701   22. https://www.fsf.org/
   10702   23. https://gcc.gnu.org/about.html
   10703 ======================================================================
   10704 http://gcc.gnu.org/gcc-4.6/changes.html
   10705                              GCC 4.6 Release Series
   10706                         Changes, New Features, and Fixes
   10707 
   10708 Caveats
   10709 
   10710      * The options -b <machine> and -V <version> have been removed because
   10711        they were unreliable. Instead, users should directly run
   10712        <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to
   10713        run a different version of gcc.
   10714      * GCC now has stricter checks for invalid command-line options. In
   10715        particular, when gcc was called to link object files rather than
   10716        compile source code, it would previously accept and ignore all
   10717        options starting with --, including linker options such as
   10718        --as-needed and --export-dynamic, although such options would
   10719        result in errors if any source code was compiled. Such options, if
   10720        unknown to the compiler, are now rejected in all cases; if the
   10721        intent was to pass them to the linker, options such as
   10722        -Wl,--as-needed should be used.
   10723      * Versions of the GNU C library up to and including 2.11.1 included
   10724        an [1]incorrect implementation of the cproj function. GCC optimizes
   10725        its builtin cproj according to the behavior specified and allowed
   10726        by the ISO C99 standard. If you want to avoid discrepancies between
   10727        the C library and GCC's builtin transformations when using cproj in
   10728        your code, use GLIBC 2.12 or later. If you are using an older GLIBC
   10729        and actually rely on the incorrect behavior of cproj, then you can
   10730        disable GCC's transformations using -fno-builtin-cproj.
   10731      * The C-only intermodule optimization framework (IMA, enabled by
   10732        -combine) has been removed in favor of the new generic link-time
   10733        optimization framework (LTO) introduced in [2]GCC 4.5.0.
   10734      * GCC now ships with the LGPL-licensed libquadmath library, which
   10735        provides quad-precision mathematical functions for targets with a
   10736        __float128 datatype. __float128 is available for targets on 32-bit
   10737        x86, x86-64 and Itanium architectures. The libquadmath library is
   10738        automatically built on such targets when building the Fortran
   10739        compiler.
   10740      * New -Wunused-but-set-variable and -Wunused-but-set-parameter
   10741        warnings were added for C, C++, Objective-C and Objective-C++.
   10742        These warnings diagnose variables respective parameters which are
   10743        only set in the code and never otherwise used. Usually such
   10744        variables are useless and often even the value assigned to them is
   10745        computed needlessly, sometimes expensively. The
   10746        -Wunused-but-set-variable warning is enabled by default by -Wall
   10747        flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
   10748      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   10749        rules for the layout of vectors that could lead to wrong code being
   10750        generated. Vectors larger than 8 bytes in size are now by default
   10751        aligned to an 8-byte boundary. This is an ABI change: code that
   10752        makes explicit use of vector types may be incompatible with binary
   10753        objects built with older versions of GCC. Auto-vectorized code is
   10754        not affected by this change. (This change affects GCC versions
   10755        4.6.4 and later, with the exception of versions 4.7.0 and 4.7.1.)
   10756      * On AVR, variables with the progmem attribute to locate data in
   10757        flash memory must be qualified as const.
   10758      * Support for a number of older systems and recently unmaintained or
   10759        untested target ports of GCC has been declared obsolete in GCC 4.6.
   10760        Unless there is activity to revive them, the next release of GCC
   10761        will have their sources permanently removed.
   10762        All GCC ports for the following processor architectures have been
   10763        declared obsolete:
   10764           + Argonaut ARC (arc-*)
   10765           + National Semiconductor CRX (crx-*)
   10766           + Motorola 68HC11 and 68HC12 (m68hc11-*-*, m6811-*-*,
   10767             m68hc12-*-*, m6812-*-*)
   10768           + Sunplus S+core (score-*)
   10769        The following ports for individual systems on particular
   10770        architectures have been obsoleted:
   10771           + Interix (i[34567]86-*-interix3*)
   10772           + NetWare x86 (i[3456x]86-*-netware*)
   10773           + Generic ARM PE (arm-*-pe* other than arm*-wince-pe*)
   10774           + MCore PE (mcore-*-pe*)
   10775           + SH SymbianOS (sh*-*-symbianelf*)
   10776           + GNU Hurd on Alpha and PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
   10777           + M68K uClinux old ABI (m68k-*-uclinuxoldabi*)
   10778           + a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*,
   10779             vax-*-netbsd*, but not *-*-netbsdelf*)
   10780        The i[34567]86-*-pe alias for Cygwin targets has also been
   10781        obsoleted; users should configure for i[34567]86-*-cygwin* instead.
   10782        Certain configure options to control the set of libraries built
   10783        with GCC on some targets have been obsoleted. On ARM targets, the
   10784        options --disable-fpu, --disable-26bit, --disable-underscore,
   10785        --disable-interwork, --disable-biendian and --disable-nofmult have
   10786        been obsoleted. On MIPS targets, the options
   10787        --disable-single-float, --disable-biendian and --disable-softfloat
   10788        have been obsoleted.
   10789      * Support has been removed for all the [3]configurations obsoleted in
   10790        GCC 4.5.
   10791      * More information on porting to GCC 4.6 from previous versions of
   10792        GCC can be found in the [4]porting guide for this release.
   10793 
   10794 General Optimizer Improvements
   10795 
   10796      * A new general optimization level, -Ofast, has been introduced. It
   10797        combines the existing optimization level -O3 with options that can
   10798        affect standards compliance but result in better optimized code.
   10799        For example, -Ofast enables -ffast-math.
   10800      * Link-time optimization improvements:
   10801           + The [5]Scalable Whole Program Optimizer (WHOPR) project has
   10802             stabilized to the point of being usable. It has become the
   10803             default mode when using the LTO optimization model. Link time
   10804             optimization can now split itself into multiple parallel
   10805             compilations. Parallelism is controlled with -flto=n (where n
   10806             specifies the number of compilations to execute in parallel).
   10807             GCC can also cooperate with a GNU make job server by
   10808             specifying the -flto=jobserver option and adding + to the
   10809             beginning of the Makefile rule executing the linker.
   10810             Classical LTO mode can be enforced by -flto-partition=none.
   10811             This may result in small code quality improvements.
   10812           + A large number of bugs were fixed. GCC itself, Mozilla Firefox
   10813             and other large applications can be built with LTO enabled.
   10814           + The linker plugin support improvements
   10815                o Linker plugin is now enabled by default when the linker
   10816                  is detected to have plugin support. This is the case for
   10817                  GNU ld 2.21.51 or newer (on ELF and Cygwin targets) and
   10818                  the Gold linker on ELF targets. Plugin support of the
   10819                  Apple linker on Darwin is not compatible with GCC. The
   10820                  linker plugin can also be controlled by the
   10821                  -fuse-linker-plugin command-line option.
   10822                o Resolution information from the linker plugin is used to
   10823                  drive whole program assumptions. Use of the linker plugin
   10824                  results in more aggressive optimization on binaries and
   10825                  on shared libraries that use the hidden visibility
   10826                  attribute. Consequently the use of -fwhole-program is not
   10827                  necessary in addition to LTO.
   10828           + Hidden symbols used from non-LTO objects now have to be
   10829             explicitly annotated with externally_visible when the linker
   10830             plugin is not used.
   10831           + C++ inline functions and virtual tables are now privatized
   10832             more aggressively, leading to better inter-procedural
   10833             optimization and faster dynamic linking.
   10834           + Memory usage and intermediate language streaming performance
   10835             have been improved.
   10836           + Static constructors and destructors from individual units are
   10837             inlined into a single function. This can significantly improve
   10838             startup times of large C++ applications where static
   10839             constructors are very common. For example, static constructors
   10840             are used when including the iostream header.
   10841           + Support for the Ada language has been added.
   10842      * Interprocedural optimization improvements
   10843           + The interprocedural framework was re-tuned for link time
   10844             optimization. Several scalability issues were resolved.
   10845           + Improved auto-detection of const and pure functions. Newly,
   10846             noreturn functions are auto-detected.
   10847             The [6]-Wsuggest-attribute=[const|pure|noreturn] flag is
   10848             available that informs users when adding attributes to headers
   10849             might improve code generation.
   10850           + A number of inlining heuristic improvements. In particular:
   10851                o Partial inlining is now supported and enabled by default
   10852                  at -O2 and greater. The feature can be controlled via
   10853                  -fpartial-inlining.
   10854                  Partial inlining splits functions with short hot path to
   10855                  return. This allows more aggressive inlining of the hot
   10856                  path leading to better performance and often to code size
   10857                  reductions (because cold parts of functions are not
   10858                  duplicated).
   10859                o Scalability for large compilation units was improved
   10860                  significantly.
   10861                o Inlining of callbacks is now more aggressive.
   10862                o Virtual methods are considered for inlining when the
   10863                  caller is inlined and devirtualization is then possible.
   10864                o Inlining when optimizing for size (either in cold regions
   10865                  of a program or when compiling with -Os) was improved to
   10866                  better handle C++ programs with larger abstraction
   10867                  penalty, leading to smaller and faster code.
   10868           + The IPA reference optimization pass detecting global variables
   10869             used or modified by functions was strengthened and sped up.
   10870           + Functions whose address was taken are now optimized out when
   10871             all references to them are dead.
   10872           + A new inter-procedural static profile estimation pass detects
   10873             functions that are executed once or unlikely to be executed.
   10874             Unlikely executed functions are optimized for size. Functions
   10875             executed once are optimized for size except for the inner
   10876             loops.
   10877           + On most targets with named section support, functions used
   10878             only at startup (static constructors and main), functions used
   10879             only at exit and functions detected to be cold are placed into
   10880             separate text segment subsections. This extends the
   10881             -freorder-functions feature and is controlled by the same
   10882             switch. The goal is to improve the startup time of large C++
   10883             programs.
   10884             Proper function placement requires linker support. GNU ld
   10885             2.21.51 on ELF targets was updated to place those functions
   10886             together within the text section leading to better code
   10887             locality and faster startup times of large C++ programs. The
   10888             feature is also supported in the Apple linker. Support in the
   10889             gold linker is planned.
   10890      * A new switch -fstack-usage has been added. It makes the compiler
   10891        output stack usage information for the program, on a per-function
   10892        basis, in an auxiliary file.
   10893      * A new switch -fcombine-stack-adjustments has been added. It can be
   10894        used to enable or disable the compiler's stack-slot combining pass
   10895        which before was enabled automatically at -O1 and above, but could
   10896        not be controlled on its own.
   10897      * A new switch -fstrict-volatile-bitfields has been added. Using it
   10898        indicates that accesses to volatile bitfields should use a single
   10899        access of the width of the field's type. This option can be useful
   10900        for precisely defining and accessing memory-mapped peripheral
   10901        registers from C or C++.
   10902 
   10903 Compile time and memory usage improvements
   10904 
   10905      * Datastructures used by the dataflow framework in GCC were
   10906        reorganized for better memory usage and more cache locality.
   10907        Compile time is improved especially on units with large functions
   10908        (possibly resulting from a lot of inlining) not fitting into the
   10909        processor cache. The compile time of the GCC C compiler binary with
   10910        link-time optimization went down by over 10% (benchmarked on x86-64
   10911        target).
   10912 
   10913 New Languages and Language specific improvements
   10914 
   10915   Ada
   10916 
   10917      * Stack checking has been improved on selected architectures (Alpha,
   10918        IA-32/x86-64, RS/6000 and SPARC): it now will detect stack
   10919        overflows in all cases on these architectures.
   10920      * Initial support for Ada 2012 has been added.
   10921 
   10922   C family
   10923 
   10924      * A new warning, enabled by -Wdouble-promotion, has been added that
   10925        warns about cases where a value of type float is implicitly
   10926        promoted to double. This is especially helpful for CPUs that handle
   10927        the former in hardware, but emulate the latter in software.
   10928      * A new function attribute leaf was introduced. This attribute allows
   10929        better inter-procedural optimization across calls to functions that
   10930        return to the current unit only via returning or exception
   10931        handling. This is the case for most library functions that have no
   10932        callbacks.
   10933      * Support for a new data type __int128 for targets having wide enough
   10934        machine-mode support.
   10935      * The new function attribute callee_pop_aggregate allows to specify
   10936        if the caller or callee is responsible for popping the aggregate
   10937        return pointer value from the stack.
   10938      * Support for selectively enabling and disabling warnings via #pragma
   10939        GCC diagnostic has been added. For instance:
   10940 #pragma GCC diagnostic error "-Wuninitialized"
   10941   foo(a);                       /* error is given for this one */
   10942 #pragma GCC diagnostic push
   10943 #pragma GCC diagnostic ignored "-Wuninitialized"
   10944   foo(b);                       /* no diagnostic for this one */
   10945 #pragma GCC diagnostic pop
   10946   foo(c);                       /* error is given for this one */
   10947 #pragma GCC diagnostic pop
   10948   foo(d);                       /* depends on command-line options */
   10949 
   10950      * The -fmax-errors=N option is now supported. Using this option
   10951        causes the compiler to exit after N errors have been issued.
   10952 
   10953   C
   10954 
   10955      * There is now experimental support for some features from the
   10956        upcoming C1X revision of the ISO C standard. This support may be
   10957        selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
   10958        Note that this support is experimental and may change incompatibly
   10959        in future releases for consistency with changes to the C1X standard
   10960        draft. The following features are newly supported as described in
   10961        the N1539 draft of C1X (with changes agreed at the March 2011 WG14
   10962        meeting); some other features were already supported with no
   10963        compiler changes being needed, or have some support but not in full
   10964        accord with N1539 (as amended).
   10965           + Static assertions (_Static_assert keyword)
   10966           + Typedef redefinition
   10967           + New macros in <float.h>
   10968           + Anonymous structures and unions
   10969      * The new -fplan9-extensions option directs the compiler to support
   10970        some extensions for anonymous struct fields which are implemented
   10971        by the Plan 9 compiler. A pointer to a struct may be automatically
   10972        converted to a pointer to an anonymous field when calling a
   10973        function, in order to make the types match. An anonymous struct
   10974        field whose type is a typedef name may be referred to using the
   10975        typedef name.
   10976 
   10977   C++
   10978 
   10979      * Improved [7]experimental support for the upcoming C++0x ISO C++
   10980        standard, including support for constexpr (thanks to Gabriel Dos
   10981        Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
   10982        noexcept, unrestricted unions, range-based for loops (thanks to
   10983        Rodrigo Rivas Costa), opaque enum declarations (thanks also to
   10984        Rodrigo), implicitly deleted functions and implicit move
   10985        constructors.
   10986      * When an extern declaration within a function does not match a
   10987        declaration in the enclosing context, G++ now properly declares the
   10988        name within the namespace of the function rather than the namespace
   10989        which was open just before the function definition ([8]c++/43145).
   10990      * GCC now warns by default when casting integers to larger pointer
   10991        types. These warnings can be disabled with the option
   10992        -Wno-int-to-pointer-cast, which is now also available in C++.
   10993      * G++ no longer optimizes using the assumption that a value of
   10994        enumeration type will fall within the range specified by the
   10995        standard, since that assumption is easily violated with a
   10996        conversion from integer type ([9]c++/43680). The old behavior can
   10997        be restored with -fstrict-enums.
   10998      * The new -fnothrow-opt flag changes the semantics of a throw()
   10999        exception specification to match the proposed semantics of the
   11000        noexcept specification: just call terminate if an exception tries
   11001        to propagate out of a function with such an exception
   11002        specification. This dramatically reduces or eliminates the code
   11003        size overhead from adding the exception specification.
   11004      * The new -Wnoexcept flag will suggest adding a noexcept qualifier to
   11005        a function that the compiler can tell doesn't throw if it would
   11006        change the value of a noexcept expression.
   11007      * The -Wshadow option now warns if a local variable or type
   11008        declaration shadows another type in C++. Note that the compiler
   11009        will not warn if a local variable shadows a struct/class/enum, but
   11010        will warn if it shadows an explicit typedef.
   11011      * When an identifier is not found in the current scope, G++ now
   11012        offers suggestions about which identifier might have been intended.
   11013      * G++ now issues clearer diagnostics for missing semicolons after
   11014        class, struct, and union definitions.
   11015      * G++ now issues clearer diagnostics for missing semicolons after
   11016        class member declarations.
   11017      * G++ now issues clearer diagnostics when a colon is used in a place
   11018        where a double-colon was intended.
   11019      * G++ no longer accepts mutable on reference members ([10]c++/33558).
   11020        Use -fpermissive to allow the old, non-conforming behaviour.
   11021      * A few mangling fixes have been made, to attribute const/volatile on
   11022        function pointer types, decltype of a plain decl, and use of a
   11023        function parameter in the declaration of another parameter. By
   11024        default the compiler still uses the old mangling, but emits aliases
   11025        with the new mangling on targets that support strong aliases. Users
   11026        can switch over entirely to the new mangling with -fabi-version=5
   11027        or -fabi-version=0. -Wabi will now warn about code that uses the
   11028        old mangling.
   11029      * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
   11030        type to be default initialized unless the type has a user-declared
   11031        default constructor. In 4.6.2 G++ implements the proposed
   11032        resolution of [11]DR 253, so default initialization is allowed if
   11033        it initializes all subobjects. Code that fails to compile can be
   11034        fixed by providing an initializer e.g.
   11035     struct A { A(); };
   11036     struct B : A { int i; };
   11037     const B b = B();
   11038        Use -fpermissive to allow the old, non-conforming behaviour.
   11039 
   11040     Runtime Library (libstdc++)
   11041 
   11042      * [12]Improved experimental support for the upcoming ISO C++
   11043        standard, C++0x, including using constexpr and nullptr.
   11044      * Performance improvements to the [13]Debug Mode, thanks to Franois
   11045        Dumont.
   11046      * Atomic operations used for reference-counting are annotated so that
   11047        they can be understood by race detectors such as Helgrind, see
   11048        [14]Data Race Hunting.
   11049      * Most libstdc++ standard headers have been changed to no longer
   11050        include the cstddef header as an implementation detail. Code that
   11051        relied on that header being included as side-effect of including
   11052        other standard headers will need to include cstddef explicitly.
   11053 
   11054   Fortran
   11055 
   11056      * On systems supporting the libquadmath library, GNU Fortran now also
   11057        supports a quad-precision, kind=16 floating-point data type
   11058        (REAL(16), COMPLEX(16)). As the data type is not fully supported in
   11059        hardware, calculations might be one to two orders of magnitude
   11060        slower than with the 4, 8 or 10 bytes floating-point data types.
   11061        This change does not affect systems which support REAL(16) in
   11062        hardware nor those which do not support libquadmath.
   11063      * Much improved compile time for large array constructors.
   11064      * In order to reduce execution time and memory consumption, use of
   11065        temporary arrays in assignment expressions is avoided for many
   11066        cases. The compiler now reverses loops in order to avoid generating
   11067        a temporary array where possible.
   11068      * Improved diagnostics, especially with -fwhole-file.
   11069      * The -fwhole-file flag is now enabled by default. This improves code
   11070        generation and diagnostics. It can be disabled using the deprecated
   11071        -fno-whole-file flag.
   11072      * Support the generation of Makefile dependencies via the [15]-M...
   11073        flags of GCC; you may need to specify the -cpp option in addition.
   11074        The dependencies take modules, Fortran's include, and CPP's
   11075        #include into account. Note: Using -M for the module path is no
   11076        longer supported, use -J instead.
   11077      * The flag -Wconversion has been modified to only issue warnings
   11078        where a conversion leads to information loss. This drastically
   11079        reduces the number of warnings; -Wconversion is thus now enabled
   11080        with -Wall. The flag -Wconversion-extra has been added and also
   11081        warns about other conversions; -Wconversion-extra typically issues
   11082        a huge number of warnings, most of which can be ignored.
   11083      * A new command-line option -Wunused-dummy-argument warns about
   11084        unused dummy arguments and is included in -Wall. Before,
   11085        -Wunused-variable also warned about unused dummy arguments.
   11086      * Fortran 2003 support has been extended:
   11087           + Improved support for polymorphism between libraries and
   11088             programs and for complicated inheritance patterns (cf.
   11089             [16]object-oriented programming).
   11090           + Experimental support of the ASSOCIATE construct.
   11091           + In pointer assignments it is now possible to specify the lower
   11092             bounds of the pointer and, for a rank-1 or a simply contiguous
   11093             data-target, to remap the bounds.
   11094           + Automatic (re)allocation: In intrinsic assignments to
   11095             allocatable variables the left-hand side will be automatically
   11096             allocated (if unallocated) or reallocated (if the shape or
   11097             type parameter is different). To avoid the small performance
   11098             penalty, you can use a(:) = ... instead of a = ... for arrays
   11099             and character strings  or disable the feature using -std=f95
   11100             or -fno-realloc-lhs.
   11101           + Deferred type parameter: For scalar allocatable and pointer
   11102             variables the character length can be deferred.
   11103           + Namelist variables with allocatable and pointer attribute and
   11104             nonconstant length type parameter are supported.
   11105      * Fortran 2008 support has been extended:
   11106           + Experimental [17]coarray support (for one image only, i.e.
   11107             num_images() == 1); use the [18]-fcoarray=single flag to
   11108             enable it.
   11109           + The STOP and the new ERROR STOP statements now support all
   11110             constant expressions.
   11111           + Support for the CONTIGUOUS attribute.
   11112           + Support for ALLOCATE with MOLD.
   11113           + Support for the STORAGE_SIZE intrinsic inquiry function.
   11114           + Support of the NORM2 and PARITY intrinsic functions.
   11115           + The following bit intrinsics were added: POPCNT and POPPAR for
   11116             counting the number of 1 bits and returning the parity; BGE,
   11117             BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR
   11118             for combined left and right shifts, MASKL and MASKR for simple
   11119             left and right justified masks, MERGE_BITS for a bitwise merge
   11120             using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations,
   11121             and the transformational bit intrinsics IALL, IANY and
   11122             IPARITY.
   11123           + Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
   11124           + Support for the IMPURE attribute for procedures, which allows
   11125             for ELEMENTAL procedures without the restrictions of PURE.
   11126           + Null pointers (including NULL()) and not allocated variables
   11127             can be used as actual argument to optional non-pointer,
   11128             non-allocatable dummy arguments, denoting an absent argument.
   11129           + Non-pointer variables with TARGET attribute can be used as
   11130             actual argument to POINTER dummies with INTENT(IN)
   11131           + Pointers including procedure pointers and those in a derived
   11132             type (pointer components) can now be initialized by a target
   11133             instead of only by NULL.
   11134           + The EXIT statement (with construct-name) can now be used to
   11135             leave not only the DO but also the ASSOCIATE, BLOCK, IF,
   11136             SELECT CASE and SELECT TYPE constructs.
   11137           + Internal procedures can now be used as actual argument.
   11138           + The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS
   11139             and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV
   11140             have been added; these arrays contain the supported kind
   11141             values for the respective types.
   11142           + The module procedures C_SIZEOF of the intrinsic module
   11143             ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
   11144             ISO_FORTRAN_ENV have been implemented.
   11145           + Minor changes: obsolescence diagnostics for ENTRY was added
   11146             for -std=f2008; a line may start with a semicolon; for
   11147             internal and module procedures END can be used instead of END
   11148             SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes
   11149             a RADIX argument; intrinsic types are supported for
   11150             TYPE(intrinsic-type-spec); multiple type-bound procedures can
   11151             be declared in a single PROCEDURE statement; implied-shape
   11152             arrays are supported for named constants (PARAMETER). The
   11153             transformational, three argument versions of BESSEL_JN and
   11154             BESSEL_YN were added  the elemental, two-argument version had
   11155             been added in GCC 4.4; note that the transformational
   11156             functions use a recurrence algorithm.
   11157 
   11158   Go
   11159 
   11160    Support for the Go programming language has been added to GCC. It is
   11161    not enabled by default when you build GCC; use the --enable-languages
   11162    configure option to build it. The driver program for compiling Go code
   11163    is gccgo.
   11164 
   11165    Go is currently known to work on GNU/Linux and RTEMS. Solaris support
   11166    is in progress. It may or may not work on other platforms.
   11167 
   11168   Objective-C and Objective-C++
   11169 
   11170      * The -fobjc-exceptions flag is now required to enable Objective-C
   11171        exception and synchronization syntax (introduced by the keywords
   11172        @try, @catch, @finally and @synchronized).
   11173      * A number of Objective-C 2.0 features and extensions are now
   11174        supported by GCC. These features are enabled by default; you can
   11175        disable them by using the new -fobjc-std=objc1 command-line option.
   11176      * The Objective-C 2.0 dot-syntax is now supported. It is an
   11177        alternative syntax for using getters and setters; object.count is
   11178        automatically converted into [object count] or [object setCount:
   11179        ...] depending on context; for example if (object.count > 0) is
   11180        automatically compiled into the equivalent of if ([object count] >
   11181        0) while object.count = 0; is automatically compiled into the
   11182        equivalent ot [object setCount: 0];. The dot-syntax can be used
   11183        with instance and class objects and with any setters or getters, no
   11184        matter if they are part of a declared property or not.
   11185      * Objective-C 2.0 declared properties are now supported. They are
   11186        declared using the new @property keyword, and are most commonly
   11187        used in conjunction with the new Objective-C 2.0 dot-syntax. The
   11188        nonatomic, readonly, readwrite, assign, retain, copy, setter and
   11189        getter attributes are all supported. Marking declared properties
   11190        with __attribute__ ((deprecated)) is supported too.
   11191      * The Objective-C 2.0 @synthesize and @dynamic keywords are
   11192        supported. @synthesize causes the compiler to automatically
   11193        synthesize a declared property, while @dynamic is used to disable
   11194        all warnings for a declared property for which no implementation is
   11195        provided at compile time. Synthesizing declared properties requires
   11196        runtime support in most useful cases; to be able to use it with the
   11197        GNU runtime, appropriate helper functions have been added to the
   11198        GNU Objective-C runtime ABI, and are implemented by the GNU
   11199        Objective-C runtime library shipped with GCC.
   11200      * The Objective-C 2.0 fast enumeration syntax is supported in
   11201        Objective-C. This is currently not yet available in Objective-C++.
   11202        Fast enumeration requires support in the runtime, and such support
   11203        has been added to the GNU Objective-C runtime library (shipped with
   11204        GCC).
   11205      * The Objective-C 2.0 @optional keyword is supported. It allows you
   11206        to mark methods or properties in a protocol as optional as opposed
   11207        to required.
   11208      * The Objective-C 2.0 @package keyword is supported. It has currently
   11209        the same effect as the @public keyword.
   11210      * Objective-C 2.0 method attributes are supported. Currently the
   11211        supported attributes are deprecated, sentinel, noreturn and format.
   11212      * Objective-C 2.0 method argument attributes are supported. The most
   11213        widely used attribute is unused, to mark an argument as unused in
   11214        the implementation.
   11215      * Objective-C 2.0 class and protocol attributes are supported.
   11216        Currently the only supported attribute is deprecated.
   11217      * Objective-C 2.0 class extensions are supported. A class extension
   11218        has the same syntax as a category declaration with no category
   11219        name, and the methods and properties declared in it are added
   11220        directly to the main class. It is mostly used as an alternative to
   11221        a category to add methods to a class without advertising them in
   11222        the public headers, with the advantage that for class extensions
   11223        the compiler checks that all the privately declared methods are
   11224        actually implemented.
   11225      * As a result of these enhancements, GCC can now be used to build
   11226        Objective-C and Objective-C++ software that uses Foundation and
   11227        other important system frameworks with the NeXT runtime on Darwin 9
   11228        and Darwin 10 (OSX 10.5 and 10.6).
   11229      * Many bugs in the compiler have been fixed in this release; in
   11230        particular, LTO can now be used when compiling Objective-C and
   11231        Objective-C++ and the parser is much more robust in dealing with
   11232        invalid code.
   11233 
   11234     Runtime Library (libobjc)
   11235 
   11236      * The GNU Objective-C runtime library now defines the macro
   11237        __GNU_LIBOBJC__ (with a value that is increased at every release
   11238        where there is any change to the API) in objc/objc.h, making it
   11239        easy to determine if the GNU Objective-C runtime library is being
   11240        used, and if so, which version. Previous versions of the GNU
   11241        Objective-C runtime library (and other Objective-C runtime
   11242        libraries such as the Apple one) do not define this macro.
   11243      * A new Objective-C 2.0 API, almost identical to the one implemented
   11244        by the Apple Objective-C runtime, has been implemented in the GNU
   11245        Objective-C runtime library. The new API hides the internals of
   11246        most runtime structures but provides a more extensive set of
   11247        functions to operate on them. It is much easier, for example, to
   11248        create or modify classes at runtime. The new API also makes it
   11249        easier to port software from Apple to GNU as almost no changes
   11250        should be required. The old API is still supported for backwards
   11251        compatibility; including the old objc/objc-api.h header file
   11252        automatically selects the old API, while including the new
   11253        objc/runtime.h header file automatically selects the new API.
   11254        Support for the old API is being phased out and upgrading the
   11255        software to use the new API is strongly recommended. To check for
   11256        the availability of the new API, the __GNU_LIBOBJC__ macro can be
   11257        used as older versions of the GNU Objective-C runtime library,
   11258        which do not support the new API, do not define such a macro.
   11259      * Runtime support for @synchronized has been added.
   11260      * Runtime support for Objective-C 2.0 synthesized property accessors
   11261        has been added.
   11262      * Runtime support for Objective-C 2.0 fast enumeration has been
   11263        added.
   11264 
   11265 New Targets and Target Specific Improvements
   11266 
   11267   ARM
   11268 
   11269      * GCC now supports the Cortex-M4 processor implementing the v7-em
   11270        version of the architecture using the option -mcpu=cortex-m4.
   11271      * Scheduling descriptions for the Cortex-M4, the Neon and the
   11272        floating point units of the Cortex-A9 and a pipeline description
   11273        for the Cortex-A5 have been added.
   11274      * Synchronization primitives such as __sync_fetch_and_add and friends
   11275        are now inlined for supported architectures rather than calling
   11276        into a kernel helper function.
   11277      * SSA loop prefetching is enabled by default for the Cortex-A9 at
   11278        -O3.
   11279      * Several improvements were committed to improve code generation for
   11280        the ARM architecture including a rewritten implementation for load
   11281        and store multiples.
   11282      * Several enhancements were committed to improve SIMD code generation
   11283        for NEON by adding support for widening instructions, misaligned
   11284        loads and stores, vector conditionals and support for 64-bit
   11285        arithmetic.
   11286      * Support was added for the Faraday cores fa526, fa606te, fa626te,
   11287        fmp626te, fmp626 and fa726te and can be used with the respective
   11288        names as parameters to the -mcpu= option.
   11289      * Basic support was added for Cortex-A15 and is available through
   11290        -mcpu=cortex-a15.
   11291      * GCC for AAPCS configurations now more closely adheres to the AAPCS
   11292        specification by enabling -fstrict-volatile-bitfields by default.
   11293 
   11294   IA-32/x86-64
   11295 
   11296      * The new -fsplit-stack option permits programs to use a
   11297        discontiguous stack. This is useful for threaded programs, in that
   11298        it is no longer necessary to specify the maximum stack size when
   11299        creating a thread. This feature is currently only implemented for
   11300        32-bit and 64-bit x86 GNU/Linux targets.
   11301      * Support for emitting profiler counter calls before function
   11302        prologues. This is enabled via a new command-line option -mfentry.
   11303      * Optimization for the Intel Core 2 processors is now available
   11304        through the -march=core2 and -mtune=core2 options.
   11305      * Support for Intel Core i3/i5/i7 processors is now available through
   11306        the -march=corei7 and -mtune=corei7 options.
   11307      * Support for Intel Core i3/i5/i7 processors with AVX is now
   11308        available through the -march=corei7-avx and -mtune=corei7-avx
   11309        options.
   11310      * Support for AMD Bobcat (family 14) processors is now available
   11311        through the -march=btver1 and -mtune=btver1 options.
   11312      * Support for AMD Bulldozer (family 15) processors is now available
   11313        through the -march=bdver1 and -mtune=bdver1 options.
   11314      * The default setting (when not optimizing for size) for 32-bit
   11315        GNU/Linux and Darwin x86 targets has been changed to
   11316        -fomit-frame-pointer. The default can be reverted to
   11317        -fno-omit-frame-pointer by configuring GCC with the
   11318        --enable-frame-pointer configure option.
   11319      * Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
   11320        __float128 on 32-bit and 64-bit x86 targets.
   11321      * AVX floating-point arithmetic can now be enabled by default at
   11322        configure time with the new --with-fpmath=avx option.
   11323      * The SSA loop prefetching pass is enabled when using -O3 when
   11324        optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
   11325        than K6).
   11326      * Support for TBM (Trailing Bit Manipulation) built-in functions and
   11327        code generation is available via -mtbm.
   11328      * Support for AMD's BMI (Bit Manipulation) built-in functions and
   11329        code generation is available via -mbmi.
   11330 
   11331   MicroBlaze
   11332 
   11333      * Support has been added for the Xilinx MicroBlaze softcore processor
   11334        (microblaze-elf) embedded target. This configurable processor is
   11335        supported on several Xilinx Spartan and Virtex FPGAs.
   11336 
   11337   MIPS
   11338 
   11339      * GCC now supports the Loongson 3A processor. Its canonical -march=
   11340        and -mtune= name is loongson3a.
   11341 
   11342   MN10300 / AM33
   11343 
   11344      * The inline assembly register constraint "A" has been renamed "c".
   11345        This constraint is used to select a floating-point register that
   11346        can be used as the destination of a multiply-accumulate
   11347        instruction.
   11348      * New inline assembly register constraints "A" and "D" have been
   11349        added. These constraint letters resolve to all general registers
   11350        when compiling for AM33, and resolve to address registers only or
   11351        data registers only when compiling for MN10300.
   11352      * The MDR register is represented in the compiler. One can access the
   11353        register via the "z" constraint in inline assembly. It can be
   11354        marked as clobbered or used as a local register variable via the
   11355        "mdr" name. The compiler uses the RETF instruction if the function
   11356        does not modify the MDR register, so it is important that inline
   11357        assembly properly annotate any usage of the register.
   11358 
   11359   PowerPC/PowerPC64
   11360 
   11361      * GCC now supports the Applied Micro Titan processor with
   11362        -mcpu=titan.
   11363      * The -mrecip option has been added, which indicates whether the
   11364        reciprocal and reciprocal square root instructions should be used.
   11365      * The -mveclibabi=mass option can be used to enable the compiler to
   11366        autovectorize mathematical functions using the Mathematical
   11367        Acceleration Subsystem library.
   11368      * The -msingle-pic-base option has been added, which instructs the
   11369        compiler to avoid loading the PIC base register in function
   11370        prologues. The PIC base register must be initialized by the runtime
   11371        system.
   11372      * The -mblock-move-inline-limit option has been added, which enables
   11373        the user to control the maximum size of inlined memcpy calls and
   11374        similar.
   11375      * PowerPC64 GNU/Linux support for applications requiring a large TOC
   11376        section has been improved. A new command-line option,
   11377        -mcmodel=MODEL, controls this feature; valid values for MODEL are
   11378        small, medium, or large.
   11379      * The Altivec builtin functions vec_ld and vec_st have been modified
   11380        to generate the Altivec memory instructions LVX and STVX, even if
   11381        the -mvsx option is used. In the initial GCC 4.5 release, these
   11382        builtin functions were changed to generate VSX memory reference
   11383        instructions instead of Altivec memory instructions, but there are
   11384        differences between the two instructions. If the VSX instruction
   11385        set is available, you can now use the new builtin functions
   11386        vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   11387        instructions.
   11388      * The GCC compiler on AIX now defaults to a process layout with a
   11389        larger data space allowing larger programs to be compiled.
   11390      * The GCC long double type on AIX 6.1 and above has reverted to
   11391        64-bit double precision, matching the AIX XL compiler default,
   11392        because of missing C99 symbols required by the GCC runtime.
   11393      * The default processor scheduling model and tuning for PowerPC64
   11394        GNU/Linux and for AIX 6.1 and above now is POWER7.
   11395      * Starting with GCC 4.6.1, vectors of type vector long long or vector
   11396        long are passed and returned in the same method as other vectors
   11397        with the VSX instruction set. Previously the GCC compiler did not
   11398        adhere to the ABI for 128-bit vectors with 64-bit integer base
   11399        types (PR 48857). This is also fixed in the GCC 4.5.4 release.
   11400 
   11401   S/390, zSeries and System z9/z10, IBM zEnterprise z196
   11402 
   11403      * Support for the zEnterprise z196 processor has been added. When
   11404        using the -march=z196 option, the compiler will generate code
   11405        making use of the following instruction facilities:
   11406           + Conditional load/store
   11407           + Distinct-operands
   11408           + Floating-point-extension
   11409           + Interlocked-access
   11410           + Population-count
   11411        The -mtune=z196 option avoids the compare and branch instructions
   11412        as well as the load address instruction with an index register as
   11413        much as possible and performs instruction scheduling appropriate
   11414        for the new out-of-order pipeline architecture.
   11415      * When using the -m31 -mzarch options the generated code still
   11416        conforms to the 32-bit ABI but uses the general purpose registers
   11417        as 64-bit registers internally. This requires a Linux kernel saving
   11418        the whole 64-bit registers when doing a context switch. Kernels
   11419        providing that feature indicate that by the 'highgprs' string in
   11420        /proc/cpuinfo.
   11421      * The SSA loop prefetching pass is enabled when using -O3.
   11422 
   11423   SPARC
   11424 
   11425      * GCC now supports the LEON series of SPARC V8 processors. The code
   11426        generated by the compiler can either be tuned to it by means of the
   11427        --with-tune=leon configure option and -mtune=leon compilation
   11428        option, or the compiler can be built for the sparc-leon-{elf,linux}
   11429        and sparc-leon3-{elf,linux} targets directly.
   11430      * GCC has stopped sign/zero-extending parameter registers in the
   11431        callee for functions taking parameters with sub-word size in 32-bit
   11432        mode, since this is redundant with the specification of the ABI.
   11433        GCC has never done so in 64-bit mode since this is also redundant.
   11434      * The command-line option -mfix-at697f has been added to enable the
   11435        documented workaround for the single erratum of the Atmel AT697F
   11436        processor.
   11437 
   11438 Operating Systems
   11439 
   11440   Android
   11441 
   11442      * GCC now supports the Bionic C library and provides a convenient way
   11443        of building native libraries and applications for the Android
   11444        platform. Refer to the documentation of the -mandroid and -mbionic
   11445        options for details on building native code. At the moment, Android
   11446        support is enabled only for ARM.
   11447 
   11448   Darwin/Mac OS X
   11449 
   11450      * General
   11451           + Initial support for CFString types has been added.
   11452             This allows GCC to build projects including the system Core
   11453             Foundation frameworks. The GCC Objective-C family supports
   11454             CFString "toll-free bridged" as per the Mac OS X system tools.
   11455             CFString is also recognized in the context of format
   11456             attributes and arguments (see the documentation for format
   11457             attributes for limitations). At present, 8-bit character types
   11458             are supported.
   11459           + Object file size reduction.
   11460             The Darwin zeroed memory allocators have been re-written to
   11461             make more use of .zerofill sections. For non-debug code, this
   11462             can reduce object file size significantly.
   11463           + Objective-C family 64-bit support (NeXT ABI 2).
   11464             Initial support has been added to support 64-bit Objective-C
   11465             code using the Darwin/OS X native (NeXT) runtime. ABI version
   11466             2 will be selected automatically when 64-bit code is built.
   11467           + Objective-C family 32-bit ABI 1.
   11468             For 32-bit code ABI 1 is also now also allowed. At present it
   11469             must be selected manually using -fobjc-abi-version=1 where
   11470             applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).
   11471      * x86 Architecture
   11472           + The -mdynamic-no-pic option has been enabled.
   11473             Code supporting -mdynamic-no-pic optimization has been added
   11474             and is applicable to -m32 builds. The compiler bootstrap uses
   11475             the option where appropriate.
   11476           + The default value for -mtune= has been changed.
   11477             Since Darwin systems are primarily Xeon, Core-2 or similar the
   11478             default tuning has been changed to -mtune=core2.
   11479           + Enable 128-bit long double (__float128) support on Darwin.
   11480      * PPC Architecture
   11481           + Darwin64 ABI.
   11482             Several significant bugs have been fixed, such that GCC now
   11483             produces code compatible with the Darwin64 PowerPC ABI.
   11484           + libffi and boehm-gc.
   11485             The Darwin ports of the libffi and boehm-gc libraries have
   11486             been upgraded to include a Darwin64 implementation. This means
   11487             that powerpc*-*-darwin9 platforms may now, for example, build
   11488             Java applications with -m64 enabled.
   11489           + Plug-in support has been enabled.
   11490           + The -fsection-anchors option is now available although,
   11491             presently, not heavily tested.
   11492 
   11493   Solaris 2
   11494 
   11495     New Features
   11496 
   11497      * Support symbol versioning with the Sun linker.
   11498      * Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
   11499      * Support thread-local storage (TLS) with the Sun assembler on
   11500        Solaris 2/x86.
   11501      * Support TLS on Solaris 8/9 if prerequisites are met.
   11502      * Support COMDAT group with the GNU assembler and recent Sun linker.
   11503      * Support the Sun assembler visibility syntax.
   11504      * Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
   11505        -march=pentiumpro (Solaris 8/9).
   11506      * Don't use SSE on Solaris 8/9 x86 by default.
   11507      * Enable 128-bit long double (__float128) support on Solaris 2/x86.
   11508 
   11509     ABI Change
   11510 
   11511      * Change the ABI for returning 8-byte vectors like __m64 in MMX
   11512        registers on Solaris 10+/x86 to match the Sun Studio 12.1+
   11513        compilers. This is an incompatible change. If you use such types,
   11514        you must either recompile all your code with the new compiler or
   11515        use the new -mvect8-ret-in-mem option to remain compatible with
   11516        previous versions of GCC and Sun Studio.
   11517 
   11518   Windows x86/x86_64
   11519 
   11520      * Initial support for decimal floating point.
   11521      * Support for the __thiscall calling-convention.
   11522      * Support for hot-patchable function prologues via the
   11523        ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
   11524      * Improvements of stack-probing and stack-allocation mechanisms.
   11525      * Support of push/pop-macro pragma as preprocessor command.
   11526        With #pragma push_macro("macro-name") the current definition of
   11527        macro-name is saved and can be restored with #pragma
   11528        pop_macro("macro-name") to its saved definition.
   11529      * Enable 128-bit long double (__float128) support on MinGW and
   11530        Cygwin.
   11531 
   11532 Other significant improvements
   11533 
   11534   Installation changes
   11535 
   11536      * An install-strip make target is provided that installs stripped
   11537        executables, and may install libraries with unneeded or debugging
   11538        sections stripped.
   11539      * On Power7 systems, there is a potential problem if you build the
   11540        GCC compiler with a host compiler using options that enable the VSX
   11541        instruction set generation. If the host compiler has been patched
   11542        so that the vec_ld and vec_st builtin functions generate Altivec
   11543        memory instructions instead of VSX memory instructions, then you
   11544        should be able to build the compiler with VSX instruction
   11545        generation.
   11546 
   11547 Changes for GCC Developers
   11548 
   11549    Note: these changes concern developers that develop GCC itself or
   11550    software that integrates with GCC, such as plugins, and not the general
   11551    GCC users.
   11552      * The gengtype utility, which previously was internal to the GCC
   11553        build process, has been enchanced to provide GC root information
   11554        for plugins as necessary.
   11555      * The old GC allocation interface of ggc_alloc and friends was
   11556        replaced with a type-safe alternative.
   11557 
   11558 GCC 4.6.1
   11559 
   11560    This is the [19]list of problem reports (PRs) from GCC's bug tracking
   11561    system that are known to be fixed in the 4.6.1 release. This list might
   11562    not be complete (that is, it is possible that some PRs that have been
   11563    fixed are not listed here).
   11564 
   11565 GCC 4.6.2
   11566 
   11567    This is the [20]list of problem reports (PRs) from GCC's bug tracking
   11568    system that are known to be fixed in the 4.6.2 release. This list might
   11569    not be complete (that is, it is possible that some PRs that have been
   11570    fixed are not listed here).
   11571 
   11572 GCC 4.6.3
   11573 
   11574    This is the [21]list of problem reports (PRs) from GCC's bug tracking
   11575    system that are known to be fixed in the 4.6.3 release. This list might
   11576    not be complete (that is, it is possible that some PRs that have been
   11577    fixed are not listed here).
   11578 
   11579 GCC 4.6.4
   11580 
   11581    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   11582    system that are known to be fixed in the 4.6.4 release. This list might
   11583    not be complete (that is, it is possible that some PRs that have been
   11584    fixed are not listed here).
   11585 
   11586 
   11587     For questions related to the use of GCC, please consult these web
   11588     pages and the [23]GCC manuals. If that fails, the
   11589     [24]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11590     web pages and the development of GCC are welcome on our developer
   11591     list at [25]gcc (a] gcc.gnu.org. All of [26]our lists have public
   11592     archives.
   11593 
   11594    Copyright (C) [27]Free Software Foundation, Inc. Verbatim copying and
   11595    distribution of this entire article is permitted in any medium,
   11596    provided this notice is preserved.
   11597 
   11598    These pages are [28]maintained by the GCC team. Last modified
   11599    2024-05-17.
   11600 
   11601 References
   11602 
   11603    1. https://sourceware.org/bugzilla/show_bug.cgi?id=10401
   11604    2. https://gcc.gnu.org/gcc-4.5/changes.html
   11605    3. https://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
   11606    4. https://gcc.gnu.org/gcc-4.6/porting_to.html
   11607    5. https://gcc.gnu.org/projects/lto/whopr.pdf
   11608    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   11609    7. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
   11610    8. https://gcc.gnu.org/PR43145
   11611    9. https://gcc.gnu.org/PR43680
   11612   10. https://gcc.gnu.org/PR33558
   11613   11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
   11614   12. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
   11615   13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
   11616   14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
   11617   15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
   11618   16. https://gcc.gnu.org/wiki/OOP
   11619   17. https://gcc.gnu.org/wiki/Coarray
   11620   18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
   11621   19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
   11622   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
   11623   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
   11624   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
   11625   23. https://gcc.gnu.org/onlinedocs/
   11626   24. mailto:gcc-help (a] gcc.gnu.org
   11627   25. mailto:gcc (a] gcc.gnu.org
   11628   26. https://gcc.gnu.org/lists.html
   11629   27. https://www.fsf.org/
   11630   28. https://gcc.gnu.org/about.html
   11631 ======================================================================
   11632 http://gcc.gnu.org/gcc-4.5/index.html
   11633                              GCC 4.5 Release Series
   11634 
   11635    (This release series is no longer supported.)
   11636 
   11637    Jul 2, 2012
   11638 
   11639    The [1]GNU project and the GCC developers are pleased to announce the
   11640    release of GCC 4.5.4.
   11641 
   11642    This release is a bug-fix release, containing fixes for regressions in
   11643    GCC 4.5.3 relative to previous releases of GCC.
   11644 
   11645 Release History
   11646 
   11647    GCC 4.5.4
   11648           Jul 2, 2012 ([2]changes)
   11649 
   11650    GCC 4.5.3
   11651           Apr 28, 2011 ([3]changes)
   11652 
   11653    GCC 4.5.2
   11654           Dec 16, 2010 ([4]changes)
   11655 
   11656    GCC 4.5.1
   11657           Jul 31, 2010 ([5]changes)
   11658 
   11659    GCC 4.5.0
   11660           April 14, 2010 ([6]changes)
   11661 
   11662 References and Acknowledgements
   11663 
   11664    GCC used to stand for the GNU C Compiler, but since the compiler
   11665    supports several other languages aside from C, it now stands for the
   11666    GNU Compiler Collection.
   11667 
   11668    A list of [7]successful builds is updated as new information becomes
   11669    available.
   11670 
   11671    The GCC developers would like to thank the numerous people that have
   11672    contributed new features, improvements, bug fixes, and other changes as
   11673    well as test results to GCC. This [8]amazing group of volunteers is
   11674    what makes GCC successful.
   11675 
   11676    For additional information about GCC please refer to the [9]GCC project
   11677    web site or contact the [10]GCC development mailing list.
   11678 
   11679    To obtain GCC please use [11]our mirror sites or [12]our version
   11680    control system.
   11681 
   11682 
   11683     For questions related to the use of GCC, please consult these web
   11684     pages and the [13]GCC manuals. If that fails, the
   11685     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11686     web pages and the development of GCC are welcome on our developer
   11687     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   11688     archives.
   11689 
   11690    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   11691    distribution of this entire article is permitted in any medium,
   11692    provided this notice is preserved.
   11693 
   11694    These pages are [18]maintained by the GCC team. Last modified
   11695    2022-10-26.
   11696 
   11697 References
   11698 
   11699    1. http://www.gnu.org/
   11700    2. https://gcc.gnu.org/gcc-4.5/changes.html
   11701    3. https://gcc.gnu.org/gcc-4.5/changes.html
   11702    4. https://gcc.gnu.org/gcc-4.5/changes.html
   11703    5. https://gcc.gnu.org/gcc-4.5/changes.html
   11704    6. https://gcc.gnu.org/gcc-4.5/changes.html
   11705    7. https://gcc.gnu.org/gcc-4.5/buildstat.html
   11706    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   11707    9. https://gcc.gnu.org/index.html
   11708   10. mailto:gcc (a] gcc.gnu.org
   11709   11. https://gcc.gnu.org/mirrors.html
   11710   12. https://gcc.gnu.org/git.html
   11711   13. https://gcc.gnu.org/onlinedocs/
   11712   14. mailto:gcc-help (a] gcc.gnu.org
   11713   15. mailto:gcc (a] gcc.gnu.org
   11714   16. https://gcc.gnu.org/lists.html
   11715   17. https://www.fsf.org/
   11716   18. https://gcc.gnu.org/about.html
   11717 ======================================================================
   11718 http://gcc.gnu.org/gcc-4.5/changes.html
   11719                              GCC 4.5 Release Series
   11720                         Changes, New Features, and Fixes
   11721 
   11722 Caveats
   11723 
   11724      * GCC now requires the [1]MPC library in order to build. See the
   11725        [2]prerequisites page for version requirements.
   11726      * Support for a number of older systems and recently unmaintained or
   11727        untested target ports of GCC has been declared obsolete in GCC 4.5.
   11728        Unless there is activity to revive them, the next release of GCC
   11729        will have their sources permanently removed.
   11730        The following ports for individual systems on particular
   11731        architectures have been obsoleted:
   11732           + IRIX releases before 6.5 (mips-sgi-irix5*,
   11733             mips-sgi-irix6.[0-4])
   11734           + Solaris 7 (*-*-solaris2.7)
   11735           + Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
   11736             alpha-dec-osf5.0*)
   11737           + Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions
   11738             can be found in the [3]announcement.
   11739        Support for the classic POWER architecture implemented in the
   11740        original RIOS and RIOS2 processors of the old IBM RS/6000 product
   11741        line has been obsoleted in the rs6000 port. This does not affect
   11742        the new generation Power and PowerPC architectures.
   11743      * Support has been removed for all the [4]configurations obsoleted in
   11744        GCC 4.4.
   11745      * Support has been removed for the protoize and unprotoize utilities,
   11746        obsoleted in GCC 4.4.
   11747      * Support has been removed for tuning for Itanium1 (Merced) variants.
   11748        Note that code tuned for Itanium2 should also run correctly on
   11749        Itanium1.
   11750      * GCC now generates unwind info also for epilogues. DWARF debuginfo
   11751        generated by GCC now uses more features of DWARF3 than before, and
   11752        also some DWARF4 features. GDB older than 7.0 is not able to handle
   11753        either of these, so to debug GCC 4.5 generated binaries or
   11754        libraries GDB 7.0 or later is needed. You can disable use of DWARF4
   11755        features with the -gdwarf-3 -gstrict-dwarf options, or use
   11756        -gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but
   11757        epilogue unwind info is emitted unconditionally whenever unwind
   11758        info is emitted.
   11759      * On x86 targets, code containing floating-point calculations may run
   11760        significantly more slowly when compiled with GCC 4.5 in strict C99
   11761        conformance mode than they did with earlier GCC versions. This is
   11762        due to stricter standard conformance of the compiler and can be
   11763        avoided by using the option -fexcess-precision=fast; also see
   11764        [5]below.
   11765      * The function attribute noinline no longer prevents GCC from cloning
   11766        the function. A new attribute noclone has been introduced for this
   11767        purpose. Cloning a function means that it is duplicated and the new
   11768        copy is specialized for certain contexts (for example when a
   11769        parameter is a known constant).
   11770 
   11771 General Optimizer Improvements
   11772 
   11773      * The -save-temps now takes an optional argument. The -save-temps and
   11774        -save-temps=cwd switches write the temporary files in the current
   11775        working directory based on the original source file. The
   11776        -save-temps=obj switch will write files into the directory
   11777        specified with the -o option, and the intermediate filenames are
   11778        based on the output file. This will allow the user to get the
   11779        compiler intermediate files when doing parallel builds without two
   11780        builds of the same filename located in different directories from
   11781        interfering with each other.
   11782      * Debugging dumps are now created in the same directory as the object
   11783        file rather than in the current working directory. This allows the
   11784        user to get debugging dumps when doing parallel builds without two
   11785        builds of the same filename interfering with each other.
   11786      * GCC has been integrated with the MPC library. This allows GCC to
   11787        evaluate complex arithmetic at compile time [6]more accurately. It
   11788        also allows GCC to evaluate calls to complex built-in math
   11789        functions having constant arguments and replace them at compile
   11790        time with their mathematically equivalent results. In doing so, GCC
   11791        can generate correct results regardless of the math library
   11792        implementation or floating point precision of the host platform.
   11793        This also allows GCC to generate identical results regardless of
   11794        whether one compiles in native or cross-compile configurations to a
   11795        particular target. The following built-in functions take advantage
   11796        of this new capability: cacos, cacosh, casin, casinh, catan,
   11797        catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan,
   11798        and ctanh. The float and long double variants of these functions
   11799        (e.g. csinf and csinl) are also handled.
   11800      * A new link-time optimizer has been added ([7]-flto). When this
   11801        option is used, GCC generates a bytecode representation of each
   11802        input file and writes it to specially-named sections in each object
   11803        file. When the object files are linked together, all the function
   11804        bodies are read from these named sections and instantiated as if
   11805        they had been part of the same translation unit. This enables
   11806        interprocedural optimizations to work across different files (and
   11807        even different languages), potentially improving the performance of
   11808        the generated code. To use the link-timer optimizer, -flto needs to
   11809        be specified at compile time and during the final link. If the
   11810        program does not require any symbols to be exported, it is possible
   11811        to combine -flto and the experimental [8]-fwhopr with
   11812        [9]-fwhole-program to allow the interprocedural optimizers to use
   11813        more aggressive assumptions.
   11814      * The automatic parallelization pass was enhanced to support
   11815        parallelization of outer loops.
   11816      * Automatic parallelization can be enabled as part of Graphite. In
   11817        addition to -ftree-parallelize-loops=, specify
   11818        -floop-parallelize-all to enable the Graphite-based optimization.
   11819      * The infrastructure for optimizing based on [10]restrict qualified
   11820        pointers has been rewritten and should result in code generation
   11821        improvements. Optimizations based on restrict qualified pointers
   11822        are now also available when using -fno-strict-aliasing.
   11823      * There is a new optimization pass that attempts to change prototype
   11824        of functions to avoid unused parameters, pass only relevant parts
   11825        of structures and turn arguments passed by reference to arguments
   11826        passed by value when possible. It is enabled by -O2 and above as
   11827        well as -Os and can be manually invoked using the new command-line
   11828        switch -fipa-sra.
   11829      * GCC now optimize exception handling code. In particular cleanup
   11830        regions that are proved to not have any effect are optimized out.
   11831 
   11832 New Languages and Language specific improvements
   11833 
   11834   All languages
   11835 
   11836      * The -fshow-column option is now on by default. This means error
   11837        messages now have a column associated with them.
   11838 
   11839   Ada
   11840 
   11841      * Compilation of programs heavily using discriminated record types
   11842        with variant parts has been sped up and generates more compact
   11843        code.
   11844      * Stack checking now works reasonably well on most plaforms. In some
   11845        specific cases, stack overflows may still fail to be detected, but
   11846        a compile-time warning will be issued for these cases.
   11847 
   11848   C family
   11849 
   11850      * If a header named in a #include directive is not found, the
   11851        compiler exits immediately. This avoids a cascade of errors arising
   11852        from declarations expected to be found in that header being
   11853        missing.
   11854      * A new built-in function __builtin_unreachable() has been added that
   11855        tells the compiler that control will never reach that point. It may
   11856        be used after asm statements that terminate by transferring control
   11857        elsewhere, and in other places that are known to be unreachable.
   11858      * The -Wlogical-op option now warns for logical expressions such as
   11859        (c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be
   11860        mistakes. This option is disabled by default.
   11861      * An asm goto feature has been added to allow asm statements that
   11862        jump to C labels.
   11863      * C++0x raw strings are supported for C++ and for C with -std=gnu99.
   11864      * The deprecated attribute now takes an optional string argument, for
   11865        example, __attribute__((deprecated("text string"))), that will be
   11866        printed together with the deprecation warning.
   11867 
   11868   C
   11869 
   11870      * The -Wenum-compare option, which warns when comparing values of
   11871        different enum types, now works for C. It formerly only worked for
   11872        C++. This warning is enabled by -Wall. It may be avoided by using a
   11873        type cast.
   11874      * The -Wcast-qual option now warns about casts which are unsafe in
   11875        that they permit const-correctness to be violated without further
   11876        warnings. Specifically, it warns about cases where a qualifier is
   11877        added when all the lower types are not const. For example, it warns
   11878        about a cast from char ** to const char **.
   11879      * The -Wc++-compat option is significantly improved. It issues new
   11880        warnings for:
   11881           + Using C++ reserved operator names as identifiers.
   11882           + Conversions to enum types without explicit casts.
   11883           + Using va_arg with an enum type.
   11884           + Using different enum types in the two branches of ?:.
   11885           + Using ++ or -- on a variable of enum type.
   11886           + Using the same name as both a struct, union or enum tag and a
   11887             typedef, unless the typedef refers to the tagged type itself.
   11888           + Using a struct, union, or enum which is defined within another
   11889             struct or union.
   11890           + A struct field defined using a typedef if there is a field in
   11891             the struct, or an enclosing struct, whose name is the typedef
   11892             name.
   11893           + Duplicate definitions at file scope.
   11894           + Uninitialized const variables.
   11895           + A global variable with an anonymous struct, union, or enum
   11896             type.
   11897           + Using a string constant to initialize a char array whose size
   11898             is the length of the string.
   11899      * The new -Wjump-misses-init option warns about cases where a goto or
   11900        switch skips the initialization of a variable. This sort of branch
   11901        is an error in C++ but not in C. This warning is enabled by
   11902        -Wc++-compat.
   11903      * GCC now ensures that a C99-conforming <stdint.h> is present on most
   11904        targets, and uses information about the types in this header to
   11905        implement the Fortran bindings to those types. GCC does not ensure
   11906        the presence of such a header, and does not implement the Fortran
   11907        bindings, on the following targets: NetBSD, VxWorks, VMS,
   11908        SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF.
   11909      * GCC now implements C90- and C99-conforming rules for constant
   11910        expressions. This may cause warnings or errors for some code using
   11911        expressions that can be folded to a constant but are not constant
   11912        expressions as defined by ISO C.
   11913      * All known target-independent C90 and C90 Amendment 1 conformance
   11914        bugs, and all known target-independent C99 conformance bugs not
   11915        related to floating point or extended identifiers, have been fixed.
   11916      * The C decimal floating point support now includes support for the
   11917        FLOAT_CONST_DECIMAL64 pragma.
   11918      * The named address space feature from ISO/IEC TR 18037 is now
   11919        supported. This is currently only implemented for the SPU
   11920        processor.
   11921 
   11922   C++
   11923 
   11924      * Improved [11]experimental support for the upcoming C++0x ISO C++
   11925        standard, including support for raw strings, lambda expressions and
   11926        explicit type conversion operators.
   11927      * When printing the name of a class template specialization, G++ will
   11928        now omit any template arguments which come from default template
   11929        arguments. This behavior (and the pretty-printing of function
   11930        template specializations as template signature and arguments) can
   11931        be disabled with the -fno-pretty-templates option.
   11932      * Access control is now applied to typedef names used in a template,
   11933        which may cause G++ to reject some ill-formed code that was
   11934        accepted by earlier releases. The -fno-access-control option can be
   11935        used as a temporary workaround until the code is corrected.
   11936      * Compilation time for code that uses templates should now scale
   11937        linearly with the number of instantiations rather than
   11938        quadratically, as template instantiations are now looked up using
   11939        hash tables.
   11940      * Declarations of functions that look like builtin declarations of
   11941        library functions are only considered to be redeclarations if they
   11942        are declared with extern "C". This may cause problems with code
   11943        that omits extern "C" on hand-written declarations of C library
   11944        functions such as abort or memcpy. Such code is ill-formed, but was
   11945        accepted by earlier releases.
   11946      * Diagnostics that used to complain about passing non-POD types to
   11947        ... or jumping past the declaration of a non-POD variable now check
   11948        for triviality rather than PODness, as per C++0x.
   11949      * In C++0x mode local and anonymous classes are now allowed as
   11950        template arguments, and in declarations of variables and functions
   11951        with linkage, so long as any such declaration that is used is also
   11952        defined ([12]DR 757).
   11953      * Labels may now have attributes, as has been permitted for a while
   11954        in C. This is only permitted when the label definition and the
   11955        attribute specifier is followed by a semicoloni.e., the label
   11956        applies to an empty statement. The only useful attribute for a
   11957        label is unused.
   11958      * G++ now implements [13]DR 176. Previously G++ did not support using
   11959        the injected-class-name of a template base class as a type name,
   11960        and lookup of the name found the declaration of the template in the
   11961        enclosing scope. Now lookup of the name finds the
   11962        injected-class-name, which can be used either as a type or as a
   11963        template, depending on whether or not the name is followed by a
   11964        template argument list. As a result of this change, some code that
   11965        was previously accepted may be ill-formed because
   11966          1. The injected-class-name is not accessible because it's from a
   11967             private base, or
   11968          2. The injected-class-name cannot be used as an argument for a
   11969             template template parameter.
   11970        In either of these cases, the code can be fixed by adding a
   11971        nested-name-specifier to explicitly name the template. The first
   11972        can be worked around with -fno-access-control; the second is only
   11973        rejected with -pedantic.
   11974      * A new standard mangling for SIMD vector types has been added, to
   11975        avoid name clashes on systems with vectors of varying length. By
   11976        default the compiler still uses the old mangling, but emits aliases
   11977        with the new mangling on targets that support strong aliases. Users
   11978        can switch over entirely to the new mangling with -fabi-version=4
   11979        or -fabi-version=0. -Wabi will now warn about code that uses the
   11980        old mangling.
   11981      * The command-line option -ftemplate-depth-N is now written as
   11982        -ftemplate-depth=N and the old form is deprecated.
   11983      * Conversions between NULL and non-pointer types are now warned by
   11984        default. The new option -Wno-conversion-null disables these
   11985        warnings. Previously these warnings were only available when using
   11986        -Wconversion explicitly.
   11987 
   11988     Runtime Library (libstdc++)
   11989 
   11990      * Improved experimental support for the upcoming ISO C++ standard,
   11991        C++0x, including:
   11992           + Support for <future>, <functional>, and <random>.
   11993           + Existing facilities now exploit explicit operators and the
   11994             newly implemented core C++0x features.
   11995           + The header <cstdatomic> has been renamed to <atomic>.
   11996      * An experimental [14]profile mode has been added. This is an
   11997        implementation of many C++ standard library constructs with an
   11998        additional analysis layer that gives performance improvement advice
   11999        based on recognition of suboptimal usage patterns. For example,
   12000 #include <vector>
   12001 int main()
   12002 {
   12003   std::vector<int> v;
   12004   for (int k = 0; k < 1024; ++k)
   12005     v.insert(v.begin(), k);
   12006 }
   12007 
   12008        When instrumented via the profile mode, can return suggestions
   12009        about the initial size and choice of the container used as follows:
   12010 vector-to-list: improvement = 5: call stack = 0x804842c ...
   12011     : advice = change std::vector to std::list
   12012 vector-size: improvement = 3: call stack = 0x804842c ...
   12013     : advice = change initial container size from 0 to 1024
   12014 
   12015        These constructs can be substituted for the normal libstdc++
   12016        constructs on a piecemeal basis, or all existing components can be
   12017        transformed via the -D_GLIBCXX_PROFILE macro.
   12018      * [15]Support for decimal floating-point arithmetic (aka ISO C++ TR
   12019        24733) has been added. This support is in header file
   12020        <decimal/decimal>, uses namespace std::decimal, and includes
   12021        classes decimal32, decimal64, and decimal128.
   12022      * Sources have been audited for application of function attributes
   12023        nothrow, const, pure, and noreturn.
   12024      * Python pretty-printers have been added for many standard library
   12025        components that simplify the internal representation and present a
   12026        more intuitive view of components when used with
   12027        appropriately-advanced versions of GDB. For more information,
   12028        please consult the more [16]detailed description.
   12029      * The default behavior for comparing typeinfo names has changed, so
   12030        in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
   12031      * The new -static-libstdc++ option directs g++ to link the C++
   12032        library statically, even if the default would normally be to link
   12033        it dynamically.
   12034 
   12035   Fortran
   12036 
   12037      * The COMMON default padding has been changed  instead of adding the
   12038        padding before a variable it is now added afterwards, which
   12039        increases the compatibility with other vendors and helps to obtain
   12040        the correct output in some cases. Cf. also the -falign-commons
   12041        option ([17]added in 4.4).
   12042      * The -finit-real= option now also supports the value snan for
   12043        signaling not-a-number; to be effective, one additionally needs to
   12044        enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
   12045        optimizations can turn a signaling NaN into a quiet one.
   12046      * The new option -fcheck= has been added with the options bounds,
   12047        array-temps, do, pointer, and recursive. The bounds and array-temps
   12048        options are equivalent to -fbounds-check and
   12049        -fcheck-array-temporaries. The do option checks for invalid
   12050        modification of loop iteration variables, and the recursive option
   12051        tests for recursive calls to subroutines/functions which are not
   12052        marked as recursive. With pointer pointer association checks in
   12053        calls are performed; however, neither undefined pointers nor
   12054        pointers in expressions are handled. Using -fcheck=all enables all
   12055        these run-time checks.
   12056      * The run-time checking -fcheck=bounds now warns about invalid string
   12057        lengths of character dummy arguments. Additionally, more
   12058        compile-time checks have been added.
   12059      * The new option [18]-fno-protect-parens has been added; if set, the
   12060        compiler may reorder REAL and COMPLEX expressions without regard to
   12061        parentheses.
   12062      * GNU Fortran no longer links against libgfortranbegin. As before,
   12063        MAIN__ (assembler symbol name) is the actual Fortran main program,
   12064        which is invoked by the main function. However, main is now
   12065        generated and put in the same object file as MAIN__. For the time
   12066        being, libgfortranbegin still exists for backward compatibility.
   12067        For details see the new [19]Mixed-Language Programming chapter in
   12068        the manual.
   12069      * The I/O library was restructured for performance and cleaner code.
   12070      * Array assignments and WHERE are now run in parallel when OpenMP's
   12071        WORKSHARE is used.
   12072      * The experimental option -fwhole-file was added. The option allows
   12073        whole-file checking of procedure arguments and allows for better
   12074        optimizations. It can also be used with -fwhole-program, which is
   12075        now also supported in gfortran.
   12076      * More Fortran 2003 and Fortran 2008 mathematical functions can now
   12077        be used as initialization expressions.
   12078      * Some extended attributes such as STDCALL are now supported via the
   12079        [20]GCC$ compiler directive.
   12080      * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
   12081        intrinsic behaves now as if zero were always positive.
   12082      * For legacy compatibiliy: On Cygwin and MinGW, the special files
   12083        CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now
   12084        supported.
   12085      * Fortran 2003 support has been extended:
   12086           + Procedure-pointer function results and procedure-pointer
   12087             components (including PASS),
   12088           + allocatable scalars (experimental),
   12089           + DEFERRED type-bound procedures,
   12090           + the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements
   12091             have been implemented.
   12092           + The ALLOCATE statement supports type-specs and the SOURCE=
   12093             argument.
   12094           + OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC
   12095             type-bound procedure (i.e. as type-bound operators).
   12096           + Rounding (ROUND=, RZ, ...) for output is now supported.
   12097           + The INT_FAST{8,16,32,64,128}_T kind type parameters of the
   12098             intrinsic module ISO_C_BINDING are now supported, except for
   12099             the targets listed above as ones where GCC does not have
   12100             <stdint.h> type information.
   12101           + Extensible derived types with type-bound procedure or
   12102             procedure pointer with PASS attribute now have to use CLASS in
   12103             line with the Fortran 2003 standard; the workaround to use
   12104             TYPE is no longer supported.
   12105           + [21]Experimental, incomplete support for polymorphism,
   12106             including CLASS, SELECT TYPE and dynamic dispatch of
   12107             type-bound procedure calls. Some features do not work yet such
   12108             as unlimited polymorphism (CLASS(*)).
   12109      * Fortran 2008 support has been extended:
   12110           + The OPEN statement now supports the NEWUNIT= option, which
   12111             returns a unique file unit, thus preventing inadvertent use of
   12112             the same unit in different parts of the program.
   12113           + Support for unlimited format items has been added.
   12114           + The INT{8,16,32} and REAL{32,64,128} kind type parameters of
   12115             the intrinsic module ISO_FORTRAN_ENV are now supported.
   12116           + Using complex arguments with TAN, SINH, COSH, TANH, ASIN,
   12117             ACOS, and ATAN is now possible; the functions ASINH, ACOSH,
   12118             and ATANH have been added (for real and complex arguments) and
   12119             ATAN(Y,X) is now an alias for ATAN2(Y,X).
   12120           + The BLOCK construct has been implemented.
   12121 
   12122 New Targets and Target Specific Improvements
   12123 
   12124   AIX
   12125 
   12126      * Full cross-toolchain support now available with GNU Binutils
   12127 
   12128   ARM
   12129 
   12130      * GCC now supports the Cortex-M0 and Cortex-A5 processors.
   12131      * GCC now supports the ARM v7E-M architecture.
   12132      * GCC now supports VFPv4-based FPUs and FPUs with
   12133        single-precision-only VFP.
   12134      * GCC has many improvements to optimization for other ARM processors,
   12135        including scheduling support for the integer pipeline on Cortex-A9.
   12136      * GCC now supports the IEEE 754-2008 half-precision floating-point
   12137        type, and a variant ARM-specific half-precision type. This type is
   12138        specified using __fp16, with the layout determined by
   12139        -mfp16-format. With appropriate -mfpu options, the Cortex-A9 and
   12140        VFPv4 half-precision instructions will be used.
   12141      * GCC now supports the variant of AAPCS that uses VFP registers for
   12142        parameter passing and return values.
   12143 
   12144   AVR
   12145 
   12146      * The -mno-tablejump option has been removed because it has the same
   12147        effect as the -fno-jump-tables option.
   12148      * Added support for these new AVR devices:
   12149           + ATmega8U2
   12150           + ATmega16U2
   12151           + ATmega32U2
   12152 
   12153   IA-32/x86-64
   12154 
   12155      * GCC now will set the default for -march= based on the configure
   12156        target.
   12157      * GCC now supports handling floating-point excess precision arising
   12158        from use of the x87 floating-point unit in a way that conforms to
   12159        ISO C99. This is enabled with -fexcess-precision=standard and with
   12160        standards conformance options such as -std=c99, and may be disabled
   12161        using -fexcess-precision=fast.
   12162      * Support for the Intel Atom processor is now available through the
   12163        -march=atom and -mtune=atom options.
   12164      * A new -mcrc32 option is now available to enable crc32 intrinsics.
   12165      * A new -mmovbe option is now available to enable GCC to use the
   12166        movbe instruction to implement __builtin_bswap32 and
   12167        __builtin_bswap64.
   12168      * SSE math now can be enabled by default at configure time with the
   12169        new --with-fpmath=sse option.
   12170      * There is a new intrinsic header file, <x86intrin.h>. It should be
   12171        included before using any IA-32/x86-64 intrinsics.
   12172      * Support for the XOP, FMA4, and LWP instruction sets for the AMD
   12173        Orochi processors are now available with the -mxop, -mfma4, and
   12174        -mlwp options.
   12175      * The -mabm option enables GCC to use the popcnt and lzcnt
   12176        instructions on AMD processors.
   12177      * The -mpopcnt option enables GCC to use the popcnt instructions on
   12178        both AMD and Intel processors.
   12179 
   12180   M68K/ColdFire
   12181 
   12182      * GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x
   12183        and 5441x devices.
   12184      * GCC now supports thread-local storage (TLS) on M68K and ColdFire
   12185        processors.
   12186 
   12187   MeP
   12188 
   12189    Support has been added for the Toshiba Media embedded Processor (MeP,
   12190    or mep-elf) embedded target.
   12191 
   12192   MIPS
   12193 
   12194      * GCC now supports MIPS 1004K processors.
   12195      * GCC can now be configured with options --with-arch-32,
   12196        --with-arch-64, --with-tune-32 and --with-tune-64 to control the
   12197        default optimization separately for 32-bit and 64-bit modes.
   12198      * MIPS targets now support an alternative _mcount interface, in which
   12199        register $12 points to the function's save slot for register $31.
   12200        This interface is selected by the -mcount-ra-address option; see
   12201        the documentation for more details.
   12202      * GNU/Linux targets can now generate read-only .eh_frame sections.
   12203        This optimization requires GNU binutils 2.20 or above, and is only
   12204        available if GCC is configured with a suitable version of binutils.
   12205      * GNU/Linux targets can now attach special relocations to indirect
   12206        calls, so that the linker can turn them into direct jumps or
   12207        branches. This optimization requires GNU binutils 2.20 or later,
   12208        and is automatically selected if GCC is configured with an
   12209        appropriate version of binutils. It can be explicitly enabled or
   12210        disabled using the -mrelax-pic-calls command-line option.
   12211      * GCC now generates more heavily-optimized atomic operations on
   12212        Octeon processors.
   12213      * MIPS targets now support the -fstack-protector option.
   12214      * GCC now supports an -msynci option, which specifies that synci is
   12215        enough to flush the instruction cache, without help from the
   12216        operating system. GCC uses this information to optimize
   12217        automatically-generated cache flush operations, such as those used
   12218        for nested functions in C. There is also a --with-synci
   12219        configure-time option, which makes -msynci the default.
   12220      * GCC supports four new function attributes for interrupt handlers:
   12221        interrupt, use_shadow_register_set, keep_interrupts_masked and
   12222        use_debug_exception_return. See the documentation for more details
   12223        about these attributes.
   12224 
   12225   RS/6000 (POWER/PowerPC)
   12226 
   12227      * GCC now supports the Power ISA 2.06, which includes the VSX
   12228        instructions that add vector 64-bit floating point support, new
   12229        population count instructions, and conversions between floating
   12230        point and unsigned types.
   12231      * Support for the power7 processor is now available through the
   12232        -mcpu=power7 and -mtune=power7.
   12233      * GCC will now vectorize loops that contain simple math functions
   12234        like copysign when generating code for altivec or VSX targets.
   12235      * Support for the A2 processor is now available through the -mcpu=a2
   12236        and -mtune=a2 options.
   12237      * Support for the 476 processor is now available through the
   12238        -mcpu={476,476fp} and -mtune={476,476fp} options.
   12239      * Support for the e500mc64 processor is now available through the
   12240        -mcpu=e500mc64 and -mtune=e500mc64 options.
   12241      * GCC can now be configured with options --with-cpu-32,
   12242        --with-cpu-64, --with-tune-32 and --with-tune-64 to control the
   12243        default optimization separately for 32-bit and 64-bit modes.
   12244      * Starting with GCC 4.5.4, vectors of type vector long long or vector
   12245        long are passed and returned in the same method as other vectors
   12246        with the VSX instruction set. Previously the GCC compiler did not
   12247        adhere to the ABI for 128-bit vectors with 64-bit integer base
   12248        types (PR 48857). This is also fixed in the GCC 4.6.1 release.
   12249 
   12250   RX
   12251 
   12252    Support has been added for the Renesas RX Processor (rx-elf) target.
   12253 
   12254 Operating Systems
   12255 
   12256   Windows (Cygwin and MinGW)
   12257 
   12258      * GCC now installs all the major language runtime libraries as DLLs
   12259        when configured with the --enable-shared option.
   12260      * GCC now makes use of the new support for aligned common variables
   12261        in versions of binutils >= 2.20 to fix bugs in the support for SSE
   12262        data types.
   12263      * Improvements to the libffi support library increase the reliability
   12264        of code generated by GCJ on all Windows platforms. Libgcj is
   12265        enabled by default for the first time.
   12266      * Libtool improvements simplify installation by placing the generated
   12267        DLLs in the correct binaries directory.
   12268      * Numerous other minor bugfixes and improvements, and substantial
   12269        enhancements to the Fortran language support library.
   12270 
   12271    >
   12272 
   12273 Other significant improvements
   12274 
   12275   Plugins
   12276 
   12277      * It is now possible to extend the compiler without having to modify
   12278        its source code. A new option -fplugin=file.so tells GCC to load
   12279        the shared object file.so and execute it as part of the compiler.
   12280        The internal documentation describes the details on how plugins can
   12281        interact with the compiler.
   12282 
   12283   Installation changes
   12284 
   12285      * The move to newer autotools changed default installation
   12286        directories and switches to control them: The --with-datarootdir,
   12287        --with-docdir, --with-pdfdir, and --with-htmldir switches are not
   12288        used any more. Instead, you can now use --datarootdir, --docdir,
   12289        --htmldir, and --pdfdir. The default installation directories have
   12290        changed as follows according to the GNU Coding Standards:
   12291 
   12292        datarootdir read-only architecture-independent data root [PREFIX/share]
   12293        localedir   locale-specific message catalogs [DATAROOTDIR/locale]
   12294        docdir      documentation root [DATAROOTDIR/doc/PACKAGE]
   12295        htmldir     html documentation [DOCDIR]
   12296        dvidir      dvi documentation [DOCDIR]
   12297        pdfdir      pdf documentation [DOCDIR]
   12298        psdir       ps documentation [DOCDIR]
   12299        The following variables have new default values:
   12300 
   12301        datadir read-only architecture-independent data [DATAROOTDIR]
   12302        infodir info documentation [DATAROOTDIR/info]
   12303        mandir  man documentation [DATAROOTDIR/man]
   12304 
   12305 GCC 4.5.1
   12306 
   12307    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   12308    system that are known to be fixed in the 4.5.1 release. This list might
   12309    not be complete (that is, it is possible that some PRs that have been
   12310    fixed are not listed here).
   12311 
   12312   All languages
   12313 
   12314      * GCC's new link-time optimizer ([23]-flto) now also works on a few
   12315        non-ELF targets:
   12316           + Cygwin (*-cygwin*)
   12317           + MinGW (*-mingw*)
   12318           + Darwin on x86-64 (x86_64-apple-darwin*)
   12319        LTO is not enabled by default for these targets. To enable LTO, you
   12320        should configure with the --enable-lto option.
   12321 
   12322 GCC 4.5.2
   12323 
   12324    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   12325    system that are known to be fixed in the 4.5.2 release. This list might
   12326    not be complete (that is, it is possible that some PRs that have been
   12327    fixed are not listed here).
   12328 
   12329 GCC 4.5.3
   12330 
   12331    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   12332    system that are known to be fixed in the 4.5.3 release. This list might
   12333    not be complete (that is, it is possible that some PRs that have been
   12334    fixed are not listed here).
   12335 
   12336    On the PowerPC compiler, the Altivec builtin functions vec_ld and
   12337    vec_st have been modified to generate the Altivec memory instructions
   12338    LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5
   12339    release, these builtin functions were changed to generate VSX memory
   12340    reference instructions instead of Altivec memory instructions, but
   12341    there are differences between the two instructions. If the VSX
   12342    instruction set is available, you can now use the new builtin functions
   12343    vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   12344    instructions.
   12345 
   12346 GCC 4.5.4
   12347 
   12348    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   12349    system that are known to be fixed in the 4.5.4 release. This list might
   12350    not be complete (that is, it is possible that some PRs that have been
   12351    fixed are not listed here).
   12352 
   12353 
   12354     For questions related to the use of GCC, please consult these web
   12355     pages and the [27]GCC manuals. If that fails, the
   12356     [28]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12357     web pages and the development of GCC are welcome on our developer
   12358     list at [29]gcc (a] gcc.gnu.org. All of [30]our lists have public
   12359     archives.
   12360 
   12361    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
   12362    distribution of this entire article is permitted in any medium,
   12363    provided this notice is preserved.
   12364 
   12365    These pages are [32]maintained by the GCC team. Last modified
   12366    2023-07-30.
   12367 
   12368 References
   12369 
   12370    1. https://www.multiprecision.org/
   12371    2. https://gcc.gnu.org/install/prerequisites.html
   12372    3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
   12373    4. https://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
   12374    5. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   12375    6. https://gcc.gnu.org/PR30789
   12376    7. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   12377    8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
   12378    9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
   12379   10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
   12380   11. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   12381   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   12382   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
   12383   14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
   12384   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
   12385   16. https://sourceware.org/gdb/wiki/STLSupport
   12386   17. https://gcc.gnu.org/gcc-4.4/changes.html
   12387   18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   12388   19. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
   12389   20. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
   12390   21. https://gcc.gnu.org/wiki/OOP
   12391   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
   12392   23. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   12393   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
   12394   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
   12395   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
   12396   27. https://gcc.gnu.org/onlinedocs/
   12397   28. mailto:gcc-help (a] gcc.gnu.org
   12398   29. mailto:gcc (a] gcc.gnu.org
   12399   30. https://gcc.gnu.org/lists.html
   12400   31. https://www.fsf.org/
   12401   32. https://gcc.gnu.org/about.html
   12402 ======================================================================
   12403 http://gcc.gnu.org/gcc-4.4/index.html
   12404                              GCC 4.4 Release Series
   12405 
   12406    This release series is no longer maintained.
   12407 
   12408    March 13, 2012
   12409 
   12410    The [1]GNU project and the GCC developers are pleased to announce the
   12411    release of GCC 4.4.7.
   12412 
   12413    This release is a bug-fix release, containing fixes for regressions in
   12414    GCC 4.4.6 relative to previous releases of GCC.
   12415 
   12416 Release History
   12417 
   12418    GCC 4.4.7
   12419           March 13, 2012 ([2]changes)
   12420 
   12421    GCC 4.4.6
   12422           April 16, 2011 ([3]changes)
   12423 
   12424    GCC 4.4.5
   12425           October 1, 2010 ([4]changes)
   12426 
   12427    GCC 4.4.4
   12428           April 29, 2010 ([5]changes)
   12429 
   12430    GCC 4.4.3
   12431           January 21, 2010 ([6]changes)
   12432 
   12433    GCC 4.4.2
   12434           October 15, 2009 ([7]changes)
   12435 
   12436    GCC 4.4.1
   12437           July 22, 2009 ([8]changes)
   12438 
   12439    GCC 4.4.0
   12440           April 21, 2009 ([9]changes)
   12441 
   12442 References and Acknowledgements
   12443 
   12444    GCC used to stand for the GNU C Compiler, but since the compiler
   12445    supports several other languages aside from C, it now stands for the
   12446    GNU Compiler Collection.
   12447 
   12448    A list of [10]successful builds is updated as new information becomes
   12449    available.
   12450 
   12451    The GCC developers would like to thank the numerous people that have
   12452    contributed new features, improvements, bug fixes, and other changes as
   12453    well as test results to GCC. This [11]amazing group of volunteers is
   12454    what makes GCC successful.
   12455 
   12456    For additional information about GCC please refer to the [12]GCC
   12457    project web site or contact the [13]GCC development mailing list.
   12458 
   12459    To obtain GCC please use [14]our mirror sites or [15]our version
   12460    control system.
   12461 
   12462 
   12463     For questions related to the use of GCC, please consult these web
   12464     pages and the [16]GCC manuals. If that fails, the
   12465     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12466     web pages and the development of GCC are welcome on our developer
   12467     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   12468     archives.
   12469 
   12470    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   12471    distribution of this entire article is permitted in any medium,
   12472    provided this notice is preserved.
   12473 
   12474    These pages are [21]maintained by the GCC team. Last modified
   12475    2022-10-26.
   12476 
   12477 References
   12478 
   12479    1. http://www.gnu.org/
   12480    2. https://gcc.gnu.org/gcc-4.4/changes.html
   12481    3. https://gcc.gnu.org/gcc-4.4/changes.html
   12482    4. https://gcc.gnu.org/gcc-4.4/changes.html
   12483    5. https://gcc.gnu.org/gcc-4.4/changes.html
   12484    6. https://gcc.gnu.org/gcc-4.4/changes.html
   12485    7. https://gcc.gnu.org/gcc-4.4/changes.html
   12486    8. https://gcc.gnu.org/gcc-4.4/changes.html
   12487    9. https://gcc.gnu.org/gcc-4.4/changes.html
   12488   10. https://gcc.gnu.org/gcc-4.4/buildstat.html
   12489   11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12490   12. https://gcc.gnu.org/index.html
   12491   13. mailto:gcc (a] gcc.gnu.org
   12492   14. https://gcc.gnu.org/mirrors.html
   12493   15. https://gcc.gnu.org/git.html
   12494   16. https://gcc.gnu.org/onlinedocs/
   12495   17. mailto:gcc-help (a] gcc.gnu.org
   12496   18. mailto:gcc (a] gcc.gnu.org
   12497   19. https://gcc.gnu.org/lists.html
   12498   20. https://www.fsf.org/
   12499   21. https://gcc.gnu.org/about.html
   12500 ======================================================================
   12501 http://gcc.gnu.org/gcc-4.4/changes.html
   12502                              GCC 4.4 Release Series
   12503                         Changes, New Features, and Fixes
   12504 
   12505    The latest release in the 4.4 release series is [1]GCC 4.4.7.
   12506 
   12507 Caveats
   12508 
   12509      * __builtin_stdarg_start has been completely removed from GCC.
   12510        Support for <varargs.h> had been deprecated since GCC 4.0. Use
   12511        __builtin_va_start as a replacement.
   12512      * Some of the errors issued by the C++ front end that could be
   12513        downgraded to warnings in previous releases by using -fpermissive
   12514        are now warnings by default. They can be converted into errors by
   12515        using -pedantic-errors.
   12516      * Use of the cpp assertion extension will now emit a warning when
   12517        -Wdeprecated or -pedantic is used. This extension has been
   12518        deprecated for many years, but never warned about.
   12519      * Packed bit-fields of type char were not properly bit-packed on many
   12520        targets prior to GCC 4.4. On these targets, the fix in GCC 4.4
   12521        causes an ABI change. For example there is no longer a 4-bit
   12522        padding between field a and b in this structure:
   12523     struct foo
   12524     {
   12525       char a:4;
   12526       char b:8;
   12527     } __attribute__ ((packed));
   12528        There is a new warning to help identify fields that are affected:
   12529     foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
   12530        The warning can be disabled with -Wno-packed-bitfield-compat.
   12531      * On ARM EABI targets, the C++ mangling of the va_list type has been
   12532        changed to conform to the current revision of the EABI. This does
   12533        not affect the libstdc++ library included with GCC.
   12534      * The SCOUNT and POS bits of the MIPS DSP control register are now
   12535        treated as global. Previous versions of GCC treated these fields as
   12536        call-clobbered instead.
   12537      * The MIPS port no longer recognizes the h asm constraint. It was
   12538        necessary to remove this constraint in order to avoid generating
   12539        unpredictable code sequences.
   12540        One of the main uses of the h constraint was to extract the high
   12541        part of a multiplication on 64-bit targets. For example:
   12542     asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
   12543        You can now achieve the same effect using 128-bit types:
   12544     typedef unsigned int uint128_t __attribute__((mode(TI)));
   12545     result = ((uint128_t) x * y) >> 64;
   12546        The second sequence is better in many ways. For example, if x and y
   12547        are constants, the compiler can perform the multiplication at
   12548        compile time. If x and y are not constants, the compiler can
   12549        schedule the runtime multiplication better than it can schedule an
   12550        asm statement.
   12551      * Support for a number of older systems and recently unmaintained or
   12552        untested target ports of GCC has been declared obsolete in GCC 4.4.
   12553        Unless there is activity to revive them, the next release of GCC
   12554        will have their sources permanently removed.
   12555        The following ports for individual systems on particular
   12556        architectures have been obsoleted:
   12557           + Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
   12558             m68k-*-aout*)
   12559           + Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
   12560             armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
   12561             sh-*-*). This does not affect other more specific targets
   12562             using the COFF object format on those architectures, or the
   12563             more specific H8300 and SH targets (h8300-*-rtems*,
   12564             h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
   12565             sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).
   12566           + 2BSD on PDP-11 (pdp11-*-bsd)
   12567           + AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
   12568             powerpc-ibm-aix4.[12]*)
   12569           + Tuning support for Itanium1 (Merced) variants. Note that code
   12570             tuned for Itanium2 should also run correctly on Itanium1.
   12571      * The protoize and unprotoize utilities have been obsoleted and will
   12572        be removed in GCC 4.5. These utilities have not been installed by
   12573        default since GCC 3.0.
   12574      * Support has been removed for all the [2]configurations obsoleted in
   12575        GCC 4.3.
   12576      * Unknown -Wno-* options are now silently ignored by GCC if no other
   12577        diagnostics are issued. If other diagnostics are issued, then GCC
   12578        warns about the unknown options.
   12579      * More information on porting to GCC 4.4 from previous versions of
   12580        GCC can be found in the [3]porting guide for this release.
   12581 
   12582 General Optimizer Improvements
   12583 
   12584      * A new command-line switch -findirect-inlining has been added. When
   12585        turned on it allows the inliner to also inline indirect calls that
   12586        are discovered to have known targets at compile time thanks to
   12587        previous inlining.
   12588      * A new command-line switch -ftree-switch-conversion has been added.
   12589        This new pass turns simple initializations of scalar variables in
   12590        switch statements into initializations from a static array, given
   12591        that all the values are known at compile time and the ratio between
   12592        the new array size and the original switch branches does not exceed
   12593        the parameter --param switch-conversion-max-branch-ratio (default
   12594        is eight).
   12595      * A new command-line switch -ftree-builtin-call-dce has been added.
   12596        This optimization eliminates unnecessary calls to certain builtin
   12597        functions when the return value is not used, in cases where the
   12598        calls can not be eliminated entirely because the function may set
   12599        errno. This optimization is on by default at -O2 and above.
   12600      * A new command-line switch -fconserve-stack directs the compiler to
   12601        minimize stack usage even if it makes the generated code slower.
   12602        This affects inlining decisions.
   12603      * When the assembler supports it, the compiler will now emit unwind
   12604        information using assembler .cfi directives. This makes it possible
   12605        to use such directives in inline assembler code. The new option
   12606        -fno-dwarf2-cfi-asm directs the compiler to not use .cfi
   12607        directives.
   12608      * The [4]Graphite branch has been merged. This merge has brought in a
   12609        new framework for loop optimizations based on a polyhedral
   12610        intermediate representation. These optimizations apply to all the
   12611        languages supported by GCC. The following new code transformations
   12612        are available in GCC 4.4:
   12613           + -floop-interchange performs loop interchange transformations
   12614             on loops. Interchanging two nested loops switches the inner
   12615             and outer loops. For example, given a loop like:
   12616           DO J = 1, M
   12617             DO I = 1, N
   12618               A(J, I) = A(J, I) * C
   12619             ENDDO
   12620           ENDDO
   12621 
   12622             loop interchange will transform the loop as if the user had
   12623             written:
   12624           DO I = 1, N
   12625             DO J = 1, M
   12626               A(J, I) = A(J, I) * C
   12627             ENDDO
   12628           ENDDO
   12629 
   12630             which can be beneficial when N is larger than the caches,
   12631             because in Fortran, the elements of an array are stored in
   12632             memory contiguously by column, and the original loop iterates
   12633             over rows, potentially creating at each access a cache miss.
   12634           + -floop-strip-mine performs loop strip mining transformations
   12635             on loops. Strip mining splits a loop into two nested loops.
   12636             The outer loop has strides equal to the strip size and the
   12637             inner loop has strides of the original loop within a strip.
   12638             For example, given a loop like:
   12639           DO I = 1, N
   12640             A(I) = A(I) + C
   12641           ENDDO
   12642 
   12643             loop strip mining will transform the loop as if the user had
   12644             written:
   12645           DO II = 1, N, 4
   12646             DO I = II, min (II + 3, N)
   12647               A(I) = A(I) + C
   12648             ENDDO
   12649           ENDDO
   12650 
   12651           + -floop-block performs loop blocking transformations on loops.
   12652             Blocking strip mines each loop in the loop nest such that the
   12653             memory accesses of the element loops fit inside caches. For
   12654             example, given a loop like:
   12655           DO I = 1, N
   12656             DO J = 1, M
   12657               A(J, I) = B(I) + C(J)
   12658             ENDDO
   12659           ENDDO
   12660 
   12661             loop blocking will transform the loop as if the user had
   12662             written:
   12663           DO II = 1, N, 64
   12664             DO JJ = 1, M, 64
   12665               DO I = II, min (II + 63, N)
   12666                 DO J = JJ, min (JJ + 63, M)
   12667                   A(J, I) = B(I) + C(J)
   12668                 ENDDO
   12669               ENDDO
   12670             ENDDO
   12671           ENDDO
   12672 
   12673             which can be beneficial when M is larger than the caches,
   12674             because the innermost loop will iterate over a smaller amount
   12675             of data that can be kept in the caches.
   12676      * A new register allocator has replaced the old one. It is called
   12677        integrated register allocator (IRA) because coalescing, register
   12678        live range splitting, and hard register preferencing are done
   12679        on-the-fly during coloring. It also has better integration with the
   12680        reload pass. IRA is a regional register allocator which uses modern
   12681        Chaitin-Briggs coloring instead of Chow's priority coloring used in
   12682        the old register allocator. More info about IRA internals and
   12683        options can be found in the GCC manuals.
   12684      * A new instruction scheduler and software pipeliner, based on the
   12685        selective scheduling approach, has been added. The new pass
   12686        performs instruction unification, register renaming, substitution
   12687        through register copies, and speculation during scheduling. The
   12688        software pipeliner is able to pipeline non-countable loops. The new
   12689        pass is targeted at scheduling-eager in-order platforms. In GCC 4.4
   12690        it is available for the Intel Itanium platform working by default
   12691        as the second scheduling pass (after register allocation) at the
   12692        -O3 optimization level.
   12693      * When using -fprofile-generate with a multi-threaded program, the
   12694        profile counts may be slightly wrong due to race conditions. The
   12695        new -fprofile-correction option directs the compiler to apply
   12696        heuristics to smooth out the inconsistencies. By default the
   12697        compiler will give an error message when it finds an inconsistent
   12698        profile.
   12699      * The new -fprofile-dir=PATH option permits setting the directory
   12700        where profile data files are stored when using -fprofile-generate
   12701        and friends, and the directory used when reading profile data files
   12702        using -fprofile-use and friends.
   12703 
   12704 New warning options
   12705 
   12706      * The new -Wframe-larger-than=NUMBER option directs GCC to emit a
   12707        warning if any stack frame is larger than NUMBER bytes. This may be
   12708        used to help ensure that code fits within a limited amount of stack
   12709        space.
   12710      * The command-line option -Wlarger-than-N is now written as
   12711        -Wlarger-than=N and the old form is deprecated.
   12712      * The new -Wno-mudflap option disables warnings about constructs
   12713        which can not be instrumented when using -fmudflap.
   12714 
   12715 New Languages and Language specific improvements
   12716 
   12717      * Version 3.0 of the OpenMP specification is now supported for the C,
   12718        C++, and Fortran compilers.
   12719      * New character data types, per [5]TR 19769: New character types in
   12720        C, are now supported for the C compiler in -std=gnu99 mode, as
   12721        __CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in
   12722        -std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too.
   12723 
   12724   C family
   12725 
   12726      * A new optimize attribute was added to allow programmers to change
   12727        the optimization level and particular optimization options for an
   12728        individual function. You can also change the optimization options
   12729        via the GCC optimize pragma for functions defined after the pragma.
   12730        The GCC push_options pragma and the GCC pop_options pragma allow
   12731        you temporarily save and restore the options used. The GCC
   12732        reset_options pragma restores the options to what was specified on
   12733        the command line.
   12734      * Uninitialized warnings do not require enabling optimization
   12735        anymore, that is, -Wuninitialized can be used together with -O0.
   12736        Nonetheless, the warnings given by -Wuninitialized will probably be
   12737        more accurate if optimization is enabled.
   12738      * -Wparentheses now warns about expressions such as (!x | y) and (!x
   12739        & y). Using explicit parentheses, such as in ((!x) | y), silences
   12740        this warning.
   12741      * -Wsequence-point now warns within if, while,do while and for
   12742        conditions, and within for begin/end expressions.
   12743      * A new option -dU is available to dump definitions of preprocessor
   12744        macros that are tested or expanded.
   12745 
   12746   C++
   12747 
   12748      * [6]Improved experimental support for the upcoming ISO C++ standard,
   12749        C++0x. Including support for auto, inline namespaces, generalized
   12750        initializer lists, defaulted and deleted functions, new character
   12751        types, and scoped enums.
   12752      * Those errors that may be downgraded to warnings to build legacy
   12753        code now mention -fpermissive when -fdiagnostics-show-option is
   12754        enabled.
   12755      * -Wconversion now warns if the result of a static_cast to enumeral
   12756        type is unspecified because the value is outside the range of the
   12757        enumeral type.
   12758      * -Wuninitialized now warns if a non-static reference or non-static
   12759        const member appears in a class without constructors.
   12760      * G++ now properly implements value-initialization, so objects with
   12761        an initializer of () and an implicitly defined default constructor
   12762        will be zero-initialized before the default constructor is called.
   12763 
   12764     Runtime Library (libstdc++)
   12765 
   12766      * Improved experimental support for the upcoming ISO C++ standard,
   12767        C++0x, including:
   12768           + Support for <chrono>, <condition_variable>, <cstdatomic>,
   12769             <forward_list>, <initializer_list>, <mutex>, <ratio>,
   12770             <system_error>, and <thread>.
   12771           + unique_ptr, <algorithm> additions, exception propagation, and
   12772             support for the new character types in <string> and <limits>.
   12773           + Existing facilities now exploit initializer lists, defaulted
   12774             and deleted functions, and the newly implemented core C++0x
   12775             features.
   12776           + Some standard containers are more efficient together with
   12777             stateful allocators, i.e., no allocator is constructed on the
   12778             fly at element construction time.
   12779      * Experimental support for non-standard pointer types in containers.
   12780      * The long standing libstdc++/30928 has been fixed for targets
   12781        running glibc 2.10 or later.
   12782      * As usual, many small and larger bug fixes, in particular quite a
   12783        few corner cases in <locale>.
   12784 
   12785   Fortran
   12786 
   12787      * GNU Fortran now employs libcpp directly instead of using cc1 as an
   12788        external preprocessor. The [7]-cpp option was added to allow manual
   12789        invocation of the preprocessor without relying on filename
   12790        extensions.
   12791      * The [8]-Warray-temporaries option warns about array temporaries
   12792        generated by the compiler, as an aid to optimization.
   12793      * The [9]-fcheck-array-temporaries option has been added, printing a
   12794        notification at run time, when an array temporary had to be created
   12795        for an function argument. Contrary to -Warray-temporaries the
   12796        warning is only printed if the array is noncontiguous.
   12797      * Improved generation of DWARF debugging symbols
   12798      * If using an intrinsic not part of the selected standard (via -std=
   12799        and -fall-intrinsics) gfortran will now treat it as if this
   12800        procedure were declared EXTERNAL and try to link to a user-supplied
   12801        procedure. -Wintrinsics-std will warn whenever this happens. The
   12802        now-useless option -Wnonstd-intrinsic was removed.
   12803      * The flag -falign-commons has been added to control the alignment of
   12804        variables in COMMON blocks, which is enabled by default in line
   12805        with previous GCC version. Using -fno-align-commons one can force
   12806        commons to be contiguous in memory as required by the Fortran
   12807        standard, however, this slows down the memory access. The option
   12808        -Walign-commons, which is enabled by default, warns when padding
   12809        bytes were added for alignment. The proper solution is to sort the
   12810        common objects by decreasing storage size, which avoids the
   12811        alignment problems.
   12812      * Fortran 2003 support has been extended:
   12813           + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
   12814             now supported (except internal reads from/writes to wide
   12815             strings). [10]-fbackslash now supports also \unnnn and
   12816             \Unnnnnnnn to enter Unicode characters.
   12817           + Asynchronous I/O (implemented as synchronous I/O) and the
   12818             decimal=, size=, sign=, pad=, blank=, and delim= specifiers
   12819             are now supported in I/O statements.
   12820           + Support for Fortran 2003 structure constructors and for array
   12821             constructor with typespec has been added.
   12822           + Procedure Pointers (but not yet as component in derived types
   12823             and as function results) are now supported.
   12824           + Abstract types, type extension, and type-bound procedures
   12825             (both PROCEDURE and GENERIC but not as operators). Note: As
   12826             CLASS/polymorphyic types are not implemented, type-bound
   12827             procedures with PASS accept as non-standard extension TYPE
   12828             arguments.
   12829      * Fortran 2008 support has been added:
   12830           + The -std=f2008 option and support for the file extensions
   12831             .f2008 and .F2008 has been added.
   12832           + The g0 format descriptor is now supported.
   12833           + The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH,
   12834             ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED
   12835             are now available (some of them existed as GNU extension
   12836             before). Note: The hyperbolic functions are not yet supporting
   12837             complex arguments and the three- argument version of BESSEL_*N
   12838             is not available.
   12839           + The bit intrinsics LEADZ and TRAILZ have been added.
   12840 
   12841   Java (GCJ)
   12842 
   12843   Ada
   12844 
   12845      * The Ada runtime now supports multilibs on many platforms including
   12846        x86_64, SPARC and PowerPC. Their build is enabled by default.
   12847 
   12848 New Targets and Target Specific Improvements
   12849 
   12850   ARM
   12851 
   12852      * GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
   12853        Cortex-R4F processors and has many other improvements to
   12854        optimization for ARM processors.
   12855      * GCC now supports the VFPv3 variant with 16 double-precision
   12856        registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been
   12857        renamed to -mfpu=vfpv3.
   12858      * GCC now supports the -mfix-cortex-m3-ldrd option to work around an
   12859        erratum on Cortex-M3 processors.
   12860      * GCC now supports the __sync_* atomic operations for ARM EABI
   12861        GNU/Linux.
   12862      * The section anchors optimization is now enabled by default when
   12863        optimizing for ARM.
   12864      * GCC now uses a new EABI-compatible profiling interface for EABI
   12865        targets. This requires a function __gnu_mcount_nc, which is
   12866        provided by GNU libc versions 2.8 and later.
   12867 
   12868   AVR
   12869 
   12870      * The -mno-tablejump option has been deprecated because it has the
   12871        same effect as the -fno-jump-tables option.
   12872      * Added support for these new AVR devices:
   12873           + ATA6289
   12874           + ATtiny13A
   12875           + ATtiny87
   12876           + ATtiny167
   12877           + ATtiny327
   12878           + ATmega8C1
   12879           + ATmega16C1
   12880           + ATmega32C1
   12881           + ATmega8M1
   12882           + ATmega16M1
   12883           + ATmega32M1
   12884           + ATmega32U4
   12885           + ATmega16HVB
   12886           + ATmega4HVD
   12887           + ATmega8HVD
   12888           + ATmega64C1
   12889           + ATmega64M1
   12890           + ATmega16U4
   12891           + ATmega32U6
   12892           + ATmega128RFA1
   12893           + AT90PWM81
   12894           + AT90SCR100
   12895           + M3000F
   12896           + M3000S
   12897           + M3001B
   12898 
   12899   IA-32/x86-64
   12900 
   12901      * Support for Intel AES built-in functions and code generation is
   12902        available via -maes.
   12903      * Support for Intel PCLMUL built-in function and code generation is
   12904        available via -mpclmul.
   12905      * Support for Intel AVX built-in functions and code generation is
   12906        available via -mavx.
   12907      * Automatically align the stack for local variables with alignment
   12908        requirement.
   12909      * GCC can now utilize the SVML library for vectorizing calls to a set
   12910        of C99 functions if -mveclibabi=svml is specified and you link to
   12911        an SVML ABI compatible library.
   12912      * On x86-64, the ABI has been changed in the following cases to
   12913        conform to the x86-64 ABI:
   12914           + Passing/returning structures with flexible array member:
   12915   struct foo
   12916     {
   12917       int i;
   12918       int flex[];
   12919     };
   12920           + Passing/returning structures with complex float member:
   12921   struct foo
   12922     {
   12923       int i;
   12924       __complex__ float f;
   12925     };
   12926           + Passing/returning unions with long double member:
   12927   union foo
   12928     {
   12929       int x;
   12930       long double ld;
   12931     };
   12932        Code built with previous versions of GCC that uses any of these is
   12933        not compatible with code built with GCC 4.4.0 or later.
   12934      * A new target attribute was added to allow programmers to change the
   12935        target options like -msse2 or -march=k8 for an individual function.
   12936        You can also change the target options via the GCC target pragma
   12937        for functions defined after the pragma.
   12938      * GCC can now be configured with options --with-arch-32,
   12939        --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
   12940        --with-tune-64 to control the default optimization separately for
   12941        32-bit and 64-bit modes.
   12942 
   12943   IA-32/IA64
   12944 
   12945      * Support for __float128 (TFmode) IEEE quad type and corresponding
   12946        TCmode IEEE complex quad type is available via the soft-fp library
   12947        on IA-32/IA64 targets. This includes basic arithmetic operations
   12948        (addition, subtraction, negation, multiplication and division) on
   12949        __float128 real and TCmode complex values, the full set of IEEE
   12950        comparisons between __float128 values, conversions to and from
   12951        float, double and long double floating point types, as well as
   12952        conversions to and from signed or unsigned integer, signed or
   12953        unsigned long integer and signed or unsigned quad (TImode, IA64
   12954        only) integer types. Additionally, all operations generate the full
   12955        set of IEEE exceptions and support the full set of IEEE rounding
   12956        modes.
   12957 
   12958   M68K/ColdFire
   12959 
   12960      * GCC now supports instruction scheduling for ColdFire V1, V3 and V4
   12961        processors. (Scheduling support for ColdFire V2 processors was
   12962        added in GCC 4.3.)
   12963      * GCC now supports the -mxgot option to support programs requiring
   12964        many GOT entries on ColdFire.
   12965      * The m68k-*-linux-gnu target now builds multilibs by default.
   12966 
   12967   MIPS
   12968 
   12969      * MIPS Technologies have extended the original MIPS SVR4 ABI to
   12970        include support for procedure linkage tables (PLTs) and copy
   12971        relocations. These extensions allow GNU/Linux executables to use a
   12972        significantly more efficient code model than the one defined by the
   12973        original ABI.
   12974        GCC support for this code model is available via a new command-line
   12975        option, -mplt. There is also a new configure-time option,
   12976        --with-mips-plt, to make -mplt the default.
   12977        The new code model requires support from the assembler, the linker,
   12978        and the runtime C library. This support is available in binutils
   12979        2.19 and GLIBC 2.9.
   12980      * GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
   12981        and 32-bit GNU/Linux shared libraries. This feature requires GNU
   12982        binutils 2.19 or above.
   12983      * Support for RMI's XLR processor is now available through the
   12984        -march=xlr and -mtune=xlr options.
   12985      * 64-bit targets can now perform 128-bit multiplications inline,
   12986        instead of relying on a libgcc function.
   12987      * Native GNU/Linux toolchains now support -march=native and
   12988        -mtune=native, which select the host processor.
   12989      * GCC now supports the R10K, R12K, R14K and R16K processors. The
   12990        canonical -march= and -mtune= names for these processors are
   12991        r10000, r12000, r14000 and r16000 respectively.
   12992      * GCC can now work around the side effects of speculative execution
   12993        on R10K processors. Please see the documentation of the
   12994        -mr10k-cache-barrier option for details.
   12995      * Support for the MIPS64 Release 2 instruction set has been added.
   12996        The option -march=mips64r2 enables generation of these
   12997        instructions.
   12998      * GCC now supports Cavium Networks' Octeon processor. This support is
   12999        available through the -march=octeon and -mtune=octeon options.
   13000      * GCC now supports STMicroelectronics' Loongson 2E/2F processors. The
   13001        canonical -march= and -mtune= names for these processors are
   13002        loongson2e and loongson2f.
   13003 
   13004   picochip
   13005 
   13006    Picochip is a 16-bit processor. A typical picoChip contains over 250
   13007    small cores, each with small amounts of memory. There are three
   13008    processor variants (STAN, MEM and CTRL) with different instruction sets
   13009    and memory configurations and they can be chosen using the -mae option.
   13010 
   13011    This port is intended to be a "C" only port.
   13012 
   13013   Power Architecture and PowerPC
   13014 
   13015      * GCC now supports the e300c2, e300c3 and e500mc processors.
   13016      * GCC now supports Xilinx processors with a single-precision FPU.
   13017      * Decimal floating point is now supported for e500 processors.
   13018 
   13019   S/390, zSeries and System z9/z10
   13020 
   13021      * Support for the IBM System z10 EC/BC processor has been added. When
   13022        using the -march=z10 option, the compiler will generate code making
   13023        use of instructions provided by the General-Instruction-Extension
   13024        Facility and the Execute-Extension Facility.
   13025 
   13026   VxWorks
   13027 
   13028      * GCC now supports the thread-local storage mechanism used on
   13029        VxWorks.
   13030 
   13031   Xtensa
   13032 
   13033      * GCC now supports thread-local storage (TLS) for Xtensa processor
   13034        configurations that include the Thread Pointer option. TLS also
   13035        requires support from the assembler and linker; this support is
   13036        provided in the GNU binutils beginning with version 2.19.
   13037 
   13038 Documentation improvements
   13039 
   13040 Other significant improvements
   13041 
   13042 GCC 4.4.1
   13043 
   13044    This is the [11]list of problem reports (PRs) from GCC's bug tracking
   13045    system that are known to be fixed in the 4.4.1 release. This list might
   13046    not be complete (that is, it is possible that some PRs that have been
   13047    fixed are not listed here).
   13048 
   13049 GCC 4.4.2
   13050 
   13051    This is the [12]list of problem reports (PRs) from GCC's bug tracking
   13052    system that are known to be fixed in the 4.4.2 release. This list might
   13053    not be complete (that is, it is possible that some PRs that have been
   13054    fixed are not listed here).
   13055 
   13056 GCC 4.4.3
   13057 
   13058    This is the [13]list of problem reports (PRs) from GCC's bug tracking
   13059    system that are known to be fixed in the 4.4.3 release. This list might
   13060    not be complete (that is, it is possible that some PRs that have been
   13061    fixed are not listed here).
   13062 
   13063 GCC 4.4.4
   13064 
   13065    This is the [14]list of problem reports (PRs) from GCC's bug tracking
   13066    system that are known to be fixed in the 4.4.4 release. This list might
   13067    not be complete (that is, it is possible that some PRs that have been
   13068    fixed are not listed here).
   13069 
   13070 GCC 4.4.5
   13071 
   13072    This is the [15]list of problem reports (PRs) from GCC's bug tracking
   13073    system that are known to be fixed in the 4.4.5 release. This list might
   13074    not be complete (that is, it is possible that some PRs that have been
   13075    fixed are not listed here).
   13076 
   13077 GCC 4.4.6
   13078 
   13079    This is the [16]list of problem reports (PRs) from GCC's bug tracking
   13080    system that are known to be fixed in the 4.4.6 release. This list might
   13081    not be complete (that is, it is possible that some PRs that have been
   13082    fixed are not listed here).
   13083 
   13084 GCC 4.4.7
   13085 
   13086    This is the [17]list of problem reports (PRs) from GCC's bug tracking
   13087    system that are known to be fixed in the 4.4.7 release. This list might
   13088    not be complete (that is, it is possible that some PRs that have been
   13089    fixed are not listed here).
   13090 
   13091 
   13092     For questions related to the use of GCC, please consult these web
   13093     pages and the [18]GCC manuals. If that fails, the
   13094     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13095     web pages and the development of GCC are welcome on our developer
   13096     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   13097     archives.
   13098 
   13099    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   13100    distribution of this entire article is permitted in any medium,
   13101    provided this notice is preserved.
   13102 
   13103    These pages are [23]maintained by the GCC team. Last modified
   13104    2022-11-01.
   13105 
   13106 References
   13107 
   13108    1. https://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
   13109    2. https://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
   13110    3. https://gcc.gnu.org/gcc-4.4/porting_to.html
   13111    4. https://gcc.gnu.org/wiki/Graphite
   13112    5. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
   13113    6. https://gcc.gnu.org/gcc-4.4/cxx0x_status.html
   13114    7. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
   13115    8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
   13116    9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
   13117   10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
   13118   11. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
   13119   12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
   13120   13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
   13121   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
   13122   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
   13123   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
   13124   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
   13125   18. https://gcc.gnu.org/onlinedocs/
   13126   19. mailto:gcc-help (a] gcc.gnu.org
   13127   20. mailto:gcc (a] gcc.gnu.org
   13128   21. https://gcc.gnu.org/lists.html
   13129   22. https://www.fsf.org/
   13130   23. https://gcc.gnu.org/about.html
   13131 ======================================================================
   13132 http://gcc.gnu.org/gcc-4.3/index.html
   13133                              GCC 4.3 Release Series
   13134 
   13135    (This release series is no longer supported.)
   13136 
   13137    Jun 27, 2011
   13138 
   13139    The [1]GNU project and the GCC developers are pleased to announce the
   13140    release of GCC 4.3.6.
   13141 
   13142    This release is a bug-fix release, containing fixes for regressions in
   13143    GCC 4.3.5 relative to previous releases of GCC.
   13144 
   13145 Release History
   13146 
   13147    GCC 4.3.6
   13148           Jun 27, 2011 ([2]changes)
   13149 
   13150    GCC 4.3.5
   13151           May 22, 2010 ([3]changes)
   13152 
   13153    GCC 4.3.4
   13154           August 4, 2009 ([4]changes)
   13155 
   13156    GCC 4.3.3
   13157           January 24, 2009 ([5]changes)
   13158 
   13159    GCC 4.3.2
   13160           August 27, 2008 ([6]changes)
   13161 
   13162    GCC 4.3.1
   13163           June 6, 2008 ([7]changes)
   13164 
   13165    GCC 4.3.0
   13166           March 5, 2008 ([8]changes)
   13167 
   13168 References and Acknowledgements
   13169 
   13170    GCC used to stand for the GNU C Compiler, but since the compiler
   13171    supports several other languages aside from C, it now stands for the
   13172    GNU Compiler Collection.
   13173 
   13174    A list of [9]successful builds is updated as new information becomes
   13175    available.
   13176 
   13177    The GCC developers would like to thank the numerous people that have
   13178    contributed new features, improvements, bug fixes, and other changes as
   13179    well as test results to GCC. This [10]amazing group of volunteers is
   13180    what makes GCC successful.
   13181 
   13182    For additional information about GCC please refer to the [11]GCC
   13183    project web site or contact the [12]GCC development mailing list.
   13184 
   13185    To obtain GCC please use [13]our mirror sites or [14]our version
   13186    control system.
   13187 
   13188 
   13189     For questions related to the use of GCC, please consult these web
   13190     pages and the [15]GCC manuals. If that fails, the
   13191     [16]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13192     web pages and the development of GCC are welcome on our developer
   13193     list at [17]gcc (a] gcc.gnu.org. All of [18]our lists have public
   13194     archives.
   13195 
   13196    Copyright (C) [19]Free Software Foundation, Inc. Verbatim copying and
   13197    distribution of this entire article is permitted in any medium,
   13198    provided this notice is preserved.
   13199 
   13200    These pages are [20]maintained by the GCC team. Last modified
   13201    2022-10-26.
   13202 
   13203 References
   13204 
   13205    1. http://www.gnu.org/
   13206    2. https://gcc.gnu.org/gcc-4.3/changes.html
   13207    3. https://gcc.gnu.org/gcc-4.3/changes.html
   13208    4. https://gcc.gnu.org/gcc-4.3/changes.html
   13209    5. https://gcc.gnu.org/gcc-4.3/changes.html
   13210    6. https://gcc.gnu.org/gcc-4.3/changes.html
   13211    7. https://gcc.gnu.org/gcc-4.3/changes.html
   13212    8. https://gcc.gnu.org/gcc-4.3/changes.html
   13213    9. https://gcc.gnu.org/gcc-4.3/buildstat.html
   13214   10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13215   11. https://gcc.gnu.org/index.html
   13216   12. mailto:gcc (a] gcc.gnu.org
   13217   13. https://gcc.gnu.org/mirrors.html
   13218   14. https://gcc.gnu.org/git.html
   13219   15. https://gcc.gnu.org/onlinedocs/
   13220   16. mailto:gcc-help (a] gcc.gnu.org
   13221   17. mailto:gcc (a] gcc.gnu.org
   13222   18. https://gcc.gnu.org/lists.html
   13223   19. https://www.fsf.org/
   13224   20. https://gcc.gnu.org/about.html
   13225 ======================================================================
   13226 http://gcc.gnu.org/gcc-4.3/changes.html
   13227                              GCC 4.3 Release Series
   13228                         Changes, New Features, and Fixes
   13229 
   13230    The latest release in the 4.3 release series is [1]GCC 4.3.5.
   13231 
   13232 Caveats
   13233 
   13234      * GCC requires the [2]GMP and [3]MPFR libraries for building all the
   13235        various front-end languages it supports. See the [4]prerequisites
   13236        page for version requirements.
   13237      * ColdFire targets now treat long double as having the same format as
   13238        double. In earlier versions of GCC, they used the 68881 long double
   13239        format instead.
   13240      * The m68k-uclinux target now uses the same calling conventions as
   13241        m68k-linux-gnu. You can select the original calling conventions by
   13242        configuring for m68k-uclinuxoldabi instead. Note that
   13243        m68k-uclinuxoldabi also retains the original 80-bit long double on
   13244        ColdFire targets.
   13245      * The -fforce-mem option has been removed because it has had no
   13246        effect in the last few GCC releases.
   13247      * The i386 -msvr3-shlib option has been removed since it is no longer
   13248        used.
   13249      * Fastcall for i386 has been changed not to pass aggregate arguments
   13250        in registers, following Microsoft compilers.
   13251      * Support for the AOF assembler has been removed from the ARM back
   13252        end; this affects only the targets arm-semi-aof and armel-semi-aof,
   13253        which are no longer recognized. We removed these targets without a
   13254        deprecation period because we discovered that they have been
   13255        unusable since GCC 4.0.0.
   13256      * Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*)
   13257        has been removed. This support had been deprecated since GCC 4.0.0.
   13258      * Support for a number of older systems and recently unmaintained or
   13259        untested target ports of GCC has been declared obsolete in GCC 4.3.
   13260        Unless there is activity to revive them, the next release of GCC
   13261        will have their sources permanently removed.
   13262        All GCC ports for the following processor architectures have been
   13263        declared obsolete:
   13264           + Morpho MT (mt-*)
   13265        The following aliases for processor architectures have been
   13266        declared obsolete. Users should use the indicated generic target
   13267        names instead, with compile-time options such as -mcpu or
   13268        configure-time options such as --with-cpu to control the
   13269        configuration more precisely.
   13270           + strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-*
   13271             instead).
   13272           + parisc*-*-* (use hppa*-*-* instead).
   13273           + m680[012]0-*-* (use m68k-*-* instead).
   13274        All GCC ports for the following operating systems have been
   13275        declared obsolete:
   13276           + BeOS (*-*-beos*)
   13277           + kaOS (*-*-kaos*)
   13278           + GNU/Linux using the a.out object format (*-*-linux*aout*)
   13279           + GNU/Linux using version 1 of the GNU C Library
   13280             (*-*-linux*libc1*)
   13281           + Solaris versions before Solaris 7 (*-*-solaris2.[0-6],
   13282             *-*-solaris2.[0-6].*)
   13283           + Miscellaneous System V (*-*-sysv*)
   13284           + WindISS (*-*-windiss*)
   13285        Also, those for some individual systems on particular architectures
   13286        have been obsoleted:
   13287           + UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*)
   13288           + CRIS with a.out object format (cris-*-aout)
   13289           + BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
   13290           + OSF/1 on PA-RISC (hppa1.1-*-osf*)
   13291           + PRO on PA-RISC (hppa1.1-*-pro*)
   13292           + Sequent PTX on IA32 (i[34567]86-sequent-ptx4*,
   13293             i[34567]86-sequent-sysv4*)
   13294           + SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*)
   13295           + UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host
   13296             was previously [5]removed in 2001, leaving only the support
   13297             for UWIN as a target now being deprecated)
   13298           + ChorusOS on PowerPC (powerpc-*-chorusos*)
   13299           + All VAX configurations apart from NetBSD and OpenBSD
   13300             (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*)
   13301      * The [6]-Wconversion option has been modified. Its purpose now is to
   13302        warn for implicit conversions that may alter a value. This new
   13303        behavior is available for both C and C++. Warnings about
   13304        conversions between signed and unsigned integers can be disabled by
   13305        using -Wno-sign-conversion. In C++, they are disabled by default
   13306        unless -Wsign-conversion is explicitly requested. The old behavior
   13307        of -Wconversion, that is, warn for prototypes causing a type
   13308        conversion that is different from what would happen to the same
   13309        argument in the absence of a prototype, has been moved to a new
   13310        option -Wtraditional-conversion, which is only available for C.
   13311      * The -m386, -m486, -mpentium and -mpentiumpro tuning options have
   13312        been removed because they were deprecated for more than 3 GCC major
   13313        releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or
   13314        -mtune=pentiumpro as a replacement.
   13315      * The -funsafe-math-optimizations option now automatically turns on
   13316        -fno-trapping-math in addition to -fno-signed-zeros, as it enables
   13317        reassociation and thus may introduce or remove traps.
   13318      * The -ftree-vectorize option is now on by default under -O3. In
   13319        order to generate code for a SIMD extension, it has to be enabled
   13320        as well: use -maltivec for PowerPC platforms and -msse/-msse2 for
   13321        i?86 and x86_64.
   13322      * More information on porting to GCC 4.3 from previous versions of
   13323        GCC can be found in the [7]porting guide for this release.
   13324 
   13325 General Optimizer Improvements
   13326 
   13327      * The GCC middle-end has been integrated with the MPFR library. This
   13328        allows GCC to evaluate and replace at compile-time calls to
   13329        built-in math functions having constant arguments with their
   13330        mathematically equivalent results. In making use of MPFR, GCC can
   13331        generate correct results regardless of the math library
   13332        implementation or floating point precision of the host platform.
   13333        This also allows GCC to generate identical results regardless of
   13334        whether one compiles in native or cross-compile configurations to a
   13335        particular target. The following built-in functions take advantage
   13336        of this new capability: acos, acosh, asin, asinh, atan2, atan,
   13337        atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1,
   13338        fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10,
   13339        log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh,
   13340        tan, tanh, tgamma, y0, y1 and yn. The float and long double
   13341        variants of these functions (e.g. sinf and sinl) are also handled.
   13342        The sqrt and cabs functions with constant arguments were already
   13343        optimized in prior GCC releases. Now they also use MPFR.
   13344      * A new forward propagation pass on RTL was added. The new pass
   13345        replaces several slower transformations, resulting in compile-time
   13346        improvements as well as better code generation in some cases.
   13347      * A new command-line switch -frecord-gcc-switches has been added to
   13348        GCC, although it is only enabled for some targets. The switch
   13349        causes the command line that was used to invoke the compiler to be
   13350        recorded into the object file that is being created. The exact
   13351        format of this recording is target and binary file format
   13352        dependent, but it usually takes the form of a note section
   13353        containing ASCII text. The switch is related to the -fverbose-asm
   13354        switch, but that one only records the information in the assembler
   13355        output file as comments, so the information never reaches the
   13356        object file.
   13357      * The inliner heuristic is now aware of stack frame consumption. New
   13358        command-line parameters --param large-stack-frame and --param
   13359        large-stack-frame-growth can be used to limit stack frame size
   13360        growth caused by inlining.
   13361      * During feedback directed optimizations, the expected block size the
   13362        memcpy, memset and bzero functions operate on is discovered and for
   13363        cases of commonly used small sizes, specialized inline code is
   13364        generated.
   13365      * __builtin_expect no longer requires its argument to be a compile
   13366        time constant.
   13367      * Interprocedural optimization was reorganized to work on functions
   13368        in SSA form. This enables more precise and cheaper dataflow
   13369        analysis and makes writing interprocedural optimizations easier.
   13370        The following improvements have been implemented on top of this
   13371        framework:
   13372           + Pre-inline optimization: Selected local optimization passes
   13373             are run before the inliner (and other interprocedural passes)
   13374             are executed. This significantly improves the accuracy of code
   13375             growth estimates used by the inliner and reduces the overall
   13376             memory footprint for large compilation units.
   13377           + Early inlining (a simple bottom-up inliner pass inlining only
   13378             functions whose body is smaller than the expected call
   13379             overhead) is now executed with the early optimization passes,
   13380             thus inlining already optimized function bodies into an
   13381             unoptimized function that is subsequently optimized by early
   13382             optimizers. This enables the compiler to quickly eliminate
   13383             abstraction penalty in C++ programs.
   13384           + Interprocedural constant propagation now operate on SSA form
   13385             increasing accuracy of the analysis.
   13386      * A new internal representation for GIMPLE statements has been
   13387        contributed, resulting in compile-time memory savings.
   13388      * The vectorizer was enhanced to support vectorization of outer
   13389        loops, intra-iteration parallelism (loop-aware SLP), vectorization
   13390        of strided accesses and loops with multiple data-types. Run-time
   13391        dependency testing using loop versioning was added. The cost model,
   13392        turned on by -fvect-cost-model, was developed.
   13393 
   13394 New Languages and Language specific improvements
   13395 
   13396      * We have added new command-line options
   13397        -finstrument-functions-exclude-function-list and
   13398        -finstrument-functions-exclude-file-list. They provide more control
   13399        over which functions are annotated by the -finstrument-functions
   13400        option.
   13401 
   13402   C family
   13403 
   13404      * Implicit conversions between generic vector types are now only
   13405        permitted when the two vectors in question have the same number of
   13406        elements and compatible element types. (Note that the restriction
   13407        involves compatible element types, not implicitly-convertible
   13408        element types: thus, a vector type with element type int may not be
   13409        implicitly converted to a vector type with element type unsigned
   13410        int.) This restriction, which is in line with specifications for
   13411        SIMD architectures such as AltiVec, may be relaxed using the flag
   13412        -flax-vector-conversions. This flag is intended only as a
   13413        compatibility measure and should not be used for new code.
   13414      * -Warray-bounds has been added and is now enabled by default for
   13415        -Wall . It produces warnings for array subscripts that can be
   13416        determined at compile time to be always out of bounds.
   13417        -Wno-array-bounds will disable the warning.
   13418      * The constructor and destructor function attributes now accept
   13419        optional priority arguments which control the order in which the
   13420        constructor and destructor functions are run.
   13421      * New [8]command-line options -Wtype-limits, -Wold-style-declaration,
   13422        -Wmissing-parameter-type, -Wempty-body, -Wclobbered and
   13423        -Wignored-qualifiers have been added for finer control of the
   13424        diverse warnings enabled by -Wextra.
   13425      * A new function attribute alloc_size has been added to mark up
   13426        malloc style functions. For constant sized allocations this can be
   13427        used to find out the size of the returned pointer using the
   13428        __builtin_object_size() function for buffer overflow checking and
   13429        similar. This supplements the already built-in malloc and calloc
   13430        constant size handling.
   13431      * Integer constants written in binary are now supported as a GCC
   13432        extension. They consist of a prefix 0b or 0B, followed by a
   13433        sequence of 0 and 1 digits.
   13434      * A new predefined macro __COUNTER__ has been added. It expands to
   13435        sequential integral values starting from 0. In conjunction with the
   13436        ## operator, this provides a convenient means to generate unique
   13437        identifiers.
   13438      * A new command-line option -fdirectives-only has been added. It
   13439        enables a special preprocessing mode which improves the performance
   13440        of applications like distcc and ccache.
   13441      * Fixed-point data types and operators have been added. They are
   13442        based on Chapter 4 of the Embedded-C specification (n1169.pdf).
   13443        Currently, only MIPS targets are supported.
   13444      * Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
   13445        N1241, is now supported as a GCC extension to C for targets
   13446        i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu,
   13447        and x86_64-*-linux-gnu. The feature introduces new data types
   13448        _Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF,
   13449        DD, and DL.
   13450 
   13451   C++
   13452 
   13453      * [9]Experimental support for the upcoming ISO C++ standard, C++0x.
   13454      * -Wc++0x-compat has been added and is now enabled by default for
   13455        -Wall. It produces warnings for constructs whose meaning differs
   13456        between ISO C++ 1998 and C++0x.
   13457      * The -Wparentheses option now works for C++ as it does for C. It
   13458        warns if parentheses are omitted when operators with confusing
   13459        precedence are nested. It also warns about ambiguous else
   13460        statements. Since -Wparentheses is enabled by -Wall, this may cause
   13461        additional warnings with existing C++ code which uses -Wall. These
   13462        new warnings may be disabled by using -Wall -Wno-parentheses.
   13463      * The -Wmissing-declarations now works for C++ as it does for C.
   13464      * The -fvisibility-ms-compat flag was added, to make it easier to
   13465        port larger projects using shared libraries from Microsoft's Visual
   13466        Studio to ELF and Mach-O systems.
   13467      * C++ attribute handling has been overhauled for template arguments
   13468        (ie dependent types). In particular, __attribute__((aligned(T)));
   13469        works for C++ types.
   13470 
   13471     Runtime Library (libstdc++)
   13472 
   13473      * [10]Experimental support for the upcoming ISO C++ standard, C++0x.
   13474      * Support for TR1 mathematical special functions and regular
   13475        expressions.
   13476      * Default what implementations give more elaborate exception strings
   13477        for bad_cast, bad_typeid, bad_exception, and bad_alloc.
   13478      * Header dependencies have been streamlined, reducing unnecessary
   13479        includes and pre-processed bloat.
   13480      * Variadic template implementations of items in <tuple> and
   13481        <functional>.
   13482      * An experimental [11]parallel mode has been added. This is a
   13483        parallel implementation of many C++ Standard library algorithms,
   13484        like std::accumulate, std::for_each, std::transform, or std::sort,
   13485        to give but four examples. These algorithms can be substituted for
   13486        the normal (sequential) libstdc++ algorithms on a piecemeal basis,
   13487        or all existing algorithms can be transformed via the
   13488        -D_GLIBCXX_PARALLEL macro.
   13489      * Debug mode versions of classes in <unordered_set> and
   13490        <unordered_map>.
   13491      * Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are
   13492        now <backward/hash_set> and <backward/hash_map>. This code:
   13493     #include <ext/hash_set>
   13494     __gnu_cxx::hash_set<int> s;
   13495 
   13496        Can be transformed (in order of preference) to:
   13497     #include <tr1/unordered_set>
   13498     std::tr1::unordered_set<int> s;
   13499 
   13500        or
   13501     #include <backward/hash_set>
   13502     __gnu_cxx::hash_set<int> s;
   13503 
   13504        Similar transformations apply to __gnu_cxx::hash_map,
   13505        __gnu_cxx::hash_multimap, __gnu_cxx::hash_set,
   13506        __gnu_cxx::hash_multiset.
   13507 
   13508   Fortran
   13509 
   13510      * Due to the fact that the GMP and MPFR libraries are required for
   13511        all languages, Fortran is no longer special in this regard and is
   13512        available by default.
   13513      * The [12]-fexternal-blas option has been added, which generates
   13514        calls to BLAS routines for intrinsic matrix operations such as
   13515        matmul rather than using the built-in algorithms.
   13516      * Support to give a backtrace (compiler flag -fbacktrace or
   13517        environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems
   13518        only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a
   13519        run-time error occured.
   13520      * GNU Fortran now defines __GFORTRAN__ when it runs the C
   13521        preprocessor (CPP).
   13522      * The [13]-finit-local-zero, -finit-real, -finit-integer,
   13523        -finit-character, and -finit-logical options have been added, which
   13524        can be used to initialize local variables.
   13525      * The intrinsic procedures [14]GAMMA and [15]LGAMMA have been added,
   13526        which calculate the Gamma function and its logarithm. Use EXTERNAL
   13527        gamma if you want to use your own gamma function.
   13528      * GNU Fortran now regards the backslash character as literal (as
   13529        required by the Fortran 2003 standard); using [16]-fbackslash GNU
   13530        Fortran interprets backslashes as C-style escape characters.
   13531      * The [17]interpretation of binary, octal and hexadecimal (BOZ)
   13532        literal constants has been changed. Before they were always
   13533        interpreted as integer; now they are bit-wise transferred as
   13534        argument of INT, REAL, DBLE and CMPLX as required by the Fortran
   13535        2003 standard, and for real and complex variables in DATA
   13536        statements or when directly assigned to real and complex variables.
   13537        Everywhere else and especially in expressions they are still
   13538        regarded as integer constants.
   13539      * Fortran 2003 support has been extended:
   13540           + Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
   13541           + Pointer intent
   13542           + Intrinsic module ISO_ENV_FORTRAN
   13543           + Interoperability with C (ISO C Bindings)
   13544           + ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
   13545             attribute)
   13546           + Fortran 2003 BOZ
   13547 
   13548   Java (GCJ)
   13549 
   13550      * GCJ now uses the Eclipse Java compiler for its Java parsing needs.
   13551        This enables the use of all 1.5 language features, and fixes most
   13552        existing front end bugs.
   13553      * libgcj now supports all 1.5 language features which require runtime
   13554        support: foreach, enum, annotations, generics, and auto-boxing.
   13555      * We've made many changes to the tools shipped with gcj.
   13556           + The old jv-scan tool has been removed. This tool never really
   13557             worked properly. There is no replacement.
   13558           + gcjh has been rewritten. Some of its more obscure options no
   13559             longer work, but are still recognized in an attempt at
   13560             compatibility. gjavah is a new program with similar
   13561             functionality but different command-line options.
   13562           + grmic and grmiregistry have been rewritten. grmid has been
   13563             added.
   13564           + gjar replaces the old fastjar.
   13565           + gjarsigner (used for signing jars), gkeytool (used for key
   13566             management), gorbd (for CORBA), gserialver (computes
   13567             serialization UIDs), and gtnameserv (also for CORBA) are now
   13568             installed.
   13569      * The ability to dump the contents of the java run time heap to a
   13570        file for off-line analysis has been added. The heap dumps may be
   13571        analyzed with the new gc-analyze tool. They may be generated on
   13572        out-of-memory conditions or on demand and are controlled by the new
   13573        run time class gnu.gcj.util.GCInfo.
   13574      * java.util.TimeZone can now read files from /usr/share/zoneinfo to
   13575        provide correct, updated, timezone information. This means that
   13576        packagers no longer have to update libgcj when a time zone change
   13577        is published.
   13578 
   13579 New Targets and Target Specific Improvements
   13580 
   13581   IA-32/x86-64
   13582 
   13583      * Tuning for Intel Core 2 processors is available via -mtune=core2
   13584        and -march=core2.
   13585      * Tuning for AMD Geode processors is available via -mtune=geode and
   13586        -march=geode.
   13587      * Code generation of block move (memcpy) and block set (memset) was
   13588        rewritten. GCC can now pick the best algorithm (loop, unrolled
   13589        loop, instruction with rep prefix or a library call) based on the
   13590        size of the block being copied and the CPU being optimized for. A
   13591        new option -minline-stringops-dynamically has been added. With this
   13592        option string operations of unknown size are expanded such that
   13593        small blocks are copied by in-line code, while for large blocks a
   13594        library call is used. This results in faster code than
   13595        -minline-all-stringops when the library implementation is capable
   13596        of using cache hierarchy hints. The heuristic choosing the
   13597        particular algorithm can be overwritten via -mstringop-strategy.
   13598        Newly also memset of values different from 0 is inlined.
   13599      * GCC no longer places the cld instruction before string operations.
   13600        Both i386 and x86-64 ABI documents mandate the direction flag to be
   13601        clear at the entry of a function. It is now invalid to set the flag
   13602        in asm statement without reseting it afterward.
   13603      * Support for SSSE3 built-in functions and code generation are
   13604        available via -mssse3.
   13605      * Support for SSE4.1 built-in functions and code generation are
   13606        available via -msse4.1.
   13607      * Support for SSE4.2 built-in functions and code generation are
   13608        available via -msse4.2.
   13609      * Both SSE4.1 and SSE4.2 support can be enabled via -msse4.
   13610      * A new set of options -mpc32, -mpc64 and -mpc80 have been added to
   13611        allow explicit control of x87 floating point precision.
   13612      * Support for __float128 (TFmode) IEEE quad type and corresponding
   13613        TCmode IEEE complex quad type is available via the soft-fp library
   13614        on x86_64 targets. This includes basic arithmetic operations
   13615        (addition, subtraction, negation, multiplication and division) on
   13616        __float128 real and TCmode complex values, the full set of IEEE
   13617        comparisons between __float128 values, conversions to and from
   13618        float, double and long double floating point types, as well as
   13619        conversions to and from signed or unsigned integer, signed or
   13620        unsigned long integer and signed or unsigned quad (TImode) integer
   13621        types. Additionally, all operations generate the full set of IEEE
   13622        exceptions and support the full set of IEEE rounding modes.
   13623      * GCC can now utilize the ACML library for vectorizing calls to a set
   13624        of C99 functions on x86_64 if -mveclibabi=acml is specified and you
   13625        link to an ACML ABI compatible library.
   13626 
   13627   ARM
   13628 
   13629      * Compiler and Library support for Thumb-2 and the ARMv7 architecture
   13630        has been added.
   13631 
   13632   CRIS
   13633 
   13634     New features
   13635 
   13636      * Compiler and Library support for the CRIS v32 architecture, as
   13637        found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been
   13638        added.
   13639 
   13640     Configuration changes
   13641 
   13642      * The cris-*-elf target now includes support for CRIS v32, including
   13643        libraries, through the -march=v32 option.
   13644      * A new crisv32-*-elf target defaults to generate code for CRIS v32.
   13645      * A new crisv32-*-linux* target defaults to generate code for CRIS
   13646        v32.
   13647      * The cris-*-aout target has been obsoleted.
   13648 
   13649     Improved support for built-in functions
   13650 
   13651      * GCC can now use the lz and swapwbr instructions to implement the
   13652        __builtin_clz, __builtin_ctz and __builtin_ffs family of functions.
   13653      * __builtin_bswap32 is now implemented using the swapwb instruction,
   13654        when available.
   13655 
   13656   m68k and ColdFire
   13657 
   13658     New features
   13659 
   13660      * Support for several new ColdFire processors has been added. You can
   13661        generate code for them using the new -mcpu option.
   13662      * All targets now support ColdFire processors.
   13663      * m68k-uclinux targets have improved support for C++ constructors and
   13664        destructors, and for shared libraries.
   13665      * It is now possible to set breakpoints on the first or last line of
   13666        a function, even if there are no statements on that line.
   13667 
   13668     Optimizations
   13669 
   13670      * Support for sibling calls has been added.
   13671      * More use is now made of the ColdFire mov3q instruction.
   13672      * __builtin_clz is now implemented using the ff1 ColdFire
   13673        instruction, when available.
   13674      * GCC now honors the -m68010 option. 68010 code now uses clr rather
   13675        than move to zero volatile memory.
   13676      * 68020 targets and above can now use symbol(index.size*scale)
   13677        addresses for indexed array accesses. Earlier compilers would
   13678        always load the symbol into a base register first.
   13679 
   13680     Configuration changes
   13681 
   13682      * All m68k and ColdFire targets now allow the default processor to be
   13683        set at configure time using --with-cpu.
   13684      * A --with-arch configuration option has been added. This option
   13685        allows you to restrict a target to ColdFire or non-ColdFire
   13686        processors.
   13687 
   13688     Preprocessor macros
   13689 
   13690      * An __mcfv*__ macro is now defined for all ColdFire targets.
   13691        (Earlier versions of GCC only defined __mcfv4e__.)
   13692      * __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added.
   13693      * All targets now define __mc68010 and __mc68010__ when generating
   13694        68010 code.
   13695 
   13696     Command-line changes
   13697 
   13698      * New command-line options -march, -mcpu, -mtune and -mhard-float
   13699        have been added. These options apply to both m68k and ColdFire
   13700        targets.
   13701      * -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative
   13702        versions of -mshort, etc.
   13703      * -fforce-addr has been removed. It is now ignored by the compiler.
   13704 
   13705     Other improvements
   13706 
   13707      * ColdFire targets now try to maintain a 4-byte-aligned stack where
   13708        possible.
   13709      * m68k-uclinux targets now try to avoid situations that lead to the
   13710        load-time error: BINFMT_FLAT: reloc outside program.
   13711 
   13712   MIPS
   13713 
   13714     Changes to existing configurations
   13715 
   13716      * libffi and libjava now support all three GNU/Linux ABIs: o32, n32
   13717        and n64. Every GNU/Linux configuration now builds these libraries
   13718        by default.
   13719      * GNU/Linux configurations now generate -mno-shared code unless
   13720        overridden by -fpic, -fPIC, -fpie or -fPIE.
   13721      * mipsisa32*-linux-gnu configurations now generate hard-float code by
   13722        default, just like other mipsisa32* and mips*-linux-gnu
   13723        configurations. You can build a soft-float version of any
   13724        mips*-linux-gnu configuration by passing --with-float=soft to
   13725        configure.
   13726      * mips-wrs-vxworks now supports run-time processes (RTPs).
   13727 
   13728     Changes to existing command-line options
   13729 
   13730      * The -march and -mtune options no longer accept 24k as a processor
   13731        name. Please use 24kc, 24kf2_1 or 24kf1_1 instead.
   13732      * The -march and -mtune options now accept 24kf2_1, 24kef2_1 and
   13733        34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The
   13734        options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for
   13735        24kx, 24kex and 34kx.
   13736 
   13737     New configurations
   13738 
   13739    GCC now supports the following configurations:
   13740      * mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by
   13741        default. Earlier releases also recognized this configuration, but
   13742        they treated it in the same way as mipsisa32*-linux-gnu*. Note that
   13743        you can customize any mips*-linux-gnu* configuration to a
   13744        particular ISA or processor by passing an appropriate --with-arch
   13745        option to configure.
   13746      * mipsisa*-sde-elf*, which provides compatibility with MIPS
   13747        Technologies' SDE toolchains. The configuration uses the SDE
   13748        libraries by default, but you can use it like other newlib-based
   13749        ELF configurations by passing --with-newlib to configure. It is the
   13750        only configuration besides mips64vr*-elf* to build MIPS16 as well
   13751        as non-MIPS16 libraries.
   13752      * mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf*
   13753        configuration, but uses the o32 and o64 ABIs instead of the 32-bit
   13754        and 64-bit forms of the EABI.
   13755 
   13756     New processors and application-specific extensions
   13757 
   13758      * Support for the SmartMIPS ASE is available through the new
   13759        -msmartmips option.
   13760      * Support for revision 2 of the DSP ASE is available through the new
   13761        -mdspr2 option. A new preprocessor macro called __mips_dsp_rev
   13762        indicates the revision of the ASE in use.
   13763      * Support for the 4KS and 74K families of processors is available
   13764        through the -march and -mtune options.
   13765 
   13766     Improved support for built-in functions
   13767 
   13768      * GCC can now use load-linked, store-conditional and sync
   13769        instructions to implement atomic built-in functions such as
   13770        __sync_fetch_and_add. The memory reference must be 4 bytes wide for
   13771        32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
   13772      * GCC can now use the clz and dclz instructions to implement the
   13773        __builtin_ctz and __builtin_ffs families of functions.
   13774      * There is a new __builtin___clear_cache function for flushing the
   13775        instruction cache. GCC expands this function inline on MIPS32
   13776        revision 2 targets, otherwise it calls the function specified by
   13777        -mcache-flush-func.
   13778 
   13779     MIPS16 improvements
   13780 
   13781      * GCC can now compile objects that contain a mixture of MIPS16 and
   13782        non-MIPS16 code. There are two new attributes, mips16 and nomips16,
   13783        for specifying which mode a function should use.
   13784      * A new option called -minterlink-mips16 makes non-MIPS16 code
   13785        link-compatible with MIPS16 code.
   13786      * After many bug fixes, the long-standing MIPS16 -mhard-float support
   13787        should now work fairly reliably.
   13788      * GCC can now use the MIPS16e save and restore instructions.
   13789      * -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled
   13790        with -G0 -fsection-anchors is often smaller than code compiled with
   13791        -G8. However, please note that you must usually compile all objects
   13792        in your application with the same -G option; see the documentation
   13793        of -G for details.
   13794      * A new option called-mcode-readable specifies which instructions are
   13795        allowed to load from the code segment. -mcode-readable=yes is the
   13796        default and says that any instruction may load from the code
   13797        segment. The other alternatives are -mcode-readable=pcrel, which
   13798        says that only PC-relative MIPS16 instructions may load from the
   13799        code segment, and -mcode-readable=no, which says that no
   13800        instruction may do so. Please see the documentation for more
   13801        details, including example uses.
   13802 
   13803     Small-data improvements
   13804 
   13805    There are three new options for controlling small data:
   13806      * -mno-extern-sdata, which disables small-data accesses for
   13807        externally-defined variables. Code compiled with -Gn
   13808        -mno-extern-sdata will be link-compatible with any -G setting
   13809        between -G0 and -Gn inclusive.
   13810      * -mno-local-sdata, which disables the use of small-data sections for
   13811        data that is not externally visible. This option can be a useful
   13812        way of reducing small-data usage in less performance-critical parts
   13813        of an application.
   13814      * -mno-gpopt, which disables the use of the $gp register while still
   13815        honoring the -G limit when placing externally-visible data. This
   13816        option implies -mno-extern-sdata and -mno-local-sdata and it can be
   13817        useful in situations where $gp does not necessarily hold the
   13818        expected value.
   13819 
   13820     Miscellaneous improvements
   13821 
   13822      * There is a new option called -mbranch-cost for tweaking the
   13823        perceived cost of branches.
   13824      * If GCC is configured to use a version of GAS that supports the
   13825        .gnu_attribute directive, it will use that directive to record
   13826        certain properties of the output code. .gnu_attribute is new to GAS
   13827        2.18.
   13828      * There are two new function attributes, near and far, for overriding
   13829        the command-line setting of -mlong-calls on a function-by-function
   13830        basis.
   13831      * -mfp64, which previously required a 64-bit target, now works with
   13832        MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and
   13833        mipsisa*-sde-elf* configurations provide suitable library support.
   13834      * GCC now recognizes the -mdmx and -mmt options and passes them down
   13835        to the assembler. It does nothing else with the options at present.
   13836 
   13837   SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture
   13838   (BEA)
   13839 
   13840      * Support has been added for this new architecture.
   13841 
   13842   RS6000 (POWER/PowerPC)
   13843 
   13844      * Support for the PowerPC 750CL paired-single instructions has been
   13845        added with a new powerpc-*-linux*paired* target configuration. It
   13846        is enabled by an associated -mpaired option and can be accessed
   13847        using new built-in functions.
   13848      * Support for auto-detecting architecture and system configuration to
   13849        auto-select processor optimization tuning.
   13850      * Support for VMX on AIX 5.3 has been added.
   13851      * Support for AIX Version 6.1 has been added.
   13852 
   13853   S/390, zSeries and System z9
   13854 
   13855      * Support for the IBM System z9 EC/BC processor (z9 GA3) has been
   13856        added. When using the -march=z9-ec option, the compiler will
   13857        generate code making use of instructions provided by the decimal
   13858        floating point facility and the floating point conversion facility
   13859        (pfpo). Besides the instructions used to implement decimal floating
   13860        point operations these facilities also contain instructions to move
   13861        between general purpose and floating point registers and to modify
   13862        and copy the sign-bit of floating point values.
   13863      * When the -march=z9-ec option is used the new
   13864        -mhard-dfp/-mno-hard-dfp options can be used to specify whether the
   13865        decimal floating point hardware instructions will be used or not.
   13866        If none of them is given the hardware support is enabled by
   13867        default.
   13868      * The -mstack-guard option can now be omitted when using stack
   13869        checking via -mstack-size in order to let GCC choose a sensible
   13870        stack guard value according to the frame size of each function.
   13871      * Various changes to improve performance of generated code have been
   13872        implemented, including:
   13873           + The condition code set by an add logical with carry
   13874             instruction is now available for overflow checks like: a + b +
   13875             carry < b.
   13876           + The test data class instruction is now used to implement
   13877             sign-bit and infinity checks of binary and decimal floating
   13878             point numbers.
   13879 
   13880   SPARC
   13881 
   13882      * Support for the Sun UltraSPARC T2 (Niagara 2) processor has been
   13883        added.
   13884 
   13885   Xtensa
   13886 
   13887      * Stack unwinding for exception handling now uses by default a
   13888        specialized version of DWARF unwinding. This is not
   13889        binary-compatible with the setjmp/longjmp (sjlj) unwinding used for
   13890        Xtensa with previous versions of GCC.
   13891      * For Xtensa processors that include the Conditional Store option,
   13892        the built-in functions for atomic memory access are now implemented
   13893        using S32C1I instructions.
   13894      * If the Xtensa NSA option is available, GCC will use it to implement
   13895        the __builtin_ctz and __builtin_clz functions.
   13896 
   13897 Documentation improvements
   13898 
   13899      * Existing libstdc++ documentation has been edited and restructured
   13900        into a single DocBook XML manual. The results can be viewed online
   13901        [18]here.
   13902 
   13903 Other significant improvements
   13904 
   13905      * The compiler's --help command-line option has been extended so that
   13906        it now takes an optional set of arguments. These arguments restrict
   13907        the information displayed to specific classes of command-line
   13908        options, and possibly only a subset of those options. It is also
   13909        now possible to replace the descriptive text associated with each
   13910        displayed option with an indication of its current value, or for
   13911        binary options, whether it has been enabled or disabled.
   13912        Here are some examples. The following will display all the options
   13913        controlling warning messages:
   13914       --help=warnings
   13915 
   13916        Whereas this will display all the undocumented, target specific
   13917        options:
   13918       --help=target,undocumented
   13919 
   13920        This sequence of commands will display the binary optimizations
   13921        that are enabled by -O3:
   13922       gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   13923       gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   13924       diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   13925 
   13926      * The configure options --with-pkgversion and --with-bugurl have been
   13927        added. These allow distributors of GCC to include a
   13928        distributor-specific string in manuals and --version output and to
   13929        specify the URL for reporting bugs in their versions of GCC.
   13930 
   13931 GCC 4.3.1
   13932 
   13933    This is the [19]list of problem reports (PRs) from GCC's bug tracking
   13934    system that are known to be fixed in the 4.3.1 release. This list might
   13935    not be complete (that is, it is possible that some PRs that have been
   13936    fixed are not listed here).
   13937 
   13938 Target Specific Changes
   13939 
   13940   IA-32/x86-64
   13941 
   13942     ABI changes
   13943 
   13944      * Starting with GCC 4.3.1, decimal floating point variables are
   13945        aligned to their natural boundaries when they are passed on the
   13946        stack for i386.
   13947 
   13948     Command-line changes
   13949 
   13950      * Starting with GCC 4.3.1, the -mcld option has been added to
   13951        automatically generate a cld instruction in the prologue of
   13952        functions that use string instructions. This option is used for
   13953        backward compatibility on some operating systems and can be enabled
   13954        by default for 32-bit x86 targets by configuring GCC with the
   13955        --enable-cld configure option.
   13956 
   13957 GCC 4.3.2
   13958 
   13959    This is the [20]list of problem reports (PRs) from GCC's bug tracking
   13960    system that are known to be fixed in the 4.3.2 release. This list might
   13961    not be complete (that is, it is possible that some PRs that have been
   13962    fixed are not listed here).
   13963 
   13964 GCC 4.3.3
   13965 
   13966    This is the [21]list of problem reports (PRs) from GCC's bug tracking
   13967    system that are known to be fixed in the 4.3.3 release. This list might
   13968    not be complete (that is, it is possible that some PRs that have been
   13969    fixed are not listed here).
   13970 
   13971 GCC 4.3.4
   13972 
   13973    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   13974    system that are known to be fixed in the 4.3.4 release. This list might
   13975    not be complete (that is, it is possible that some PRs that have been
   13976    fixed are not listed here).
   13977 
   13978 GCC 4.3.5
   13979 
   13980    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   13981    system that are known to be fixed in the 4.3.5 release. This list might
   13982    not be complete (that is, it is possible that some PRs that have been
   13983    fixed are not listed here).
   13984 
   13985 GCC 4.3.6
   13986 
   13987    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   13988    system that are known to be fixed in the 4.3.6 release. This list might
   13989    not be complete (that is, it is possible that some PRs that have been
   13990    fixed are not listed here).
   13991 
   13992 
   13993     For questions related to the use of GCC, please consult these web
   13994     pages and the [25]GCC manuals. If that fails, the
   13995     [26]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13996     web pages and the development of GCC are welcome on our developer
   13997     list at [27]gcc (a] gcc.gnu.org. All of [28]our lists have public
   13998     archives.
   13999 
   14000    Copyright (C) [29]Free Software Foundation, Inc. Verbatim copying and
   14001    distribution of this entire article is permitted in any medium,
   14002    provided this notice is preserved.
   14003 
   14004    These pages are [30]maintained by the GCC team. Last modified
   14005    2022-10-26.
   14006 
   14007 References
   14008 
   14009    1. https://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
   14010    2. https://gmplib.org/
   14011    3. https://www.mpfr.org/
   14012    4. https://gcc.gnu.org/install/prerequisites.html
   14013    5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
   14014    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   14015    7. https://gcc.gnu.org/gcc-4.3/porting_to.html
   14016    8. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   14017    9. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   14018   10. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   14019   11. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
   14020   12. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
   14021   13. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
   14022   14. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
   14023   15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
   14024   16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
   14025   17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
   14026   18. https://gcc.gnu.org/onlinedocs/libstdc++/
   14027   19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
   14028   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
   14029   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
   14030   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
   14031   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
   14032   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
   14033   25. https://gcc.gnu.org/onlinedocs/
   14034   26. mailto:gcc-help (a] gcc.gnu.org
   14035   27. mailto:gcc (a] gcc.gnu.org
   14036   28. https://gcc.gnu.org/lists.html
   14037   29. https://www.fsf.org/
   14038   30. https://gcc.gnu.org/about.html
   14039 ======================================================================
   14040 http://gcc.gnu.org/gcc-4.2/index.html
   14041                              GCC 4.2 Release Series
   14042 
   14043    (This release series is no longer supported.)
   14044 
   14045    May 19, 2008
   14046 
   14047    The [1]GNU project and the GCC developers are pleased to announce the
   14048    release of GCC 4.2.4.
   14049 
   14050    This release is a bug-fix release, containing fixes for regressions in
   14051    GCC 4.2.3 relative to previous releases of GCC.
   14052 
   14053 Release History
   14054 
   14055    GCC 4.2.4
   14056           May 19, 2008 ([2]changes)
   14057 
   14058    GCC 4.2.3
   14059           February 1, 2008 ([3]changes)
   14060 
   14061    GCC 4.2.2
   14062           October 7, 2007 ([4]changes)
   14063 
   14064    GCC 4.2.1
   14065           July 18, 2007 ([5]changes)
   14066 
   14067    GCC 4.2.0
   14068           May 13, 2007 ([6]changes)
   14069 
   14070 References and Acknowledgements
   14071 
   14072    GCC used to stand for the GNU C Compiler, but since the compiler
   14073    supports several other languages aside from C, it now stands for the
   14074    GNU Compiler Collection.
   14075 
   14076    A list of [7]successful builds is updated as new information becomes
   14077    available.
   14078 
   14079    The GCC developers would like to thank the numerous people that have
   14080    contributed new features, improvements, bug fixes, and other changes as
   14081    well as test results to GCC. This [8]amazing group of volunteers is
   14082    what makes GCC successful.
   14083 
   14084    For additional information about GCC please refer to the [9]GCC project
   14085    web site or contact the [10]GCC development mailing list.
   14086 
   14087    To obtain GCC please use [11]our mirror sites or [12]our version
   14088    control system.
   14089 
   14090 
   14091     For questions related to the use of GCC, please consult these web
   14092     pages and the [13]GCC manuals. If that fails, the
   14093     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14094     web pages and the development of GCC are welcome on our developer
   14095     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   14096     archives.
   14097 
   14098    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   14099    distribution of this entire article is permitted in any medium,
   14100    provided this notice is preserved.
   14101 
   14102    These pages are [18]maintained by the GCC team. Last modified
   14103    2022-10-26.
   14104 
   14105 References
   14106 
   14107    1. http://www.gnu.org/
   14108    2. https://gcc.gnu.org/gcc-4.2/changes.html
   14109    3. https://gcc.gnu.org/gcc-4.2/changes.html
   14110    4. https://gcc.gnu.org/gcc-4.2/changes.html
   14111    5. https://gcc.gnu.org/gcc-4.2/changes.html
   14112    6. https://gcc.gnu.org/gcc-4.2/changes.html
   14113    7. https://gcc.gnu.org/gcc-4.2/buildstat.html
   14114    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14115    9. https://gcc.gnu.org/index.html
   14116   10. mailto:gcc (a] gcc.gnu.org
   14117   11. https://gcc.gnu.org/mirrors.html
   14118   12. https://gcc.gnu.org/git.html
   14119   13. https://gcc.gnu.org/onlinedocs/
   14120   14. mailto:gcc-help (a] gcc.gnu.org
   14121   15. mailto:gcc (a] gcc.gnu.org
   14122   16. https://gcc.gnu.org/lists.html
   14123   17. https://www.fsf.org/
   14124   18. https://gcc.gnu.org/about.html
   14125 ======================================================================
   14126 http://gcc.gnu.org/gcc-4.2/changes.html
   14127                              GCC 4.2 Release Series
   14128                         Changes, New Features, and Fixes
   14129 
   14130 Caveats
   14131 
   14132      * GCC no longer accepts the -fshared-data option. This option has had
   14133        no effect in any GCC 4 release; the targets to which the option
   14134        used to apply had been removed before GCC 4.0.
   14135 
   14136 General Optimizer Improvements
   14137 
   14138      * New command-line options specify the possible relationships among
   14139        parameters and between parameters and global data. For example,
   14140        -fargument-noalias-anything specifies that arguments do not alias
   14141        any other storage.
   14142        Each language will automatically use whatever option is required by
   14143        the language standard. You should not need to use these options
   14144        yourself.
   14145 
   14146 New Languages and Language specific improvements
   14147 
   14148      * [1]OpenMP is now supported for the C, C++ and Fortran compilers.
   14149      * New command-line options -fstrict-overflow and -Wstrict-overflow
   14150        have been added. -fstrict-overflow tells the compiler that it may
   14151        assume that the program follows the strict signed overflow
   14152        semantics permitted for the language: for C and C++ this means that
   14153        the compiler may assume that signed overflow does not occur. For
   14154        example, a loop like
   14155       for (i = 1; i > 0; i *= 2)
   14156 
   14157        is presumably intended to continue looping until i overflows. With
   14158        -fstrict-overflow, the compiler may assume that signed overflow
   14159        will not occur, and transform this into an infinite loop.
   14160        -fstrict-overflow is turned on by default at -O2, and may be
   14161        disabled via -fno-strict-overflow. The -Wstrict-overflow option may
   14162        be used to warn about cases where the compiler assumes that signed
   14163        overflow will not occur. It takes five different levels:
   14164        -Wstrict-overflow=1 to 5. See the [2]documentation for details.
   14165        -Wstrict-overflow=1 is enabled by -Wall.
   14166      * The new command-line option -fno-toplevel-reorder directs GCC to
   14167        emit top-level functions, variables, and asm statements in the same
   14168        order that they appear in the input file. This is intended to
   14169        support existing code which relies on a particular ordering (for
   14170        example, code which uses top-level asm statements to switch
   14171        sections). For new code, it is generally better to use function and
   14172        variable attributes. The -fno-toplevel-reorder option may be used
   14173        for most cases which currently use -fno-unit-at-a-time. The
   14174        -fno-unit-at-a-time option will be removed in some future version
   14175        of GCC. If you know of a case which requires -fno-unit-at-a-time
   14176        which is not fixed by -fno-toplevel-reorder, please open a bug
   14177        report.
   14178 
   14179   C family
   14180 
   14181      * The pragma redefine_extname will now macro expand its tokens for
   14182        compatibility with SunPRO.
   14183      * In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct
   14184        GCC to handle inline functions as specified in the C99 standard. In
   14185        preparation for this, GCC 4.2 will warn about any use of non-static
   14186        inline functions in gnu99 or c99 mode. This new warning may be
   14187        disabled with the new gnu_inline function attribute or the new
   14188        -fgnu89-inline command-line option. Also, GCC 4.2 and later will
   14189        define one of the preprocessor macros __GNUC_GNU_INLINE__ or
   14190        __GNUC_STDC_INLINE__ to indicate the semantics of inline functions
   14191        in the current compilation.
   14192      * A new command-line option -Waddress has been added to warn about
   14193        suspicious uses of memory addresses as, for example, using the
   14194        address of a function in a conditional expression, and comparisons
   14195        against the memory address of a string literal. This warning is
   14196        enabled by -Wall.
   14197 
   14198   C++
   14199 
   14200      * C++ visibility handling has been overhauled.
   14201        Restricted visiblity is propagated from classes to members, from
   14202        functions to local statics, and from templates and template
   14203        arguments to instantiations, unless the latter has explicitly
   14204        declared visibility.
   14205        The visibility attribute for a class must come between the
   14206        class-key and the name, not after the closing brace.
   14207        Attributes are now allowed for enums and elaborated-type-specifiers
   14208        that only declare a type.
   14209        Members of the anonymous namespace are now local to a particular
   14210        translation unit, along with any other declarations which use them,
   14211        though they are still treated as having external linkage for
   14212        language semantics.
   14213      * The (undocumented) extension which permitted templates with default
   14214        arguments to be bound to template template parameters with fewer
   14215        parameters has been removed. For example:
   14216         template <template <typename> class C>
   14217         void f(C<double>) {}
   14218 
   14219         template <typename T, typename U = int>
   14220         struct S {};
   14221 
   14222         template void f(S<double>);
   14223 
   14224        is no longer accepted by G++. The reason this code is not accepted
   14225        is that S is a template with two parameters; therefore, it cannot
   14226        be bound to C which has only one parameter.
   14227      * The <?, >?, <?=, and >?= operators, deprecated in previous GCC
   14228        releases, have been removed.
   14229      * The command-line option -fconst-strings, deprecated in previous GCC
   14230        releases, has been removed.
   14231      * The configure variable enable-__cxa_atexit is now enabled by
   14232        default for more targets. Enabling this variable is necessary in
   14233        order for static destructors to be executed in the correct order,
   14234        but it depends upon the presence of a non-standard C library in the
   14235        target library in order to work. The variable is now enabled for
   14236        more targets which are known to have suitable C libraries.
   14237      * -Wextra will produce warnings for if statements with a semicolon as
   14238        the only body, to catch code like:
   14239          if (a);
   14240             return 1;
   14241          return 0;
   14242 
   14243        To suppress the warning in valid cases, use { } instead.
   14244      * The C++ front end now also produces strict aliasing warnings when
   14245        -fstrict-aliasing -Wstrict-aliasing is in effect.
   14246 
   14247     Runtime Library (libstdc++)
   14248 
   14249      * Added support for TR1 <random>, <complex>, and C compatibility
   14250        headers. In addition, a lock-free version of shared_ptr was
   14251        contributed as part of Phillip Jordan's Google Summer of Code
   14252        project on lock-free containers.
   14253      * In association with the Summer of Code work on lock-free
   14254        containers, the interface for atomic builtins was adjusted,
   14255        creating simpler alternatives for non-threaded code paths. Also,
   14256        usage was consolidated and all elements were moved from namespace
   14257        std to namespace__gnu_cxx. Affected interfaces are the functions
   14258        __exchange_and_add, __atomic_add, and the objects __mutex,
   14259        __recursive_mutex, and __scoped_lock.
   14260      * Support for versioning weak symbol names via namespace association
   14261        was added. However, as this changes the names of exported symbols,
   14262        this is turned off by default in the current ABI. Intrepid users
   14263        can enable this feature by using
   14264        --enable-symvers=gnu-versioned-namespace during configuration.
   14265      * Revised, simplified, and expanded policy-based associative
   14266        containers, including data types for tree and trie forms
   14267        (basic_tree, tree, trie), lists (list_update), and both
   14268        collision-chaining and probing hash-based containers
   14269        (basic_hash_table, cc_hash_table, gp_hash_table). More details per
   14270        the [3]documentation.
   14271      * The implementation of the debug mode was modified, whereby the
   14272        debug namespaces were nested inside of namespace std and namespace
   14273        __gnu_cxx in order to resolve some long standing corner cases
   14274        involving name lookup. Debug functionality from the policy-based
   14275        data structures was consolidated and enabled with the single macro,
   14276        _GLIBCXX_DEBUG. See PR 26142 for more information.
   14277      * Added extensions for type traits: __conditional_type,
   14278        __numeric_traits, __add_unsigned, __removed_unsigned, __enable_if.
   14279      * Added a typelist implementation for compile-time meta-programming.
   14280        Elements for typelist construction and operation can be found
   14281        within namespace __gnu_cxx::typelist.
   14282      * Added a new allocator, __gnu_cxx::throw_allocator, for testing
   14283        exception-safety.
   14284      * Enabled library-wide visibility control, allowing -fvisibility to
   14285        be used.
   14286      * Consolidated all nested namespaces and the conversion of
   14287        __gnu_internal implementation-private details to anonymous
   14288        namespaces whenever possible.
   14289      * Implemented LWG resolutions DR 431 and DR 538.
   14290 
   14291   Fortran
   14292 
   14293      * Support for allocatable components has been added (TR 15581 and
   14294        Fortran 2003).
   14295      * Support for the Fortran 2003 streaming IO extension has been added.
   14296      * The GNU Fortran compiler now uses 4-byte record markers by default
   14297        for unformatted files to be compatible with g77 and most other
   14298        compilers. The implementation allows for records greater than 2 GB
   14299        and is compatible with several other compilers. Older versions of
   14300        gfortran used 8-byte record markers by default (on most systems).
   14301        In order to change the length of the record markers, e.g. to read
   14302        unformatted files created by older gfortran versions, the
   14303        [4]-frecord-marker=8 option can be used.
   14304 
   14305   Java (GCJ)
   14306 
   14307      * A new command-line option -static-libgcj has been added for targets
   14308        that use a linker compatible with GNU Binutils. As its name
   14309        implies, this causes libgcj to be linked statically. In some cases
   14310        this causes the resulting executable to start faster and use less
   14311        memory than if the shared version of libgcj were used. However
   14312        caution should be used as it can also cause essential parts of the
   14313        library to be omitted. Some of these issues are discussed in:
   14314        [5]https://gcc.gnu.org/wiki/Statically_linking_libgcj
   14315      * fastjar is no longer bundled with GCC. To build libgcj, you will
   14316        need either InfoZIP (both zip and unzip) or an external jar
   14317        program. In the former case, the GCC build will install a jar shell
   14318        script that is based on InfoZIP and provides the same functionality
   14319        as fastjar.
   14320 
   14321 New Targets and Target Specific Improvements
   14322 
   14323   IA-32/x86-64
   14324 
   14325      * -mtune=generic can now be used to generate code running well on
   14326        common x86 chips. This includes AMD Athlon, AMD Opteron, Intel
   14327        Pentium-M, Intel Pentium 4 and Intel Core 2.
   14328      * -mtune=native and -march=native will produce code optimized for the
   14329        host architecture as detected using the cpuid instruction.
   14330      * Added a new command-line option -fstackrealign and and
   14331        __attribute__ ((force_align_arg_pointer)) to realign the stack at
   14332        runtime. This allows functions compiled with a vector-aligned stack
   14333        to be invoked from legacy objects that keep only word-alignment.
   14334 
   14335   SPARC
   14336 
   14337      * The default CPU setting has been changed from V7 to V9 in 32-bit
   14338        mode on Solaris 7 and above. This is already the case in 64-bit
   14339        mode. It can be overridden by specifying --with-cpu at configure
   14340        time.
   14341      * Back-end support of built-in functions for atomic memory access has
   14342        been implemented.
   14343      * Support for the Sun UltraSPARC T1 (Niagara) processor has been
   14344        added.
   14345 
   14346   M32C
   14347 
   14348      * Various bug fixes have made some functions (notably, functions
   14349        returning structures) incompatible with previous releases.
   14350        Recompiling all libraries is recommended. Note that code quality
   14351        has considerably improved since 4.1, making a recompile even more
   14352        beneficial.
   14353 
   14354   MIPS
   14355 
   14356      * Added support for the Broadcom SB-1A core.
   14357 
   14358   IA-64
   14359 
   14360      * Added support for IA-64 data and control speculation. By default
   14361        speculation is enabled only during second scheduler pass. A number
   14362        of machine flags was introduced to control the usage of speculation
   14363        for both scheduler passes.
   14364 
   14365   HPPA
   14366 
   14367      * Added Java language support (libffi and libjava) for 32-bit HP-UX
   14368        11 target.
   14369 
   14370 Obsolete Systems
   14371 
   14372 Documentation improvements
   14373 
   14374   PDF Documentation
   14375 
   14376      * A make pdf target has been added to the top-level makefile,
   14377        enabling automated production of PDF documentation files.
   14378        (Front-ends external to GCC should modify their Make-lang.in file
   14379        to add a lang.pdf: target.)
   14380 
   14381 Other significant improvements
   14382 
   14383   Build system improvements
   14384 
   14385      * All the components of the compiler are now bootstrapped by default.
   14386        This improves the resilience to bugs in the system compiler or
   14387        binary compatibility problems, as well as providing better testing
   14388        of GCC 4.2 itself. In addition, if you build the compiler from a
   14389        combined tree, the assembler, linker, etc. will also be
   14390        bootstrapped (i.e. built with themselves).
   14391        You can disable this behavior, and go back to the pre-GCC 4.2 set
   14392        up, by configuring GCC with --disable-bootstrap.
   14393      * The rules that configure follows to find target tools resemble more
   14394        closely the locations that the built compiler will search. In
   14395        addition, you can use the new configure option --with-target-tools
   14396        to specify where to find the target tools used during the build,
   14397        without affecting what the built compiler will use.
   14398        This can be especially useful when building packages of GCC. For
   14399        example, you may want to build GCC with GNU as or ld, even if the
   14400        resulting compiler to work with the native assembler and linker. To
   14401        do so, you can use --with-target-tools to point to the native
   14402        tools.
   14403 
   14404   Incompatible changes to the build system
   14405 
   14406      * Front-ends external to GCC should modify their Make-lang.in file to
   14407        replace double-colon rules (e.g. dvi::) with normal rules (like
   14408        lang.dvi:). Front-end makefile hooks do not use double-colon rules
   14409        anymore.
   14410      * Up to GCC 4.1, a popular way to specify the target tools used
   14411        during the build was to create directories named gas, binutils,
   14412        etc. in the build tree, and create links to the tools from there.
   14413        This does not work any more when the compiler is bootstrapped. The
   14414        new configure option --with-target-tools provides a better way to
   14415        achieve the same effect, and works for all native and cross
   14416        settings.
   14417 
   14418 
   14419     For questions related to the use of GCC, please consult these web
   14420     pages and the [6]GCC manuals. If that fails, the
   14421     [7]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14422     web pages and the development of GCC are welcome on our developer
   14423     list at [8]gcc (a] gcc.gnu.org. All of [9]our lists have public archives.
   14424 
   14425    Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
   14426    distribution of this entire article is permitted in any medium,
   14427    provided this notice is preserved.
   14428 
   14429    These pages are [11]maintained by the GCC team. Last modified
   14430    2022-10-26.
   14431 
   14432 References
   14433 
   14434    1. https://gcc.gnu.org/projects/gomp/
   14435    2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   14436    3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
   14437    4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
   14438    5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
   14439    6. https://gcc.gnu.org/onlinedocs/
   14440    7. mailto:gcc-help (a] gcc.gnu.org
   14441    8. mailto:gcc (a] gcc.gnu.org
   14442    9. https://gcc.gnu.org/lists.html
   14443   10. https://www.fsf.org/
   14444   11. https://gcc.gnu.org/about.html
   14445 ======================================================================
   14446 http://gcc.gnu.org/gcc-4.1/index.html
   14447                              GCC 4.1 Release Series
   14448 
   14449    (This release series is no longer supported.)
   14450 
   14451    February 13, 2007
   14452 
   14453    The [1]GNU project and the GCC developers are pleased to announce the
   14454    release of GCC 4.1.2.
   14455 
   14456    This release is a bug-fix release, containing fixes for regressions in
   14457    GCC 4.1.1 relative to previous releases of GCC.
   14458 
   14459 Release History
   14460 
   14461    GCC 4.1.2
   14462           February 13, 2007 ([2]changes)
   14463 
   14464    GCC 4.1.1
   14465           May 24, 2006 ([3]changes)
   14466 
   14467    GCC 4.1.0
   14468           February 28, 2006 ([4]changes)
   14469 
   14470 References and Acknowledgements
   14471 
   14472    GCC used to stand for the GNU C Compiler, but since the compiler
   14473    supports several other languages aside from C, it now stands for the
   14474    GNU Compiler Collection.
   14475 
   14476    A list of [5]successful builds is updated as new information becomes
   14477    available.
   14478 
   14479    The GCC developers would like to thank the numerous people that have
   14480    contributed new features, improvements, bug fixes, and other changes as
   14481    well as test results to GCC. This [6]amazing group of volunteers is
   14482    what makes GCC successful.
   14483 
   14484    For additional information about GCC please refer to the [7]GCC project
   14485    web site or contact the [8]GCC development mailing list.
   14486 
   14487    To obtain GCC please use [9]our mirror sites or [10]our version control
   14488    system.
   14489 
   14490 
   14491     For questions related to the use of GCC, please consult these web
   14492     pages and the [11]GCC manuals. If that fails, the
   14493     [12]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14494     web pages and the development of GCC are welcome on our developer
   14495     list at [13]gcc (a] gcc.gnu.org. All of [14]our lists have public
   14496     archives.
   14497 
   14498    Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
   14499    distribution of this entire article is permitted in any medium,
   14500    provided this notice is preserved.
   14501 
   14502    These pages are [16]maintained by the GCC team. Last modified
   14503    2022-10-26.
   14504 
   14505 References
   14506 
   14507    1. http://www.gnu.org/
   14508    2. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   14509    3. https://gcc.gnu.org/gcc-4.1/changes.html
   14510    4. https://gcc.gnu.org/gcc-4.1/changes.html
   14511    5. https://gcc.gnu.org/gcc-4.1/buildstat.html
   14512    6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14513    7. https://gcc.gnu.org/index.html
   14514    8. mailto:gcc (a] gcc.gnu.org
   14515    9. https://gcc.gnu.org/mirrors.html
   14516   10. https://gcc.gnu.org/git.html
   14517   11. https://gcc.gnu.org/onlinedocs/
   14518   12. mailto:gcc-help (a] gcc.gnu.org
   14519   13. mailto:gcc (a] gcc.gnu.org
   14520   14. https://gcc.gnu.org/lists.html
   14521   15. https://www.fsf.org/
   14522   16. https://gcc.gnu.org/about.html
   14523 ======================================================================
   14524 http://gcc.gnu.org/gcc-4.1/changes.html
   14525                              GCC 4.1 Release Series
   14526                         Changes, New Features, and Fixes
   14527 
   14528    The latest release in the 4.1 release series is [1]GCC 4.1.2.
   14529 
   14530 Caveats
   14531 
   14532 General Optimizer Improvements
   14533 
   14534      * GCC now has infrastructure for inter-procedural optimizations and
   14535        the following inter-procedural optimizations are implemented:
   14536           + Profile guided inlining. When doing profile feedback guided
   14537             optimization, GCC can now use the profile to make better
   14538             informed decisions on whether inlining of a function is
   14539             profitable or not. This means that GCC will no longer inline
   14540             functions at call sites that are not executed very often, and
   14541             that functions at hot call sites are more likely to be
   14542             inlined.
   14543             A new parameter min-inline-recursive-probability is also now
   14544             available to throttle recursive inlining of functions with
   14545             small average recursive depths.
   14546           + Discovery of pure and const functions, a form of side-effects
   14547             analysis. While older GCC releases could also discover such
   14548             special functions, the new IPA-based pass runs earlier so that
   14549             the results are available to more optimizers. The pass is also
   14550             simply more powerful than the old one.
   14551           + Analysis of references to static variables and type escape
   14552             analysis, also forms of side-effects analysis. The results of
   14553             these passes allow the compiler to be less conservative about
   14554             call-clobbered variables and references. This results in more
   14555             redundant loads being eliminated and in making static
   14556             variables candidates for register promotion.
   14557           + Improvement of RTL-based alias analysis. The results of type
   14558             escape analysis are fed to the RTL type-based alias analyzer,
   14559             allowing it to disambiguate more memory references.
   14560           + Interprocedural constant propagation and function versioning.
   14561             This pass looks for functions that are always called with the
   14562             same constant value for one or more of the function arguments,
   14563             and propagates those constants into those functions.
   14564           + GCC will now eliminate static variables whose usage was
   14565             optimized out.
   14566           + -fwhole-program --combine can now be used to make all
   14567             functions in program static allowing whole program
   14568             optimization. As an exception, the main function and all
   14569             functions marked with the new externally_visible attribute are
   14570             kept global so that programs can link with runtime libraries.
   14571      * GCC can now do a form of partial dead code elimination (PDCE) that
   14572        allows code motion of expressions to the paths where the result of
   14573        the expression is actually needed. This is not always a win, so the
   14574        pass has been limited to only consider profitable cases. Here is an
   14575        example:
   14576     int foo (int *, int *);
   14577     int
   14578     bar (int d)
   14579     {
   14580       int a, b, c;
   14581       b = d + 1;
   14582       c = d + 2;
   14583       a = b + c;
   14584       if (d)
   14585         {
   14586           foo (&b, &c);
   14587           a = b + c;
   14588         }
   14589       printf ("%d\n", a);
   14590     }
   14591 
   14592        The a = b + c can be sunk to right before the printf. Normal code
   14593        sinking will not do this, it will sink the first one above into the
   14594        else-branch of the conditional jump, which still gives you two
   14595        copies of the code.
   14596      * GCC now has a value range propagation pass. This allows the
   14597        compiler to eliminate bounds checks and branches. The results of
   14598        the pass can also be used to accurately compute branch
   14599        probabilities.
   14600      * The pass to convert PHI nodes to straight-line code (a form of
   14601        if-conversion for GIMPLE) has been improved significantly. The two
   14602        most significant improvements are an improved algorithm to
   14603        determine the order in which the PHI nodes are considered, and an
   14604        improvement that allow the pass to consider if-conversions of basic
   14605        blocks with more than two predecessors.
   14606      * Alias analysis improvements. GCC can now differentiate between
   14607        different fields of structures in Tree-SSA's virtual operands form.
   14608        This lets stores/loads from non-overlapping structure fields not
   14609        conflict. A new algorithm to compute points-to sets was contributed
   14610        that can allows GCC to see now that p->a and p->b, where p is a
   14611        pointer to a structure, can never point to the same field.
   14612      * Various enhancements to auto-vectorization:
   14613           + Incrementally preserve SSA form when vectorizing.
   14614           + Incrementally preserve loop-closed form when vectorizing.
   14615           + Improvements to peeling for alignment: generate better code
   14616             when the misalignment of an access is known at compile time,
   14617             or when different accesses are known to have the same
   14618             misalignment, even if the misalignment amount itself is
   14619             unknown.
   14620           + Consider dependence distance in the vectorizer.
   14621           + Externalize generic parts of data reference analysis to make
   14622             this analysis available to other passes.
   14623           + Vectorization of conditional code.
   14624           + Reduction support.
   14625      * GCC can now partition functions in sections of hot and cold code.
   14626        This can significantly improve performance due to better
   14627        instruction cache locality. This feature works best together with
   14628        profile feedback driven optimization.
   14629      * A new pass to avoid saving of unneeded arguments to the stack in
   14630        vararg functions if the compiler can prove that they will not be
   14631        needed.
   14632      * Transition of basic block profiling to tree level implementation
   14633        has been completed. The new implementation should be considerably
   14634        more reliable (hopefully avoiding profile mismatch errors when
   14635        using -fprofile-use or -fbranch-probabilities) and can be used to
   14636        drive higher level optimizations, such as inlining.
   14637        The -ftree-based-profiling command-line option was removed and
   14638        -fprofile-use now implies disabling old RTL level loop optimizer
   14639        (-fno-loop-optimize). Speculative prefetching optimization
   14640        (originally enabled by -fspeculative-prefetching) was removed.
   14641 
   14642 New Languages and Language specific improvements
   14643 
   14644   C and Objective-C
   14645 
   14646      * The old Bison-based C and Objective-C parser has been replaced by a
   14647        new, faster hand-written recursive-descent parser.
   14648 
   14649   Ada
   14650 
   14651      * The build infrastructure for the Ada runtime library and tools has
   14652        been changed to be better integrated with the rest of the build
   14653        infrastructure of GCC. This should make doing cross builds of Ada a
   14654        bit easier.
   14655 
   14656   C++
   14657 
   14658      * ARM-style name-injection of friend declarations is no longer the
   14659        default. For example:
   14660           struct S {
   14661             friend void f();
   14662           };
   14663 
   14664           void g() { f(); }
   14665        will not be accepted; instead a declaration of f will need to be
   14666        present outside of the scope of S. The new -ffriend-injection
   14667        option will enable the old behavior.
   14668      * The (undocumented) extension which permitted templates with default
   14669        arguments to be bound to template template parameters with fewer
   14670        parameters has been deprecated, and will be removed in the next
   14671        major release of G++. For example:
   14672        template <template <typename> class C>
   14673        void f(C<double>) {}
   14674 
   14675        template <typename T, typename U = int>
   14676        struct S {};
   14677 
   14678        template void f(S<double>);
   14679 
   14680        makes use of the deprecated extension. The reason this code is not
   14681        valid ISO C++ is that S is a template with two parameters;
   14682        therefore, it cannot be bound to C which has only one parameter.
   14683 
   14684     Runtime Library (libstdc++)
   14685 
   14686      * Optimization work:
   14687           + A new implementation of std::search_n is provided, better
   14688             performing in case of random access iterators.
   14689           + Added further efficient specializations of istream functions,
   14690             i.e., character array and string extractors.
   14691           + Other smaller improvements throughout.
   14692      * Policy-based associative containers, designed for high-performance,
   14693        flexibility and semantic safety are delivered in ext/pb_assoc.
   14694      * A versatile string class, __gnu_cxx::__versa_string, providing
   14695        facilities conforming to the standard requirements for
   14696        basic_string, is delivered in <ext/vstring.h>. In particular:
   14697           + Two base classes are provided: the default one avoids
   14698             reference counting and is optimized for short strings; the
   14699             alternate one, still uses it while improving in a few low
   14700             level areas (e.g., alignment). See vstring_fwd.h for some
   14701             useful typedefs.
   14702           + Various algorithms have been rewritten (e.g., replace), the
   14703             code streamlined and simple optimizations added.
   14704           + Option 3 of DR 431 is implemented for both available bases,
   14705             thus improving the support for stateful allocators.
   14706      * As usual, many bugs have been fixed (e.g., libstdc++/13583,
   14707        libstdc++/23953) and LWG resolutions put into effect for the first
   14708        time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
   14709        Issue 6.19). The implementation status of TR1 is now tracked in the
   14710        docs in tr1.html.
   14711 
   14712   Objective-C++
   14713 
   14714      * A new language front end for Objective-C++ has been added. This
   14715        language allows users to mix the object oriented features of
   14716        Objective-C with those of C++.
   14717 
   14718   Java (GCJ)
   14719 
   14720      * Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
   14721        features (plus some 0.20 bug-fixes)
   14722           + Networking
   14723                o The java.net.HttpURLConnection implementation no longer
   14724                  buffers the entire response body in memory. This means
   14725                  that response bodies larger than available memory can now
   14726                  be handled.
   14727           + (N)IO
   14728                o NIO FileChannel.map implementation, fast bulk put
   14729                  implementation for DirectByteBuffer (speeds up this
   14730                  method 10x).
   14731                o FileChannel.lock() and FileChannel.force() implemented.
   14732           + XML
   14733                o gnu.xml fix for nodes created outside a namespace
   14734                  context.
   14735                o Add support for output indenting and
   14736                  cdata-section-elements output instruction in
   14737                  xml.transform.
   14738                o xml.xpath corrections for cases where elements/attributes
   14739                  might have been created in non-namespace-aware mode.
   14740                  Corrections to handling of XSL variables and minor
   14741                  conformance updates.
   14742           + AWT
   14743                o GNU JAWT implementation, the AWT Native Interface, which
   14744                  allows direct access to native screen resources from
   14745                  within a Canvas's paint method. GNU Classpath Examples
   14746                  comes with a Demo, see libjava/classpath/examples/README.
   14747                o awt.datatransfer updated to 1.5 with support for
   14748                  FlavorEvents. The gtk+ awt peers now allow copy/paste of
   14749                  text, images, URIs/files and serialized objects with
   14750                  other applications and tracking clipboard change events
   14751                  with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
   14752                  objects are supported). A GNU Classpath Examples
   14753                  datatransfer Demo was added to show the new
   14754                  functionality.
   14755                o Split gtk+ awt peers event handling in two threads and
   14756                  improve gdk lock handling (solves several awt lock ups).
   14757                o Speed up awt Image loading.
   14758                o Better gtk+ scrollbar peer implementation when using gtk+
   14759                  >= 2.6.
   14760                o Handle image loading errors correctly for gdkpixbuf and
   14761                  MediaTracker.
   14762                o Better handle GDK lock. Properly prefix gtkpeer native
   14763                  functions (cp_gtk).
   14764                o GdkGraphics2D has been updated to use Cairo 0.5.x or
   14765                  higher.
   14766                o BufferedImage and GtkImage rewrites. All image drawing
   14767                  operations should now work correctly (flipping requires
   14768                  gtk+ >= 2.6)
   14769                o When gtk+ 2.6 or higher is installed the default log
   14770                  handler will produce stack traces whenever a WARNING,
   14771                  CRITICAL or ERROR message is produced.
   14772           + Free Swing
   14773                o The RepaintManager has been reworked for more efficient
   14774                  painting, especially for large GUIs.
   14775                o The layout manager OverlayLayout has been implemented,
   14776                  the BoxLayout has been rewritten to make use of the
   14777                  SizeRequirements utility class and caching for more
   14778                  efficient layout.
   14779                o Improved accessibility support.
   14780                o Significant progress has been made in the implementation
   14781                  of the javax.swing.plaf.metal package, with most UI
   14782                  delegates in a working state now. Please test this with
   14783                  your own applications and provide feedback that will help
   14784                  us to improve this package.
   14785                o The GUI demo (gnu.classpath.examples.swing.Demo) has been
   14786                  extended to highlight various features in our Free Swing
   14787                  implementation. And it includes a look and feel switcher
   14788                  for Metal (default), Ocean and GNU themes.
   14789                o The javax.swing.plaf.multi package is now implemented.
   14790                o Editing and several key actions for JTree and JTable were
   14791                  implemented.
   14792                o Lots of icons and look and feel improvements for Free
   14793                  Swing basic and metal themes were added. Try running the
   14794                  GNU Classpath Swing Demo in examples
   14795                  (gnu.classpath.examples.swing.Demo) with:
   14796                  -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFee
   14797                  l or
   14798                  -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFee
   14799                  l
   14800                o Start of styled text capabilites for java.swing.text.
   14801                o DefaultMutableTreeNode pre-order, post-order, depth-first
   14802                  and breadth-first traversal enumerations implemented.
   14803                o JInternalFrame colors and titlebar draw properly.
   14804                o JTree is working up to par (icons, selection and keyboard
   14805                  traversal).
   14806                o JMenus were made more compatible in visual and
   14807                  programmatic behavior.
   14808                o JTable changeSelection and multiple selections
   14809                  implemented.
   14810                o JButton and JToggleButton change states work properly
   14811                  now.
   14812                o JFileChooser fixes.
   14813                o revalidate() and repaint() fixes which make Free Swing
   14814                  much more responsive.
   14815                o MetalIconFactory implemented.
   14816                o Free Swing Top-Level Compatibility. JFrame, JDialog,
   14817                  JApplet, JInternalFrame, and JWindow are now 1.5
   14818                  compatible in the sense that you can call add() and
   14819                  setLayout() directly on them, which will have the same
   14820                  effect as calling getContentPane().add() and
   14821                  getContentPane().setLayout().
   14822                o The JTree interface has been completed. JTrees now
   14823                  recognizes mouse clicks and selections work.
   14824                o BoxLayout works properly now.
   14825                o Fixed GrayFilter to actually work.
   14826                o Metal SplitPane implemented.
   14827                o Lots of Free Swing text and editor stuff work now.
   14828           + Free RMI and Corba
   14829                o Andrew Watson, Vice President and Technical Director of
   14830                  the Object Management Group, has officially assigned us
   14831                  20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
   14832                  mark remote classpath-specific system exceptions.
   14833                  Obtaining the VMCID means that GNU Classpath now is a
   14834                  recogniseable type of node in a highly interoperable
   14835                  CORBA world.
   14836                o GNU Classpath now includes the first working draft to
   14837                  support the RMI over IIOP protocol. The current
   14838                  implementation is capable of remote invocations,
   14839                  transferring various Serializables and Externalizables
   14840                  via RMI-IIOP protocol. It can flatten graphs and, at
   14841                  least for the simple cases, is interoperable with 1.5
   14842                  JDKs.
   14843                o org.omg.PortableInterceptor and related functionality in
   14844                  other packages is now implemented:
   14845                     # The sever and client interceptors work as required
   14846                       since 1.4.
   14847                     # The IOR interceptor works as needed for 1.5.
   14848                o The org.omg.DynamicAny package is completed and passes
   14849                  the prepared tests.
   14850                o The Portable Object Adapter should now support the output
   14851                  of the recent IDL to java compilers. These compilers now
   14852                  generate servants and not CORBA objects as before, making
   14853                  the output depend on the existing POA implementation.
   14854                  Completing POA means that such code can already be tried
   14855                  to run on Classpath. Our POA is tested for the following
   14856                  usager scenarios:
   14857                     # POA converts servant to the CORBA object.
   14858                     # Servant provides to the CORBA object.
   14859                     # POA activates new CORBA object with the given Object
   14860                       Id (byte array) that is later accessible for the
   14861                       servant.
   14862                     # During the first call, the ServantActivator provides
   14863                       servant for this and all subsequent calls on the
   14864                       current object.
   14865                     # During each call, the ServantLocator provides
   14866                       servant for this call only.
   14867                     # ServantLocator or ServantActivator forwards call to
   14868                       another server.
   14869                     # POA has a single servant, responsible for all
   14870                       objects.
   14871                     # POA has a default servant, but some objects are
   14872                       explicitly connected to they specific servants.
   14873                  The POA is verified using tests from the former
   14874                  cost.omg.org.
   14875                o The CORBA implementation is now a working prototype that
   14876                  should support features up to 1.3 inclusive. We invite
   14877                  groups writing CORBA dependent applications to try
   14878                  Classpath implementation, reporting any possible bugs.
   14879                  The CORBA prototype is interoperable with Sun's
   14880                  implementation v 1.4, transferring object references,
   14881                  primitive types, narrow and wide strings, arrays,
   14882                  structures, trees, abstract interfaces and value types
   14883                  (feature of CORBA 2.3) between these two platforms.
   14884                  Remote exceptions are transferred and handled correctly.
   14885                  The stringified object references (IORs) from various
   14886                  sources are parsed as required. The transient (for
   14887                  current session) and permanent (till jre restart)
   14888                  redirections work. Both Little and Big Endian encoded
   14889                  messages are accepted. The implementation is verified
   14890                  using tests from the former cost.omg.org. The current
   14891                  release includes working examples (see the examples
   14892                  directory), demonstrating the client-server
   14893                  communication, using either CORBA Request or IDL-based
   14894                  stub (usually generated by a IDL to java compiler). These
   14895                  examples also show how to use the Classpath CORBA naming
   14896                  service. The IDL to java compiler is not yet written, but
   14897                  as our library must be compatible, it naturally accepts
   14898                  the output of other idlj implementations.
   14899           + Misc
   14900                o Updated TimeZone data against Olson tzdata2005l.
   14901                o Make zip and jar packages UTF-8 clean.
   14902                o "native" code builds and compiles (warning free) on
   14903                  Darwin and Solaris.
   14904                o java.util.logging.FileHandler now rotates files.
   14905                o Start of a generic JDWP framework in gnu/classpath/jdwp.
   14906                  This is unfinished, but feedback (at classpath (a] gnu.org)
   14907                  from runtime hackers is greatly appreciated. Although
   14908                  most of the work is currently being done around gcj/gij
   14909                  we want this framework to be as VM neutral as possible.
   14910                  Early design is described in:
   14911                  [2]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   14912                o QT4 AWT peers, enable by giving configure
   14913                  --enable-qt-peer. Included, but not ready for production
   14914                  yet. They are explicitly disabled and not supported. But
   14915                  if you want to help with the development of these new
   14916                  features we are interested in feedback. You will have to
   14917                  explicitly enable them to try them out (and they will
   14918                  most likely contain bugs).
   14919                o Documentation fixes all over the place. See
   14920                  [3]https://developer.classpath.org/doc/
   14921 
   14922 New Targets and Target Specific Improvements
   14923 
   14924   IA-32/x86-64
   14925 
   14926      * The x86-64 medium model (that allows building applications whose
   14927        data segment exceeds 4GB) was redesigned to match latest ABI draft.
   14928        New implementation split large datastructures into separate segment
   14929        improving performance of accesses to small datastructures and also
   14930        allows linking of small model libraries into medium model programs
   14931        as long as the libraries are not accessing the large datastructures
   14932        directly. Medium model is also supported in position independent
   14933        code now.
   14934        The ABI change results in partial incompatibility among medium
   14935        model objects. Linking medium model libraries (or objects) compiled
   14936        with new compiler into medium model program compiled with older
   14937        will likely result in exceeding ranges of relocations.
   14938        Binutils 2.16.91 or newer are required for compiling medium model
   14939        now.
   14940 
   14941   RS6000 (POWER/PowerPC)
   14942 
   14943      * The AltiVec vector primitives in <altivec.h> are now implemented in
   14944        a way that puts a smaller burden on the preprocessor, instead
   14945        processing the "overloading" in the front ends. This should benefit
   14946        compilation speed on AltiVec vector code.
   14947      * AltiVec initializers now are generated more efficiently.
   14948      * The popcountb instruction available on POWER5 now is generated.
   14949      * The floating point round to integer instructions available on
   14950        POWER5+ now is generated.
   14951      * Floating point divides can be synthesized using the floating point
   14952        reciprocal estimate instructions.
   14953      * Double precision floating point constants are initialized as single
   14954        precision values if they can be represented exactly.
   14955 
   14956   S/390, zSeries and System z9
   14957 
   14958      * Support for the IBM System z9 109 processor has been added. When
   14959        using the -march=z9-109 option, the compiler will generate code
   14960        making use of instructions provided by the extended immediate
   14961        facility.
   14962      * Support for 128-bit IEEE floating point has been added. When using
   14963        the -mlong-double-128 option, the compiler will map the long double
   14964        data type to 128-bit IEEE floating point. Using this option
   14965        constitutes an ABI change, and requires glibc support.
   14966      * Various changes to improve performance of generated code have been
   14967        implemented, including:
   14968           + In functions that do not require a literal pool, register %r13
   14969             (which is traditionally reserved as literal pool pointer), can
   14970             now be freely used for other purposes by the compiler.
   14971           + More precise tracking of register use allows the compiler to
   14972             generate more efficient function prolog and epilog code in
   14973             certain cases.
   14974           + The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
   14975             instructions are now used to implement C string functions.
   14976           + The MOVE CHARACTER instruction with single byte overlap is now
   14977             used to implement the memset function with non-zero fill byte.
   14978           + The LOAD ZERO instructions are now used where appropriate.
   14979           + The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK,
   14980             and INSERT IMMEDIATE instructions are now used more frequently
   14981             to optimize bitfield operations.
   14982           + The BRANCH ON COUNT instruction is now used more frequently.
   14983             In particular, the fact that a loop contains a subroutine call
   14984             no longer prevents the compiler from using this instruction.
   14985           + The compiler is now aware that all shift and rotate
   14986             instructions implicitly truncate the shift count to six bits.
   14987      * Back-end support for the following generic features has been
   14988        implemented:
   14989           + The full set of [4]built-in functions for atomic memory
   14990             access.
   14991           + The -fstack-protector feature.
   14992           + The optimization pass avoiding unnecessary stores of incoming
   14993             argument registers in functions with variable argument list.
   14994 
   14995   SPARC
   14996 
   14997      * The default code model in 64-bit mode has been changed from
   14998        Medium/Anywhere to Medium/Middle on Solaris.
   14999      * TLS support is disabled by default on Solaris prior to release 10.
   15000        It can be enabled on TLS-capable Solaris 9 versions (4/04 release
   15001        and later) by specifying --enable-tls at configure time.
   15002 
   15003   MorphoSys
   15004 
   15005      * Support has been added for this new architecture.
   15006 
   15007 Obsolete Systems
   15008 
   15009 Documentation improvements
   15010 
   15011 Other significant improvements
   15012 
   15013      * GCC can now emit code for protecting applications from
   15014        stack-smashing attacks. The protection is realized by buffer
   15015        overflow detection and reordering of stack variables to avoid
   15016        pointer corruption.
   15017      * Some built-in functions have been fortified to protect them against
   15018        various buffer overflow (and format string) vulnerabilities.
   15019        Compared to the mudflap bounds checking feature, the safe builtins
   15020        have far smaller overhead. This means that programs built using
   15021        safe builtins should not experience any measurable slowdown.
   15022 
   15023 GCC 4.1.2
   15024 
   15025    This is the [5]list of problem reports (PRs) from GCC's bug tracking
   15026    system that are known to be fixed in the 4.1.2 release. This list might
   15027    not be complete (that is, it is possible that some PRs that have been
   15028    fixed are not listed here).
   15029 
   15030    When generating code for a shared library, GCC now recognizes that
   15031    global functions may be replaced when the program runs. Therefore, it
   15032    is now more conservative in deducing information from the bodies of
   15033    functions. For example, in this example:
   15034     void f() {}
   15035     void g() {
   15036      try { f(); }
   15037      catch (...) {
   15038        cout << "Exception";
   15039      }
   15040     }
   15041 
   15042    G++ would previously have optimized away the catch clause, since it
   15043    would have concluded that f cannot throw exceptions. Because users may
   15044    replace f with another function in the main body of the program, this
   15045    optimization is unsafe, and is no longer performed. If you wish G++ to
   15046    continue to optimize as before, you must add a throw() clause to the
   15047    declaration of f to make clear that it does not throw exceptions.
   15048 
   15049 
   15050     For questions related to the use of GCC, please consult these web
   15051     pages and the [6]GCC manuals. If that fails, the
   15052     [7]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15053     web pages and the development of GCC are welcome on our developer
   15054     list at [8]gcc (a] gcc.gnu.org. All of [9]our lists have public archives.
   15055 
   15056    Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
   15057    distribution of this entire article is permitted in any medium,
   15058    provided this notice is preserved.
   15059 
   15060    These pages are [11]maintained by the GCC team. Last modified
   15061    2022-10-26.
   15062 
   15063 References
   15064 
   15065    1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   15066    2. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   15067    3. https://developer.classpath.org/doc/
   15068    4. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
   15069    5. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
   15070    6. https://gcc.gnu.org/onlinedocs/
   15071    7. mailto:gcc-help (a] gcc.gnu.org
   15072    8. mailto:gcc (a] gcc.gnu.org
   15073    9. https://gcc.gnu.org/lists.html
   15074   10. https://www.fsf.org/
   15075   11. https://gcc.gnu.org/about.html
   15076 ======================================================================
   15077 http://gcc.gnu.org/gcc-4.0/index.html
   15078                              GCC 4.0 Release Series
   15079 
   15080    (This release series is no longer supported.)
   15081 
   15082    January 31, 2007
   15083 
   15084    The [1]GNU project and the GCC developers are pleased to announce the
   15085    release of GCC 4.0.4.
   15086 
   15087    This release is a bug-fix release, containing fixes for regressions in
   15088    GCC 4.0.3 relative to previous releases of GCC.
   15089 
   15090 Release History
   15091 
   15092    GCC 4.0.4
   15093           January 31, 2007 ([2]changes)
   15094 
   15095    GCC 4.0.3
   15096           March 10, 2006 ([3]changes)
   15097 
   15098    GCC 4.0.2
   15099           September 28, 2005 ([4]changes)
   15100 
   15101    GCC 4.0.1
   15102           July 7, 2005 ([5]changes)
   15103 
   15104    GCC 4.0.0
   15105           April 20, 2005 ([6]changes)
   15106 
   15107 References and Acknowledgements
   15108 
   15109    GCC used to stand for the GNU C Compiler, but since the compiler
   15110    supports several other languages aside from C, it now stands for the
   15111    GNU Compiler Collection.
   15112 
   15113    A list of [7]successful builds is updated as new information becomes
   15114    available.
   15115 
   15116    The GCC developers would like to thank the numerous people that have
   15117    contributed new features, improvements, bug fixes, and other changes as
   15118    well as test results to GCC. This [8]amazing group of volunteers is
   15119    what makes GCC successful.
   15120 
   15121    For additional information about GCC please refer to the [9]GCC project
   15122    web site or contact the [10]GCC development mailing list.
   15123 
   15124    To obtain GCC please use [11]our mirror sites, or [12]our version
   15125    control system.
   15126 
   15127 
   15128     For questions related to the use of GCC, please consult these web
   15129     pages and the [13]GCC manuals. If that fails, the
   15130     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15131     web pages and the development of GCC are welcome on our developer
   15132     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   15133     archives.
   15134 
   15135    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   15136    distribution of this entire article is permitted in any medium,
   15137    provided this notice is preserved.
   15138 
   15139    These pages are [18]maintained by the GCC team. Last modified
   15140    2022-10-26.
   15141 
   15142 References
   15143 
   15144    1. http://www.gnu.org/
   15145    2. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   15146    3. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
   15147    4. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
   15148    5. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
   15149    6. https://gcc.gnu.org/gcc-4.0/changes.html
   15150    7. https://gcc.gnu.org/gcc-4.0/buildstat.html
   15151    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15152    9. https://gcc.gnu.org/index.html
   15153   10. mailto:gcc (a] gcc.gnu.org
   15154   11. https://gcc.gnu.org/mirrors.html
   15155   12. https://gcc.gnu.org/git.html
   15156   13. https://gcc.gnu.org/onlinedocs/
   15157   14. mailto:gcc-help (a] gcc.gnu.org
   15158   15. mailto:gcc (a] gcc.gnu.org
   15159   16. https://gcc.gnu.org/lists.html
   15160   17. https://www.fsf.org/
   15161   18. https://gcc.gnu.org/about.html
   15162 ======================================================================
   15163 http://gcc.gnu.org/gcc-4.0/changes.html
   15164                              GCC 4.0 Release Series
   15165                         Changes, New Features, and Fixes
   15166 
   15167    The latest release in the 4.0 release series is [1]GCC 4.0.4.
   15168 
   15169 Caveats
   15170 
   15171      * GCC now generates location lists by default when compiling with
   15172        debug info and optimization.
   15173           + GDB 6.0 and older crashes when it sees location lists. GDB 6.1
   15174             or later is needed to debug binaries containing location
   15175             lists.
   15176           + When you are trying to view a value of a variable in a part of
   15177             a function where it has no location (for example when the
   15178             variable is no longer used and thus its location was used for
   15179             something else) GDB will say that it is not available.
   15180        You can disable generating location lists by -fno-var-tracking.
   15181      * GCC no longer accepts the -fwritable-strings option. Use named
   15182        character arrays when you need a writable string.
   15183      * The options -freduce-all-givs and -fmove-all-movables have been
   15184        discontinued. They were used to circumvent a shortcoming in the
   15185        heuristics of the old loop optimization code with respect to common
   15186        Fortran constructs. The new (tree) loop optimizer works differently
   15187        and doesn't need those work-arounds.
   15188      * The graph-coloring register allocator, formerly enabled by the
   15189        option -fnew-ra, has been discontinued.
   15190      * -I- has been deprecated. -iquote is meant to replace the need for
   15191        this option.
   15192      * The MIPS -membedded-pic and -mrnames options have been removed.
   15193      * All MIPS targets now require the GNU assembler. In particular, IRIX
   15194        configurations can no longer use the MIPSpro assemblers, although
   15195        they do still support the MIPSpro linkers.
   15196      * The SPARC option -mflat has been removed.
   15197      * English-language diagnostic messages will now use Unicode quotation
   15198        marks in UTF-8 locales. (Non-English messages already used the
   15199        quotes appropriate for the language in previous releases.) If your
   15200        terminal does not support UTF-8 but you are using a UTF-8 locale
   15201        (such locales are the default on many GNU/Linux systems) then you
   15202        should set LC_CTYPE=C in the environment to disable that locale.
   15203        Programs that parse diagnostics and expect plain ASCII
   15204        English-language messages should set LC_ALL=C. See [2]Markus Kuhn's
   15205        explanation of Unicode quotation marks for more information.
   15206      * The specs file is no longer installed on most platforms. Most users
   15207        will be totally unaffected. However, if you are accustomed to
   15208        editing the specs file yourself, you will now have to use the
   15209        -dumpspecs option to generate the specs file, and then edit the
   15210        resulting file.
   15211 
   15212 General Optimizer Improvements
   15213 
   15214      * The [3]tree ssa branch has been merged. This merge has brought in a
   15215        completely new optimization framework based on a higher level
   15216        intermediate representation than the existing RTL representation.
   15217        Numerous new code transformations based on the new framework are
   15218        available in GCC 4.0, including:
   15219           + Scalar replacement of aggregates
   15220           + Constant propagation
   15221           + Value range propagation
   15222           + Partial redundancy elimination
   15223           + Load and store motion
   15224           + Strength reduction
   15225           + Dead store elimination
   15226           + Dead and unreachable code elimination
   15227           + [4]Autovectorization
   15228           + Loop interchange
   15229           + Tail recursion by accumulation
   15230        Many of these passes outperform their counterparts from previous
   15231        GCC releases.
   15232      * [5]Swing Modulo Scheduling (SMS). An RTL level instruction
   15233        scheduling optimization intended for loops that perform heavy
   15234        computations.
   15235 
   15236 New Languages and Language specific improvements
   15237 
   15238   C family
   15239 
   15240      * The sentinel attribute has been added to GCC. This function
   15241        attribute allows GCC to warn when variadic functions such as execl
   15242        are not NULL terminated. See the GCC manual for a complete
   15243        description of its behavior.
   15244      * Given __attribute__((alias("target"))) it is now an error if target
   15245        is not a symbol, defined in the same translation unit. This also
   15246        applies to aliases created by #pragma weak alias=target. This is
   15247        because it's meaningless to define an alias to an undefined symbol.
   15248        On Solaris, the native assembler would have caught this error, but
   15249        GNU as does not.
   15250 
   15251   C and Objective-C
   15252 
   15253      * The -Wstrict-aliasing=2 option has been added. This warning catches
   15254        all unsafe cases, but it may also give a warning for some cases
   15255        that are safe.
   15256      * The cast-as-lvalue, conditional-expression-as-lvalue and
   15257        compound-expression-as-lvalue extensions, which were deprecated in
   15258        3.3.4 and 3.4, have been removed.
   15259      * The -fwritable-strings option, which was deprecated in 3.4, has
   15260        been removed.
   15261      * #pragma pack() semantics have been brought closer to those used by
   15262        other compilers. This also applies to C++.
   15263      * Taking the address of a variable with register storage is invalid
   15264        in C. GCC now issues an error instead of a warning.
   15265      * Arrays of incomplete element type are invalid in C. GCC now issues
   15266        an error for such arrays. Declarations such as extern struct s x[];
   15267        (where struct s has not been defined) can be moved after the
   15268        definition of struct s. Function parameters declared as arrays of
   15269        incomplete type can instead be declared as pointers.
   15270 
   15271   C++
   15272 
   15273      * When compiling without optimizations (-O0), the C++ front end is
   15274        much faster than in any previous versions of GCC. Independent
   15275        testers have measured speed-ups up to 25% in real-world production
   15276        code, compared to the 3.4 family (which was already the fastest
   15277        version to date). Upgrading from older versions might show even
   15278        bigger improvements.
   15279      * ELF visibility attributes can now be applied to a class type, so
   15280        that it affects every member function of a class at once, without
   15281        having to specify each individually:
   15282 class __attribute__ ((visibility("hidden"))) Foo
   15283 {
   15284    int foo1();
   15285    void foo2();
   15286 };
   15287        The syntax is deliberately similar to the __declspec() system used
   15288        by Microsoft Windows based compilers, allowing cross-platform
   15289        projects to easily reuse their existing macro system for denoting
   15290        exports and imports. By explicitly marking internal classes never
   15291        used outside a binary as hidden, one can completely avoid PLT
   15292        indirection overheads during their usage by the compiler. You can
   15293        find out more about the advantages of this at
   15294        [6]https://www.akkadia.org/drepper/dsohowto.pdf
   15295      * The -fvisibility-inlines-hidden option has been added which marks
   15296        all inlineable functions as having hidden ELF visibility, thus
   15297        removing their symbol and typeinfo from the exported symbol table
   15298        of the output ELF binary. Using this option can reduce the exported
   15299        symbol count of template-heavy code by up to 40% with no code
   15300        change at all, thus notably improving link and load times for the
   15301        binary as well as a reduction in size of up to 10%. Also, check the
   15302        new [7]-fvisibility option.
   15303      * The compiler now uses the library interface specified by the [8]C++
   15304        ABI for thread-safe initialization of function-scope static
   15305        variables. Most users should leave this alone, but embedded
   15306        programmers may want to disable this by specifying
   15307        -fno-threadsafe-statics for a small savings in code size.
   15308      * Taking the address of an explicit register variable is no longer
   15309        supported. Note that C++ allows taking the address of variables
   15310        with register storage so this will continue to compile with a
   15311        warning. For example, assuming that r0 is a machine register:
   15312 register int foo asm ("r0");
   15313 register int bar;
   15314 &foo; // error, no longer accepted
   15315 &bar; // OK, with a warning
   15316      * G++ has an undocumented extension to virtual function covariancy
   15317        rules that allowed the overrider to return a type that was
   15318        implicitly convertable to the overridden function's return type.
   15319        For instance a function returning void * could be overridden by a
   15320        function returning T *. This is now deprecated and will be removed
   15321        in a future release.
   15322      * The G++ minimum and maximum operators (<? and >?) and their
   15323        compound forms (<?=) and >?=) have been deprecated and will be
   15324        removed in a future version. Code using these operators should be
   15325        modified to use std::min and std::max instead.
   15326      * Declaration of nested classes of class templates as friends are
   15327        supported:
   15328 template <typename T> struct A {
   15329   class B {};
   15330 };
   15331 class C {
   15332   template <typename T> friend class A<T>::B;
   15333 };
   15334        This complements the feature member functions of class templates as
   15335        friends introduced in GCC 3.4.0.
   15336      * When declaring a friend class using an unqualified name, classes
   15337        outside the innermost non-class scope are not searched:
   15338 class A;
   15339 namespace N {
   15340   class B {
   15341     friend class A;   // Refer to N::A which has not been declared yet
   15342                       // because name outside namespace N are not searched
   15343     friend class ::A; // Refer to ::A
   15344   };
   15345 }
   15346        Hiding the friend name until declaration is still not implemented.
   15347      * Friends of classes defined outside their namespace are correctly
   15348        handled:
   15349 namespace N {
   15350   class A;
   15351 }
   15352 class N::A {
   15353   friend class B; // Refer to N::B in GCC 4.0.0
   15354                   // but ::B in earlier versions of GCC
   15355 };
   15356 
   15357     Runtime Library (libstdc++)
   15358 
   15359      * Optimization work:
   15360           + Added efficient specializations of istream functions for char
   15361             and wchar_t.
   15362           + Further performance tuning of strings, in particular wrt
   15363             single-char append and getline.
   15364           + iter_swap - and therefore most of the mutating algorithms -
   15365             now makes an unqualified call to swap when the value_type of
   15366             the two iterators is the same.
   15367      * A large subset of the features in Technical Report 1 (TR1 for
   15368        short) is experimentally delivered (i.e., no guarantees about the
   15369        implementation are provided. In particular it is not promised that
   15370        the library will remain link-compatible when code using TR1 is
   15371        used):
   15372           + General utilities such as reference_wrapper and shared_ptr.
   15373           + Function objects, i.e., result_of, mem_fn, bind, function.
   15374           + Support for metaprogramming.
   15375           + New containers such as tuple, array, unordered_set,
   15376             unordered_map, unordered_multiset, unordered_multimap.
   15377      * As usual, many bugs have been fixed and LWG resolutions implemented
   15378        for the first time (e.g., DR 409).
   15379 
   15380   Java
   15381 
   15382      * In order to prevent naming conflicts with other implementations of
   15383        these tools, some GCJ binaries have been renamed:
   15384           + rmic is now grmic,
   15385           + rmiregistry is now grmiregistry, and
   15386           + jar is now fastjar.
   15387        In particular, these names were problematic for the jpackage.org
   15388        packaging conventions which install symlinks in /usr/bin that point
   15389        to the preferred versions of these tools.
   15390      * The -findirect-dispatch argument to the compiler now works and
   15391        generates code following a new "binary compatibility" ABI. Code
   15392        compiled this way follows the binary compatibility rules of the
   15393        Java Language Specification.
   15394      * libgcj now has support for using GCJ as a JIT, using the
   15395        gnu.gcj.jit family of system properties.
   15396      * libgcj can now find a shared library corresponding to the bytecode
   15397        representation of a class. See the documentation for the new
   15398        gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
   15399        property.
   15400      * There have been many improvements to the class library. Here are
   15401        some highlights:
   15402           + Much more of AWT and Swing exist.
   15403           + Many new packages and classes were added, including
   15404             java.util.regex, java.net.URI, javax.crypto,
   15405             javax.crypto.interfaces, javax.crypto.spec, javax.net,
   15406             javax.net.ssl, javax.security.auth,
   15407             javax.security.auth.callback, javax.security.auth.login,
   15408             javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
   15409             javax.imageio, javax.imageio.event, javax.imageio.spi,
   15410             javax.print, javax.print.attribute,
   15411             javax.print.attribute.standard, javax.print.event, and
   15412             javax.xml
   15413           + Updated SAX and DOM, and imported GNU JAXP
   15414 
   15415   Fortran
   15416 
   15417      * A new [9]Fortran front end has replaced the aging GNU Fortran 77
   15418        front end. The new front end supports Fortran 90 and Fortran 95. It
   15419        may not yet be as stable as the old Fortran front end.
   15420 
   15421   Ada
   15422 
   15423      * Ada (with tasking and Zero Cost Exceptions) is now available on
   15424        many more targets, including but not limited to: alpha-linux,
   15425        hppa-hpux, hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
   15426        s390x-linux, sparc-linux.
   15427      * Some of the new Ada 2005 features are now implemented like
   15428        Wide_Wide_Character and Ada.Containers.
   15429      * Many bugs have been fixed, tools and documentation improved.
   15430      * To compile Ada from the sources, install an older working Ada
   15431        compiler and then use --enable-languages=ada at configuration time,
   15432        since the Ada front end is not currently activated by default. See
   15433        the [10]Installing GCC for details.
   15434 
   15435 New Targets and Target Specific Improvements
   15436 
   15437   H8/300
   15438 
   15439      * The frame layout has changed. In the new layout, the prologue of a
   15440        function first saves registers and then allocate space for locals,
   15441        resulting in an 1% improvement on code size.
   15442 
   15443   IA-32/x86-64 (AMD64)
   15444 
   15445      * The acos, asin, drem, exp10, exp2, expm1, fmod, ilogb, log10,
   15446        log1p, log2, logb and tan mathematical builtins (and their float
   15447        and long double variants) are now implemented as inline x87
   15448        intrinsics when using -ffast-math.
   15449      * The ceil, floor, nearbyint, rint and trunc mathematical builtins
   15450        (and their float and long double variants) are now implemented as
   15451        inline x87 intrinsics when using -ffast-math.
   15452      * The x87's fsincos instruction is now used automatically with
   15453        -ffast-math when calculating both the sin and cos of the same
   15454        argument.
   15455      * Instruction selection for multiplication and division by constants
   15456        has been improved.
   15457 
   15458   IA-64
   15459 
   15460      * Floating point division, integer division and sqrt are now inlined,
   15461        resulting in significant performance improvements on some codes.
   15462 
   15463   MIPS
   15464 
   15465      * Division by zero checks now use conditional traps if the target
   15466        processor supports them. This decreases code size by one word per
   15467        division operation. The old behavior (branch and break) can be
   15468        obtained either at configure time by passing --with-divide=breaks
   15469        to configure or at runtime by passing -mdivide-breaks to GCC.
   15470      * Support for MIPS64 paired-single instructions has been added. It is
   15471        enabled by -mpaired-single and can be accessed using both the
   15472        target-independent vector extensions and new MIPS-specific built-in
   15473        functions.
   15474      * Support for the MIPS-3D ASE has been added. It is enabled by
   15475        -mips3d and provides new MIPS-3D-specific built-in functions.
   15476      * The -mexplicit-relocs option now supports static n64 code (as is
   15477        used, for example, in 64-bit linux kernels). -mexplicit-relocs
   15478        should now be feature-complete and is enabled by default when GCC
   15479        is configured to use a compatible assembler.
   15480      * Support for the NEC VR4130 series has been added. This support
   15481        includes the use of VR-specific instructions and a new VR4130
   15482        scheduler. Full VR4130 support can be selected with -march=vr4130
   15483        while code for any ISA can be tuned for the VR4130 using
   15484        -mtune=vr4130. There is also a new -mvr4130-align option that
   15485        produces better schedules at the cost of increased code size.
   15486      * Support for the Broadcom SB-1 has been extended. There is now an
   15487        SB-1 scheduler as well as support for the SB-1-specific
   15488        paired-single instructions. Full SB-1 support can be selected with
   15489        -march=sb1 while code for any ISA can be optimized for the SB-1
   15490        using -mtune=sb1.
   15491      * The compiler can now work around errata in R4000, R4400, VR4120 and
   15492        VR4130 processors. These workarounds are enabled by -mfix-r4000,
   15493        -mfix-r4400, -mfix-vr4120 and -mfix-vr4130 respectively. The VR4120
   15494        and VR4130 workarounds need binutils 2.16 or above.
   15495      * IRIX shared libraries are now installed into the standard library
   15496        directories: o32 libraries go into lib/, n32 libraries go into
   15497        lib32/ and n64 libraries go into lib64/.
   15498      * The compiler supports a new -msym32 option. It can be used to
   15499        optimize n64 code in which all symbols are known to have 32-bit
   15500        values.
   15501 
   15502   S/390 and zSeries
   15503 
   15504      * New command-line options help to generate code intended to run in
   15505        an environment where stack space is restricted, e.g. Linux kernel
   15506        code:
   15507           + -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
   15508             warnings for single functions that require large or dynamic
   15509             stack frames.
   15510           + -mstack-size and -mstack-guard generate code that checks for
   15511             stack overflow at run time.
   15512           + -mpacked-stack generates code that reduces the stack frame
   15513             size of many functions by reusing unneeded parts of the stack
   15514             bias area.
   15515      * The -msoft-float option now ensures that generated code never
   15516        accesses floating point registers.
   15517      * The s390x-ibm-tpf target now fully supports C++, including
   15518        exceptions and threads.
   15519      * Various changes to improve performance of the generated code have
   15520        been implemented, including:
   15521           + GCC now uses sibling calls where possible.
   15522           + Condition code handling has been optimized, allowing GCC to
   15523             omit redundant comparisons in certain cases.
   15524           + The cost function guiding many optimizations has been refined
   15525             to more accurately represent the z900 and z990 processors.
   15526           + The ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
   15527             instructions are now used to avoid conditional branches in
   15528             certain cases.
   15529           + The back end now uses the LEGITIMIZE_RELOAD_ADDRESS feature to
   15530             optimize address arithmetic required to access large stack
   15531             frames.
   15532           + GCC now makes more efficient use of memory-to-memory type
   15533             instructions (MVC, CLC, ...).
   15534           + More precise tracking of special register use allows better
   15535             instruction scheduling, in particular of the function prologue
   15536             and epilogue sequences.
   15537           + The Java front end now generates inline code to implement
   15538             integer division, instead of calling library routines.
   15539 
   15540   SPARC
   15541 
   15542      * The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
   15543        -mf934 have been removed. They have been replaced with -mcpu=xxx.
   15544      * The internal model used to estimate the relative cost of each
   15545        instruction has been updated. It is expected to give better results
   15546        on recent UltraSPARC processors.
   15547      * Code generation for function prologues and epilogues has been
   15548        improved, resulting in better scheduling and allowing multiple exit
   15549        points in functions.
   15550      * Support for Sun's Visual Instruction Set (VIS) has been enhanced.
   15551        It is enabled by -mvis and provides new built-in functions for VIS
   15552        instructions on UltraSPARC processors.
   15553      * The option -mapp-regs has been turned on by default on Solaris too.
   15554 
   15555   NetWare
   15556 
   15557      * Novell NetWare (on ix86, no other hardware platform was ever really
   15558        supported by this OS) has been re-enabled and the ABI supported by
   15559        GCC has been brought into sync with that of MetroWerks CodeWarrior
   15560        (the ABI previously supported was that of some Unix systems, which
   15561        NetWare never tried to support).
   15562 
   15563 Obsolete Systems
   15564 
   15565    Support for a number of older systems has been declared obsolete in GCC
   15566    4.0. Unless there is activity to revive them, the next release of GCC
   15567    will have their sources permanently removed.
   15568 
   15569    All GCC ports for the following processor architectures have been
   15570    declared obsolete:
   15571      * Intel i860
   15572      * Ubicom IP2022
   15573      * National Semiconductor NS32K (ns32k)
   15574      * Texas Instruments TMS320C[34]x
   15575 
   15576    Also, those for some individual systems have been obsoleted:
   15577      * SPARC family
   15578           + SPARClite-based systems (sparclite-*-coff, sparclite-*-elf,
   15579             sparc86x-*-elf)
   15580           + OpenBSD 32-bit (sparc-*-openbsd*)
   15581 
   15582 Documentation improvements
   15583 
   15584 Other significant improvements
   15585 
   15586      * Location lists are now generated by default when compiling with
   15587        debug info and optimization. Location lists provide more accurate
   15588        debug info about locations of variables and they allow debugging
   15589        code compiled with -fomit-frame-pointer.
   15590      * The -fvisibility option has been added which allows the default ELF
   15591        visibility of all symbols to be set per compilation and the new
   15592        #pragma GCC visibility preprocessor command allows the setting of
   15593        default ELF visibility for a region of code. Using
   15594        -fvisibility=hidden especially in combination with the new
   15595        -fvisibility-inlines-hidden can yield substantial improvements in
   15596        output binary quality including avoiding PLT indirection overheads,
   15597        reduction of the exported symbol count by up to 60% (with resultant
   15598        improvements to link and load times), better scope for the
   15599        optimizer to improve code and up to a 20% reduction in binary size.
   15600        Using these options correctly yields a binary with a similar symbol
   15601        count to a Windows DLL.
   15602        Perhaps more importantly, this new feature finally allows (with
   15603        careful planning) complete avoidance of symbol clashes when
   15604        manually loading shared objects with RTLD_GLOBAL, thus finally
   15605        solving problems many projects such as python were forced to use
   15606        RTLD_LOCAL for (with its resulting issues for C++ correctness). You
   15607        can find more information about using these options at
   15608        [11]https://gcc.gnu.org/wiki/Visibility.
   15609      __________________________________________________________________
   15610 
   15611 GCC 4.0.1
   15612 
   15613    This is the [12]list of problem reports (PRs) from GCC's bug tracking
   15614    system that are known to be fixed in the 4.0.1 release. This list might
   15615    not be complete (that is, it is possible that some PRs that have been
   15616    fixed are not listed here).
   15617 
   15618 GCC 4.0.2
   15619 
   15620    This is the [13]list of problem reports (PRs) from GCC's bug tracking
   15621    system that are known to be fixed in the 4.0.2 release. This list might
   15622    not be complete (that is, it is possible that some PRs that have been
   15623    fixed are not listed here).
   15624 
   15625    Unfortunately, due to a release engineering failure, this release has a
   15626    regression on Solaris that will affect some C++ programs. We suggest
   15627    that Solaris users apply a [14]patch that corrects the problem. Users
   15628    who do not wish to apply the patch should explicitly link C++ programs
   15629    with the -pthreads option, even if they do not use threads. This
   15630    problem has been corrected in the current 4.0 branch sources and will
   15631    not be present in GCC 4.0.3.
   15632 
   15633 GCC 4.0.3
   15634 
   15635    Starting with this release, the function getcontext is recognized by
   15636    the compiler as having the same semantics as the setjmp function. In
   15637    particular, the compiler will ensure that all registers are dead before
   15638    calling such a function and will emit a warning about the variables
   15639    that may be clobbered after the second return from the function.
   15640 
   15641 GCC 4.0.4
   15642 
   15643    This is the [15]list of problem reports (PRs) from GCC's bug tracking
   15644    system that are known to be fixed in the 4.0.4 release. This list might
   15645    not be complete (that is, it is possible that some PRs that have been
   15646    fixed are not listed here).
   15647 
   15648    The 4.0.4 release is provided for those that require a high degree of
   15649    binary compatibility with previous 4.0.x releases. For most users, the
   15650    GCC team recommends that version 4.1.1 or later be used instead."
   15651 
   15652 
   15653     For questions related to the use of GCC, please consult these web
   15654     pages and the [16]GCC manuals. If that fails, the
   15655     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15656     web pages and the development of GCC are welcome on our developer
   15657     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   15658     archives.
   15659 
   15660    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   15661    distribution of this entire article is permitted in any medium,
   15662    provided this notice is preserved.
   15663 
   15664    These pages are [21]maintained by the GCC team. Last modified
   15665    2022-10-26.
   15666 
   15667 References
   15668 
   15669    1. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   15670    2. https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
   15671    3. https://gcc.gnu.org/projects/tree-ssa/
   15672    4. https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   15673    5. https://gcc.gnu.org/news/sms.html
   15674    6. https://www.akkadia.org/drepper/dsohowto.pdf
   15675    7. https://gcc.gnu.org/gcc-4.0/changes.html#visibility
   15676    8. https://itanium-cxx-abi.github.io/cxx-abi/
   15677    9. https://gcc.gnu.org/fortran/
   15678   10. https://gcc.gnu.org/install/
   15679   11. https://gcc.gnu.org/wiki/Visibility
   15680   12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
   15681   13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
   15682   14. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
   15683   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
   15684   16. https://gcc.gnu.org/onlinedocs/
   15685   17. mailto:gcc-help (a] gcc.gnu.org
   15686   18. mailto:gcc (a] gcc.gnu.org
   15687   19. https://gcc.gnu.org/lists.html
   15688   20. https://www.fsf.org/
   15689   21. https://gcc.gnu.org/about.html
   15690 ======================================================================
   15691 http://gcc.gnu.org/gcc-3.4/index.html
   15692                              GCC 3.4 Release Series
   15693 
   15694    (This release series is no longer supported.)
   15695 
   15696    May 26, 2006
   15697 
   15698    The [1]GNU project and the GCC developers are pleased to announce the
   15699    release of GCC 3.4.6.
   15700 
   15701    This release is a bug-fix release, containing fixes for regressions in
   15702    GCC 3.4.4 relative to previous releases of GCC. This is the last of the
   15703    3.4.x series.
   15704 
   15705    The GCC 3.4 release series includes numerous [2]new features,
   15706    improvements, bug fixes, and other changes, thanks to an [3]amazing
   15707    group of volunteers.
   15708 
   15709 Release History
   15710 
   15711    GCC 3.4.6
   15712           March 6, 2006 ([4]changes)
   15713 
   15714    GCC 3.4.5
   15715           November 30, 2005 ([5]changes)
   15716 
   15717    GCC 3.4.4
   15718           May 18, 2005 ([6]changes)
   15719 
   15720    GCC 3.4.3
   15721           November 4, 2004 ([7]changes)
   15722 
   15723    GCC 3.4.2
   15724           September 6, 2004 ([8]changes)
   15725 
   15726    GCC 3.4.1
   15727           July 1, 2004 ([9]changes)
   15728 
   15729    GCC 3.4.0
   15730           April 18, 2004 ([10]changes)
   15731 
   15732 References and Acknowledgements
   15733 
   15734    GCC used to stand for the GNU C Compiler, but since the compiler
   15735    supports several other languages aside from C, it now stands for the
   15736    GNU Compiler Collection.
   15737 
   15738    A list of [11]successful builds is updated as new information becomes
   15739    available.
   15740 
   15741    The GCC developers would like to thank the numerous people that have
   15742    contributed new features, improvements, bug fixes, and other changes as
   15743    well as test results to GCC. This [12]amazing group of volunteers is
   15744    what makes GCC successful.
   15745 
   15746    For additional information about GCC please refer to the [13]GCC
   15747    project web site or contact the [14]GCC development mailing list.
   15748 
   15749    To obtain GCC please use [15]our mirror sites, or [16]our version
   15750    control system.
   15751 
   15752 
   15753     For questions related to the use of GCC, please consult these web
   15754     pages and the [17]GCC manuals. If that fails, the
   15755     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15756     web pages and the development of GCC are welcome on our developer
   15757     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   15758     archives.
   15759 
   15760    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   15761    distribution of this entire article is permitted in any medium,
   15762    provided this notice is preserved.
   15763 
   15764    These pages are [22]maintained by the GCC team. Last modified
   15765    2022-10-26.
   15766 
   15767 References
   15768 
   15769    1. http://www.gnu.org/
   15770    2. https://gcc.gnu.org/gcc-3.4/changes.html
   15771    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15772    4. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   15773    5. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
   15774    6. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
   15775    7. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
   15776    8. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.2
   15777    9. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
   15778   10. https://gcc.gnu.org/gcc-3.4/changes.html
   15779   11. https://gcc.gnu.org/gcc-3.4/buildstat.html
   15780   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15781   13. https://gcc.gnu.org/index.html
   15782   14. mailto:gcc (a] gcc.gnu.org
   15783   15. https://gcc.gnu.org/mirrors.html
   15784   16. https://gcc.gnu.org/git.html
   15785   17. https://gcc.gnu.org/onlinedocs/
   15786   18. mailto:gcc-help (a] gcc.gnu.org
   15787   19. mailto:gcc (a] gcc.gnu.org
   15788   20. https://gcc.gnu.org/lists.html
   15789   21. https://www.fsf.org/
   15790   22. https://gcc.gnu.org/about.html
   15791 ======================================================================
   15792 http://gcc.gnu.org/gcc-3.4/changes.html
   15793                              GCC 3.4 Release Series
   15794                         Changes, New Features, and Fixes
   15795 
   15796    The final release in the 3.4 release series is [1]GCC 3.4.6. The series
   15797    is now closed.
   15798 
   15799    GCC 3.4 has [2]many improvements in the C++ front end. Before reporting
   15800    a bug, please make sure it's really GCC, and not your code, that is
   15801    broken.
   15802 
   15803 Caveats
   15804 
   15805      * GNU Make is now required to build GCC.
   15806      * With -nostdinc the preprocessor used to ignore both standard
   15807        include paths and include paths contained in environment variables.
   15808        It was neither documented nor intended that environment variable
   15809        paths be ignored, so this has been corrected.
   15810      * GCC no longer accepts the options -fvolatile, -fvolatile-global and
   15811        -fvolatile-static. It is unlikely that they worked correctly in any
   15812        3.x release.
   15813      * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
   15814      * Support for all the systems [3]obsoleted in GCC 3.3 has been
   15815        removed from GCC 3.4. See below for a [4]list of systems which are
   15816        obsoleted in this release.
   15817      * GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
   15818        compilers will not work.
   15819      * The implementation of the [5]MIPS ABIs has changed. As a result,
   15820        the code generated for certain MIPS targets will not be binary
   15821        compatible with earlier releases.
   15822      * In previous releases, the MIPS port had a fake "hilo" register with
   15823        the user-visible name accum. This register has been removed.
   15824      * The implementation of the [6]SPARC ABIs has changed. As a result,
   15825        the code generated will not be binary compatible with earlier
   15826        releases in certain cases.
   15827      * The configure option --enable-threads=pthreads has been removed;
   15828        use --enable-threads=posix instead, which should have the same
   15829        effect.
   15830      * Code size estimates used by inlining heuristics for C, Objective-C,
   15831        C++ and Java have been redesigned significantly. As a result the
   15832        parameters of -finline-insns, --param max-inline-insns-single and
   15833        --param max-inline-insns-auto need to be reconsidered.
   15834      * --param max-inline-slope and --param min-inline-insns have been
   15835        removed; they are not needed for the new bottom-up inlining
   15836        heuristics.
   15837      * The new unit-at-a-time compilation scheme has several compatibility
   15838        issues:
   15839           + The order in which functions, variables, and top-level asm
   15840             statements are emitted may have changed. Code relying on some
   15841             particular ordering needs to be updated. The majority of such
   15842             top-level asm statements can be replaced by section
   15843             attributes.
   15844           + Unreferenced static variables and functions are removed. This
   15845             may result in undefined references when an asm statement
   15846             refers to the variable/function directly. In that case either
   15847             the variable/function shall be listed in asm statement operand
   15848             or in the case of top-level asm statements the attribute used
   15849             shall be used to force function/variable to be always output
   15850             and considered as a possibly used by unknown code.
   15851             For variables the attribute is accepted only by GCC 3.4 and
   15852             newer, while for earlier versions it is sufficient to use
   15853             unused to silence warnings about the variables not being
   15854             referenced. To keep code portable across different GCC
   15855             versions, you can use appropriate preprocessor conditionals.
   15856           + Static functions now can use non-standard passing conventions
   15857             that may break asm statements calling functions directly.
   15858             Again the attribute used shall be used to prevent this
   15859             behavior.
   15860        As a temporary workaround, -fno-unit-at-a-time can be used, but
   15861        this scheme may not be supported by future releases of GCC.
   15862      * GCC 3.4 automatically places zero-initialized variables in the .bss
   15863        section on some operating systems. Versions of GNU Emacs up to (and
   15864        including) 21.3 will not work correctly when using this
   15865        optimization; you can use -fno-zero-initialized-in-bss to disable
   15866        it.
   15867      * If GCC 3.4 is configured with --enable-threads=posix (the default
   15868        on most targets that support pthreads) then _REENTRANT will be
   15869        defined unconditionally by some libstdc++ headers. C++ code which
   15870        relies on that macro to detect whether multi-threaded code is being
   15871        compiled might change in meaning, possibly resulting in linker
   15872        errors for single-threaded programs. Affected users of [7]Boost
   15873        should compile single-threaded code with -DBOOST_DISABLE_THREADS.
   15874        See Bugzilla for [8]more information.
   15875 
   15876 General Optimizer Improvements
   15877 
   15878      * Usability of the profile feedback and coverage testing has been
   15879        improved.
   15880           + Performance of profiled programs has been improved by faster
   15881             profile merging code.
   15882           + Better use of the profile feedback for optimization (loop
   15883             unrolling and loop peeling).
   15884           + File locking support allowing fork() calls and parallel runs
   15885             of profiled programs.
   15886           + Coverage file format has been redesigned.
   15887           + gcov coverage tool has been improved.
   15888           + make profiledbootstrap available to build a faster compiler.
   15889             Experiments made on i386 hardware showed an 11% speedup on -O0
   15890             and a 7.5% speedup on -O2 compilation of a [9]large C++
   15891             testcase.
   15892           + New value profiling pass enabled via -fprofile-values
   15893           + New value profile transformations pass enabled via -fvpt aims
   15894             to optimize some code sequences by exploiting knowledge about
   15895             value ranges or other properties of the operands. At the
   15896             moment a conversion of expensive divisions into cheaper
   15897             operations has been implemented.
   15898           + New -fprofile-generate and -fprofile-use command-line options
   15899             to simplify the use of profile feedback.
   15900      * A new unit-at-a-time compilation scheme for C, Objective-C, C++ and
   15901        Java which is enabled via -funit-at-a-time (and implied by -O2). In
   15902        this scheme a whole file is parsed first and optimized later. The
   15903        following basic inter-procedural optimizations are implemented:
   15904           + Removal of unreachable functions and variables
   15905           + Discovery of local functions (functions with static linkage
   15906             whose address is never taken)
   15907           + On i386, these local functions use register parameter passing
   15908             conventions.
   15909           + Reordering of functions in topological order of the call graph
   15910             to enable better propagation of optimizing hints (such as the
   15911             stack alignments needed by functions) in the back end.
   15912           + Call graph based out-of-order inlining heuristics which allows
   15913             to limit overall compilation unit growth (--param
   15914             inline-unit-growth).
   15915        Overall, the unit-at-a-time scheme produces a 1.3% improvement for
   15916        the SPECint2000 benchmark on the i386 architecture (AMD Athlon
   15917        CPU).
   15918      * More realistic code size estimates used by inlining for C,
   15919        Objective-C, C++ and Java. The growth of large functions can now be
   15920        limited via --param large-function-insns and --param
   15921        large-function-growth.
   15922      * A new cfg-level loop optimizer pass replaces the old loop unrolling
   15923        pass and adds two other loop transformations -- loop peeling and
   15924        loop unswitching -- and also uses the profile feedback to limit
   15925        code growth. (The three optimizations are enabled by
   15926        -funroll-loops, -fpeel-loops and -funswitch-loops flags,
   15927        respectively).
   15928        The old loop unroller still can be enabled by -fold-unroll-loops
   15929        and may produce better code in some cases, especially when the
   15930        webizer optimization pass is not run.
   15931      * A new web construction pass enabled via -fweb (and implied by -O3)
   15932        improves the quality of register allocation, CSE, first scheduling
   15933        pass and some other optimization passes by avoiding re-use of
   15934        pseudo registers with non-overlapping live ranges. The pass almost
   15935        always improves code quality but does make debugging difficult and
   15936        thus is not enabled by default by -O2
   15937        The pass is especially effective as cleanup after code duplication
   15938        passes, such as the loop unroller or the tracer.
   15939      * Experimental implementations of superblock or trace scheduling in
   15940        the second scheduling pass can be enabled via
   15941        -fsched2-use-superblocks and -fsched2-use-traces, respectively.
   15942 
   15943 New Languages and Language specific improvements
   15944 
   15945   Ada
   15946 
   15947      * The Ada front end has been updated to include numerous bug fixes
   15948        and enhancements. These include:
   15949           + Improved project file support
   15950           + Additional set of warnings about potential wrong code
   15951           + Improved error messages
   15952           + Improved code generation
   15953           + Improved cross reference information
   15954           + Improved inlining
   15955           + Better run-time check elimination
   15956           + Better error recovery
   15957           + More efficient implementation of unbounded strings
   15958           + Added features in GNAT.Sockets, GNAT.OS_Lib, GNAT.Debug_Pools,
   15959             ...
   15960           + New GNAT.xxxx packages (e.g. GNAT.Strings,
   15961             GNAT.Exception_Action)
   15962           + New pragmas
   15963           + New -gnatS switch replacing gnatpsta
   15964           + Implementation of new Ada features (in particular limited
   15965             with, limited aggregates)
   15966 
   15967   C/Objective-C/C++
   15968 
   15969      * Precompiled headers are now supported. Precompiled headers can
   15970        dramatically speed up compilation of some projects. There are some
   15971        known defects in the current precompiled header implementation that
   15972        will result in compiler crashes in relatively rare situations.
   15973        Therefore, precompiled headers should be considered a "technology
   15974        preview" in this release. Read the manual for details about how to
   15975        use precompiled headers.
   15976      * File handling in the preprocessor has been rewritten. GCC no longer
   15977        gets confused by symlinks and hardlinks, and now has a correct
   15978        implementation of #import and #pragma once. These two directives
   15979        have therefore been un-deprecated.
   15980      * The undocumented extension that allowed C programs to have a label
   15981        at the end of a compound statement, which has been deprecated since
   15982        GCC 3.0, has been removed.
   15983      * The cast-as-lvalue extension has been removed for C++ and
   15984        deprecated for C and Objective-C. In particular, code like this:
   15985         int i;
   15986         (char) i = 5;
   15987 
   15988        or this:
   15989         char *p;
   15990         ((int *) p)++;
   15991 
   15992        is no longer accepted for C++ and will not be accepted for C and
   15993        Objective-C in a future version.
   15994      * The conditional-expression-as-lvalue extension has been deprecated
   15995        for C and Objective-C. In particular, code like this:
   15996         int a, b, c;
   15997         (a ? b : c) = 2;
   15998 
   15999        will not be accepted for C and Objective-C in a future version.
   16000      * The compound-expression-as-lvalue extension has been deprecated for
   16001        C and Objective-C. In particular, code like this:
   16002         int a, b;
   16003         (a, b) = 2;
   16004 
   16005        will not be accepted for C and Objective-C in a future version. A
   16006        possible non-intrusive workaround is the following:
   16007         (*(a, &b)) = 2;
   16008 
   16009      * Several [10]built-in functions such as __builtin_popcount for
   16010        counting bits, finding the highest and lowest bit in a word, and
   16011        parity have been added.
   16012      * The -fwritable-strings option has been deprecated and will be
   16013        removed.
   16014      * Many C math library functions are now recognized as built-ins and
   16015        optimized.
   16016      * The C, C++, and Objective-C compilers can now handle source files
   16017        written in any character encoding supported by the host C library.
   16018        The default input character set is taken from the current locale,
   16019        and may be overridden with the -finput-charset command line option.
   16020        In the future we will add support for inline encoding markers.
   16021 
   16022   C++
   16023 
   16024      * G++ is now much closer to full conformance to the ISO/ANSI C++
   16025        standard. This means, among other things, that a lot of invalid
   16026        constructs which used to be accepted in previous versions will now
   16027        be rejected. It is very likely that existing C++ code will need to
   16028        be fixed. This document lists some of the most common issues.
   16029      * A hand-written recursive-descent C++ parser has replaced the
   16030        YACC-derived C++ parser from previous GCC releases. The new parser
   16031        contains much improved infrastructure needed for better parsing of
   16032        C++ source codes, handling of extensions, and clean separation
   16033        (where possible) between proper semantics analysis and parsing. The
   16034        new parser fixes many bugs that were found in the old parser.
   16035      * You must now use the typename and template keywords to disambiguate
   16036        dependent names, as required by the C++ standard.
   16037         struct K {
   16038           typedef int mytype_t;
   16039         };
   16040 
   16041         template <class T1> struct A {
   16042           template <class T2> struct B {
   16043               void callme(void);
   16044             };
   16045 
   16046           template <int N> void bar(void)
   16047           {
   16048             // Use 'typename' to tell the parser that T1::mytype_t names
   16049             //  a type. This is needed because the name is dependent (in
   16050             //  this case, on template parameter T1).
   16051             typename T1::mytype_t x;
   16052             x = 0;
   16053           }
   16054         };
   16055 
   16056         template <class T> void template_func(void)
   16057         {
   16058           // Use 'template' to prefix member templates within
   16059           //  dependent types (a has type A<T>, which depends on
   16060           //  the template parameter T).
   16061           A<T> a;
   16062           a.template bar<0>();
   16063 
   16064           // Use 'template' to tell the parser that B is a nested
   16065           //  template class (dependent on template parameter T), and
   16066           //  'typename' because the whole A<T>::B<int> is
   16067           //  the name of a type (again, dependent).
   16068           typename A<T>::template B<int> b;
   16069           b.callme();
   16070         }
   16071 
   16072         void non_template_func(void)
   16073         {
   16074           // Outside of any template class or function, no names can be
   16075           //  dependent, so the use of the keyword 'typename' and 'template'
   16076           //  is not needed (and actually forbidden).
   16077           A<K> a;
   16078           a.bar<0>();
   16079           A<K>::B<float> b;
   16080           b.callme();
   16081         }
   16082      * In a template definition, unqualified names will no longer find
   16083        members of a dependent base (as specified by [temp.dep]/3 in the
   16084        C++ standard). For example,
   16085         template <typename T> struct B {
   16086           int m;
   16087           int n;
   16088           int f ();
   16089           int g ();
   16090         };
   16091         int n;
   16092         int g ();
   16093         template <typename T> struct C : B<T> {
   16094           void h ()
   16095           {
   16096             m = 0; // error
   16097             f ();  // error
   16098             n = 0; // ::n is modified
   16099             g ();  // ::g is called
   16100           }
   16101         };
   16102        You must make the names dependent, e.g. by prefixing them with
   16103        this->. Here is the corrected definition of C<T>::h,
   16104         template <typename T> void C<T>::h ()
   16105         {
   16106           this->m = 0;
   16107           this->f ();
   16108           this->n = 0
   16109           this->g ();
   16110         }
   16111        As an alternative solution (unfortunately not backwards compatible
   16112        with GCC 3.3), you may use using declarations instead of this->:
   16113         template <typename T> struct C : B<T> {
   16114           using B<T>::m;
   16115           using B<T>::f;
   16116           using B<T>::n;
   16117           using B<T>::g;
   16118           void h ()
   16119           {
   16120             m = 0;
   16121             f ();
   16122             n = 0;
   16123             g ();
   16124           }
   16125         };
   16126      * In templates, all non-dependent names are now looked up and bound
   16127        at definition time (while parsing the code), instead of later when
   16128        the template is instantiated. For instance:
   16129         void foo(int);
   16130 
   16131         template <int> struct A {
   16132           static void bar(void){
   16133             foo('a');
   16134           }
   16135         };
   16136 
   16137         void foo(char);
   16138 
   16139         int main()
   16140         {
   16141           A<0>::bar();    // Calls foo(int), used to call foo(char).
   16142         }
   16143 
   16144      * In an explicit instantiation of a class template, you must use
   16145        class or struct before the template-id:
   16146         template <int N>
   16147         class A {};
   16148 
   16149         template A<0>;         // error, not accepted anymore
   16150         template class A<0>;   // OK
   16151      * The "named return value" and "implicit typename" extensions have
   16152        been removed.
   16153      * Default arguments in function types have been deprecated and will
   16154        be removed.
   16155      * ARM-style name-injection of friend declarations has been deprecated
   16156        and will be removed. For example: struct S { friend void f(); };
   16157        void g() { f(); } will not be accepted by future versions of G++;
   16158        instead a declaration of "f" will need to be present outside of the
   16159        scope of "S".
   16160      * Covariant returns are implemented for all but varadic functions
   16161        that require an adjustment.
   16162      * When -pedantic is used, G++ now issues errors about spurious
   16163        semicolons. For example,
   16164         namespace N {}; // Invalid semicolon.
   16165         void f() {}; // Invalid semicolon.
   16166      * G++ no longer accepts attributes for a declarator after the
   16167        initializer associated with that declarator. For example,
   16168         X x(1) __attribute__((...));
   16169        is no longer accepted. Instead, use:
   16170         X x __attribute__((...)) (1);
   16171      * Inside the scope of a template class, the name of the class itself
   16172        can be treated as either a class or a template. So GCC used to
   16173        accept the class name as argument of type template, and template
   16174        template parameter. However this is not C++ standard compliant. Now
   16175        the name is not treated as a valid template template argument
   16176        unless you qualify the name by its scope. For example, the code
   16177        below no longer compiles.
   16178         template <template <class> class TT> class X {};
   16179         template <class T> class Y {
   16180           X<Y> x; // Invalid, Y is always a type template parameter.
   16181         };
   16182        The valid code for the above example is
   16183           X< ::Y> x; // Valid.
   16184        (Notice the space between < and : to prevent GCC to interpret this
   16185        as a digraph for [.)
   16186      * Friend declarations that refer to template specializations are
   16187        rejected if the template has not already been declared. For
   16188        example,
   16189         template <typename T>
   16190         class C {
   16191           friend void f<> (C&);
   16192         };
   16193        is rejected. You must first declare f as a template,
   16194         template <typename T>
   16195         void f(T);
   16196      * In case of friend declarations, every name used in the friend
   16197        declaration must be accessible at the point of that declaration.
   16198        Previous versions of G++ used to be less strict about this and
   16199        allowed friend declarations for private class members, for example.
   16200        See the ISO C++ Standard Committee's [11]defect report #209 for
   16201        details.
   16202      * Declaration of member functions of class templates as friends are
   16203        supported. For example,
   16204         template <typename T> struct A {
   16205           void f();
   16206         };
   16207         class C {
   16208           template <typename T> friend void A<T>::f();
   16209         };
   16210      * You must use template <> to introduce template specializations, as
   16211        required by the standard. For example,
   16212         template <typename T>
   16213         struct S;
   16214 
   16215         struct S<int> { };
   16216        is rejected. You must write,
   16217         template <> struct S<int> {};
   16218      * G++ used to accept code like this,
   16219         struct S {
   16220           int h();
   16221           void f(int i = g());
   16222           int g(int i = h());
   16223         };
   16224        This behavior is not mandated by the standard. Now G++ issues an
   16225        error about this code. To avoid the error, you must move the
   16226        declaration of g before the declaration of f. The default arguments
   16227        for g must be visible at the point where it is called.
   16228      * The C++ ABI Section 3.3.3 specifications for the array construction
   16229        routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return
   16230        NULL when the allocator argument returns NULL. These changes are
   16231        incorporated into the libstdc++ runtime library.
   16232      * Using a name introduced by a typedef in a friend declaration or in
   16233        an explicit instantiation is now rejected, as specified by the ISO
   16234        C++ standard.
   16235         class A;
   16236         typedef A B;
   16237         class C {
   16238           friend class B;      // error, no typedef name here
   16239           friend B;            // error, friend always needs class/struct/enum
   16240           friend class A;      // OK
   16241         };
   16242 
   16243         template <int> class Q {};
   16244         typedef Q<0> R;
   16245         template class R;      // error, no typedef name here
   16246         template class Q<0>;   // OK
   16247      * When allocating an array with a new expression, GCC used to allow
   16248        parentheses around the type name. This is actually ill-formed and
   16249        it is now rejected:
   16250         int* a = new (int)[10];    // error, not accepted anymore
   16251         int* a = new int[10];      // OK
   16252      * When binding an rvalue of class type to a reference, the copy
   16253        constructor of the class must be accessible. For instance, consider
   16254        the following code:
   16255         class A
   16256         {
   16257         public:
   16258           A();
   16259 
   16260         private:
   16261           A(const A&);   // private copy ctor
   16262         };
   16263 
   16264         A makeA(void);
   16265         void foo(const A&);
   16266 
   16267         void bar(void)
   16268         {
   16269           foo(A());       // error, copy ctor is not accessible
   16270           foo(makeA());   // error, copy ctor is not accessible
   16271 
   16272           A a1;
   16273           foo(a1);        // OK, a1 is a lvalue
   16274         }
   16275        This might be surprising at first sight, especially since most
   16276        popular compilers do not correctly implement this rule ([12]further
   16277        details).
   16278      * When forming a pointer to member or a pointer to member function,
   16279        access checks for class visibility (public, protected, private) are
   16280        now performed using the qualifying scope of the name itself. This
   16281        is better explained with an example:
   16282         class A
   16283         {
   16284         public:
   16285           void pub_func();
   16286         protected:
   16287           void prot_func();
   16288         private:
   16289           void priv_func();
   16290         };
   16291 
   16292         class B : public A
   16293         {
   16294         public:
   16295           void foo()
   16296           {
   16297             &A::pub_func;   // OK, pub_func is accessible through A
   16298             &A::prot_func;  // error, cannot access prot_func through A
   16299             &A::priv_func;  // error, cannot access priv_func through A
   16300 
   16301             &B::pub_func;   // OK, pub_func is accessible through B
   16302             &B::prot_func;  // OK, can access prot_func through B (within B)
   16303             &B::priv_func;  // error, cannot access priv_func through B
   16304           }
   16305         };
   16306 
   16307     Runtime Library (libstdc++)
   16308 
   16309      * Optimization work:
   16310           + Streamlined streambuf, filebuf, separate synched with C
   16311             Standard I/O streambuf.
   16312           + All formatted I/O now uses cached locale information.
   16313           + STL optimizations (memory/speed for list, red-black trees as
   16314             used by sets and maps).
   16315           + More use of GCC builtins.
   16316           + String optimizations (avoid contention on
   16317             increment/decrement-and-test of the reference count in the
   16318             empty-string object, constructor from input_iterators
   16319             speedup).
   16320      * Static linkage size reductions.
   16321      * Large File Support (files larger than 2 GB on 32-bit systems).
   16322      * Wide character and variable encoding filebuf work (UTF-8, Unicode).
   16323      * Generic character traits.
   16324      * Also support wchar_t specializations on Mac OS 10.3.x, FreeBSD 5.x,
   16325        Solaris 2.7 and above, AIX 5.x, Irix 6.5.
   16326      * The allocator class is now standard-conformant, and two additional
   16327        extension allocators have been added, mt_alloc and
   16328        bitmap_allocator.
   16329      * PCH support: -include bits/stdc++.h (2x compile speedup).
   16330      * Rewrote __cxa_demangle with support for C++ style allocators.
   16331      * New debug modes for STL containers and iterators.
   16332      * Testsuite rewrite: five times as many tests, plus increasingly
   16333        sophisticated tests, including I/O, MT, multi-locale, wide and
   16334        narrow characters.
   16335      * Use current versions of GNU "autotools" for build/configuration.
   16336 
   16337   Objective-C
   16338 
   16339      * The Objective-C front end has been updated to include the numerous
   16340        bug fixes and enhancements previously available only in Apple's
   16341        version of GCC. These include:
   16342           + Structured exception (@try... @catch... @finally, @throw) and
   16343             synchronization (@synchronized) support. These are accessible
   16344             via the -fobjc-exceptions switch; as of this writing, they may
   16345             only be used in conjunction with -fnext-runtime on Mac OS X
   16346             10.3 and later. See [13]Options Controlling Objective-C
   16347             Dialect for more information.
   16348           + An overhaul of @encode logic. The C99 _Bool and C++ bool type
   16349             may now be encoded as 'B'. In addition, the back-end/codegen
   16350             dependencies have been removed.
   16351           + An overhaul of message dispatch construction, ensuring that
   16352             the various receiver types (and casts thereof) are handled
   16353             properly, and that correct diagnostics are issued.
   16354           + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
   16355             (-freplace-objc-classes) debugging modes, currently available
   16356             on Mac OS X 10.3 and later. See [14]Options Controlling
   16357             Objective-C Dialect for more information.
   16358           + Access to optimized runtime entry points (-fno-nil-receivers )
   16359             on the assumption that message receivers are never nil. This
   16360             is currently available on Mac OS X 10.3 and later. See
   16361             [15]Options Controlling Objective-C Dialect for more
   16362             information.
   16363 
   16364   Java
   16365 
   16366      * Compiling a .jar file will now cause non-.class entries to be
   16367        automatically compiled as resources.
   16368      * libgcj has been ported to Darwin.
   16369      * Jeff Sturm has adapted Jan Hubicka's call graph optimization code
   16370        to gcj.
   16371      * libgcj has a new gcjlib URL type; this lets URLClassLoader load
   16372        code from shared libraries.
   16373      * libgcj has been much more completely merged with [16]GNU Classpath.
   16374      * Class loading is now much more correct; in particular the caller's
   16375        class loader is now used when that is required.
   16376      * [17]Eclipse 2.x will run out of the box using gij.
   16377      * Parts of java.nio have been implemented. Direct and indirect
   16378        buffers work, as do fundamental file and socket operations.
   16379      * java.awt has been improved, though it is still not ready for
   16380        general use.
   16381      * The HTTP protocol handler now uses HTTP/1.1 and can handle the POST
   16382        method.
   16383      * The MinGW port has matured. Enhancements include socket timeout
   16384        support, thread interruption, improved Runtime.exec() handling and
   16385        support for accented characters in filenames.
   16386 
   16387   Fortran
   16388 
   16389      * Fortran improvements are listed in the [18]Fortran documentation.
   16390 
   16391 New Targets and Target Specific Improvements
   16392 
   16393   Alpha
   16394 
   16395      * Several [19]built-in functions have been added such as
   16396        __builtin_alpha_zap to allow utilizing the more obscure
   16397        instructions of the CPU.
   16398      * Parameter passing of complex arguments has changed to match the
   16399        ABI. This change is incompatible with previous GCC versions, but
   16400        does fix compatibility with the Tru64 compiler and several corner
   16401        cases where GCC was incompatible with itself.
   16402 
   16403   ARM
   16404 
   16405      * Nicolas Pitre has contributed his hand-coded floating-point support
   16406        code for ARM. It is both significantly smaller and faster than the
   16407        existing C-based implementation, even when building applications
   16408        for Thumb. The arm-elf configuration has been converted to use the
   16409        new code.
   16410      * Support for the Intel's iWMMXt architecture, a second generation
   16411        XScale processor, has been added. Enabled at run time with the
   16412        -mcpu=iwmmxt command line switch.
   16413      * A new ARM target has been added: arm-wince-pe. This is similar to
   16414        the arm-pe target, but it defaults to using the APCS32 ABI.
   16415      * The existing ARM pipeline description has been converted to the use
   16416        the [20]DFA processor pipeline model. There is not much change in
   16417        code performance, but the description is now [21]easier to
   16418        understand.
   16419      * Support for the Cirrus EP9312 Maverick floating point co-processor
   16420        added. Enabled at run time with the -mcpu=ep9312 command line
   16421        switch. Note however that the multilibs to support this chip are
   16422        currently disabled in gcc/config/arm/t-arm-elf, so if you want to
   16423        enable their production you will have to uncomment the entries in
   16424        that file.
   16425 
   16426   H8/300
   16427 
   16428      * Support for long long has been added.
   16429      * Support for saveall attribute has been added.
   16430      * Pavel Pisa contributed hand-written 32-bit-by-32-bit division code
   16431        for H8/300H and H8S, which is much faster than the previous
   16432        implementation.
   16433      * A lot of small performance improvements.
   16434 
   16435   IA-32/AMD64 (x86-64)
   16436 
   16437      * Tuning for K8 (AMD Opteron/Athlon64) core is available via
   16438        -march=k8 and -mcpu=k8.
   16439      * Scalar SSE code generation carefully avoids reformatting penalties,
   16440        hidden dependencies and minimizes the number of uops generated on
   16441        both Intel and AMD CPUs.
   16442      * Vector MMX and SSE operands are now passed in registers to improve
   16443        performance and match the argument passing convention used by the
   16444        Intel C++ Compiler. As a result it is not possible to call
   16445        functions accepting vector arguments compiled by older GCC version.
   16446      * Conditional jump elimination is now more aggressive on modern CPUs.
   16447      * The Athlon ports has been converted to use the DFA processor
   16448        pipeline description.
   16449      * Optimization of indirect tail calls is now possible in a similar
   16450        fashion as direct sibcall optimization.
   16451      * Further small performance improvements.
   16452      * -m128bit-long-double is now less buggy.
   16453      * __float128 support in 64-bit compilation.
   16454      * Support for data structures exceeding 2GB in 64-bit mode.
   16455      * -mcpu has been renamed to -mtune.
   16456 
   16457   IA-64
   16458 
   16459      * Tuning code for the Itanium 2 processor has been added. The
   16460        generation of code tuned for Itanium 2 (option -mtune=itanium2) is
   16461        enabled by default now. To generate code tuned for Itanium 1 the
   16462        option -mtune=itanium1 should be used.
   16463      * [22]DFA processor pipeline descriptions for the IA-64 processors
   16464        have been added. This resulted in about 3% improvement on the
   16465        SPECInt2000 benchmark for Itanium 2.
   16466      * Instruction bundling for the IA-64 processors has been rewritten
   16467        using the DFA pipeline hazard recognizer. It resulted in about 60%
   16468        compiler speedup on the SPECInt2000 C programs.
   16469 
   16470   M32R
   16471 
   16472      * Support for the M32R/2 processor has been added by Renesas.
   16473      * Support for an M32R GNU/Linux target and PIC code generation has
   16474        been added by Renesas.
   16475 
   16476   M68000
   16477 
   16478      * Bernardo Innocenti (Develer S.r.l.) has contributed the
   16479        m68k-uclinux target, based on former work done by Paul Dale
   16480        (SnapGear Inc.). Code generation for the ColdFire processors family
   16481        has been enhanced and extended to support the MCF 53xx and MCF 54xx
   16482        cores, integrating former work done by Peter Barada (Motorola).
   16483 
   16484   MIPS
   16485 
   16486     Processor-specific changes
   16487 
   16488      * Support for the RM7000 and RM9000 processors has been added. It can
   16489        be selected using the -march compiler option and should work with
   16490        any MIPS I (mips-*) or MIPS III (mips64-*) configuration.
   16491      * Support for revision 2 of the MIPS32 ISA has been added. It can be
   16492        selected with the command-line option -march=mips32r2.
   16493      * There is a new option, -mfix-sb1, to work around certain SB-1
   16494        errata.
   16495 
   16496     Configuration
   16497 
   16498      * It is possible to customize GCC using the following configure-time
   16499        options:
   16500           + --with-arch, which specifies the default value of the -march
   16501             option.
   16502           + --with-tune, which specifies the default value of the -mtune
   16503             option.
   16504           + --with-abi, which specifies the default ABI.
   16505           + --with-float=soft, which tells GCC to use software floating
   16506             point by default.
   16507           + --with-float=hard, which tells GCC to use hardware floating
   16508             point by default.
   16509      * A 64-bit GNU/Linux port has been added. The associated
   16510        configurations are mips64-linux-gnu and mips64el-linux-gnu.
   16511      * The 32-bit GNU/Linux port now supports Java.
   16512      * The IRIX 6 configuration now supports the o32 ABI and will build
   16513        o32 multilibs by default. This support is compatible with both
   16514        binutils and the SGI tools, but note that several features,
   16515        including debugging information and DWARF2 exception handling, are
   16516        only available when using the GNU assembler. Use of the GNU
   16517        assembler and linker (version 2.15 or above) is strongly
   16518        recommended.
   16519      * The IRIX 6 configuration now supports 128-bit long doubles.
   16520      * There are two new RTEMS-specific configurations, mips-rtems and
   16521        mipsel-rtems.
   16522      * There are two new *-elf configurations, mipsisa32r2-elf and
   16523        mipsisa32r2el-elf.
   16524 
   16525     General
   16526 
   16527      * Several [23]ABI bugs have been fixed. Unfortunately, these changes
   16528        will break binary compatibility with earlier releases.
   16529      * GCC can now use explicit relocation operators when generating
   16530        -mabicalls code. This behavior is controlled by -mexplicit-relocs
   16531        and can have several performance benefits. For example:
   16532           + It allows for more optimization of GOT accesses, including
   16533             better scheduling and redundancy elimination.
   16534           + It allows sibling calls to be implemented as jumps.
   16535           + n32 and n64 leaf functions can use a call-clobbered global
   16536             pointer instead of $28.
   16537           + The code to set up $gp can be removed from functions that
   16538             don't need it.
   16539      * A new option, -mxgot, allows the GOT to be bigger than 64k. This
   16540        option is equivalent to the assembler's -xgot option and should be
   16541        used instead of -Wa,-xgot.
   16542      * Frame pointer elimination is now supported when generating 64-bit
   16543        MIPS16 code.
   16544      * Inline block moves have been optimized to take more account of
   16545        alignment information.
   16546      * Many internal changes have been made to the MIPS port, mostly aimed
   16547        at reducing the reliance on assembler macros.
   16548 
   16549   PowerPC
   16550 
   16551      * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
   16552        [24]ABI incompatibilities regarding the way parameters are passed
   16553        during functions calls. These changes may result in incompatibility
   16554        between code compiled with GCC 3.3 and GCC 3.4.
   16555 
   16556     PowerPC Darwin
   16557 
   16558      * Support for shared/dylib gcc libraries has been added. It is
   16559        enabled by default on powerpc-apple-darwin7.0.0 and up.
   16560      * Libgcj is enabled by default. On systems older than
   16561        powerpc-apple-darwin7.0.0 you need to install dlcompat.
   16562      * 128-bit IBM extended precision format support added for long
   16563        double.
   16564 
   16565     PowerPC64 GNU/Linux
   16566 
   16567      * By default, PowerPC64 GNU/Linux now uses natural alignment of
   16568        structure elements. The old four byte alignment for double, with
   16569        special rules for a struct starting with a double, can be chosen
   16570        with -malign-power. This change may result in incompatibility
   16571        between code compiled with GCC 3.3 and GCC 3.4.
   16572      * -mabi=altivec is now the default rather than -mabi=no-altivec.
   16573      * 128-bit IBM extended precision format support added for long
   16574        double.
   16575 
   16576   S/390 and zSeries
   16577 
   16578      * New command-line options allow to specify the intended execution
   16579        environment for generated code:
   16580           + -mesa/-mzarch allows to specify whether to generate code
   16581             running in ESA/390 mode or in z/Architecture mode (this is
   16582             applicable to 31-bit code only).
   16583           + -march allows to specify a minimum processor architecture
   16584             level (g5, g6, z900, or z990).
   16585           + -mtune allows to specify which processor to tune for.
   16586      * It is possible to customize GCC using the following configure-time
   16587        options:
   16588           + --with-mode, which specifies whether to default to assuming
   16589             ESA/390 or z/Architecture mode.
   16590           + --with-arch, which specifies the default value of the -march
   16591             option.
   16592           + --with-tune, which specifies the default value of the -mtune
   16593             option.
   16594      * Support for the z990 processor has been added, and can be selected
   16595        using -march=z990 or -mtune=z990. This includes instruction
   16596        scheduling tuned for the superscalar instruction pipeline of the
   16597        z990 processor as well as support for all new instructions provided
   16598        by the long-displacement facility.
   16599      * Support to generate 31-bit code optimized for zSeries processors
   16600        (running in ESA/390 or in z/Architecture mode) has been added. This
   16601        can be selected using -march=z900 and -mzarch respectively.
   16602      * Instruction scheduling for the z900 and z990 processors now uses
   16603        the DFA pipeline hazard recognizer.
   16604      * GCC no longer generates code to maintain a stack backchain,
   16605        previously used to generate stack backtraces for debugging
   16606        purposes. As replacement that does not incur runtime overhead,
   16607        DWARF-2 call frame information is provided by GCC; this is
   16608        supported by GDB 6.1. The old behavior can be restored using the
   16609        -mbackchain option.
   16610      * The stack frame size of functions may now exceed 2 GB in 64-bit
   16611        code.
   16612      * A port for the 64-bit IBM TPF operating system has been added; the
   16613        configuration is s390x-ibm-tpf. This configuration is supported as
   16614        cross-compilation target only.
   16615      * Various changes to improve the generated code have been
   16616        implemented, including:
   16617           + GCC now uses the MULTIPLY AND ADD and MULTIPLY AND SUBTRACT
   16618             instructions to significantly speed up many floating-point
   16619             applications.
   16620           + GCC now uses the ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL
   16621             WITH BORROW instructions to speed up long long arithmetic.
   16622           + GCC now uses the SEARCH STRING instruction to implement
   16623             strlen().
   16624           + In many cases, function call overhead for 31-bit code has been
   16625             reduced by placing the literal pool after the function code
   16626             instead of after the function prolog.
   16627           + Register 14 is no longer reserved in 64-bit code.
   16628           + Handling of global register variables has been improved.
   16629 
   16630   SPARC
   16631 
   16632      * The option -mflat is deprecated.
   16633      * Support for large (> 2GB) frames has been added to the 64-bit port.
   16634      * Several [25]ABI bugs have been fixed. Unfortunately, these changes
   16635        will break binary compatibility with earlier releases.
   16636      * The default debugging format has been switched from STABS to
   16637        DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
   16638        the default debugging format for 64-bit code on Solaris.
   16639 
   16640   SuperH
   16641 
   16642      * Support for the SH2E processor has been added. Enabled at run time
   16643        with the -m2e command line switch, or at configure time by
   16644        specifying sh2e as the machine part of the target triple.
   16645 
   16646   V850
   16647 
   16648      * Support for the Mitsubishi V850E1 processor has been added. This is
   16649        a variant of the V850E processor with some additional debugging
   16650        instructions.
   16651 
   16652   Xtensa
   16653 
   16654      * Several ABI bugs have been fixed. Unfortunately, these changes
   16655        break binary compatibility with earlier releases.
   16656           + For big-endian processors, the padding of aggregate return
   16657             values larger than a word has changed. If the size of an
   16658             aggregate return value is not a multiple of 32 bits, previous
   16659             versions of GCC inserted padding in the most-significant bytes
   16660             of the first return value register. Aggregates larger than a
   16661             word are now padded in the least-significant bytes of the last
   16662             return value register used. Aggregates smaller than a word are
   16663             still padded in the most-significant bytes. The return value
   16664             padding has not changed for little-endian processors.
   16665           + Function arguments with 16-byte alignment are now properly
   16666             aligned.
   16667           + The implementation of the va_list type has changed. A va_list
   16668             value created by va_start from a previous release cannot be
   16669             used with va_arg from this release, or vice versa.
   16670      * More processor configuration options for Xtensa processors are
   16671        supported:
   16672           + the ABS instruction is now optional;
   16673           + the ADDX* and SUBX* instructions are now optional;
   16674           + an experimental CONST16 instruction can be used to synthesize
   16675             constants instead of loading them from constant pools.
   16676        These and other Xtensa processor configuration options can no
   16677        longer be enabled or disabled by command-line options; the
   16678        processor configuration must be specified by the xtensa-config.h
   16679        header file when building GCC. Additionally, the
   16680        -mno-serialize-volatile option is no longer supported.
   16681 
   16682 Obsolete Systems
   16683 
   16684    Support for a number of older systems has been declared obsolete in GCC
   16685    3.4. Unless there is activity to revive them, the next release of GCC
   16686    will have their sources permanently removed.
   16687 
   16688    All configurations of the following processor architectures have been
   16689    declared obsolete:
   16690      * Mitsubishi D30V, d30v-*
   16691      * AT&T DSP1600 and DSP1610, dsp16xx-*
   16692      * Intel 80960, i960
   16693 
   16694    Also, some individual systems have been obsoleted:
   16695      * ARM Family
   16696           + Support for generating code for operation in APCS/26 mode
   16697             (-mapcs-26).
   16698      * IBM ESA/390
   16699           + "Bigfoot" port, i370-*. (The other port, s390-*, is actively
   16700             maintained and supported.)
   16701      * Intel 386 family
   16702           + MOSS, i?86-moss-msdos and i?86-*-moss*
   16703           + NCR 3000 running System V r.4, i?86-ncr-sysv4*
   16704           + FreeBSD with a.out object format, i?86-*-freebsd*aout* and
   16705             i?86-*-freebsd2*
   16706           + GNU/Linux with a.out object format, i?86-linux*aout*
   16707           + GNU/Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
   16708           + Interix versions before Interix 3, i?86-*-interix
   16709           + Mach microkernel, i?86-mach*
   16710           + SCO UnixWare with UDK, i?86-*-udk*
   16711           + Generic System V releases 1, 2, and 3, i?86-*-sysv[123]*
   16712           + VSTa microkernel, i386-*-vsta
   16713      * Motorola M68000 family
   16714           + HPUX, m68k-hp-hpux* and m68000-hp-hpux*
   16715           + NetBSD with a.out object format (before NetBSD 1.4),
   16716             m68k-*-*-netbsd* except m68k-*-*-netbsdelf*
   16717           + Generic System V r.4, m68k-*-sysv4*
   16718      * VAX
   16719           + Generic VAX, vax-*-* (This is generic VAX only; we have not
   16720             obsoleted any VAX triples for specific operating systems.)
   16721 
   16722 Documentation improvements
   16723 
   16724 Other significant improvements
   16725 
   16726      * The build system has undergone several significant cleanups.
   16727        Subdirectories will only be configured if they are being built, and
   16728        all subdirectory configures are run from the make command. The top
   16729        level has been autoconfiscated.
   16730      * Building GCC no longer writes to its source directory. This should
   16731        help those wishing to share a read-only source directory over NFS
   16732        or build from a CD. The exceptions to this feature are if you
   16733        configure with either --enable-maintainer-mode or
   16734        --enable-generated-files-in-srcdir.
   16735      * The -W warning option has been renamed to -Wextra, which is more
   16736        easily understood. The older spelling will be retained for
   16737        backwards compatibility.
   16738      * Substantial improvements in compile time have been made,
   16739        particularly for non-optimizing compilations.
   16740      __________________________________________________________________
   16741 
   16742 GCC 3.4.0
   16743 
   16744   Bug Fixes
   16745 
   16746    A vast number of bugs have been fixed in 3.4.0, too many to publish a
   16747    complete list here. [26]Follow this link to query the Bugzilla database
   16748    for the list of over 900 bugs fixed in 3.4.0. This is the list of all
   16749    bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
   16750    regressions.
   16751      __________________________________________________________________
   16752 
   16753 GCC 3.4.1
   16754 
   16755   Bug Fixes
   16756 
   16757    This section lists the problem reports (PRs) from GCC's bug tracking
   16758    system that are known to be fixed in the 3.4.1 release. This list might
   16759    not be complete (that is, it is possible that some PRs that have been
   16760    fixed are not listed here).
   16761 
   16762     Bootstrap failures
   16763 
   16764      * [27]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
   16765        emitted - PIC related
   16766      * [28]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
   16767      * [29]14760 A bug in configure.in prevents using both
   16768        --program-suffix and --program-prefix
   16769      * [30]14671 [hppa64] bootstrap fails: ICE in
   16770        save_call_clobbered_regs, in caller_save.c
   16771      * [31]15093 [alpha][Java] make bootstrap fails to configure libffi on
   16772        Alpha
   16773      * [32]15178 Solaris 9/x86 fails linking after stage 3
   16774 
   16775     Multi-platform internal compiler errors (ICEs)
   16776 
   16777      * [33]12753 (preprocessor) Memory corruption in preprocessor on bad
   16778        input
   16779      * [34]13985 ICE in gcc.c-torture/compile/930621-1.c
   16780      * [35]14810 (c++) tree check failures with invalid code involving
   16781        templates
   16782      * [36]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
   16783        cp/parser.c
   16784      * [37]15044 (c++) ICE on syntax error, template header
   16785      * [38]15057 (c++) Compiling of conditional value throw constructs
   16786        cause a segmentation violation
   16787      * [39]15064 (c++) typeid of template parameter gives ICE
   16788      * [40]15142 (c++) ICE when passing a string where a char* is expected
   16789        in a throw statement
   16790      * [41]15159 ICE in rtl_verify_flow_info_1
   16791      * [42]15165 (c++) ICE in instantiate_template
   16792      * [43]15193 Unary minus using pointer to V4SF vector causes
   16793        -fforce-mem to exhaust all memory
   16794      * [44]15209 (c++) Runs out of memory with packed structs
   16795      * [45]15227 (c++) Trouble with invalid function definition
   16796      * [46]15285 (c++) instantiate_type ICE when forming pointer to
   16797        template function
   16798      * [47]15299 (c++) ICE in resolve_overloaded_unification
   16799      * [48]15329 (c++) ICE on constructor of member template
   16800      * [49]15550 ICE in extract_insn, in recog.c
   16801      * [50]15554 (c++) ICE in tsubst_copy, in cp/pt.c
   16802      * [51]15640 (c++) ICE on invalid code in arg_assoc, in
   16803        cp/name-lookup.c
   16804      * [52]15666 [unit-at-a-time] Gcc abort on valid code
   16805      * [53]15696 (c++) ICE with bad pointer-to-member code
   16806      * [54]15701 (c++) ICE with friends and template template parameter
   16807      * [55]15761 ICE in do_SUBST, in combine.c
   16808      * [56]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
   16809 
   16810     Ada
   16811 
   16812      * [57]14538 All RTEMS targets broken for gnat
   16813 
   16814     C front end
   16815 
   16816      * [58]12391 missing warning about assigning to an incomplete type
   16817      * [59]14649 atan(1.0) should not be a constant expression
   16818      * [60]15004 [unit-at-a-time] no warning for unused paramater in
   16819        static function
   16820      * [61]15749 --pedantic-errors behaves differently from --pedantic
   16821        with C-compiler on GNU/Linux
   16822 
   16823     C++ compiler and library
   16824 
   16825      * [62]10646 non-const reference is incorrectly matched in a "const T"
   16826        partial specialization
   16827      * [63]12077 wcin.rdbuf()->in_avail() return value too high
   16828      * [64]13598 enc_filebuf doesn't work
   16829      * [65]14211 const_cast returns lvalue but should be rvalue
   16830      * [66]14220 num_put::do_put() undesired float/double behavior
   16831      * [67]14245 problem with user-defined allocators in std::basic_string
   16832      * [68]14340 libstdc++ Debug mode: failure to convert iterator to
   16833        const_iterator
   16834      * [69]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
   16835        FILE*
   16836      * [70]14668 no warning anymore for reevaluation of declaration
   16837      * [71]14775 LFS (large file support) tests missing
   16838      * [72]14821 Duplicate namespace alias declaration should not conflict
   16839      * [73]14930 Friend declaration ignored
   16840      * [74]14932 cannot use offsetof to get offsets of array elements in
   16841        g++ 3.4.0
   16842      * [75]14950 [non unit-at-a-time] always_inline does not mix with
   16843        templates and -O0
   16844      * [76]14962 g++ ignores #pragma redefine_extname
   16845      * [77]14975 Segfault on low-level write error during imbue
   16846      * [78]15002 Linewise stream input is unusably slow (std::string slow)
   16847      * [79]15025 compiler accepts redeclaration of template as
   16848        non-template
   16849      * [80]15046 [arm] Math functions misdetected by cross configuration
   16850      * [81]15069 a bit test on a variable of enum type is miscompiled
   16851      * [82]15074 g++ -lsupc++ still links against libstdc++
   16852      * [83]15083 spurious "statement has no effect" warning
   16853      * [84]15096 parse error with templates and pointer to const member
   16854      * [85]15287 combination of operator[] and operator .* fails in
   16855        templates
   16856      * [86]15317 __attribute__ unused in first parameter of constructor
   16857        gives error
   16858      * [87]15337 sizeof on incomplete type diagnostic
   16859      * [88]15361 bitset<>::_Find_next fails
   16860      * [89]15412 _GLIBCXX_ symbols symbols defined and used in different
   16861        namespaces
   16862      * [90]15427 valid code results in incomplete type error
   16863      * [91]15471 Incorrect member pointer offsets in anonymous
   16864        structs/unions
   16865      * [92]15503 nested template problem
   16866      * [93]15507 compiler hangs while laying out union
   16867      * [94]15542 operator & and template definitions
   16868      * [95]15565 SLES9: leading + sign for unsigned int with showpos
   16869      * [96]15625 friend defined inside a template fails to find static
   16870        function
   16871      * [97]15629 Function templates, overloads, and friend name injection
   16872      * [98]15742 'noreturn' attribute ignored in method of template
   16873        functions.
   16874      * [99]15775 Allocator::pointer consistently ignored
   16875      * [100]15821 Duplicate namespace alias within namespace rejected
   16876      * [101]15862 'enum yn' fails (confict with undeclared builtin)
   16877      * [102]15875 rejects pointer to member in template
   16878      * [103]15877 valid code using templates and anonymous enums is
   16879        rejected
   16880      * [104]15947 Puzzling error message for wrong destructor declaration
   16881        in template class
   16882      * [105]16020 cannot copy __gnu_debug::bitset
   16883      * [106]16154 input iterator concept too restrictive
   16884      * [107]16174 deducing top-level consts
   16885 
   16886     Java
   16887 
   16888      * [108]14315 Java compiler is not parallel make safe
   16889 
   16890     Fortran
   16891 
   16892      * [109]15151 [g77] incorrect logical i/o in 64-bit mode
   16893 
   16894     Objective-C
   16895 
   16896      * [110]7993 private variables cannot be shadowed in subclasses
   16897 
   16898     Optimization bugs
   16899 
   16900      * [111]15228 useless copies of floating point operands
   16901      * [112]15345 [non-unit-at-a-time] unreferenced nested inline
   16902        functions not optimized away
   16903      * [113]15945 Incorrect floating point optimization
   16904      * [114]15526 ftrapv aborts on 0 * (-1)
   16905      * [115]14690 Miscompiled POOMA tests
   16906      * [116]15112 GCC generates code to write to unchanging memory
   16907 
   16908     Preprocessor
   16909 
   16910      * [117]15067 Minor glitch in the source of cpp
   16911 
   16912     Main driver program bugs
   16913 
   16914      * [118]1963 collect2 interprets -oldstyle_liblookup as -o
   16915        ldstyle_liblookup
   16916 
   16917     x86-specific (Intel/AMD)
   16918 
   16919      * [119]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
   16920        section}
   16921 
   16922     HPPA-specific
   16923 
   16924      * [120]14782 GCC produces an unaligned data access at -O2
   16925      * [121]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
   16926      * [122]15202 ICE in reload_cse_simplify_operands, in postreload.c
   16927 
   16928     IA64-specific
   16929 
   16930      * [123]14610 __float80 constants incorrectly emitted
   16931      * [124]14813 init_array sections are initialized in the wrong order
   16932      * [125]14857 GCC segfault on duplicated asm statement
   16933      * [126]15598 Gcc 3.4 ICE on valid code
   16934      * [127]15653 Gcc 3.4 ICE on valid code
   16935 
   16936     MIPS-specific
   16937 
   16938      * [128]15189 wrong filling of delay slot with -march=mips1 -G0
   16939        -mno-split-addresses -mno-explicit-relocs
   16940      * [129]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
   16941        2.14.91
   16942      * [130]16144 Bogus reference to __divdf3 when -O1
   16943      * [131]16176 Miscompilation of unaligned data in MIPS backend
   16944 
   16945     PowerPC-specific
   16946 
   16947      * [132]11591 ICE in gcc.dg/altivec-5.c
   16948      * [133]12028 powerpc-eabispe produces bad sCOND operation
   16949      * [134]14478 rs6000 geu/ltu patterns generate incorrect code
   16950      * [135]14567 long double and va_arg complex args
   16951      * [136]14715 Altivec stack layout may overlap gpr save with stack
   16952        temps
   16953      * [137]14902 (libstdc++) Stream checking functions fail when -pthread
   16954        option is used.
   16955      * [138]14924 Compiler ICE on valid code
   16956      * [139]14960 -maltivec affects vector return with -mabi=no-altivec
   16957      * [140]15106 vector varargs failure passing from altivec to
   16958        non-altivec code for -m32
   16959      * [141]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
   16960        half-word operation
   16961      * [142]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
   16962        and stvx
   16963      * [143]15662 Segmentation fault when an exception is thrown - even if
   16964        try and catch are specified
   16965 
   16966     s390-specific
   16967 
   16968      * [144]15054 Bad code due to overlapping stack temporaries
   16969 
   16970     SPARC-specific
   16971 
   16972      * [145]15783 ICE with union assignment in 64-bit mode
   16973      * [146]15626 GCC 3.4 emits "ld: warning: relocation error:
   16974        R_SPARC_UA32"
   16975 
   16976     x86-64-specific
   16977 
   16978      * [147]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
   16979      * [148]14723 Backported -march=nocona from mainline
   16980      * [149]15290 __float128 failed to pass to function properly
   16981 
   16982     Cygwin/Mingw32-specific
   16983 
   16984      * [150]15250 Option -mms-bitfields support on GCC 3.4 is not
   16985        conformant to MS layout
   16986      * [151]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
   16987        worker on windows32 targets
   16988 
   16989     Bugs specific to embedded processors
   16990 
   16991      * [152]8309 [m68k] -m5200 produces erroneous SImode set of short
   16992        varaible on stack
   16993      * [153]13250 [SH] Gcc code for rotation clobbers the register, but
   16994        gcc continues to use the register as if it was not clobbered
   16995      * [154]13803 [coldfire] movqi operand constraints too restrictivefor
   16996        TARGET_COLDFIRE
   16997      * [155]14093 [SH] ICE for code when using -mhitachi option in SH
   16998      * [156]14457 [m6811hc] ICE with simple c++ source
   16999      * [157]14542 [m6811hc] ICE on simple source
   17000      * [158]15100 [SH] cc1plus got hang-up on
   17001        libstdc++-v3/testsuite/abi_check.cc
   17002      * [159]15296 [CRIS] Delayed branch scheduling causing invalid code on
   17003        cris-*
   17004      * [160]15396 [SH] ICE with -O2 -fPIC
   17005      * [161]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
   17006        ColdFire
   17007 
   17008     Testsuite problems (compiler not affected)
   17009 
   17010      * [162]11610 libstdc++ testcases 27_io/* don't work properly remotely
   17011      * [163]15488 (libstdc++) possibly insufficient file permissions for
   17012        executing test suite
   17013      * [164]15489 (libstdc++) testsuite_files determined incorrectly
   17014 
   17015     Documentation bugs
   17016 
   17017      * [165]13928 (libstdc++) no whatis info in some man pages generated
   17018        by doxygen
   17019      * [166]14150 Ada documentation out of date
   17020      * [167]14949 (c++) Need to document method visibility changes
   17021      * [168]15123 libstdc++-doc: Allocators.3 manpage is empty
   17022      __________________________________________________________________
   17023 
   17024 GCC 3.4.2
   17025 
   17026   Bug Fixes
   17027 
   17028    This section lists the problem reports (PRs) from GCC's bug tracking
   17029    system that are known to be fixed in the 3.4.2 release. This list might
   17030    not be complete (that is, it is possible that some PRs that have been
   17031    fixed are not listed here).
   17032 
   17033     Bootstrap failures and issues
   17034 
   17035      * [169]16469 [mips-sgi-irix5.3] bootstrap fails in
   17036        libstdc++-v3/testsuite
   17037      * [170]16344 [hppa-linux-gnu] libstdc++'s PCH built by
   17038        profiledbootstrap does not work with the built compiler
   17039      * [171]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
   17040 
   17041     Multi-platform internal compiler errors (ICEs)
   17042 
   17043      * [172]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
   17044        cp_parser_class_specifier, in cp/parser.c
   17045      * [173]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   17046      * [174]15461 (c++) ICE due to NRV and inlining
   17047      * [175]15890 (c++) ICE in c_expand_expr, in c-common.c
   17048      * [176]16180 ICE: segmentation fault in RTL optimization
   17049      * [177]16224 (c++) ICE in write_unscoped_name (template/namespace)
   17050      * [178]16408 ICE: in delete_insn, in cfgrtl.c
   17051      * [179]16529 (c++) ICE for: namespace-alias shall not be declared as
   17052        the name of any other entity
   17053      * [180]16698 (c++) ICE with exceptions and declaration of __cxa_throw
   17054      * [181]16706 (c++) ICE in finish_member_declaration, in
   17055        cp/semantics.c
   17056      * [182]16810 (c++) Legal C++ program with cast gives ICE in
   17057        build_ptrmemfunc
   17058      * [183]16851 (c++) ICE when throwing a comma expression
   17059      * [184]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
   17060      * [185]16904 (c++) ICE in finish_class_member_access_expr, in
   17061        cp/typeck.c
   17062      * [186]16905 (c++) ICE (segfault) with exceptions
   17063      * [187]16964 (c++) ICE in cp_parser_class_specifier due to
   17064        redefinition
   17065      * [188]17068 (c++) ICE: tree check: expected class 'd', have 'x'
   17066        (identifier_node) in dependent_template_p, in cp/pt.c
   17067 
   17068     Preprocessor bugs
   17069 
   17070      * [189]16366 Preprocessor option -remap causes memory corruption
   17071 
   17072     Optimization
   17073 
   17074      * [190]15345 unreferenced nested inline functions not optimized away
   17075      * [191]16590 Incorrect execution when compiling with -O2
   17076      * [192]16693 Bitwise AND is lost when used within a cast to an enum
   17077        of the same precision
   17078      * [193]17078 Jump into if(0) substatement fails
   17079 
   17080     Problems in generated debug information
   17081 
   17082      * [194]13956 incorrect stabs for nested local variables
   17083 
   17084     C front end bugs
   17085 
   17086      * [195]16684 GCC should not warn about redundant redeclarations of
   17087        built-ins
   17088 
   17089     C++ compiler and library
   17090 
   17091      * [196]12658 Thread safety problems in locale::global() and
   17092        locale::locale()
   17093      * [197]13092 g++ accepts invalid pointer-to-member conversion
   17094      * [198]15320 Excessive memory consumption
   17095      * [199]16246 Incorrect template argument deduction
   17096      * [200]16273 Memory exhausted when using nested classes and virtual
   17097        functions
   17098      * [201]16401 ostringstream in gcc 3.4.x very slow for big data
   17099      * [202]16411 undefined reference to
   17100        __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
   17101        >::file()
   17102      * [203]16489 G++ incorrectly rejects use of a null constant integral
   17103        expression as a null constant pointer
   17104      * [204]16618 offsetof fails with constant member
   17105      * [205]16637 syntax error reported for valid input code
   17106      * [206]16717 __attribute__((constructor)) broken in C++
   17107      * [207]16813 compiler error in DEBUG version of range insertion
   17108        std::map::insert
   17109      * [208]16853 pointer-to-member initialization from incompatible one
   17110        accepted
   17111      * [209]16889 ambiguity is not detected
   17112      * [210]16959 Segmentation fault in ios_base::sync_with_stdio
   17113 
   17114     Java compiler and library
   17115 
   17116      * [211]7587 direct threaded interpreter not thread-safe
   17117      * [212]16473 ServerSocket accept() leaks file descriptors
   17118      * [213]16478 Hash synchronization deadlock with finalizers
   17119 
   17120     Alpha-specific
   17121 
   17122      * [214]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
   17123      * [215]16974 could not split insn (ice in final_scan_insn, in
   17124        final.c)
   17125 
   17126     x86-specific
   17127 
   17128      * [216]16298 ICE in output_operand
   17129      * [217]17113 ICE with SSE2 intrinsics
   17130 
   17131     x86-64 specific
   17132 
   17133      * [218]14697 libstdc++ couldn't find 32bit libgcc_s
   17134 
   17135     MIPS-specific
   17136 
   17137      * [219]15869 [mips64] No NOP after LW (with -mips1 -O0)
   17138      * [220]16325 [mips64] value profiling clobbers gp on mips
   17139      * [221]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
   17140        char[]s
   17141      * [222]16380 [mips64] Use of uninitialised register after dbra
   17142        conversion
   17143      * [223]16407 [mips64] Unaligned access to local variables
   17144      * [224]16643 [mips64] verify_local_live_at_start ICE after
   17145        crossjumping & cfgcleanup
   17146 
   17147     ARM-specific
   17148 
   17149      * [225]15927 THUMB -O2: strength-reduced iteration variable ends up
   17150        off by 1
   17151      * [226]15948 THUMB: ICE with non-commutative cbranch
   17152      * [227]17019 THUMB: bad switch statement in md code for
   17153        addsi3_cbranch_scratch
   17154 
   17155     IA64-specific
   17156 
   17157      * [228]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
   17158        (-mtune=merced)
   17159      * [229]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
   17160        (-mtune=itanium)
   17161      * [230]16278 Gcc failed to build Linux kernel with -mtune=merced
   17162      * [231]16414 ICE on valid code: typo in comparison of asm_noperands
   17163        result
   17164      * [232]16445 ICE on valid code: don't count ignored insns
   17165      * [233]16490 ICE (segfault) while compiling with -fprofile-use
   17166      * [234]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
   17167 
   17168     PowerPC-specific
   17169 
   17170      * [235]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
   17171      * [236]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
   17172        issue)
   17173 
   17174     SPARC-specific
   17175 
   17176      * [237]16199 ICE while compiling apache 2.0.49
   17177      * [238]16416 -m64 doesn't imply -mcpu=v9 anymore
   17178      * [239]16430 ICE when returning non-C aggregates larger than 16 bytes
   17179 
   17180     Bugs specific to embedded processors
   17181 
   17182      * [240]16379 [m32r] can't output large model function call of memcpy
   17183      * [241]17093 [m32r] ICE with -msdata=use -O0
   17184      * [242]17119 [m32r] ICE at switch case 0x8000
   17185 
   17186     DJGPP-specific
   17187 
   17188      * [243]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
   17189 
   17190     Alpha Tru64-specific
   17191 
   17192      * [244]16210 libstdc++ gratuitously omits "long long" I/O
   17193 
   17194     Testsuite, documentation issues (compiler is not affected):
   17195 
   17196      * [245]15488 (libstdc++) possibly insufficient file permissions for
   17197        executing test suite
   17198      * [246]16250 ada/doctools runs makeinfo even in release tarball
   17199      __________________________________________________________________
   17200 
   17201 GCC 3.4.3
   17202 
   17203    This is the [247]list of problem reports (PRs) from GCC's bug tracking
   17204    system that are known to be fixed in the 3.4.3 release. This list might
   17205    not be complete (that is, it is possible that some PRs that have been
   17206    fixed are not listed here).
   17207 
   17208     Bootstrap failures
   17209 
   17210      * [248]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
   17211      * [249]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
   17212        when undeclared
   17213 
   17214     Internal compiler errors (ICEs) affecting multiple platforms
   17215 
   17216      * [250]13948 (java) GCJ segmentation fault while compiling GL4Java
   17217        .class files
   17218      * [251]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   17219      * [252]16301 (c++) ICE when "strong" attribute is attached to a using
   17220        directive
   17221      * [253]16566 ICE with flexible arrays
   17222      * [254]17023 ICE with nested functions in parameter declaration
   17223      * [255]17027 ICE with noreturn function in loop at -O2
   17224      * [256]17524 ICE in grokdeclarator, in cp/decl.c
   17225      * [257]17826 (c++) ICE in cp_tree_equal
   17226 
   17227     C and optimization bugs
   17228 
   17229      * [258]15526 -ftrapv aborts on 0 * (-1)
   17230      * [259]16999 #ident stopped working
   17231      * [260]17503 quadratic behaviour in invalid_mode_change_p
   17232      * [261]17581 Long long arithmetic fails inside a switch/case
   17233        statement when compiled with -O2
   17234      * [262]18129 -fwritable-strings doesn't work
   17235 
   17236     C++ compiler and library bugs
   17237 
   17238      * [263]10975 incorrect initial ostringstream::tellp()
   17239      * [264]11722 Unbuffered filebuf::sgetn is slow
   17240      * [265]14534 Unrecognizing static function as a template parameter
   17241        when its return value is also templated
   17242      * [266]15172 Copy constructor optimization in aggregate
   17243        initialization
   17244      * [267]15786 Bad error message for frequently occuring error.
   17245      * [268]16162 Rejects valid member-template-definition
   17246      * [269]16612 empty basic_strings can't live in shared memory
   17247      * [270]16715 std::basic_iostream is instantiated when used, even
   17248        though instantiations are already contained in libstdc++
   17249      * [271]16848 code in /ext/demangle.h appears broken
   17250      * [272]17132 GCC fails to eliminate function template specialization
   17251        when argument deduction fails
   17252      * [273]17259 One more _S_leaf incorrectly qualified with _RopeRep::
   17253        in ropeimpl.h
   17254      * [274]17327 use of `enumeral_type' in template type unification
   17255      * [275]17393 "unused variable '._0'" warning with -Wall
   17256      * [276]17501 Confusion with member templates
   17257      * [277]17537 g++ not passing -lstdc++ to linker when all command line
   17258        arguments are libraries
   17259      * [278]17585 usage of unqualified name of static member from within
   17260        class not allowed
   17261      * [279]17821 Poor diagnostic for using "." instead of "->"
   17262      * [280]17829 wrong error: call of overloaded function is ambiguous
   17263      * [281]17851 Misleading diagnostic for invalid function declarations
   17264        with undeclared types
   17265      * [282]17976 Destructor is called twice
   17266      * [283]18020 rejects valid definition of enum value in template
   17267      * [284]18093 bogus conflict in namespace aliasing
   17268      * [285]18140 C++ parser bug when using >> in templates
   17269 
   17270     Fortran
   17271 
   17272      * [286]17541 data statements with double precision constants fail
   17273 
   17274     x86-specific
   17275 
   17276      * [287]17853 -O2 ICE for MMX testcase
   17277 
   17278     SPARC-specific
   17279 
   17280      * [288]17245 ICE compiling gsl-1.5 statistics/lag1.c
   17281 
   17282     Darwin-specific
   17283 
   17284      * [289]17167 FATAL:Symbol L_foo$stub already defined.
   17285 
   17286     AIX-specific
   17287 
   17288      * [290]17277 could not catch an exception when specified -maix64
   17289 
   17290     Solaris-specific
   17291 
   17292      * [291]17505 <cmath> calls acosf(), ceilf(), and other functions
   17293        missing from system libraries
   17294 
   17295     HP/UX specific:
   17296 
   17297      * [292]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
   17298 
   17299     ARM-specific
   17300 
   17301      * [293]17384 ICE with mode attribute on structures
   17302 
   17303     MIPS-specific
   17304 
   17305      * [294]17770 No NOP after LWL with -mips1
   17306 
   17307     Other embedded target specific
   17308 
   17309      * [295]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
   17310      * [296]14064 [avr-elf] -fdata-sections triggers ICE
   17311      * [297]14678 [m68hc11-elf] gcc ICE
   17312      * [298]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
   17313      * [299]15790 [i686-coff] Alignment error building gcc with i686-coff
   17314        target
   17315      * [300]15886 [SH] Miscompilation with -O2 -fPIC
   17316      * [301]16884 [avr-elf] [fweb related] bug while initializing
   17317        variables
   17318 
   17319     Bugs relating to debugger support
   17320 
   17321      * [302]13841 missing debug info for _Complex function arguments
   17322      * [303]15860 [big-endian targets] No DW_AT_location debug info is
   17323        emitted for formal arguments to a function that uses "register"
   17324        qualifiers
   17325 
   17326     Testsuite issues (compiler not affected)
   17327 
   17328      * [304]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
   17329      * [305]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
   17330      * [306]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
   17331        testsuite
   17332 
   17333     Documentation
   17334 
   17335      * [307]15498 typo in gcc manual: non-existing locale example en_UK,
   17336        should be en_GB
   17337      * [308]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
   17338        document broken shell
   17339      * [309]16406 USE_LD_AS_NEEDED undocumented
   17340      __________________________________________________________________
   17341 
   17342 GCC 3.4.4
   17343 
   17344    This is the [310]list of problem reports (PRs) from GCC's bug tracking
   17345    system that are known to be fixed in the 3.4.4 release. This list might
   17346    not be complete (that is, it is possible that some PRs that have been
   17347    fixed are not listed here).
   17348      __________________________________________________________________
   17349 
   17350 GCC 3.4.5
   17351 
   17352    This is the [311]list of problem reports (PRs) from GCC's bug tracking
   17353    system that are known to be fixed in the 3.4.5 release. This list might
   17354    not be complete (that is, it is possible that some PRs that have been
   17355    fixed are not listed here).
   17356 
   17357     Bootstrap issues
   17358 
   17359      * [312]24688 sco_math fixincl breaks math.h
   17360 
   17361     C compiler bugs
   17362 
   17363      * [313]17188 struct Foo { } redefinition
   17364      * [314]20187 wrong code for ((unsigned char)(unsigned long
   17365        long)((a?a:1)&(a*b)))?0:1)
   17366      * [315]21873 infinite warning loop on bad array initializer
   17367      * [316]21899 enum definition accepts values to be overriden
   17368      * [317]22061 ICE in find_function_data, in function.c
   17369      * [318]22308 Failure to diagnose violation of constraint 6.516p2
   17370      * [319]22458 ICE on missing brace
   17371      * [320]22589 ICE casting to long long
   17372      * [321]24101 Segfault with preprocessed source
   17373 
   17374     C++ compiler and library bugs
   17375 
   17376      * [322]10611 operations on vector mode not recognized in C++
   17377      * [323]13377 unexpected behavior of namespace usage directive
   17378      * [324]16002 Strange error message with new parser
   17379      * [325]17413 local classes as template argument
   17380      * [326]17609 spurious error message after using keyword
   17381      * [327]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
   17382      * [328]18124 ICE with invalid template template parameter
   17383      * [329]18155 typedef in template declaration not rejected
   17384      * [330]18177 ICE with const_cast for undeclared variable
   17385      * [331]18368 C++ error message regression
   17386      * [332]16378 ICE when returning a copy of a packed member
   17387      * [333]18466 int ::i; accepted
   17388      * [334]18512 ICE on invalid usage of template base class
   17389      * [335]18454 ICE when returning undefined type
   17390      * [336]18738 typename not allowed with non-dependent qualified name
   17391      * [337]18803 rejects access to operator() in template
   17392      * [338]19004 ICE in uses_template_parms, in cp/pt.c
   17393      * [339]19208 Spurious error about variably modified type
   17394      * [340]18253 bad error message / ICE for invalid template parameter
   17395      * [341]19608 ICE after friend function definition in local class
   17396      * [342]19884 ICE on explicit instantiation of a non-template
   17397        constructor
   17398      * [343]20153 ICE when C++ template function contains anonymous union
   17399      * [344]20563 Infinite loop in diagnostic (and ice after error
   17400        message)
   17401      * [345]20789 ICE with incomplete type in template
   17402      * [346]21336 Internal compiler error when using custom new operators
   17403      * [347]21768 ICE in error message due to violation of coding
   17404        conventions
   17405      * [348]21853 constness of pointer to data member ignored
   17406      * [349]21903 Default argument of template function causes a
   17407        compile-time error
   17408      * [350]21983 multiple diagnostics
   17409      * [351]21987 New testsuite failure
   17410        g++.dg/warn/conversion-function-1.C
   17411      * [352]22153 ICE on invalid template specialization
   17412      * [353]22172 Internal compiler error, seg fault.
   17413      * [354]21286 filebuf::xsgetn vs pipes
   17414      * [355]22233 ICE with wrong number of template parameters
   17415      * [356]22508 ICE after invalid operator new
   17416      * [357]22545 ICE with pointer to class member & user defined
   17417        conversion operator
   17418      * [358]23528 Wrong default allocator in ext/hash_map
   17419      * [359]23550 char_traits requirements/1.cc test bad math
   17420      * [360]23586 Bad diagnostic for invalid namespace-name
   17421      * [361]23624 ICE in invert_truthvalue, in fold-const.c
   17422      * [362]23639 Bad error message: not a member of '<declaration error>'
   17423      * [363]23797 ICE on typename outside template
   17424      * [364]23965 Bogus error message: no matching function for call to
   17425        'foo(<type error>)'
   17426      * [365]24052 &#`label_decl' not supported by dump_expr#<expression
   17427        error>
   17428      * [366]24580 virtual base class cause exception not to be caught
   17429 
   17430     Problems in generated debug information
   17431 
   17432      * [367]24267 Bad DWARF for altivec vectors
   17433 
   17434     Optimizations issues
   17435 
   17436      * [368]17810 ICE in verify_local_live_at_start
   17437      * [369]17860 Wrong generated code for loop with varying bound
   17438      * [370]21709 ICE on compile-time complex NaN
   17439      * [371]21964 broken tail call at -O2 or more
   17440      * [372]22167 Strange optimization bug when using -Os
   17441      * [373]22619 Compilation failure for real_const_1.f and
   17442        real_const_2.f90
   17443      * [374]23241 Invalid code generated for comparison of uchar to 255
   17444      * [375]23478 Miscompilation due to reloading of a var that is also
   17445        used in EH pad
   17446      * [376]24470 segmentation fault in cc1plus when compiling with -O
   17447      * [377]24950 ICE in operand_subword_force
   17448 
   17449     Precompiled headers problems
   17450 
   17451      * [378]14400 Cannot compile qt-x11-free-3.3.0
   17452      * [379]14940 PCH largefile test fails on various platforms
   17453 
   17454     Preprocessor bugs
   17455 
   17456      * [380]20239 ICE on empty preprocessed input
   17457      * [381]15220 "gcc -E -MM -MG" reports missing system headers in
   17458        source directory
   17459 
   17460     Testsuite issues
   17461 
   17462      * [382]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
   17463        i686-pc-linux-gnu
   17464 
   17465     Alpha specific
   17466 
   17467      * [383]21888 bootstrap failure with linker relaxation enabled
   17468 
   17469     ARM specific
   17470 
   17471      * [384]15342 [arm-linux]: ICE in verify_local_live_at_start
   17472      * [385]23985 Memory aliasing information incorrect in inlined memcpy
   17473 
   17474     ColdFile specific
   17475 
   17476      * [386]16719 Illegal move of byte into address register causes
   17477        compiler to ICE
   17478 
   17479     HPPA specific
   17480 
   17481      * [387]21723 ICE while building libgfortran
   17482      * [388]21841 -mhp-ld/-mgnu-ld documentation
   17483 
   17484     IA-64 specific
   17485 
   17486      * [389]23644 IA-64 hardware models and configuration options
   17487        documentation error
   17488      * [390]24718 Shared libgcc not used for linking by default
   17489 
   17490     M68000 specific
   17491 
   17492      * [391]18421 ICE in reload_cse_simplify_operands, in postreload.c
   17493 
   17494     MIPS specific
   17495 
   17496      * [392]20621 ICE in change_address_1, in emit-rtl.c
   17497 
   17498     PowerPC and PowerPC64 specific
   17499 
   17500      * [393]18583 error on valid code: const
   17501        __attribute__((altivec(vector__))) doesn't work in arrays
   17502      * [394]20191 ICE in reload_cse_simplify_operands
   17503      * [395]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
   17504      * [396]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
   17505      * [397]23404 gij trashes args of functions with more than 8 fp args
   17506      * [398]23539 C & C++ compiler generating misaligned references
   17507        regardless of compiler flags
   17508      * [399]24102 floatdisf2_internal2 broken
   17509      * [400]24465 -mminimal-toc miscompilation of __thread vars
   17510 
   17511     Solaris specific
   17512 
   17513      * [401]19933 Problem with define of HUGE_VAL in math_c99
   17514      * [402]21889 Native Solaris assembler cannot grok DTP-relative debug
   17515        symbols
   17516 
   17517     SPARC specific
   17518 
   17519      * [403]19300 PCH failures on sparc-linux
   17520      * [404]20301 Assembler labels have a leading "-"
   17521      * [405]20673 C PCH testsuite assembly comparison failure
   17522 
   17523     x86 and x86_64 specific
   17524 
   17525      * [406]18582 ICE with arrays of type V2DF
   17526      * [407]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
   17527        -fsched2-use-traces
   17528      * [408]21716 ICE in reg-stack.c's swap_rtx_condition
   17529      * [409]24315 amd64 fails -fpeephole2
   17530      __________________________________________________________________
   17531 
   17532 GCC 3.4.6
   17533 
   17534    This is the [410]list of problem reports (PRs) from GCC's bug tracking
   17535    system that are known to be fixed in the 3.4.6 release. This list might
   17536    not be complete (that is, it is possible that some PRs that have been
   17537    fixed are not listed here).
   17538 
   17539 
   17540     For questions related to the use of GCC, please consult these web
   17541     pages and the [411]GCC manuals. If that fails, the
   17542     [412]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17543     web pages and the development of GCC are welcome on our developer
   17544     list at [413]gcc (a] gcc.gnu.org. All of [414]our lists have public
   17545     archives.
   17546 
   17547    Copyright (C) [415]Free Software Foundation, Inc. Verbatim copying and
   17548    distribution of this entire article is permitted in any medium,
   17549    provided this notice is preserved.
   17550 
   17551    These pages are [416]maintained by the GCC team. Last modified
   17552    2023-01-27.
   17553 
   17554 References
   17555 
   17556    1. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   17557    2. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   17558    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   17559    4. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   17560    5. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   17561    6. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   17562    7. https://www.boost.org/
   17563    8. https://gcc.gnu.org/PR11953
   17564    9. https://gcc.gnu.org/PR8361
   17565   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
   17566   11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
   17567   12. https://gcc.gnu.org/bugs/#cxx_rvalbind
   17568   13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   17569   14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   17570   15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   17571   16. http://www.gnu.org/software/classpath/
   17572   17. https://www.eclipse.org/
   17573   18. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
   17574   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
   17575   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   17576   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
   17577   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   17578   23. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   17579   24. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
   17580   25. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   17581   26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
   17582   27. https://gcc.gnu.org/PR10129
   17583   28. https://gcc.gnu.org/PR14576
   17584   29. https://gcc.gnu.org/PR14760
   17585   30. https://gcc.gnu.org/PR14671
   17586   31. https://gcc.gnu.org/PR15093
   17587   32. https://gcc.gnu.org/PR15178
   17588   33. https://gcc.gnu.org/PR12753
   17589   34. https://gcc.gnu.org/PR13985
   17590   35. https://gcc.gnu.org/PR14810
   17591   36. https://gcc.gnu.org/PR14883
   17592   37. https://gcc.gnu.org/PR15044
   17593   38. https://gcc.gnu.org/PR15057
   17594   39. https://gcc.gnu.org/PR15064
   17595   40. https://gcc.gnu.org/PR15142
   17596   41. https://gcc.gnu.org/PR15159
   17597   42. https://gcc.gnu.org/PR15165
   17598   43. https://gcc.gnu.org/PR15193
   17599   44. https://gcc.gnu.org/PR15209
   17600   45. https://gcc.gnu.org/PR15227
   17601   46. https://gcc.gnu.org/PR15285
   17602   47. https://gcc.gnu.org/PR15299
   17603   48. https://gcc.gnu.org/PR15329
   17604   49. https://gcc.gnu.org/PR15550
   17605   50. https://gcc.gnu.org/PR15554
   17606   51. https://gcc.gnu.org/PR15640
   17607   52. https://gcc.gnu.org/PR15666
   17608   53. https://gcc.gnu.org/PR15696
   17609   54. https://gcc.gnu.org/PR15701
   17610   55. https://gcc.gnu.org/PR15761
   17611   56. https://gcc.gnu.org/PR15829
   17612   57. https://gcc.gnu.org/PR14538
   17613   58. https://gcc.gnu.org/PR12391
   17614   59. https://gcc.gnu.org/PR14649
   17615   60. https://gcc.gnu.org/PR15004
   17616   61. https://gcc.gnu.org/PR15749
   17617   62. https://gcc.gnu.org/PR10646
   17618   63. https://gcc.gnu.org/PR12077
   17619   64. https://gcc.gnu.org/PR13598
   17620   65. https://gcc.gnu.org/PR14211
   17621   66. https://gcc.gnu.org/PR14220
   17622   67. https://gcc.gnu.org/PR14245
   17623   68. https://gcc.gnu.org/PR14340
   17624   69. https://gcc.gnu.org/PR14600
   17625   70. https://gcc.gnu.org/PR14668
   17626   71. https://gcc.gnu.org/PR14775
   17627   72. https://gcc.gnu.org/PR14821
   17628   73. https://gcc.gnu.org/PR14930
   17629   74. https://gcc.gnu.org/PR14932
   17630   75. https://gcc.gnu.org/PR14950
   17631   76. https://gcc.gnu.org/PR14962
   17632   77. https://gcc.gnu.org/PR14975
   17633   78. https://gcc.gnu.org/PR15002
   17634   79. https://gcc.gnu.org/PR15025
   17635   80. https://gcc.gnu.org/PR15046
   17636   81. https://gcc.gnu.org/PR15069
   17637   82. https://gcc.gnu.org/PR15074
   17638   83. https://gcc.gnu.org/PR15083
   17639   84. https://gcc.gnu.org/PR15096
   17640   85. https://gcc.gnu.org/PR15287
   17641   86. https://gcc.gnu.org/PR15317
   17642   87. https://gcc.gnu.org/PR15337
   17643   88. https://gcc.gnu.org/PR15361
   17644   89. https://gcc.gnu.org/PR15412
   17645   90. https://gcc.gnu.org/PR15427
   17646   91. https://gcc.gnu.org/PR15471
   17647   92. https://gcc.gnu.org/PR15503
   17648   93. https://gcc.gnu.org/PR15507
   17649   94. https://gcc.gnu.org/PR15542
   17650   95. https://gcc.gnu.org/PR15565
   17651   96. https://gcc.gnu.org/PR15625
   17652   97. https://gcc.gnu.org/PR15629
   17653   98. https://gcc.gnu.org/PR15742
   17654   99. https://gcc.gnu.org/PR15775
   17655  100. https://gcc.gnu.org/PR15821
   17656  101. https://gcc.gnu.org/PR15862
   17657  102. https://gcc.gnu.org/PR15875
   17658  103. https://gcc.gnu.org/PR15877
   17659  104. https://gcc.gnu.org/PR15947
   17660  105. https://gcc.gnu.org/PR16020
   17661  106. https://gcc.gnu.org/PR16154
   17662  107. https://gcc.gnu.org/PR16174
   17663  108. https://gcc.gnu.org/PR14315
   17664  109. https://gcc.gnu.org/PR15151
   17665  110. https://gcc.gnu.org/PR7993
   17666  111. https://gcc.gnu.org/PR15228
   17667  112. https://gcc.gnu.org/PR15345
   17668  113. https://gcc.gnu.org/PR15945
   17669  114. https://gcc.gnu.org/PR15526
   17670  115. https://gcc.gnu.org/PR14690
   17671  116. https://gcc.gnu.org/PR15112
   17672  117. https://gcc.gnu.org/PR15067
   17673  118. https://gcc.gnu.org/PR1963
   17674  119. https://gcc.gnu.org/PR15717
   17675  120. https://gcc.gnu.org/PR14782
   17676  121. https://gcc.gnu.org/PR14828
   17677  122. https://gcc.gnu.org/PR15202
   17678  123. https://gcc.gnu.org/PR14610
   17679  124. https://gcc.gnu.org/PR14813
   17680  125. https://gcc.gnu.org/PR14857
   17681  126. https://gcc.gnu.org/PR15598
   17682  127. https://gcc.gnu.org/PR15653
   17683  128. https://gcc.gnu.org/PR15189
   17684  129. https://gcc.gnu.org/PR15331
   17685  130. https://gcc.gnu.org/PR16144
   17686  131. https://gcc.gnu.org/PR16176
   17687  132. https://gcc.gnu.org/PR11591
   17688  133. https://gcc.gnu.org/PR12028
   17689  134. https://gcc.gnu.org/PR14478
   17690  135. https://gcc.gnu.org/PR14567
   17691  136. https://gcc.gnu.org/PR14715
   17692  137. https://gcc.gnu.org/PR14902
   17693  138. https://gcc.gnu.org/PR14924
   17694  139. https://gcc.gnu.org/PR14960
   17695  140. https://gcc.gnu.org/PR15106
   17696  141. https://gcc.gnu.org/PR16026
   17697  142. https://gcc.gnu.org/PR15191
   17698  143. https://gcc.gnu.org/PR15662
   17699  144. https://gcc.gnu.org/PR15054
   17700  145. https://gcc.gnu.org/PR15783
   17701  146. https://gcc.gnu.org/PR15626
   17702  147. https://gcc.gnu.org/PR14326
   17703  148. https://gcc.gnu.org/PR14723
   17704  149. https://gcc.gnu.org/PR15290
   17705  150. https://gcc.gnu.org/PR15250
   17706  151. https://gcc.gnu.org/PR15551
   17707  152. https://gcc.gnu.org/PR8309
   17708  153. https://gcc.gnu.org/PR13250
   17709  154. https://gcc.gnu.org/PR13803
   17710  155. https://gcc.gnu.org/PR14093
   17711  156. https://gcc.gnu.org/PR14457
   17712  157. https://gcc.gnu.org/PR14542
   17713  158. https://gcc.gnu.org/PR15100
   17714  159. https://gcc.gnu.org/PR15296
   17715  160. https://gcc.gnu.org/PR15396
   17716  161. https://gcc.gnu.org/PR15782
   17717  162. https://gcc.gnu.org/PR11610
   17718  163. https://gcc.gnu.org/PR15488
   17719  164. https://gcc.gnu.org/PR15489
   17720  165. https://gcc.gnu.org/PR13928
   17721  166. https://gcc.gnu.org/PR14150
   17722  167. https://gcc.gnu.org/PR14949
   17723  168. https://gcc.gnu.org/PR15123
   17724  169. https://gcc.gnu.org/PR16469
   17725  170. https://gcc.gnu.org/PR16344
   17726  171. https://gcc.gnu.org/PR16842
   17727  172. https://gcc.gnu.org/PR12608
   17728  173. https://gcc.gnu.org/PR14492
   17729  174. https://gcc.gnu.org/PR15461
   17730  175. https://gcc.gnu.org/PR15890
   17731  176. https://gcc.gnu.org/PR16180
   17732  177. https://gcc.gnu.org/PR16224
   17733  178. https://gcc.gnu.org/PR16408
   17734  179. https://gcc.gnu.org/PR16529
   17735  180. https://gcc.gnu.org/PR16698
   17736  181. https://gcc.gnu.org/PR16706
   17737  182. https://gcc.gnu.org/PR16810
   17738  183. https://gcc.gnu.org/PR16851
   17739  184. https://gcc.gnu.org/PR16870
   17740  185. https://gcc.gnu.org/PR16904
   17741  186. https://gcc.gnu.org/PR16905
   17742  187. https://gcc.gnu.org/PR16964
   17743  188. https://gcc.gnu.org/PR17068
   17744  189. https://gcc.gnu.org/PR16366
   17745  190. https://gcc.gnu.org/PR15345
   17746  191. https://gcc.gnu.org/PR16590
   17747  192. https://gcc.gnu.org/PR16693
   17748  193. https://gcc.gnu.org/PR17078
   17749  194. https://gcc.gnu.org/PR13956
   17750  195. https://gcc.gnu.org/PR16684
   17751  196. https://gcc.gnu.org/PR12658
   17752  197. https://gcc.gnu.org/PR13092
   17753  198. https://gcc.gnu.org/PR15320
   17754  199. https://gcc.gnu.org/PR16246
   17755  200. https://gcc.gnu.org/PR16273
   17756  201. https://gcc.gnu.org/PR16401
   17757  202. https://gcc.gnu.org/PR16411
   17758  203. https://gcc.gnu.org/PR16489
   17759  204. https://gcc.gnu.org/PR16618
   17760  205. https://gcc.gnu.org/PR16637
   17761  206. https://gcc.gnu.org/PR16717
   17762  207. https://gcc.gnu.org/PR16813
   17763  208. https://gcc.gnu.org/PR16853
   17764  209. https://gcc.gnu.org/PR16889
   17765  210. https://gcc.gnu.org/PR16959
   17766  211. https://gcc.gnu.org/PR7587
   17767  212. https://gcc.gnu.org/PR16473
   17768  213. https://gcc.gnu.org/PR16478
   17769  214. https://gcc.gnu.org/PR10695
   17770  215. https://gcc.gnu.org/PR16974
   17771  216. https://gcc.gnu.org/PR16298
   17772  217. https://gcc.gnu.org/PR17113
   17773  218. https://gcc.gnu.org/PR14697
   17774  219. https://gcc.gnu.org/PR15869
   17775  220. https://gcc.gnu.org/PR16325
   17776  221. https://gcc.gnu.org/PR16357
   17777  222. https://gcc.gnu.org/PR16380
   17778  223. https://gcc.gnu.org/PR16407
   17779  224. https://gcc.gnu.org/PR16643
   17780  225. https://gcc.gnu.org/PR15927
   17781  226. https://gcc.gnu.org/PR15948
   17782  227. https://gcc.gnu.org/PR17019
   17783  228. https://gcc.gnu.org/PR16130
   17784  229. https://gcc.gnu.org/PR16142
   17785  230. https://gcc.gnu.org/PR16278
   17786  231. https://gcc.gnu.org/PR16414
   17787  232. https://gcc.gnu.org/PR16445
   17788  233. https://gcc.gnu.org/PR16490
   17789  234. https://gcc.gnu.org/PR16683
   17790  235. https://gcc.gnu.org/PR16195
   17791  236. https://gcc.gnu.org/PR16239
   17792  237. https://gcc.gnu.org/PR16199
   17793  238. https://gcc.gnu.org/PR16416
   17794  239. https://gcc.gnu.org/PR16430
   17795  240. https://gcc.gnu.org/PR16379
   17796  241. https://gcc.gnu.org/PR17093
   17797  242. https://gcc.gnu.org/PR17119
   17798  243. https://gcc.gnu.org/PR15928
   17799  244. https://gcc.gnu.org/PR16210
   17800  245. https://gcc.gnu.org/PR15488
   17801  246. https://gcc.gnu.org/PR16250
   17802  247. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
   17803  248. https://gcc.gnu.org/PR17369
   17804  249. https://gcc.gnu.org/PR17850
   17805  250. https://gcc.gnu.org/PR13948
   17806  251. https://gcc.gnu.org/PR14492
   17807  252. https://gcc.gnu.org/PR16301
   17808  253. https://gcc.gnu.org/PR16566
   17809  254. https://gcc.gnu.org/PR17023
   17810  255. https://gcc.gnu.org/PR17027
   17811  256. https://gcc.gnu.org/PR17524
   17812  257. https://gcc.gnu.org/PR17826
   17813  258. https://gcc.gnu.org/PR15526
   17814  259. https://gcc.gnu.org/PR16999
   17815  260. https://gcc.gnu.org/PR17503
   17816  261. https://gcc.gnu.org/PR17581
   17817  262. https://gcc.gnu.org/PR18129
   17818  263. https://gcc.gnu.org/PR10975
   17819  264. https://gcc.gnu.org/PR11722
   17820  265. https://gcc.gnu.org/PR14534
   17821  266. https://gcc.gnu.org/PR15172
   17822  267. https://gcc.gnu.org/PR15786
   17823  268. https://gcc.gnu.org/PR16162
   17824  269. https://gcc.gnu.org/PR16612
   17825  270. https://gcc.gnu.org/PR16715
   17826  271. https://gcc.gnu.org/PR16848
   17827  272. https://gcc.gnu.org/PR17132
   17828  273. https://gcc.gnu.org/PR17259
   17829  274. https://gcc.gnu.org/PR17327
   17830  275. https://gcc.gnu.org/PR17393
   17831  276. https://gcc.gnu.org/PR17501
   17832  277. https://gcc.gnu.org/PR17537
   17833  278. https://gcc.gnu.org/PR17585
   17834  279. https://gcc.gnu.org/PR17821
   17835  280. https://gcc.gnu.org/PR17829
   17836  281. https://gcc.gnu.org/PR17851
   17837  282. https://gcc.gnu.org/PR17976
   17838  283. https://gcc.gnu.org/PR18020
   17839  284. https://gcc.gnu.org/PR18093
   17840  285. https://gcc.gnu.org/PR18140
   17841  286. https://gcc.gnu.org/PR17541
   17842  287. https://gcc.gnu.org/PR17853
   17843  288. https://gcc.gnu.org/PR17245
   17844  289. https://gcc.gnu.org/PR17167
   17845  290. https://gcc.gnu.org/PR17277
   17846  291. https://gcc.gnu.org/PR17505
   17847  292. https://gcc.gnu.org/PR17684
   17848  293. https://gcc.gnu.org/PR17384
   17849  294. https://gcc.gnu.org/PR17770
   17850  295. https://gcc.gnu.org/PR11476
   17851  296. https://gcc.gnu.org/PR14064
   17852  297. https://gcc.gnu.org/PR14678
   17853  298. https://gcc.gnu.org/PR15583
   17854  299. https://gcc.gnu.org/PR15790
   17855  300. https://gcc.gnu.org/PR15886
   17856  301. https://gcc.gnu.org/PR16884
   17857  302. https://gcc.gnu.org/PR13841
   17858  303. https://gcc.gnu.org/PR15860
   17859  304. https://gcc.gnu.org/PR17465
   17860  305. https://gcc.gnu.org/PR17469
   17861  306. https://gcc.gnu.org/PR18138
   17862  307. https://gcc.gnu.org/PR15498
   17863  308. https://gcc.gnu.org/PR15747
   17864  309. https://gcc.gnu.org/PR16406
   17865  310. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
   17866  311. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
   17867  312. https://gcc.gnu.org/PR24688
   17868  313. https://gcc.gnu.org/PR17188
   17869  314. https://gcc.gnu.org/PR20187
   17870  315. https://gcc.gnu.org/PR21873
   17871  316. https://gcc.gnu.org/PR21899
   17872  317. https://gcc.gnu.org/PR22061
   17873  318. https://gcc.gnu.org/PR22208
   17874  319. https://gcc.gnu.org/PR22458
   17875  320. https://gcc.gnu.org/PR22589
   17876  321. https://gcc.gnu.org/PR24101
   17877  322. https://gcc.gnu.org/PR10611
   17878  323. https://gcc.gnu.org/PR13377
   17879  324. https://gcc.gnu.org/PR16002
   17880  325. https://gcc.gnu.org/PR17413
   17881  326. https://gcc.gnu.org/PR17609
   17882  327. https://gcc.gnu.org/PR17618
   17883  328. https://gcc.gnu.org/PR18124
   17884  329. https://gcc.gnu.org/PR18155
   17885  330. https://gcc.gnu.org/PR18177
   17886  331. https://gcc.gnu.org/PR18368
   17887  332. https://gcc.gnu.org/PR18378
   17888  333. https://gcc.gnu.org/PR18466
   17889  334. https://gcc.gnu.org/PR18512
   17890  335. https://gcc.gnu.org/PR18545
   17891  336. https://gcc.gnu.org/PR18738
   17892  337. https://gcc.gnu.org/PR18803
   17893  338. https://gcc.gnu.org/PR19004
   17894  339. https://gcc.gnu.org/PR19208
   17895  340. https://gcc.gnu.org/PR19253
   17896  341. https://gcc.gnu.org/PR19608
   17897  342. https://gcc.gnu.org/PR19884
   17898  343. https://gcc.gnu.org/PR20153
   17899  344. https://gcc.gnu.org/PR20563
   17900  345. https://gcc.gnu.org/PR20789
   17901  346. https://gcc.gnu.org/PR21336
   17902  347. https://gcc.gnu.org/PR21768
   17903  348. https://gcc.gnu.org/PR21853
   17904  349. https://gcc.gnu.org/PR21903
   17905  350. https://gcc.gnu.org/PR21983
   17906  351. https://gcc.gnu.org/PR21987
   17907  352. https://gcc.gnu.org/PR22153
   17908  353. https://gcc.gnu.org/PR22172
   17909  354. https://gcc.gnu.org/PR21286
   17910  355. https://gcc.gnu.org/PR22233
   17911  356. https://gcc.gnu.org/PR22508
   17912  357. https://gcc.gnu.org/PR22545
   17913  358. https://gcc.gnu.org/PR23528
   17914  359. https://gcc.gnu.org/PR23550
   17915  360. https://gcc.gnu.org/PR23586
   17916  361. https://gcc.gnu.org/PR23624
   17917  362. https://gcc.gnu.org/PR23639
   17918  363. https://gcc.gnu.org/PR23797
   17919  364. https://gcc.gnu.org/PR23965
   17920  365. https://gcc.gnu.org/PR24052
   17921  366. https://gcc.gnu.org/PR24580
   17922  367. https://gcc.gnu.org/PR24267
   17923  368. https://gcc.gnu.org/PR17810
   17924  369. https://gcc.gnu.org/PR17860
   17925  370. https://gcc.gnu.org/PR21709
   17926  371. https://gcc.gnu.org/PR21964
   17927  372. https://gcc.gnu.org/PR22167
   17928  373. https://gcc.gnu.org/PR22619
   17929  374. https://gcc.gnu.org/PR23241
   17930  375. https://gcc.gnu.org/PR23478
   17931  376. https://gcc.gnu.org/PR24470
   17932  377. https://gcc.gnu.org/PR24950
   17933  378. https://gcc.gnu.org/PR14400
   17934  379. https://gcc.gnu.org/PR14940
   17935  380. https://gcc.gnu.org/PR20239
   17936  381. https://gcc.gnu.org/PR15220
   17937  382. https://gcc.gnu.org/PR19275
   17938  383. https://gcc.gnu.org/PR21888
   17939  384. https://gcc.gnu.org/PR15342
   17940  385. https://gcc.gnu.org/PR23985
   17941  386. https://gcc.gnu.org/PR16719
   17942  387. https://gcc.gnu.org/PR21723
   17943  388. https://gcc.gnu.org/PR21841
   17944  389. https://gcc.gnu.org/PR23644
   17945  390. https://gcc.gnu.org/PR24718
   17946  391. https://gcc.gnu.org/PR18421
   17947  392. https://gcc.gnu.org/PR20621
   17948  393. https://gcc.gnu.org/PR18583
   17949  394. https://gcc.gnu.org/PR20191
   17950  395. https://gcc.gnu.org/PR22083
   17951  396. https://gcc.gnu.org/PR23070
   17952  397. https://gcc.gnu.org/PR23404
   17953  398. https://gcc.gnu.org/PR23539
   17954  399. https://gcc.gnu.org/PR24102
   17955  400. https://gcc.gnu.org/PR24465
   17956  401. https://gcc.gnu.org/PR19933
   17957  402. https://gcc.gnu.org/PR21889
   17958  403. https://gcc.gnu.org/PR19300
   17959  404. https://gcc.gnu.org/PR20301
   17960  405. https://gcc.gnu.org/PR20673
   17961  406. https://gcc.gnu.org/PR18582
   17962  407. https://gcc.gnu.org/PR19340
   17963  408. https://gcc.gnu.org/PR21716
   17964  409. https://gcc.gnu.org/PR24315
   17965  410. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
   17966  411. https://gcc.gnu.org/onlinedocs/
   17967  412. mailto:gcc-help (a] gcc.gnu.org
   17968  413. mailto:gcc (a] gcc.gnu.org
   17969  414. https://gcc.gnu.org/lists.html
   17970  415. https://www.fsf.org/
   17971  416. https://gcc.gnu.org/about.html
   17972 ======================================================================
   17973 http://gcc.gnu.org/gcc-3.3/index.html
   17974                              GCC 3.3 Release Series
   17975 
   17976    (This release series is no longer supported.)
   17977 
   17978    May 03, 2005
   17979 
   17980    The [1]GNU project and the GCC developers are pleased to announce the
   17981    release of GCC 3.3.6.
   17982 
   17983    This release is a bug-fix release, containing fixes for regressions in
   17984    GCC 3.3.5 relative to previous releases of GCC.
   17985 
   17986    This release is the last of the series 3.3.x.
   17987 
   17988    The GCC 3.3 release series includes numerous [2]new features,
   17989    improvements, bug fixes, and other changes, thanks to an [3]amazing
   17990    group of volunteers.
   17991 
   17992 Release History
   17993 
   17994    GCC 3.3.6
   17995           May 3, 2005 ([4]changes)
   17996 
   17997    GCC 3.3.5
   17998           September 30, 2004 ([5]changes)
   17999 
   18000    GCC 3.3.4
   18001           May 31, 2004 ([6]changes)
   18002 
   18003    GCC 3.3.3
   18004           February 14, 2004 ([7]changes)
   18005 
   18006    GCC 3.3.2
   18007           October 16, 2003 ([8]changes)
   18008 
   18009    GCC 3.3.1
   18010           August 8, 2003 ([9]changes)
   18011 
   18012    GCC 3.3
   18013           May 14, 2003 ([10]changes)
   18014 
   18015 References and Acknowledgements
   18016 
   18017    GCC used to stand for the GNU C Compiler, but since the compiler
   18018    supports several other languages aside from C, it now stands for the
   18019    GNU Compiler Collection.
   18020 
   18021    A list of [11]successful builds is updated as new information becomes
   18022    available.
   18023 
   18024    The GCC developers would like to thank the numerous people that have
   18025    contributed new features, improvements, bug fixes, and other changes as
   18026    well as test results to GCC. This [12]amazing group of volunteers is
   18027    what makes GCC successful.
   18028 
   18029    For additional information about GCC please refer to the [13]GCC
   18030    project web site or contact the [14]GCC development mailing list.
   18031 
   18032    To obtain GCC please use [15]our mirror sites, or our CVS server.
   18033 
   18034 
   18035     For questions related to the use of GCC, please consult these web
   18036     pages and the [16]GCC manuals. If that fails, the
   18037     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18038     web pages and the development of GCC are welcome on our developer
   18039     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   18040     archives.
   18041 
   18042    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   18043    distribution of this entire article is permitted in any medium,
   18044    provided this notice is preserved.
   18045 
   18046    These pages are [21]maintained by the GCC team. Last modified
   18047    2022-10-26.
   18048 
   18049 References
   18050 
   18051    1. http://www.gnu.org/
   18052    2. https://gcc.gnu.org/gcc-3.3/changes.html
   18053    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18054    4. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   18055    5. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
   18056    6. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
   18057    7. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.3
   18058    8. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.2
   18059    9. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
   18060   10. https://gcc.gnu.org/gcc-3.3/changes.html
   18061   11. https://gcc.gnu.org/gcc-3.3/buildstat.html
   18062   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18063   13. https://gcc.gnu.org/index.html
   18064   14. mailto:gcc (a] gcc.gnu.org
   18065   15. https://gcc.gnu.org/mirrors.html
   18066   16. https://gcc.gnu.org/onlinedocs/
   18067   17. mailto:gcc-help (a] gcc.gnu.org
   18068   18. mailto:gcc (a] gcc.gnu.org
   18069   19. https://gcc.gnu.org/lists.html
   18070   20. https://www.fsf.org/
   18071   21. https://gcc.gnu.org/about.html
   18072 ======================================================================
   18073 http://gcc.gnu.org/gcc-3.3/changes.html
   18074                              GCC 3.3 Release Series
   18075                         Changes, New Features, and Fixes
   18076 
   18077    The latest release in the 3.3 release series is [1]GCC 3.3.6.
   18078 
   18079 Caveats
   18080 
   18081      * The preprocessor no longer accepts multi-line string literals. They
   18082        were deprecated in 3.0, 3.1, and 3.2.
   18083      * The preprocessor no longer supports the -A- switch when appearing
   18084        alone. -A- followed by an assertion is still supported.
   18085      * Support for all the systems [2]obsoleted in GCC 3.1 has been
   18086        removed from GCC 3.3. See below for a [3]list of systems which are
   18087        obsoleted in this release.
   18088      * Checking for null format arguments has been decoupled from the rest
   18089        of the format checking mechanism. Programs which use the format
   18090        attribute may regain this functionality by using the new [4]nonnull
   18091        function attribute. Note that all functions for which GCC has a
   18092        built-in format attribute, an appropriate built-in nonnull
   18093        attribute is also applied.
   18094      * The DWARF (version 1) debugging format has been deprecated and will
   18095        be removed in a future version of GCC. Version 2 of the DWARF
   18096        debugging format will continue to be supported for the foreseeable
   18097        future.
   18098      * The C and Objective-C compilers no longer accept the "Naming Types"
   18099        extension (typedef foo = bar); it was already unavailable in C++.
   18100        Code which uses it will need to be changed to use the "typeof"
   18101        extension instead: typedef typeof(bar) foo. (We have removed this
   18102        extension without a period of deprecation because it has caused the
   18103        compiler to crash since version 3.0 and no one noticed until very
   18104        recently. Thus we conclude it is not in widespread use.)
   18105      * The -traditional C compiler option has been removed. It was
   18106        deprecated in 3.1 and 3.2. (Traditional preprocessing remains
   18107        available.) The <varargs.h> header, used for writing variadic
   18108        functions in traditional C, still exists but will produce an error
   18109        message if used.
   18110      * GCC 3.3.1 automatically places zero-initialized variables in the
   18111        .bss section on some operating systems. Versions of GNU Emacs up to
   18112        (and including) 21.3 will not work correctly when using this
   18113        optimization; you can use -fno-zero-initialized-in-bss to disable
   18114        it.
   18115 
   18116 General Optimizer Improvements
   18117 
   18118      * A new scheme for accurately describing processor pipelines, the
   18119        [5]DFA scheduler, has been added.
   18120      * Pavel Nejedly, Charles University Prague, has contributed new file
   18121        format used by the edge coverage profiler (-fprofile-arcs).
   18122        The new format is robust and diagnoses common mistakes where
   18123        profiles from different versions (or compilations) of the program
   18124        are combined resulting in nonsensical profiles and slow code to
   18125        produced with profile feedback. Additionally this format allows
   18126        extra data to be gathered. Currently, overall statistics are
   18127        produced helping optimizers to identify hot spots of a program
   18128        globally replacing the old intra-procedural scheme and resulting in
   18129        better code. Note that the gcov tool from older GCC versions will
   18130        not be able to parse the profiles generated by GCC 3.3 and vice
   18131        versa.
   18132      * Jan Hubicka, SuSE Labs, has contributed a new superblock formation
   18133        pass enabled using -ftracer. This pass simplifies the control flow
   18134        of functions allowing other optimizations to do better job.
   18135        He also contributed the function reordering pass
   18136        (-freorder-functions) to optimize function placement using profile
   18137        feedback.
   18138 
   18139 New Languages and Language specific improvements
   18140 
   18141   C/ObjC/C++
   18142 
   18143      * The preprocessor now accepts directives within macro arguments. It
   18144        processes them just as if they had not been within macro arguments.
   18145      * The separate ISO and traditional preprocessors have been completely
   18146        removed. The front end handles either type of preprocessed output
   18147        if necessary.
   18148      * In C99 mode preprocessor arithmetic is done in the precision of the
   18149        target's intmax_t, as required by that standard.
   18150      * The preprocessor can now copy comments inside macros to the output
   18151        file when the macro is expanded. This feature, enabled using the
   18152        -CC option, is intended for use by applications which place
   18153        metadata or directives inside comments, such as lint.
   18154      * The method of constructing the list of directories to be searched
   18155        for header files has been revised. If a directory named by a -I
   18156        option is a standard system include directory, the option is
   18157        ignored to ensure that the default search order for system
   18158        directories and the special treatment of system header files are
   18159        not defeated.
   18160      * A few more [6]ISO C99 features now work correctly.
   18161      * A new function attribute, nonnull, has been added which allows
   18162        pointer arguments to functions to be specified as requiring a
   18163        non-null value. The compiler currently uses this information to
   18164        issue a warning when it detects a null value passed in such an
   18165        argument slot.
   18166      * A new type attribute, may_alias, has been added. Accesses to
   18167        objects with types with this attribute are not subjected to
   18168        type-based alias analysis, but are instead assumed to be able to
   18169        alias any other type of objects, just like the char type.
   18170 
   18171   C++
   18172 
   18173      * Type based alias analysis has been implemented for C++ aggregate
   18174        types.
   18175 
   18176   Objective-C
   18177 
   18178      * Generate an error if Objective-C objects are passed by value in
   18179        function and method calls.
   18180      * When -Wselector is used, check the whole list of selectors at the
   18181        end of compilation, and emit a warning if a @selector() is not
   18182        known.
   18183      * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime.
   18184      * No longer need to include objc/objc-class.h to compile self calls
   18185        in class methods (NeXT runtime only).
   18186      * New -Wundeclared-selector option.
   18187      * Removed selector bloating which was causing object files to be 10%
   18188        bigger on average (GNU runtime only).
   18189      * Using at run time @protocol() objects has been fixed in certain
   18190        situations (GNU runtime only).
   18191      * Type checking has been fixed and improved in many situations
   18192        involving protocols.
   18193 
   18194   Java
   18195 
   18196      * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK
   18197        1.4) API.
   18198      * The JDK 1.4 assert facility has been implemented.
   18199      * The bytecode interpreter is now direct threaded and thus faster.
   18200 
   18201   Fortran
   18202 
   18203      * Fortran improvements are listed in [7]the Fortran documentation.
   18204 
   18205   Ada
   18206 
   18207      * Ada tasking now works with glibc 2.3.x threading libraries.
   18208 
   18209 New Targets and Target Specific Improvements
   18210 
   18211      * The following changes have been made to the HP-PA port:
   18212           + The port now defaults to scheduling for the PA8000 series of
   18213             processors.
   18214           + Scheduling support for the PA7300 processor has been added.
   18215           + The 32-bit port now supports weak symbols under HP-UX 11.
   18216           + The handling of initializers and finalizers has been improved
   18217             under HP-UX 11. The 64-bit port no longer uses collect2.
   18218           + Dwarf2 EH support has been added to the 32-bit GNU/Linux port.
   18219           + ABI fixes to correct the passing of small structures by value.
   18220      * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to
   18221        use the DFA processor pipeline description.
   18222      * The following NetBSD configurations for the SuperH processor family
   18223        have been added:
   18224           + SH3, big-endian, sh-*-netbsdelf*
   18225           + SH3, little-endian, shle-*-netbsdelf*
   18226           + SH5, SHmedia, big-endian, 32-bit default, sh5-*-netbsd*
   18227           + SH5, SHmedia, little-endian, 32-bit default, sh5le-*-netbsd*
   18228           + SH5, SHmedia, big-endian, 64-bit default, sh64-*-netbsd*
   18229           + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd*
   18230      * The following changes have been made to the IA-32/x86-64 port:
   18231           + SSE2 and 3dNOW! intrinsics are now supported.
   18232           + Support for thread local storage has been added to the IA-32
   18233             and x86-64 ports.
   18234           + The x86-64 port has been significantly improved.
   18235      * The following changes have been made to the MIPS port:
   18236           + All configurations now accept the -mabi switch. Note that you
   18237             will need appropriate multilibs for this option to work
   18238             properly.
   18239           + ELF configurations will always pass an ABI flag to the
   18240             assembler, except when the MIPS EABI is selected.
   18241           + -mabi=64 no longer selects MIPS IV code.
   18242           + The -mcpu option, which was deprecated in 3.1 and 3.2, has
   18243             been removed from this release.
   18244           + -march now changes the core ISA level. In previous releases,
   18245             it would change the use of processor-specific extensions, but
   18246             would leave the core ISA unchanged. For example, mips64-elf
   18247             -march=r8000 will now generate MIPS IV code.
   18248           + Under most configurations, -mipsN now acts as a synonym for
   18249             -march.
   18250           + There are some new preprocessor macros to describe the -march
   18251             and -mtune settings. See the documentation of those options
   18252             for details.
   18253           + Support for the NEC VR-Series processors has been added. This
   18254             includes the 54xx, 5500, and 41xx series.
   18255           + Support for the Sandcraft sr71k processor has been added.
   18256      * The following changes have been made to the S/390 port:
   18257           + Support to build the Java runtime libraries has been added.
   18258             Java is now enabled by default on s390-*-linux* and
   18259             s390x-*-linux* targets.
   18260           + Multilib support for the s390x-*-linux* target has been added;
   18261             this allows to build 31-bit binaries using the -m31 option.
   18262           + Support for thread local storage has been added.
   18263           + Inline assembler code may now use the 'Q' constraint to
   18264             specify memory operands without index register.
   18265           + Various platform-specific performance improvements have been
   18266             implemented; in particular, the compiler now uses the BRANCH
   18267             ON COUNT family of instructions and makes more frequent use of
   18268             the TEST UNDER MASK family of instructions.
   18269      * The following changes have been made to the PowerPC port:
   18270           + Support for IBM Power4 processor added.
   18271           + Support for Motorola e500 SPE added.
   18272           + Support for AIX 5.2 added.
   18273           + Function and Data sections now supported on AIX.
   18274           + Sibcall optimizations added.
   18275      * The support for H8 Tiny is added to the H8/300 port with -mn.
   18276 
   18277 Obsolete Systems
   18278 
   18279    Support for a number of older systems has been declared obsolete in GCC
   18280    3.3. Unless there is activity to revive them, the next release of GCC
   18281    will have their sources permanently removed.
   18282 
   18283    All configurations of the following processor architectures have been
   18284    declared obsolete:
   18285      * Matsushita MN10200, mn10200-*-*
   18286      * Motorola 88000, m88k-*-*
   18287      * IBM ROMP, romp-*-*
   18288 
   18289    Also, some individual systems have been obsoleted:
   18290      * Alpha
   18291           + Interix, alpha*-*-interix*
   18292           + Linux libc1, alpha*-*-linux*libc1*
   18293           + Linux ECOFF, alpha*-*-linux*ecoff*
   18294      * ARM
   18295           + Generic a.out, arm*-*-aout*
   18296           + Conix, arm*-*-conix*
   18297           + "Old ABI," arm*-*-oabi
   18298           + StrongARM/COFF, strongarm-*-coff*
   18299      * HPPA (PA-RISC)
   18300           + Generic OSF, hppa1.0-*-osf*
   18301           + Generic BSD, hppa1.0-*-bsd*
   18302           + HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
   18303           + HiUX, hppa*-*-hiux*
   18304           + Mach Lites, hppa*-*-lites*
   18305      * Intel 386 family
   18306           + Windows NT 3.x, i?86-*-win32
   18307      * MC68000 family
   18308           + HP systems, m68000-hp-bsd* and m68k-hp-bsd*
   18309           + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and
   18310             m68k-sun-mach*
   18311           + AT&T systems, m68000-att-sysv*
   18312           + Atari systems, m68k-atari-sysv*
   18313           + Motorola systems, m68k-motorola-sysv*
   18314           + NCR systems, m68k-ncr-sysv*
   18315           + Plexus systems, m68k-plexus-sysv*
   18316           + Commodore systems, m68k-cbm-sysv*
   18317           + Citicorp TTI, m68k-tti-*
   18318           + Unos, m68k-crds-unos*
   18319           + Concurrent RTU, m68k-ccur-rtu*
   18320           + Linux a.out, m68k-*-linux*aout*
   18321           + Linux libc1, m68k-*-linux*libc1*
   18322           + pSOS, m68k-*-psos*
   18323      * MIPS
   18324           + Generic ECOFF, mips*-*-ecoff*
   18325           + SINIX, mips-sni-sysv4
   18326           + Orion RTEMS, mips64orion-*-rtems*
   18327      * National Semiconductor 32000
   18328           + OpenBSD, ns32k-*-openbsd*
   18329      * POWER (aka RS/6000) and PowerPC
   18330           + AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
   18331           + Bull BOSX, rs6000-bull-bosx
   18332           + Generic Mach, rs6000-*-mach*
   18333           + Generic SysV, powerpc*-*-sysv*
   18334           + Linux libc1, powerpc*-*-linux*libc1*
   18335      * Sun SPARC
   18336           + Generic a.out, sparc-*-aout*, sparclet-*-aout*,
   18337             sparclite-*-aout*, and sparc86x-*-aout*
   18338           + NetBSD a.out, sparc-*-netbsd*aout*
   18339           + Generic BSD, sparc-*-bsd*
   18340           + ChorusOS, sparc-*-chorusos*
   18341           + Linux a.out, sparc-*-linux*aout*
   18342           + Linux libc1, sparc-*-linux*libc1*
   18343           + LynxOS, sparc-*-lynxos*
   18344           + Solaris on HAL hardware, sparc-hal-solaris2*
   18345           + SunOS versions 3 and 4, sparc-*-sunos[34]*
   18346      * NEC V850
   18347           + RTEMS, v850-*-rtems*
   18348      * VAX
   18349           + VMS, vax-*-vms*
   18350 
   18351 Documentation improvements
   18352 
   18353 Other significant improvements
   18354 
   18355      * Almost all front-end dependencies in the compiler have been
   18356        separated out into a set of language hooks. This should make adding
   18357        a new front end clearer and easier.
   18358      * One effect of removing the separate preprocessor is a small
   18359        increase in the robustness of the compiler in general, and the
   18360        maintainability of target descriptions. Previously target-specific
   18361        built-in macros and others, such as __FAST_MATH__, had to be
   18362        handled with so-called specs that were hard to maintain. Often they
   18363        would fail to behave properly when conflicting options were
   18364        supplied on the command line, and define macros in the user's
   18365        namespace even when strict ISO compliance was requested.
   18366        Integrating the preprocessor has cleanly solved these issues.
   18367      * The Makefile suite now supports redirection of make install by
   18368        means of the variable DESTDIR.
   18369      __________________________________________________________________
   18370 
   18371 GCC 3.3
   18372 
   18373    Detailed release notes for the GCC 3.3 release follow.
   18374 
   18375   Bug Fixes
   18376 
   18377     bootstrap failures
   18378 
   18379      * [8]10140 cross compiler build failures: missing __mempcpy (DUP:
   18380        [9]10198,[10]10338)
   18381 
   18382     Internal compiler errors (multi-platform)
   18383 
   18384      * [11]3581 large string causes segmentation fault in cc1
   18385      * [12]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
   18386      * [13]5533 (c++) ICE when processing std::accumulate(begin, end,
   18387        init, invalid_op)
   18388      * [14]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
   18389      * [15]6412 (c++) ICE in retrieve_specialization
   18390      * [16]6620 (c++) partial template specialization causes an ICE
   18391        (segmentation fault)
   18392      * [17]6663 (c++) ICE with attribute aligned
   18393      * [18]7068 ICE with incomplete types
   18394      * [19]7083 (c++) ICE using -gstabs with dodgy class derivation
   18395      * [20]7647 (c++) ICE when data member has the name of the enclosing
   18396        class
   18397      * [21]7675 ICE in fixup_var_refs_1
   18398      * [22]7718 'complex' template instantiation causes ICE
   18399      * [23]8116 (c++) ICE in member template function
   18400      * [24]8358 (ada) Ada compiler accesses freed memory, crashes
   18401      * [25]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
   18402        fault
   18403      * [26]8564 (c++) ICE in find_function_data, in function.c
   18404      * [27]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
   18405      * [28]8766 (c++) ICE after failed initialization of static template
   18406        variable
   18407      * [29]8803 ICE in instantiate_virtual_regs_1, in function.c
   18408      * [30]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
   18409      * [31]8906 (c++) ICE (Segmentation fault) when parsing nested-class
   18410        definition
   18411      * [32]9216 (c++) ICE on missing template parameter
   18412      * [33]9261 (c++) ICE in arg_assoc, in cp/decl2.c
   18413      * [34]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
   18414        loop
   18415      * [35]9429 (c++) ICE in template instantiation with a pointered new
   18416        operator
   18417      * [36]9516 Internal error when using a big array
   18418      * [37]9600 (c++) ICE with typedefs in template class
   18419      * [38]9629 (c++) virtual inheritance segfault
   18420      * [39]9672 (c++) ICE: Error reporting routines re-entered
   18421      * [40]9749 (c++) ICE in write_expression on invalid function
   18422        prototype
   18423      * [41]9794 (fortran) ICE: floating point exception during constant
   18424        folding
   18425      * [42]9829 (c++) Missing colon in nested namespace usage causes ICE
   18426      * [43]9916 (c++) ICE with noreturn function in ?: statement
   18427      * [44]9936 ICE with local function and variable-length 2d array
   18428      * [45]10262 (c++) cc1plus crashes with large generated code
   18429      * [46]10278 (c++) ICE in parser for invalid code
   18430      * [47]10446 (c++) ICE on definition of nonexistent member function of
   18431        nested class in a class template
   18432      * [48]10451 (c++) ICE in grokdeclarator on spurious mutable
   18433        declaration
   18434      * [49]10506 (c++) ICE in build_new at cp/init.c with
   18435        -fkeep-inline-functions and multiple inheritance
   18436      * [50]10549 (c++) ICE in store_bit_field on bitfields that exceed the
   18437        precision of the declared type
   18438 
   18439     Optimization bugs
   18440 
   18441      * [51]2001 Inordinately long compile times in reload CSE regs
   18442      * [52]2391 Exponential compilation time explosion in combine
   18443      * [53]2960 Duplicate loop conditions even with -Os
   18444      * [54]4046 redundant conditional branch
   18445      * [55]6405 Loop-unrolling related performance regressions
   18446      * [56]6798 very long compile time with large case-statement
   18447      * [57]6871 const objects shouldn't be moved to .bss
   18448      * [58]6909 problem w/ -Os on modified loop-2c.c test case
   18449      * [59]7189 gcc -O2 -Wall does not print ``control reaches end of
   18450        non-void function'' warning
   18451      * [60]7642 optimization problem with signbit()
   18452      * [61]8634 incorrect code for inlining of memcpy under -O2
   18453      * [62]8750 Cygwin prolog generation erroneously emitting __alloca as
   18454        regular function call
   18455 
   18456     C front end
   18457 
   18458      * [63]2161 long if-else cascade overflows parser stack
   18459      * [64]4319 short accepted on typedef'd char
   18460      * [65]8602 incorrect line numbers in warning messages when using
   18461        inline functions
   18462      * [66]9177 -fdump-translation-unit: C front end deletes function_decl
   18463        AST nodes and breaks debugging dumps
   18464      * [67]9853 miscompilation of non-constant structure initializer
   18465 
   18466     c++ compiler and library
   18467 
   18468      * [68]45 legal template specialization code is rejected (DUP:
   18469        [69]3784)
   18470      * [70]764 lookup failure: friend operator and dereferencing a pointer
   18471        and templates (DUP: [71]5116)
   18472      * [72]2862 gcc accepts invalid explicit instantiation syntax (DUP:
   18473        2863)
   18474      * [73]3663 G++ doesn't check access control during template
   18475        instantiation
   18476      * [74]3797 gcc fails to emit explicit specialization of a template
   18477        member
   18478      * [75]3948 Two destructors are called when no copy destructor is
   18479        defined (ABI change)
   18480      * [76]4137 Conversion operator within template is not accepted
   18481      * [77]4361 bogus ambiguity taking the address of a member template
   18482      * [78]4802 g++ accepts illegal template code (access to private
   18483        member; DUP: [79]5837)
   18484      * [80]4803 inline function is used but never defined, and g++ does
   18485        not object
   18486      * [81]5094 Partial specialization cannot be friend?
   18487      * [82]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
   18488      * [83]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
   18489        time
   18490      * [84]7015 certain __asm__ constructs rejected
   18491      * [85]7086 compile time regression (quadratic behavior in
   18492        fixup_var_refs)
   18493      * [86]7099 G++ doesn't set the noreturn attribute on std::exit and
   18494        std::abort
   18495      * [87]7247 copy constructor missing when inlining enabled (invalid
   18496        optimization?)
   18497      * [88]7441 string array initialization compilation time regression
   18498        from seconds to minutes
   18499      * [89]7768 __PRETTY_FUNCTION__ for template destructor is wrong
   18500      * [90]7804 bad printing of floating point constant in warning message
   18501      * [91]8099 Friend classes and template specializations
   18502      * [92]8117 member function pointers and multiple inheritance
   18503      * [93]8205 using declaration and multiple inheritance
   18504      * [94]8645 unnecessary non-zero checks in stl_tree.h
   18505      * [95]8724 explicit destructor call for incomplete class allowed
   18506      * [96]8805 compile time regression with many member variables
   18507      * [97]8691 -O3 and -fno-implicit-templates are incompatible
   18508      * [98]8700 unhelpful error message for binding temp to reference
   18509      * [99]8724 explicit destructor call for incomplete class allowed
   18510      * [100]8949 numeric_limits<>::denorm_min() and is_iec559 problems
   18511      * [101]9016 Failure to consistently constant fold "constant" C++
   18512        objects
   18513      * [102]9053 g++ confused about ambiguity of overloaded function
   18514        templates
   18515      * [103]9152 undefined virtual thunks
   18516      * [104]9182 basic_filebuf<> does not report errors in codecvt<>::out
   18517      * [105]9297 data corruption due to codegen bug (when copying.)
   18518      * [106]9318 i/ostream::operator>>/<<(streambuf*) broken
   18519      * [107]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
   18520      * [108]9400 bogus -Wshadow warning: shadowed declaration of this in
   18521        local classes
   18522      * [109]9424 i/ostream::operator>>/<<(streambuf*) drops characters
   18523      * [110]9425 filebuf::pbackfail broken (DUP: [111]9439)
   18524      * [112]9474 GCC freezes in compiling a weird code mixing <iostream>
   18525        and <iostream.h>
   18526      * [113]9548 Incorrect results from setf(ios::fixed) and precision(-1)
   18527        [114][DR 231]
   18528      * [115]9555 ostream inserters fail to set badbit on exception
   18529      * [116]9561 ostream inserters rethrow exception of wrong type
   18530      * [117]9563 ostream::sentry returns true after a failed preparation
   18531      * [118]9582 one-definition rule violation in std::allocator
   18532      * [119]9622 __PRETTY_FUNCTION__ incorrect in template destructors
   18533      * [120]9683 bug in initialization chains for static const variables
   18534        from template classes
   18535      * [121]9791 -Woverloaded-virtual reports hiding of destructor
   18536      * [122]9817 collate::compare doesn't handle nul characters
   18537      * [123]9825 filebuf::sputbackc breaks sbumpc
   18538      * [124]9826 operator>>(basic_istream, basic_string) fails to compile
   18539        with custom traits
   18540      * [125]9924 Multiple using statements for builtin functions not
   18541        allowed
   18542      * [126]9946 destructor is not called for temporary object
   18543      * [127]9964 filebuf::close() sometimes fails to close file
   18544      * [128]9988 filebuf::overflow writes EOF to file
   18545      * [129]10033 optimization breaks polymorphic references w/ typeid
   18546        operator
   18547      * [130]10097 filebuf::underflow drops characters
   18548      * [131]10132 filebuf destructor can throw exceptions
   18549      * [132]10180 gcc fails to warn about non-inlined function
   18550      * [133]10199 method parametrized by template does not work everywhere
   18551      * [134]10300 use of array-new (nothrow) in segfaults on NULL return
   18552      * [135]10427 Stack corruption with variable-length automatic arrays
   18553        and virtual destructors
   18554      * [136]10503 Compilation never stops in fixed_type_or_null
   18555 
   18556     Objective-C
   18557 
   18558      * [137]5956 selectors aren't matched properly when added to the
   18559        selector table
   18560 
   18561     Fortran compiler and library
   18562 
   18563      * [138]1832 list directed i/o overflow hangs, -fbounds-check doesn't
   18564        detect
   18565      * [139]3924 g77 generates code that is rejected by GAS if COFF debug
   18566        info requested
   18567      * [140]5634 doc: explain that configure --prefix=~/... does not work
   18568      * [141]6367 multiple repeat counts confuse namelist read into array
   18569      * [142]6491 Logical operations error on logicals when using
   18570        -fugly-logint
   18571      * [143]6742 Generation of C++ Prototype for FORTRAN and extern "C"
   18572      * [144]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
   18573        on irix6.5
   18574      * [145]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
   18575        assume a direct access file
   18576      * [146]7278 g77 "bug"; the executable misbehaves (with -O2
   18577        -fno-automatic)
   18578      * [147]7384 DATE_AND_TIME milliseconds field inactive on Windows
   18579      * [148]7388 Incorrect output with 0-based array of characters
   18580      * [149]8587 Double complex zero ** double precision number -> NaN
   18581        instead of zero
   18582      * [150]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
   18583        unknown register name line-length-none
   18584      * [151]10197 Direct access files not unformatted by default
   18585 
   18586     Java compiler and library
   18587 
   18588      * [152]6005 gcj fails to build rhug on alpha
   18589      * [153]6389 System.getProperty("") should always throw an
   18590        IllegalArgumentException
   18591      * [154]6576 java.util.ResourceBundle.getResource ignores locale
   18592      * [155]6652 new java.io.File("").getCanonicalFile() throws exception
   18593      * [156]7060 getMethod() doesn't search super interface
   18594      * [157]7073 bytecode interpreter gives wrong answer for interface
   18595        getSuperclass()
   18596      * [158]7180 possible bug in
   18597        javax.naming.spi.NamingManager.getPlusPath()
   18598      * [159]7416 java.security startup refs "GNU libgcj.security"
   18599      * [160]7570 Runtime.exec with null envp: child doesn't inherit parent
   18600        env (DUP: [161]7578)
   18601      * [162]7611 Internal error while compiling libjava with -O
   18602      * [163]7709 NullPointerException in _Jv_ResolvePoolEntry
   18603      * [164]7766 ZipInputStream.available returns 0 immediately after
   18604        construction
   18605      * [165]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
   18606      * [166]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
   18607      * [167]8142 '$' in class names vs. dlopen 'dynamic string tokens'
   18608      * [168]8234 ZipInputStream chokes when InputStream.read() returns
   18609        small chunks
   18610      * [169]8415 reflection bug: exception info for Method
   18611      * [170]8481 java.Random.nextInt(int) may return negative
   18612      * [171]8593 Error reading GZIPped files with BufferedReader
   18613      * [172]8759 java.beans.Introspector has no flushCaches() or
   18614        flushFromCaches() methods
   18615      * [173]8997 spin() calls Thread.sleep
   18616      * [174]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
   18617        instead of the root content of C:
   18618      * [175]9254 java::lang::Object::wait(), threads-win32.cc returns
   18619        wrong return codes
   18620      * [176]9271 Severe bias in java.security.SecureRandom
   18621 
   18622     Ada compiler and library
   18623 
   18624      * [177]6767 make gnatlib-shared fails on -laddr2line
   18625      * [178]9911 gnatmake fails to link when GCC configured with
   18626        --with-sjlj-exceptions=yes
   18627      * [179]10020 Can't bootstrap gcc on AIX with Ada enabled
   18628      * [180]10546 Ada tasking not working on Red Hat 9
   18629 
   18630     preprocessor
   18631 
   18632      * [181]7029 preprocessor should ignore #warning with -M
   18633 
   18634     ARM-specific
   18635 
   18636      * [182]2903 [arm] Optimization bug with long long arithmetic
   18637      * [183]7873 arm-linux-gcc fails when assigning address to a bit field
   18638 
   18639     FreeBSD-specific
   18640 
   18641      * [184]7680 float functions undefined in math.h/cmath with #define
   18642        _XOPEN_SOURCE
   18643 
   18644     HP-UX or HP-PA-specific
   18645 
   18646      * [185]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
   18647      * [186]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
   18648        fputc_unlocked
   18649      * [187]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
   18650 
   18651     m68hc11-specific
   18652 
   18653      * [188]6744 Bad assembler code generated: reference to pseudo
   18654        register z
   18655      * [189]7361 Internal compiler error in reload_cse_simplify_operands,
   18656        in reload1.c
   18657 
   18658     MIPS-specific
   18659 
   18660      * [190]9496 [mips-linux] bug in optimizer?
   18661 
   18662     PowerPC-specific
   18663 
   18664      * [191]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
   18665        space
   18666      * [192]8480 reload ICEs for LAPACK code on powerpc64-linux
   18667      * [193]8784 [AIX] Internal compiler error in simplify_gen_subreg
   18668      * [194]10315 [powerpc] ICE: in extract_insn, in recog.c
   18669 
   18670     SPARC-specific
   18671 
   18672      * [195]10267 (documentation) Wrong build instructions for
   18673        *-*-solaris2*
   18674 
   18675     x86-specific (Intel/AMD)
   18676 
   18677      * [196]7916 ICE in instantiate_virtual_register_1
   18678      * [197]7926 (c++) i486 instructions in header files make c++ programs
   18679        crash on i386
   18680      * [198]8555 ICE in gen_split_1231
   18681      * [199]8994 ICE with -O -march=pentium4
   18682      * [200]9426 ICE with -fssa -funroll-loops -fprofile-arcs
   18683      * [201]9806 ICE in inline assembly with -fPIC flag
   18684      * [202]10077 gcc -msse2 generates movd to move dwords between xmm
   18685        regs
   18686      * [203]10233 64-bit comparison only comparing bottom 32-bits
   18687      * [204]10286 type-punning doesn't work with __m64 and -O
   18688      * [205]10308 [x86] ICE with -O -fgcse or -O2
   18689      __________________________________________________________________
   18690 
   18691 GCC 3.3.1
   18692 
   18693   Bug Fixes
   18694 
   18695    This section lists the problem reports (PRs) from GCC's bug tracking
   18696    system that are known to be fixed in the 3.3.1 release. This list might
   18697    not be complete (that is, it is possible that some PRs that have been
   18698    fixed are not listed here).
   18699 
   18700     Bootstrap failures
   18701 
   18702      * [206]11272 [Solaris] make bootstrap fails while building libstdc++
   18703 
   18704     Internal compiler errors (multi-platform)
   18705 
   18706      * [207]5754 ICE on invalid nested template class
   18707      * [208]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
   18708        and --enable-checking
   18709      * [209]6949 (c++) ICE in tsubst_decl, in cp/pt.c
   18710      * [210]7053 (c++) ICE when declaring a function already defined as a
   18711        friend method of a template class
   18712      * [211]8164 (c++) ICE when using different const expressions as
   18713        template parameter
   18714      * [212]8384 (c++) ICE in is_base_type, in dwarf2out.c
   18715      * [213]9559 (c++) ICE with invalid initialization of a static const
   18716      * [214]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
   18717        when redeclaring a static member variable
   18718      * [215]9864 (fortran) ICE in add_abstract_origin_attribute, in
   18719        dwarfout.c with -g -O -finline-functions
   18720      * [216]10432 (c++) ICE in poplevel, in cp/decl.c
   18721      * [217]10475 ICE in subreg_highpart_offset for code with long long
   18722      * [218]10635 (c++) ICE when dereferencing an incomplete type casted
   18723        from a void pointer
   18724      * [219]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
   18725        instantiating static member variables
   18726      * [220]10700 ICE in copy_to_mode_reg on 64-bit targets
   18727      * [221]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
   18728      * [222]10796 (c++) ICE when defining an enum with two values: -1 and
   18729        MAX_INT_64BIT
   18730      * [223]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
   18731        sched.c
   18732      * [224]10939 (c++) ICE with template code
   18733      * [225]10956 (c++) ICE when specializing a template member function
   18734        of a template class, in tsubst, in cp/pt.c
   18735      * [226]11041 (c++) ICE: const myclass &x = *x; (when operator*()
   18736        defined)
   18737      * [227]11059 (c++) ICE with empty union
   18738      * [228]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
   18739        -O2 -fnon-call-exceptions
   18740      * [229]11105 (c++) ICE in mangle_conv_op_name_for_type
   18741      * [230]11149 (c++) ICE on error when instantiation with call function
   18742        of a base type
   18743      * [231]11228 (c++) ICE on new-expression using array operator new and
   18744        default-initialization
   18745      * [232]11282 (c++) Infinite memory usage after syntax error
   18746      * [233]11301 (fortran) ICE with -fno-globals
   18747      * [234]11308 (c++) ICE when using an enum type name as if it were a
   18748        class or namespace
   18749      * [235]11473 (c++) ICE with -gstabs when empty struct inherits from
   18750        an empty struct
   18751      * [236]11503 (c++) ICE when instantiating template with ADDR_EXPR
   18752      * [237]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
   18753        template member functions
   18754 
   18755     Optimization bugs
   18756 
   18757      * [238]11198 -O2 -frename-registers generates wrong code (aliasing
   18758        problem)
   18759      * [239]11304 Wrong code production with -fomit-frame-pointer
   18760      * [240]11381 volatile memory access optimized away
   18761      * [241]11536 [strength-reduce] -O2 optimization produces wrong code
   18762      * [242]11557 constant folding bug generates wrong code
   18763 
   18764     C front end
   18765 
   18766      * [243]5897 No warning for statement after return
   18767      * [244]11279 DWARF-2 output mishandles large enums
   18768 
   18769     Preprocessor bugs
   18770 
   18771      * [245]11022 no warning for non-compatible macro redefinition
   18772 
   18773     C++ compiler and library
   18774 
   18775      * [246]2330 static_cast<>() to a private base is allowed
   18776      * [247]5388 Incorrect message "operands to ?: have different types"
   18777      * [248]5390 Libiberty fails to demangle multi-digit template
   18778        parameters
   18779      * [249]7877 Incorrect parameter passing to specializations of member
   18780        function templates
   18781      * [250]9393 Anonymous namespaces and compiling the same file twice
   18782      * [251]10032 -pedantic converts some errors to warnings
   18783      * [252]10468 const typeof(x) is non-const, but only in templates
   18784      * [253]10527 confused error message with "new int()" parameter
   18785        initializer
   18786      * [254]10679 parameter MIN_INLINE_INSNS is not honored
   18787      * [255]10682 gcc chokes on a typedef for an enum inside a class
   18788        template
   18789      * [256]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
   18790        0.
   18791      * [257]10845 template member function (with nested template as
   18792        parameter) cannot be called anymore if another unrelated template
   18793        member function is defined
   18794      * [258]10849 Cannot define an out-of-class specialization of a
   18795        private nested template class
   18796      * [259]10888 Suppress -Winline warnings for system headers
   18797      * [260]10929 -Winline warns about functions for which no definition
   18798        is visible
   18799      * [261]10931 valid conversion static_cast<const unsigned
   18800        int&>(lvalue-of-type-int) is rejected
   18801      * [262]10940 Bad code with explicit specialization
   18802      * [263]10968 If member function implicitly instantiated, explicit
   18803        instantiation of class fails to instantiate it
   18804      * [264]10990 Cannot convert with dynamic_cast<> to a private base
   18805        class from within a member function
   18806      * [265]11039 Bad interaction between implicit typename deprecation
   18807        and friendship
   18808      * [266]11062 (libstdc++) avoid __attribute__ ((unused)); say
   18809        "__unused__" instead
   18810      * [267]11095 C++ iostream manipulator causes segfault when called
   18811        with negative argument
   18812      * [268]11098 g++ doesn't emit complete debugging information for
   18813        local variables in destructors
   18814      * [269]11137 GNU/Linux shared library constructors not called unless
   18815        there's one global object
   18816      * [270]11154 spurious ambiguity report for template class
   18817        specialization
   18818      * [271]11329 Compiler cannot find user defined implicit typecast
   18819      * [272]11332 Spurious error with casts in ?: expression
   18820      * [273]11431 static_cast behavior with subclasses when default
   18821        constructor available
   18822      * [274]11528 money_get facet does not accept "$.00" as valid
   18823      * [275]11546 Type lookup problems in out-of-line definition of a
   18824        class doubly nested from a template class
   18825      * [276]11567 C++ code containing templated member function with same
   18826        name as pure virtual member function results in linking failure
   18827      * [277]11645 Failure to deal with using and private inheritance
   18828 
   18829     Java compiler and library
   18830 
   18831      * [278]5179 Qualified static field access doesn't initialize its
   18832        class
   18833      * [279]8204 gcj -O2 to native reorders certain instructions
   18834        improperly
   18835      * [280]10838 java.io.ObjectInputStream syntax error
   18836      * [281]10886 The RMI registry that comes with GCJ does not work
   18837        correctly
   18838      * [282]11349 JNDI URL context factories not located correctly
   18839 
   18840     x86-specific (Intel/AMD)
   18841 
   18842      * [283]4823 ICE on inline assembly code
   18843      * [284]8878 miscompilation with -O and SSE
   18844      * [285]9815 (c++ library) atomicity.h - fails to compile with -O3
   18845        -masm=intel
   18846      * [286]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
   18847        in reload1.c
   18848      * [287]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
   18849      * [288]10673 ICE for x86-64 on freebsd libc vfprintf.c source
   18850      * [289]11044 [x86] out of range loop instructions for FP code on K6
   18851      * [290]11089 ICE: instantiate_virtual_regs_lossage while using SSE
   18852        built-ins
   18853      * [291]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
   18854        is used
   18855 
   18856     SPARC- or Solaris- specific
   18857 
   18858      * [292]9362 solaris 'as' dies when fed .s and "-gstabs"
   18859      * [293]10142 [SPARC64] gcc produces wrong code when passing
   18860        structures by value
   18861      * [294]10663 New configure check aborts with Sun tools.
   18862      * [295]10835 combinatorial explosion in scheduler on HyperSPARC
   18863      * [296]10876 ICE in calculate_giv_inc when building KDE
   18864      * [297]10955 wrong code at -O3 for structure argument in context of
   18865        structure return
   18866      * [298]11018 -mcpu=ultrasparc busts tar-1.13.25
   18867      * [299]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
   18868        Linux kernel
   18869 
   18870     ia64 specific
   18871 
   18872      * [300]10907 gcc violates the ia64 ABI (GP must be preserved)
   18873      * [301]11320 scheduler bug (in machine depended reorganization pass)
   18874      * [302]11599 bug with conditional and __builtin_prefetch
   18875 
   18876     PowerPC specific
   18877 
   18878      * [303]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
   18879        during loop)
   18880      * [304]10871 error in rs6000_stack_info save_size computation
   18881      * [305]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
   18882        cures it
   18883 
   18884     m68k-specific
   18885 
   18886      * [306]7594 [m68k] ICE on legal code associated with simplify-rtx
   18887      * [307]10557 [m68k] ICE in subreg_offset_representable_p
   18888      * [308]11054 [m68k] ICE in reg_overlap_mentioned_p
   18889 
   18890     ARM-specific
   18891 
   18892      * [309]10834 [arm] GCC 3.3 still generates incorrect instructions for
   18893        functions with __attribute__ ((interrupt ("IRQ")))
   18894      * [310]10842 [arm] Clobbered link register is copied to pc under
   18895        certain circumstances
   18896      * [311]11052 [arm] noce_process_if_block() can lose REG_INC notes
   18897      * [312]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
   18898        (3.4)
   18899 
   18900     MIPS-specific
   18901 
   18902      * [313]11084 ICE in propagate_one_insn, in flow.c
   18903 
   18904     SH-specific
   18905 
   18906      * [314]10331 can't compile c++ part of gcc cross compiler for sh-elf
   18907      * [315]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
   18908      * [316]11096 i686-linux to sh-linux cross compiler fails to compile
   18909        C++ files
   18910 
   18911     GNU/Linux (or Hurd?) specific
   18912 
   18913      * [317]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
   18914 
   18915     UnixWare specific
   18916 
   18917      * [318]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
   18918        7.1.1
   18919 
   18920     Cygwin (or mingw) specific
   18921 
   18922      * [319]5287 ICE with dllimport attribute
   18923      * [320]10148 [MingW/CygWin] Compiler dumps core
   18924 
   18925     DJGPP specific
   18926 
   18927      * [321]8787 GCC fails to emit .intel_syntax when invoked with
   18928        -masm=intel on DJGPP
   18929 
   18930     Darwin (and MacOS X) specific
   18931 
   18932      * [322]10900 trampolines crash
   18933 
   18934     Documentation
   18935 
   18936      * [323]1607 (c++) Format attributes on methods undocumented
   18937      * [324]4252 Invalid option `-fdump-translation-unit'
   18938      * [325]4490 Clarify restrictions on -m96bit-long-double,
   18939        -m128bit-long-double
   18940      * [326]10355 document an issue with regparm attribute on some systems
   18941        (e.g. Solaris)
   18942      * [327]10726 (fortran) Documentation for function "IDate Intrinsic
   18943        (Unix)" is wrong
   18944      * [328]10805 document bug in old version of Sun assembler
   18945      * [329]10815 warn against GNU binutils on AIX
   18946      * [330]10877 document need for newer binutils on i?86-*-linux-gnu
   18947      * [331]11280 Manual incorrect with respect to -freorder-blocks
   18948      * [332]11466 Document -mlittle-endian and its restrictions for the
   18949        sparc64 port
   18950 
   18951     Testsuite bugs (compiler itself is not affected)
   18952 
   18953      * [333]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
   18954        report failure
   18955      * [334]10810 gcc-3.3 fails make check: buffer overrun in
   18956        test_demangle.c
   18957      __________________________________________________________________
   18958 
   18959 GCC 3.3.2
   18960 
   18961   Bug Fixes
   18962 
   18963    This section lists the problem reports (PRs) from GCC's bug tracker
   18964    that are known to be fixed in the 3.3.2 release. This list might not be
   18965    complete (that is, it is possible that some PRs that have been fixed
   18966    are not listed here).
   18967 
   18968     Bootstrap failures and problems
   18969 
   18970      * [335]8336 [SCO5] bootstrap config still tries to use COFF options
   18971      * [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
   18972        --enable-threads=posix
   18973      * [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
   18974      * [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
   18975        7.1.1)
   18976      * [339]11687 xstormy16-elf build fails in libf2c
   18977      * [340]12263 [SGI IRIX] bootstrap fails during compile of
   18978        libf2c/libI77/backspace.c
   18979      * [341]12490 buffer overflow in scan-decls.c (during Solaris 9
   18980        fix-header processing)
   18981 
   18982     Internal compiler errors (multi-platform)
   18983 
   18984      * [342]7277 Casting integers to vector types causes ICE
   18985      * [343]7939 (c++) ICE on invalid function template specialization
   18986      * [344]11063 (c++) ICE on parsing initialization list of const array
   18987        member
   18988      * [345]11207 ICE with negative index in array element designator
   18989      * [346]11522 (fortran) g77 dwarf-2 ICE in
   18990        add_abstract_origin_attribute
   18991      * [347]11595 (c++) ICE on duplicate label definition
   18992      * [348]11646 (c++) ICE in commit_one_edge_insertion with
   18993        -fnon-call-exceptions -fgcse -O
   18994      * [349]11665 ICE in struct initializer when taking address
   18995      * [350]11852 (c++) ICE with bad struct initializer.
   18996      * [351]11878 (c++) ICE in cp_expr_size
   18997      * [352]11883 ICE with any -O on mercury-generated C code
   18998      * [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
   18999        cp/typeck2.c when applying typeid operator to template template
   19000        parameter
   19001      * [354]12146 ICE in lookup_template_function, in cp/pt.c
   19002      * [355]12215 ICE in make_label_edge with -fnon-call-exceptions
   19003        -fno-gcse -O2
   19004      * [356]12369 (c++) ICE with templates and friends
   19005      * [357]12446 ICE in emit_move_insn on complicated array reference
   19006      * [358]12510 ICE in final_scan_insn
   19007      * [359]12544 ICE with large parameters used in nested functions
   19008 
   19009     C and optimization bugs
   19010 
   19011      * [360]9862 spurious warnings with -W -finline-functions
   19012      * [361]10962 lookup_field is a linear search on a linked list (can be
   19013        slow if large struct)
   19014      * [362]11370 -Wunreachable-code gives false complaints
   19015      * [363]11637 invalid assembly with -fnon-call-exceptions
   19016      * [364]11885 Problem with bitfields in packed structs
   19017      * [365]12082 Inappropriate unreachable code warnings
   19018      * [366]12180 Inline optimization fails for variadic function
   19019      * [367]12340 loop unroller + gcse produces wrong code
   19020 
   19021     C++ compiler and library
   19022 
   19023      * [368]3907 nested template parameter collides with member name
   19024      * [369]5293 confusing message when binding a temporary to a reference
   19025      * [370]5296 [DR115] Pointers to functions and to template functions
   19026        behave differently in deduction
   19027      * [371]7939 ICE on function template specialization
   19028      * [372]8656 Unable to assign function with __attribute__ and pointer
   19029        return type to an appropriate variable
   19030      * [373]10147 Confusing error message for invalid template function
   19031        argument
   19032      * [374]11400 std::search_n() makes assumptions about Size parameter
   19033      * [375]11409 issues with using declarations, overloading, and
   19034        built-in functions
   19035      * [376]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
   19036        multiple bits in mask
   19037      * [377]11786 operator() call on variable in other namespace not
   19038        recognized
   19039      * [378]11867 static_cast ignores ambiguity
   19040      * [379]11928 bug with conversion operators that are typedefs
   19041      * [380]12114 Uninitialized memory accessed in dtor
   19042      * [381]12163 static_cast + explicit constructor regression
   19043      * [382]12181 Wrong code with comma operator and c++
   19044      * [383]12236 regparm and fastcall messes up parameters
   19045      * [384]12266 incorrect instantiation of unneeded template during
   19046        overload resolution
   19047      * [385]12296 istream::peek() doesn't set eofbit
   19048      * [386]12298 [sjlj exceptions] Stack unwind destroys
   19049        not-yet-constructed object
   19050      * [387]12369 ICE with templates and friends
   19051      * [388]12337 apparently infinite loop in g++
   19052      * [389]12344 stdcall attribute ignored if function returns a pointer
   19053      * [390]12451 missing(late) class forward declaration in cxxabi.h
   19054      * [391]12486 g++ accepts invalid use of a qualified name
   19055 
   19056     x86 specific (Intel/AMD)
   19057 
   19058      * [392]8869 [x86 MMX] ICE with const variable optimization and MMX
   19059        builtins
   19060      * [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
   19061        -O2
   19062      * [394]11689 g++3.3 emits un-assembleable code for k6 architecture
   19063      * [395]12116 [k6] Invalid assembly output values with X-MAME code
   19064      * [396]12070 ICE converting between double and long double with
   19065        -msoft-float
   19066 
   19067     ia64-specific
   19068 
   19069      * [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
   19070      * [398]11535 __builtin_return_address may not work on ia64
   19071      * [399]11693 [ia64] ICE in gen_nop_type
   19072      * [400]12224 [ia64] Thread-local storage doesn't work
   19073 
   19074     PowerPC-specific
   19075 
   19076      * [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
   19077        kernel
   19078      * [402]11319 loop miscompiled on ppc32
   19079      * [403]11949 ICE Compiler segfault with ffmpeg -maltivec code
   19080 
   19081     SPARC-specific
   19082 
   19083      * [404]11662 wrong code for expr. with cast to long long and
   19084        exclusive or
   19085      * [405]11965 invalid assembler code for a shift < 32 operation
   19086      * [406]12301 (c++) stack corruption when a returned expression throws
   19087        an exception
   19088 
   19089     Alpha-specific
   19090 
   19091      * [407]11717 [alpha-linux] unrecognizable insn compiling for.c of
   19092        kernel 2.4.22-pre8
   19093 
   19094     HPUX-specific
   19095 
   19096      * [408]11313 problem with #pragma weak and static inline functions
   19097      * [409]11712 __STDC_EXT__ not defined for C++ by default anymore?
   19098 
   19099     Solaris specific
   19100 
   19101      * [410]12166 Profiled programs crash if PROFDIR is set
   19102 
   19103     Solaris-x86 specific
   19104 
   19105      * [411]12101 i386 Solaris no longer works with GNU as?
   19106 
   19107     Miscellaneous embedded target-specific bugs
   19108 
   19109      * [412]10988 [m32r-elf] wrong blockmove code with -O3
   19110      * [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
   19111        -O2
   19112      * [414]11902 [sh4] spec file improperly inserts rpath even when none
   19113        needed
   19114      * [415]11903 [sh4] -pthread fails to link due to error in spec file
   19115        on sh4
   19116      __________________________________________________________________
   19117 
   19118 GCC 3.3.3
   19119 
   19120   Minor features
   19121 
   19122    In addition to the bug fixes documented below, this release contains
   19123    few minor features such as:
   19124      * Support for --with-sysroot
   19125      * Support for automatic detection of executable stacks
   19126      * Support for SSE3 instructions
   19127      * Support for thread local storage debugging under GDB on S390
   19128 
   19129   Bug Fixes
   19130 
   19131    This section lists the problem reports (PRs) from GCC's bug tracker
   19132    that are known to be fixed in the 3.3.3 release. This list might not be
   19133    complete (that is, it is possible that some PRs that have been fixed
   19134    are not listed here).
   19135 
   19136     Bootstrap failures and issues
   19137 
   19138      * [416]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
   19139      * [417]12399 boehm-gc fails (when building a cross compiler): libtool
   19140        unable to infer tagged configuration
   19141      * [418]13068 mklibgcc.in doesn't handle multi-level multilib
   19142        subdirectories properly
   19143 
   19144     Internal compiler errors (multi-platform)
   19145 
   19146      * [419]10060 ICE (stack overflow) on huge file (300k lines) due to
   19147        recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
   19148      * [420]10555 (c++) ICE on undefined template argument
   19149      * [421]10706 (c++) ICE in mangle_class_name_for_template
   19150      * [422]11496 (fortran) error in flow_loops_find when -funroll-loops
   19151        active
   19152      * [423]11741 ICE in pre_insert_copy_insn, in gcse.c
   19153      * [424]12440 GCC crashes during compilation of quicktime4linux 2.0.0
   19154      * [425]12632 (fortran) -fbounds-check ICE
   19155      * [426]12712 (c++) ICE on short legit C++ code fragment with gcc
   19156        3.3.2
   19157      * [427]12726 (c++) ICE (segfault) on trivial code
   19158      * [428]12890 (c++) ICE on compilation of class with throwing method
   19159      * [429]12900 (c++) ICE in rtl_verify_flow_info_1
   19160      * [430]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
   19161        correct code with -O2 -fno-force-mem
   19162      * [431]13289 (c++) ICE in regenerate_decl_from_template on recursive
   19163        template
   19164      * [432]13318 ICE: floating point exception in the loop optimizer
   19165      * [433]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
   19166        except.c
   19167      * [434]13574 (c++) invalid array default initializer in class lets
   19168        gcc consume all memory and die
   19169      * [435]13475 ICE on SIMD variables with partial value initialization
   19170      * [436]13797 (c++) ICE on invalid template parameter
   19171      * [437]13824 (java) gcj SEGV with simple .java program
   19172 
   19173     C and optimization bugs
   19174 
   19175      * [438]8776 loop invariants are not removed (most likely)
   19176      * [439]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
   19177        strncmp by memcmp
   19178      * [440]11350 undefined labels with -Os -fPIC
   19179      * [441]12826 Optimizer removes reference through volatile pointer
   19180      * [442]12500 stabs debug info: void no longer a predefined / builtin
   19181        type
   19182      * [443]12941 builtin-bitops-1.c miscompilation (latent bug)
   19183      * [444]12953 tree inliner bug (in inline_forbidden_p) and fix
   19184      * [445]13041 linux-2.6/sound/core/oss/rate.c miscompiled
   19185      * [446]13507 spurious printf format warning
   19186      * [447]13382 Type information for const pointer disappears during
   19187        optimization.
   19188      * [448]13394 noreturn attribute ignored on recursive invokation
   19189      * [449]13400 Compiled code crashes storing to read-only location
   19190      * [450]13521 Endless loop in calculate_global_regs_live
   19191 
   19192     C++ compiler and library
   19193 
   19194    Some of the bug fixes in this list were made to implement decisions
   19195    that the ISO C++ standards committee has made concerning several defect
   19196    reports (DRs). Links in the list below point to detailed discussion of
   19197    the relevant defect report.
   19198      * [451]2094 unimplemented: use of `ptrmem_cst' in template type
   19199        unification
   19200      * [452]2294 using declaration confusion
   19201      * [453]5050 template instantiation depth exceeds limit: recursion
   19202        problem?
   19203      * [454]9371 Bad exception handling in
   19204        i/ostream::operator>>/<<(streambuf*)
   19205      * [455]9546 bad exception handling in ostream members
   19206      * [456]10081 basic_ios::_M_cache_locale leaves NULL members in the
   19207        face of unknown locales
   19208      * [457]10093 [458][DR 61] Setting failbit in exceptions doesn't work
   19209      * [459]10095 istream::operator>>(int&) sets ios::badbit when
   19210        ios::failbit is set.
   19211      * [460]11554 Warning about reordering of initializers doesn't mention
   19212        location of constructor
   19213      * [461]12297 istream::sentry::sentry() handles eof() incorrectly.
   19214      * [462]12352 Exception safety problems in src/localename.cc
   19215      * [463]12438 Memory leak in locale::combine()
   19216      * [464]12540 Memory leak in locale::locale(const char*)
   19217      * [465]12594 DRs [466]60 [TC] and [467]63 [TC] not implemented
   19218      * [468]12657 Resolution of [469]DR 292 (WP) still unimplemented
   19219      * [470]12696 memory eating infinite loop in diagnostics (error
   19220        recovery problem)
   19221      * [471]12815 Code compiled with optimization behaves unexpectedly
   19222      * [472]12862 Conflicts between typedefs/enums and namespace member
   19223        declarations
   19224      * [473]12926 Wrong value after assignment in initialize list using
   19225        bit-fields
   19226      * [474]12967 Resolution of [475]DR 300 [WP] still unimplemented
   19227      * [476]12971 Resolution of [477]DR 328 [WP] still unimplemented
   19228      * [478]13007 basic_streambuf::pubimbue, imbue wrong
   19229      * [479]13009 Implicitly-defined assignment operator writes to wrong
   19230        memory
   19231      * [480]13057 regparm attribute not applied to destructor
   19232      * [481]13070 -Wformat option ignored in g++
   19233      * [482]13081 forward template declarations in <complex> let inlining
   19234        fail
   19235      * [483]13239 Assertion does not seem to work correctly anymore
   19236      * [484]13262 "xxx is private within this context" when initializing a
   19237        self-contained template class
   19238      * [485]13290 simple typo in concept checking for std::generate_n
   19239      * [486]13323 Template code does not compile in presence of typedef
   19240      * [487]13369 __verify_grouping (and __add_grouping?) not correct
   19241      * [488]13371 infinite loop with packed struct and inlining
   19242      * [489]13445 Template argument replacement "dereferences" a typedef
   19243      * [490]13461 Fails to access protected-ctor from public constant
   19244      * [491]13462 Non-standard-conforming type set::pointer
   19245      * [492]13478 gcc uses wrong constructor to initialize a const
   19246        reference
   19247      * [493]13544 "conflicting types" for enums in different scopes
   19248      * [494]13650 string::compare should not (always) use
   19249        traits_type::length()
   19250      * [495]13683 bogus warning about passing non-PODs through ellipsis
   19251      * [496]13688 Derived class is denied access to protected base class
   19252        member class
   19253      * [497]13774 Member variable cleared in virtual multiple inheritance
   19254        class
   19255      * [498]13884 Protect sstream.tcc from extern template use
   19256 
   19257     Java compiler and library
   19258 
   19259      * [499]10746 [win32] garbage collection crash in GCJ
   19260 
   19261     Objective-C compiler and library
   19262 
   19263      * [500]11433 Crash due to dereferencing null pointer when querying
   19264        protocol
   19265 
   19266     Fortran compiler and library
   19267 
   19268      * [501]12633 logical expression gives incorrect result with
   19269        -fugly-logint option
   19270      * [502]13037 [gcse-lm] g77 generates incorrect code
   19271      * [503]13213 Hex constant problem when compiling with -fugly-logint
   19272        and -ftypeless-boz
   19273 
   19274     x86-specific (Intel/AMD)
   19275 
   19276      * [504]4490 ICE with -m128bit-long-double
   19277      * [505]12292 [x86_64] ICE: RTL check: expected code `const_int', have
   19278        `reg' in make_field_assignment, in combine.c
   19279      * [506]12441 ICE: can't find a register to spill
   19280      * [507]12943 array static-init failure under -fpic, -fPIC
   19281      * [508]13608 Incorrect code with -O3 -ffast-math
   19282 
   19283     PowerPC-specific
   19284 
   19285      * [509]11598 testcase gcc.dg/20020118-1.c fails runtime check of
   19286        __attribute__((aligned(16)))
   19287      * [510]11793 ICE in extract_insn, in recog.c (const_vector's)
   19288      * [511]12467 vmsumubm emitted when vmsummbm appropriate (typo in
   19289        altivec.md)
   19290      * [512]12537 g++ generates writeable text sections
   19291 
   19292     SPARC-specific
   19293 
   19294      * [513]12496 wrong result for __atomic_add(&value, -1) when using -O0
   19295        -m64
   19296      * [514]12865 mprotect call to make trampoline executable may fail
   19297      * [515]13354 ICE in sparc_emit_set_const32
   19298 
   19299     ARM-specific
   19300 
   19301      * [516]10467 [arm] ICE in pre_insert_copy_insn,
   19302 
   19303     ia64-specific
   19304 
   19305      * [517]11226 ICE passing struct arg with two floats
   19306      * [518]11227 ICE for _Complex float, _Complex long double args
   19307      * [519]12644 GCC 3.3.2 fails to compile glibc on ia64
   19308      * [520]13149 build gcc-3.3.2 1305 error:unrecognizable insn
   19309      * Various fixes for libunwind
   19310 
   19311     Alpha-specific
   19312 
   19313      * [521]12654 Incorrect comparison code generated for Alpha
   19314      * [522]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
   19315      * [523]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
   19316 
   19317     HPPA-specific
   19318 
   19319      * [524]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
   19320      * [525]12158 [hppa] compilation does not terminate at -O1
   19321 
   19322     S390-specific
   19323 
   19324      * [526]11992 Wrong built-in code for memcmp with length 1<<24: only
   19325        (1<<24)-1 possible for CLCL-Instruction
   19326 
   19327     SH-specific
   19328 
   19329      * [527]9365 segfault in gen_far_branch (config/sh/sh.c)
   19330      * [528]10392 optimizer generates faulty array indexing
   19331      * [529]11322 SH profiler outputs multiple definitions of symbol
   19332      * [530]13069 gcc/config/sh/rtems.h broken
   19333      * [531]13302 Putting a va_list in a struct causes seg fault
   19334      * [532]13585 Incorrect optimization of call to sfunc
   19335      * Fix inappropriately exported libgcc functions from the shared
   19336        library
   19337 
   19338     Other embedded target specific
   19339 
   19340      * [533]8916 [mcore] unsigned char assign gets hosed.
   19341      * [534]11576 [h8300] ICE in change_address_1, in emit-rtl.c
   19342      * [535]13122 [h8300] local variable gets corrupted by function call
   19343        when -fomit-frame-pointer is given
   19344      * [536]13256 [cris] strict_low_part mistreated in delay slots
   19345      * [537]13373 [mcore] optimization with -frerun-cse-after-loop
   19346        -fexpensive-optimizations produces wrong code on mcore
   19347 
   19348     GNU HURD-specific
   19349 
   19350      * [538]12561 gcc/config/t-gnu needs updating to work with
   19351        --with-sysroot
   19352 
   19353     Tru64 Unix specific
   19354 
   19355      * [539]6243 testsuite fails almost all tests due to no libintl in
   19356        LD_LIBRARY_PATH during test.
   19357      * [540]11397 weak aliases broken on Tru64 UNIX
   19358 
   19359     AIX-specific
   19360 
   19361      * [541]12505 build failure due to defines of uchar in cpphash.h and
   19362        sys/types.h
   19363      * [542]13150 WEAK symbols not exported by collect2
   19364 
   19365     IRIX-specific
   19366 
   19367      * [543]12666 fixincludes problem on IRIX 6.5.19m
   19368 
   19369     Solaris-specific
   19370 
   19371      * [544]12969 Including sys/byteorder.h breaks configure checks
   19372 
   19373     Testsuite problems (compiler is not affected)
   19374 
   19375      * [545]10819 testsuite creates CR+LF on compiler version lines in
   19376        test summary files
   19377      * [546]11612 abi_check not finding correct libgcc_s.so.1
   19378 
   19379     Miscellaneous
   19380 
   19381      * [547]13211 using -###, incorrect warnings about unused linker file
   19382        are produced
   19383      __________________________________________________________________
   19384 
   19385 GCC 3.3.4
   19386 
   19387    This is the [548]list of problem reports (PRs) from GCC's bug tracking
   19388    system that are known to be fixed in the 3.3.4 release. This list might
   19389    not be complete (that is, it is possible that some PRs that have been
   19390    fixed are not listed here).
   19391      __________________________________________________________________
   19392 
   19393 GCC 3.3.5
   19394 
   19395    This is the [549]list of problem reports (PRs) from GCC's bug tracking
   19396    system that are known to be fixed in the 3.3.5 release. This list might
   19397    not be complete (that is, it is possible that some PRs that have been
   19398    fixed are not listed here).
   19399      __________________________________________________________________
   19400 
   19401 GCC 3.3.6
   19402 
   19403    This is the [550]list of problem reports (PRs) from GCC's bug tracking
   19404    system that are known to be fixed in the 3.3.6 release. This list might
   19405    not be complete (that is, it is possible that some PRs that have been
   19406    fixed are not listed here).
   19407 
   19408 
   19409     For questions related to the use of GCC, please consult these web
   19410     pages and the [551]GCC manuals. If that fails, the
   19411     [552]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   19412     web pages and the development of GCC are welcome on our developer
   19413     list at [553]gcc (a] gcc.gnu.org. All of [554]our lists have public
   19414     archives.
   19415 
   19416    Copyright (C) [555]Free Software Foundation, Inc. Verbatim copying and
   19417    distribution of this entire article is permitted in any medium,
   19418    provided this notice is preserved.
   19419 
   19420    These pages are [556]maintained by the GCC team. Last modified
   19421    2023-01-19.
   19422 
   19423 References
   19424 
   19425    1. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   19426    2. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   19427    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   19428    4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
   19429    5. https://gcc.gnu.org/news/dfa.html
   19430    6. https://gcc.gnu.org/c99status.html
   19431    7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
   19432    8. https://gcc.gnu.org/PR10140
   19433    9. https://gcc.gnu.org/PR10198
   19434   10. https://gcc.gnu.org/PR10338
   19435   11. https://gcc.gnu.org/PR3581
   19436   12. https://gcc.gnu.org/PR4382
   19437   13. https://gcc.gnu.org/PR5533
   19438   14. https://gcc.gnu.org/PR6387
   19439   15. https://gcc.gnu.org/PR6412
   19440   16. https://gcc.gnu.org/PR6620
   19441   17. https://gcc.gnu.org/PR6663
   19442   18. https://gcc.gnu.org/PR7068
   19443   19. https://gcc.gnu.org/PR7083
   19444   20. https://gcc.gnu.org/PR7647
   19445   21. https://gcc.gnu.org/PR7675
   19446   22. https://gcc.gnu.org/PR7718
   19447   23. https://gcc.gnu.org/PR8116
   19448   24. https://gcc.gnu.org/PR8358
   19449   25. https://gcc.gnu.org/PR8511
   19450   26. https://gcc.gnu.org/PR8564
   19451   27. https://gcc.gnu.org/PR8660
   19452   28. https://gcc.gnu.org/PR8766
   19453   29. https://gcc.gnu.org/PR8803
   19454   30. https://gcc.gnu.org/PR8846
   19455   31. https://gcc.gnu.org/PR8906
   19456   32. https://gcc.gnu.org/PR9216
   19457   33. https://gcc.gnu.org/PR9261
   19458   34. https://gcc.gnu.org/PR9263
   19459   35. https://gcc.gnu.org/PR9429
   19460   36. https://gcc.gnu.org/PR9516
   19461   37. https://gcc.gnu.org/PR9600
   19462   38. https://gcc.gnu.org/PR9629
   19463   39. https://gcc.gnu.org/PR9672
   19464   40. https://gcc.gnu.org/PR9749
   19465   41. https://gcc.gnu.org/PR9794
   19466   42. https://gcc.gnu.org/PR9829
   19467   43. https://gcc.gnu.org/PR9916
   19468   44. https://gcc.gnu.org/PR9936
   19469   45. https://gcc.gnu.org/PR10262
   19470   46. https://gcc.gnu.org/PR10278
   19471   47. https://gcc.gnu.org/PR10446
   19472   48. https://gcc.gnu.org/PR10451
   19473   49. https://gcc.gnu.org/PR10506
   19474   50. https://gcc.gnu.org/PR10549
   19475   51. https://gcc.gnu.org/PR2001
   19476   52. https://gcc.gnu.org/PR2391
   19477   53. https://gcc.gnu.org/PR2960
   19478   54. https://gcc.gnu.org/PR4046
   19479   55. https://gcc.gnu.org/PR6405
   19480   56. https://gcc.gnu.org/PR6798
   19481   57. https://gcc.gnu.org/PR6871
   19482   58. https://gcc.gnu.org/PR6909
   19483   59. https://gcc.gnu.org/PR7189
   19484   60. https://gcc.gnu.org/PR7642
   19485   61. https://gcc.gnu.org/PR8634
   19486   62. https://gcc.gnu.org/PR8750
   19487   63. https://gcc.gnu.org/PR2161
   19488   64. https://gcc.gnu.org/PR4319
   19489   65. https://gcc.gnu.org/PR8602
   19490   66. https://gcc.gnu.org/PR9177
   19491   67. https://gcc.gnu.org/PR9853
   19492   68. https://gcc.gnu.org/PR45
   19493   69. https://gcc.gnu.org/PR3784
   19494   70. https://gcc.gnu.org/PR764
   19495   71. https://gcc.gnu.org/PR5116
   19496   72. https://gcc.gnu.org/PR2862
   19497   73. https://gcc.gnu.org/PR3663
   19498   74. https://gcc.gnu.org/PR3797
   19499   75. https://gcc.gnu.org/PR3948
   19500   76. https://gcc.gnu.org/PR4137
   19501   77. https://gcc.gnu.org/PR4361
   19502   78. https://gcc.gnu.org/PR4802
   19503   79. https://gcc.gnu.org/PR5837
   19504   80. https://gcc.gnu.org/PR4803
   19505   81. https://gcc.gnu.org/PR5094
   19506   82. https://gcc.gnu.org/PR5730
   19507   83. https://gcc.gnu.org/PR6713
   19508   84. https://gcc.gnu.org/PR7015
   19509   85. https://gcc.gnu.org/PR7086
   19510   86. https://gcc.gnu.org/PR7099
   19511   87. https://gcc.gnu.org/PR7247
   19512   88. https://gcc.gnu.org/PR7441
   19513   89. https://gcc.gnu.org/PR7768
   19514   90. https://gcc.gnu.org/PR7804
   19515   91. https://gcc.gnu.org/PR8099
   19516   92. https://gcc.gnu.org/PR8117
   19517   93. https://gcc.gnu.org/PR8205
   19518   94. https://gcc.gnu.org/PR8645
   19519   95. https://gcc.gnu.org/PR8724
   19520   96. https://gcc.gnu.org/PR8805
   19521   97. https://gcc.gnu.org/PR8691
   19522   98. https://gcc.gnu.org/PR8700
   19523   99. https://gcc.gnu.org/PR8724
   19524  100. https://gcc.gnu.org/PR8949
   19525  101. https://gcc.gnu.org/PR9016
   19526  102. https://gcc.gnu.org/PR9053
   19527  103. https://gcc.gnu.org/PR9152
   19528  104. https://gcc.gnu.org/PR9182
   19529  105. https://gcc.gnu.org/PR9297
   19530  106. https://gcc.gnu.org/PR9318
   19531  107. https://gcc.gnu.org/PR9320
   19532  108. https://gcc.gnu.org/PR9400
   19533  109. https://gcc.gnu.org/PR9424
   19534  110. https://gcc.gnu.org/PR9425
   19535  111. https://gcc.gnu.org/PR9439
   19536  112. https://gcc.gnu.org/PR9474
   19537  113. https://gcc.gnu.org/PR9548
   19538  114. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
   19539  115. https://gcc.gnu.org/PR9555
   19540  116. https://gcc.gnu.org/PR9561
   19541  117. https://gcc.gnu.org/PR9563
   19542  118. https://gcc.gnu.org/PR9582
   19543  119. https://gcc.gnu.org/PR9622
   19544  120. https://gcc.gnu.org/PR9683
   19545  121. https://gcc.gnu.org/PR9791
   19546  122. https://gcc.gnu.org/PR9817
   19547  123. https://gcc.gnu.org/PR9825
   19548  124. https://gcc.gnu.org/PR9826
   19549  125. https://gcc.gnu.org/PR9924
   19550  126. https://gcc.gnu.org/PR9946
   19551  127. https://gcc.gnu.org/PR9964
   19552  128. https://gcc.gnu.org/PR9988
   19553  129. https://gcc.gnu.org/PR10033
   19554  130. https://gcc.gnu.org/PR10097
   19555  131. https://gcc.gnu.org/PR10132
   19556  132. https://gcc.gnu.org/PR10180
   19557  133. https://gcc.gnu.org/PR10199
   19558  134. https://gcc.gnu.org/PR10300
   19559  135. https://gcc.gnu.org/PR10427
   19560  136. https://gcc.gnu.org/PR10503
   19561  137. https://gcc.gnu.org/PR5956
   19562  138. https://gcc.gnu.org/PR1832
   19563  139. https://gcc.gnu.org/PR3924
   19564  140. https://gcc.gnu.org/PR5634
   19565  141. https://gcc.gnu.org/PR6367
   19566  142. https://gcc.gnu.org/PR6491
   19567  143. https://gcc.gnu.org/PR6742
   19568  144. https://gcc.gnu.org/PR7113
   19569  145. https://gcc.gnu.org/PR7236
   19570  146. https://gcc.gnu.org/PR7278
   19571  147. https://gcc.gnu.org/PR7384
   19572  148. https://gcc.gnu.org/PR7388
   19573  149. https://gcc.gnu.org/PR8587
   19574  150. https://gcc.gnu.org/PR9038
   19575  151. https://gcc.gnu.org/PR10197
   19576  152. https://gcc.gnu.org/PR6005
   19577  153. https://gcc.gnu.org/PR6389
   19578  154. https://gcc.gnu.org/PR6576
   19579  155. https://gcc.gnu.org/PR6652
   19580  156. https://gcc.gnu.org/PR7060
   19581  157. https://gcc.gnu.org/PR7073
   19582  158. https://gcc.gnu.org/PR7180
   19583  159. https://gcc.gnu.org/PR7416
   19584  160. https://gcc.gnu.org/PR7570
   19585  161. https://gcc.gnu.org/PR7578
   19586  162. https://gcc.gnu.org/PR7611
   19587  163. https://gcc.gnu.org/PR7709
   19588  164. https://gcc.gnu.org/PR7766
   19589  165. https://gcc.gnu.org/PR7785
   19590  166. https://gcc.gnu.org/PR7786
   19591  167. https://gcc.gnu.org/PR8142
   19592  168. https://gcc.gnu.org/PR8234
   19593  169. https://gcc.gnu.org/PR8415
   19594  170. https://gcc.gnu.org/PR8481
   19595  171. https://gcc.gnu.org/PR8593
   19596  172. https://gcc.gnu.org/PR8759
   19597  173. https://gcc.gnu.org/PR8997
   19598  174. https://gcc.gnu.org/PR9253
   19599  175. https://gcc.gnu.org/PR9254
   19600  176. https://gcc.gnu.org/PR9271
   19601  177. https://gcc.gnu.org/PR6767
   19602  178. https://gcc.gnu.org/PR9911
   19603  179. https://gcc.gnu.org/PR10020
   19604  180. https://gcc.gnu.org/PR10546
   19605  181. https://gcc.gnu.org/PR7029
   19606  182. https://gcc.gnu.org/PR2903
   19607  183. https://gcc.gnu.org/PR7873
   19608  184. https://gcc.gnu.org/PR7680
   19609  185. https://gcc.gnu.org/PR8705
   19610  186. https://gcc.gnu.org/PR9986
   19611  187. https://gcc.gnu.org/PR10056
   19612  188. https://gcc.gnu.org/PR6744
   19613  189. https://gcc.gnu.org/PR7361
   19614  190. https://gcc.gnu.org/PR9496
   19615  191. https://gcc.gnu.org/PR7067
   19616  192. https://gcc.gnu.org/PR8480
   19617  193. https://gcc.gnu.org/PR8784
   19618  194. https://gcc.gnu.org/PR10315
   19619  195. https://gcc.gnu.org/PR10267
   19620  196. https://gcc.gnu.org/PR7916
   19621  197. https://gcc.gnu.org/PR7926
   19622  198. https://gcc.gnu.org/PR8555
   19623  199. https://gcc.gnu.org/PR8994
   19624  200. https://gcc.gnu.org/PR9426
   19625  201. https://gcc.gnu.org/PR9806
   19626  202. https://gcc.gnu.org/PR10077
   19627  203. https://gcc.gnu.org/PR10233
   19628  204. https://gcc.gnu.org/PR10286
   19629  205. https://gcc.gnu.org/PR10308
   19630  206. https://gcc.gnu.org/PR11272
   19631  207. https://gcc.gnu.org/PR5754
   19632  208. https://gcc.gnu.org/PR6597
   19633  209. https://gcc.gnu.org/PR6949
   19634  210. https://gcc.gnu.org/PR7053
   19635  211. https://gcc.gnu.org/PR8164
   19636  212. https://gcc.gnu.org/PR8384
   19637  213. https://gcc.gnu.org/PR9559
   19638  214. https://gcc.gnu.org/PR9649
   19639  215. https://gcc.gnu.org/PR9864
   19640  216. https://gcc.gnu.org/PR10432
   19641  217. https://gcc.gnu.org/PR10475
   19642  218. https://gcc.gnu.org/PR10635
   19643  219. https://gcc.gnu.org/PR10661
   19644  220. https://gcc.gnu.org/PR10700
   19645  221. https://gcc.gnu.org/PR10712
   19646  222. https://gcc.gnu.org/PR10796
   19647  223. https://gcc.gnu.org/PR10890
   19648  224. https://gcc.gnu.org/PR10939
   19649  225. https://gcc.gnu.org/PR10956
   19650  226. https://gcc.gnu.org/PR11041
   19651  227. https://gcc.gnu.org/PR11059
   19652  228. https://gcc.gnu.org/PR11083
   19653  229. https://gcc.gnu.org/PR11105
   19654  230. https://gcc.gnu.org/PR11149
   19655  231. https://gcc.gnu.org/PR11228
   19656  232. https://gcc.gnu.org/PR11282
   19657  233. https://gcc.gnu.org/PR11301
   19658  234. https://gcc.gnu.org/PR11308
   19659  235. https://gcc.gnu.org/PR11473
   19660  236. https://gcc.gnu.org/PR11503
   19661  237. https://gcc.gnu.org/PR11513
   19662  238. https://gcc.gnu.org/PR11198
   19663  239. https://gcc.gnu.org/PR11304
   19664  240. https://gcc.gnu.org/PR11381
   19665  241. https://gcc.gnu.org/PR11536
   19666  242. https://gcc.gnu.org/PR11557
   19667  243. https://gcc.gnu.org/PR5897
   19668  244. https://gcc.gnu.org/PR11279
   19669  245. https://gcc.gnu.org/PR11022
   19670  246. https://gcc.gnu.org/PR2330
   19671  247. https://gcc.gnu.org/PR5388
   19672  248. https://gcc.gnu.org/PR5390
   19673  249. https://gcc.gnu.org/PR7877
   19674  250. https://gcc.gnu.org/PR9393
   19675  251. https://gcc.gnu.org/PR10032
   19676  252. https://gcc.gnu.org/PR10468
   19677  253. https://gcc.gnu.org/PR10527
   19678  254. https://gcc.gnu.org/PR10679
   19679  255. https://gcc.gnu.org/PR10682
   19680  256. https://gcc.gnu.org/PR10689
   19681  257. https://gcc.gnu.org/PR10845
   19682  258. https://gcc.gnu.org/PR10849
   19683  259. https://gcc.gnu.org/PR10888
   19684  260. https://gcc.gnu.org/PR10929
   19685  261. https://gcc.gnu.org/PR10931
   19686  262. https://gcc.gnu.org/PR10940
   19687  263. https://gcc.gnu.org/PR10968
   19688  264. https://gcc.gnu.org/PR10990
   19689  265. https://gcc.gnu.org/PR11039
   19690  266. https://gcc.gnu.org/PR11062
   19691  267. https://gcc.gnu.org/PR11095
   19692  268. https://gcc.gnu.org/PR11098
   19693  269. https://gcc.gnu.org/PR11137
   19694  270. https://gcc.gnu.org/PR11154
   19695  271. https://gcc.gnu.org/PR11329
   19696  272. https://gcc.gnu.org/PR11332
   19697  273. https://gcc.gnu.org/PR11431
   19698  274. https://gcc.gnu.org/PR11528
   19699  275. https://gcc.gnu.org/PR11546
   19700  276. https://gcc.gnu.org/PR11567
   19701  277. https://gcc.gnu.org/PR11645
   19702  278. https://gcc.gnu.org/PR5179
   19703  279. https://gcc.gnu.org/PR8204
   19704  280. https://gcc.gnu.org/PR10838
   19705  281. https://gcc.gnu.org/PR10886
   19706  282. https://gcc.gnu.org/PR11349
   19707  283. https://gcc.gnu.org/PR4823
   19708  284. https://gcc.gnu.org/PR8878
   19709  285. https://gcc.gnu.org/PR9815
   19710  286. https://gcc.gnu.org/PR10402
   19711  287. https://gcc.gnu.org/PR10504
   19712  288. https://gcc.gnu.org/PR10673
   19713  289. https://gcc.gnu.org/PR11044
   19714  290. https://gcc.gnu.org/PR11089
   19715  291. https://gcc.gnu.org/PR11420
   19716  292. https://gcc.gnu.org/PR9362
   19717  293. https://gcc.gnu.org/PR10142
   19718  294. https://gcc.gnu.org/PR10663
   19719  295. https://gcc.gnu.org/PR10835
   19720  296. https://gcc.gnu.org/PR10876
   19721  297. https://gcc.gnu.org/PR10955
   19722  298. https://gcc.gnu.org/PR11018
   19723  299. https://gcc.gnu.org/PR11556
   19724  300. https://gcc.gnu.org/PR10907
   19725  301. https://gcc.gnu.org/PR11320
   19726  302. https://gcc.gnu.org/PR11599
   19727  303. https://gcc.gnu.org/PR9745
   19728  304. https://gcc.gnu.org/PR10871
   19729  305. https://gcc.gnu.org/PR11440
   19730  306. https://gcc.gnu.org/PR7594
   19731  307. https://gcc.gnu.org/PR10557
   19732  308. https://gcc.gnu.org/PR11054
   19733  309. https://gcc.gnu.org/PR10834
   19734  310. https://gcc.gnu.org/PR10842
   19735  311. https://gcc.gnu.org/PR11052
   19736  312. https://gcc.gnu.org/PR11183
   19737  313. https://gcc.gnu.org/PR11084
   19738  314. https://gcc.gnu.org/PR10331
   19739  315. https://gcc.gnu.org/PR10413
   19740  316. https://gcc.gnu.org/PR11096
   19741  317. https://gcc.gnu.org/PR2873
   19742  318. https://gcc.gnu.org/PR3163
   19743  319. https://gcc.gnu.org/PR5287
   19744  320. https://gcc.gnu.org/PR10148
   19745  321. https://gcc.gnu.org/PR8787
   19746  322. https://gcc.gnu.org/PR10900
   19747  323. https://gcc.gnu.org/PR1607
   19748  324. https://gcc.gnu.org/PR4252
   19749  325. https://gcc.gnu.org/PR4490
   19750  326. https://gcc.gnu.org/PR10355
   19751  327. https://gcc.gnu.org/PR10726
   19752  328. https://gcc.gnu.org/PR10805
   19753  329. https://gcc.gnu.org/PR10815
   19754  330. https://gcc.gnu.org/PR10877
   19755  331. https://gcc.gnu.org/PR11280
   19756  332. https://gcc.gnu.org/PR11466
   19757  333. https://gcc.gnu.org/PR10737
   19758  334. https://gcc.gnu.org/PR10810
   19759  335. https://gcc.gnu.org/PR8336
   19760  336. https://gcc.gnu.org/PR9330
   19761  337. https://gcc.gnu.org/PR9631
   19762  338. https://gcc.gnu.org/PR9877
   19763  339. https://gcc.gnu.org/PR11687
   19764  340. https://gcc.gnu.org/PR12263
   19765  341. https://gcc.gnu.org/PR12490
   19766  342. https://gcc.gnu.org/PR7277
   19767  343. https://gcc.gnu.org/PR7939
   19768  344. https://gcc.gnu.org/PR11063
   19769  345. https://gcc.gnu.org/PR11207
   19770  346. https://gcc.gnu.org/PR11522
   19771  347. https://gcc.gnu.org/PR11595
   19772  348. https://gcc.gnu.org/PR11646
   19773  349. https://gcc.gnu.org/PR11665
   19774  350. https://gcc.gnu.org/PR11852
   19775  351. https://gcc.gnu.org/PR11878
   19776  352. https://gcc.gnu.org/PR11883
   19777  353. https://gcc.gnu.org/PR11991
   19778  354. https://gcc.gnu.org/PR12146
   19779  355. https://gcc.gnu.org/PR12215
   19780  356. https://gcc.gnu.org/PR12369
   19781  357. https://gcc.gnu.org/PR12446
   19782  358. https://gcc.gnu.org/PR12510
   19783  359. https://gcc.gnu.org/PR12544
   19784  360. https://gcc.gnu.org/PR9862
   19785  361. https://gcc.gnu.org/PR10962
   19786  362. https://gcc.gnu.org/PR11370
   19787  363. https://gcc.gnu.org/PR11637
   19788  364. https://gcc.gnu.org/PR11885
   19789  365. https://gcc.gnu.org/PR12082
   19790  366. https://gcc.gnu.org/PR12180
   19791  367. https://gcc.gnu.org/PR12340
   19792  368. https://gcc.gnu.org/PR3907
   19793  369. https://gcc.gnu.org/PR5293
   19794  370. https://gcc.gnu.org/PR5296
   19795  371. https://gcc.gnu.org/PR7939
   19796  372. https://gcc.gnu.org/PR8656
   19797  373. https://gcc.gnu.org/PR10147
   19798  374. https://gcc.gnu.org/PR11400
   19799  375. https://gcc.gnu.org/PR11409
   19800  376. https://gcc.gnu.org/PR11740
   19801  377. https://gcc.gnu.org/PR11786
   19802  378. https://gcc.gnu.org/PR11867
   19803  379. https://gcc.gnu.org/PR11928
   19804  380. https://gcc.gnu.org/PR12114
   19805  381. https://gcc.gnu.org/PR12163
   19806  382. https://gcc.gnu.org/PR12181
   19807  383. https://gcc.gnu.org/PR12236
   19808  384. https://gcc.gnu.org/PR12266
   19809  385. https://gcc.gnu.org/PR12296
   19810  386. https://gcc.gnu.org/PR12298
   19811  387. https://gcc.gnu.org/PR12369
   19812  388. https://gcc.gnu.org/PR12337
   19813  389. https://gcc.gnu.org/PR12344
   19814  390. https://gcc.gnu.org/PR12451
   19815  391. https://gcc.gnu.org/PR12486
   19816  392. https://gcc.gnu.org/PR8869
   19817  393. https://gcc.gnu.org/PR9786
   19818  394. https://gcc.gnu.org/PR11689
   19819  395. https://gcc.gnu.org/PR12116
   19820  396. https://gcc.gnu.org/PR12070
   19821  397. https://gcc.gnu.org/PR11184
   19822  398. https://gcc.gnu.org/PR11535
   19823  399. https://gcc.gnu.org/PR11693
   19824  400. https://gcc.gnu.org/PR12224
   19825  401. https://gcc.gnu.org/PR11087
   19826  402. https://gcc.gnu.org/PR11319
   19827  403. https://gcc.gnu.org/PR11949
   19828  404. https://gcc.gnu.org/PR11662
   19829  405. https://gcc.gnu.org/PR11965
   19830  406. https://gcc.gnu.org/PR12301
   19831  407. https://gcc.gnu.org/PR11717
   19832  408. https://gcc.gnu.org/PR11313
   19833  409. https://gcc.gnu.org/PR11712
   19834  410. https://gcc.gnu.org/PR12166
   19835  411. https://gcc.gnu.org/PR12101
   19836  412. https://gcc.gnu.org/PR10988
   19837  413. https://gcc.gnu.org/PR11805
   19838  414. https://gcc.gnu.org/PR11902
   19839  415. https://gcc.gnu.org/PR11903
   19840  416. https://gcc.gnu.org/PR11890
   19841  417. https://gcc.gnu.org/PR12399
   19842  418. https://gcc.gnu.org/PR13068
   19843  419. https://gcc.gnu.org/PR10060
   19844  420. https://gcc.gnu.org/PR10555
   19845  421. https://gcc.gnu.org/PR10706
   19846  422. https://gcc.gnu.org/PR11496
   19847  423. https://gcc.gnu.org/PR11741
   19848  424. https://gcc.gnu.org/PR12440
   19849  425. https://gcc.gnu.org/PR12632
   19850  426. https://gcc.gnu.org/PR12712
   19851  427. https://gcc.gnu.org/PR12726
   19852  428. https://gcc.gnu.org/PR12890
   19853  429. https://gcc.gnu.org/PR12900
   19854  430. https://gcc.gnu.org/PR13060
   19855  431. https://gcc.gnu.org/PR13289
   19856  432. https://gcc.gnu.org/PR13318
   19857  433. https://gcc.gnu.org/PR13392
   19858  434. https://gcc.gnu.org/PR13574
   19859  435. https://gcc.gnu.org/PR13475
   19860  436. https://gcc.gnu.org/PR13797
   19861  437. https://gcc.gnu.org/PR13824
   19862  438. https://gcc.gnu.org/PR8776
   19863  439. https://gcc.gnu.org/PR10339
   19864  440. https://gcc.gnu.org/PR11350
   19865  441. https://gcc.gnu.org/PR12826
   19866  442. https://gcc.gnu.org/PR12500
   19867  443. https://gcc.gnu.org/PR12941
   19868  444. https://gcc.gnu.org/PR12953
   19869  445. https://gcc.gnu.org/PR13041
   19870  446. https://gcc.gnu.org/PR13507
   19871  447. https://gcc.gnu.org/PR13382
   19872  448. https://gcc.gnu.org/PR13394
   19873  449. https://gcc.gnu.org/PR13400
   19874  450. https://gcc.gnu.org/PR13521
   19875  451. https://gcc.gnu.org/PR2094
   19876  452. https://gcc.gnu.org/PR2294
   19877  453. https://gcc.gnu.org/PR5050
   19878  454. https://gcc.gnu.org/PR9371
   19879  455. https://gcc.gnu.org/PR9546
   19880  456. https://gcc.gnu.org/PR10081
   19881  457. https://gcc.gnu.org/PR10093
   19882  458. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
   19883  459. https://gcc.gnu.org/PR10095
   19884  460. https://gcc.gnu.org/PR11554
   19885  461. https://gcc.gnu.org/PR12297
   19886  462. https://gcc.gnu.org/PR12352
   19887  463. https://gcc.gnu.org/PR12438
   19888  464. https://gcc.gnu.org/PR12540
   19889  465. https://gcc.gnu.org/PR12594
   19890  466. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
   19891  467. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
   19892  468. https://gcc.gnu.org/PR12657
   19893  469. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
   19894  470. https://gcc.gnu.org/PR12696
   19895  471. https://gcc.gnu.org/PR12815
   19896  472. https://gcc.gnu.org/PR12862
   19897  473. https://gcc.gnu.org/PR12926
   19898  474. https://gcc.gnu.org/PR12967
   19899  475. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
   19900  476. https://gcc.gnu.org/PR12971
   19901  477. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
   19902  478. https://gcc.gnu.org/PR13007
   19903  479. https://gcc.gnu.org/PR13009
   19904  480. https://gcc.gnu.org/PR13057
   19905  481. https://gcc.gnu.org/PR13070
   19906  482. https://gcc.gnu.org/PR13081
   19907  483. https://gcc.gnu.org/PR13239
   19908  484. https://gcc.gnu.org/PR13262
   19909  485. https://gcc.gnu.org/PR13290
   19910  486. https://gcc.gnu.org/PR13323
   19911  487. https://gcc.gnu.org/PR13369
   19912  488. https://gcc.gnu.org/PR13371
   19913  489. https://gcc.gnu.org/PR13445
   19914  490. https://gcc.gnu.org/PR13461
   19915  491. https://gcc.gnu.org/PR13462
   19916  492. https://gcc.gnu.org/PR13478
   19917  493. https://gcc.gnu.org/PR13544
   19918  494. https://gcc.gnu.org/PR13650
   19919  495. https://gcc.gnu.org/PR13683
   19920  496. https://gcc.gnu.org/PR13688
   19921  497. https://gcc.gnu.org/PR13774
   19922  498. https://gcc.gnu.org/PR13884
   19923  499. https://gcc.gnu.org/PR10746
   19924  500. https://gcc.gnu.org/PR11433
   19925  501. https://gcc.gnu.org/PR12633
   19926  502. https://gcc.gnu.org/PR13037
   19927  503. https://gcc.gnu.org/PR13213
   19928  504. https://gcc.gnu.org/PR4490
   19929  505. https://gcc.gnu.org/PR12292
   19930  506. https://gcc.gnu.org/PR12441
   19931  507. https://gcc.gnu.org/PR12943
   19932  508. https://gcc.gnu.org/PR13608
   19933  509. https://gcc.gnu.org/PR11598
   19934  510. https://gcc.gnu.org/PR11793
   19935  511. https://gcc.gnu.org/PR12467
   19936  512. https://gcc.gnu.org/PR12537
   19937  513. https://gcc.gnu.org/PR12496
   19938  514. https://gcc.gnu.org/PR12865
   19939  515. https://gcc.gnu.org/PR13354
   19940  516. https://gcc.gnu.org/PR10467
   19941  517. https://gcc.gnu.org/PR11226
   19942  518. https://gcc.gnu.org/PR11227
   19943  519. https://gcc.gnu.org/PR12644
   19944  520. https://gcc.gnu.org/PR13149
   19945  521. https://gcc.gnu.org/PR12654
   19946  522. https://gcc.gnu.org/PR12965
   19947  523. https://gcc.gnu.org/PR13031
   19948  524. https://gcc.gnu.org/PR11634
   19949  525. https://gcc.gnu.org/PR12158
   19950  526. https://gcc.gnu.org/PR11992
   19951  527. https://gcc.gnu.org/PR9365
   19952  528. https://gcc.gnu.org/PR10392
   19953  529. https://gcc.gnu.org/PR11322
   19954  530. https://gcc.gnu.org/PR13069
   19955  531. https://gcc.gnu.org/PR13302
   19956  532. https://gcc.gnu.org/PR13585
   19957  533. https://gcc.gnu.org/PR8916
   19958  534. https://gcc.gnu.org/PR11576
   19959  535. https://gcc.gnu.org/PR13122
   19960  536. https://gcc.gnu.org/PR13256
   19961  537. https://gcc.gnu.org/PR13373
   19962  538. https://gcc.gnu.org/PR12561
   19963  539. https://gcc.gnu.org/PR6243
   19964  540. https://gcc.gnu.org/PR11397
   19965  541. https://gcc.gnu.org/PR12505
   19966  542. https://gcc.gnu.org/PR13150
   19967  543. https://gcc.gnu.org/PR12666
   19968  544. https://gcc.gnu.org/PR12969
   19969  545. https://gcc.gnu.org/PR10819
   19970  546. https://gcc.gnu.org/PR11612
   19971  547. https://gcc.gnu.org/PR13211
   19972  548. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
   19973  549. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
   19974  550. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
   19975  551. https://gcc.gnu.org/onlinedocs/
   19976  552. mailto:gcc-help (a] gcc.gnu.org
   19977  553. mailto:gcc (a] gcc.gnu.org
   19978  554. https://gcc.gnu.org/lists.html
   19979  555. https://www.fsf.org/
   19980  556. https://gcc.gnu.org/about.html
   19981 ======================================================================
   19982 http://gcc.gnu.org/gcc-3.2/index.html
   19983                              GCC 3.2 Release Series
   19984 
   19985    (This release series is no longer supported.)
   19986 
   19987    April 25, 2003
   19988 
   19989    The [1]GNU project and the GCC developers are pleased to announce the
   19990    release of GCC 3.2.3.
   19991 
   19992    The purpose of the GCC 3.2 release series is to provide a stable
   19993    platform for OS distributors to use building their next releases. A
   19994    primary objective was to stabilize the C++ ABI; we believe that the
   19995    interface to the compiler and the C++ standard library are now
   19996    relatively stable.
   19997 
   19998    Be aware that C++ code compiled by GCC 3.2.x will (in general) not
   19999    interoperate with code compiled by GCC 3.1.1 or earlier.
   20000 
   20001    Please refer to our [2]detailed list of news, caveats, and bug-fixes
   20002    for further information.
   20003 
   20004 Release History
   20005 
   20006    GCC 3.2.3
   20007           April 25, 2003 ([3]changes)
   20008 
   20009    GCC 3.2.2
   20010           February 5, 2003 ([4]changes)
   20011 
   20012    GCC 3.2.1
   20013           November 19, 2002 ([5]changes)
   20014 
   20015    GCC 3.2
   20016           August 14, 2002 ([6]changes)
   20017 
   20018 References and Acknowledgements
   20019 
   20020    GCC used to stand for the GNU C Compiler, but since the compiler
   20021    supports several other languages aside from C, it now stands for the
   20022    GNU Compiler Collection.
   20023 
   20024    A list of [7]successful builds is updated as new information becomes
   20025    available.
   20026 
   20027    The GCC developers would like to thank the numerous people that have
   20028    contributed new features, improvements, bug fixes, and other changes as
   20029    well as test results to GCC. This [8]amazing group of volunteers is
   20030    what makes GCC successful.
   20031 
   20032    For additional information about GCC please refer to the [9]GCC project
   20033    web site or contact the [10]GCC development mailing list.
   20034 
   20035    To obtain GCC please use [11]our mirror sites, or our CVS server.
   20036 
   20037 
   20038     For questions related to the use of GCC, please consult these web
   20039     pages and the [12]GCC manuals. If that fails, the
   20040     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20041     web pages and the development of GCC are welcome on our developer
   20042     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
   20043     archives.
   20044 
   20045    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
   20046    distribution of this entire article is permitted in any medium,
   20047    provided this notice is preserved.
   20048 
   20049    These pages are [17]maintained by the GCC team. Last modified
   20050    2022-10-26.
   20051 
   20052 References
   20053 
   20054    1. http://www.gnu.org/
   20055    2. https://gcc.gnu.org/gcc-3.2/changes.html
   20056    3. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   20057    4. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.2
   20058    5. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
   20059    6. https://gcc.gnu.org/gcc-3.2/changes.html#3.2
   20060    7. https://gcc.gnu.org/gcc-3.2/buildstat.html
   20061    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20062    9. https://gcc.gnu.org/index.html
   20063   10. mailto:gcc (a] gcc.gnu.org
   20064   11. https://gcc.gnu.org/mirrors.html
   20065   12. https://gcc.gnu.org/onlinedocs/
   20066   13. mailto:gcc-help (a] gcc.gnu.org
   20067   14. mailto:gcc (a] gcc.gnu.org
   20068   15. https://gcc.gnu.org/lists.html
   20069   16. https://www.fsf.org/
   20070   17. https://gcc.gnu.org/about.html
   20071 ======================================================================
   20072 http://gcc.gnu.org/gcc-3.2/changes.html
   20073                              GCC 3.2 Release Series
   20074                         Changes, New Features, and Fixes
   20075 
   20076    The latest release in the 3.2 release series is [1]GCC 3.2.3.
   20077 
   20078 Caveats and New Features
   20079 
   20080   Caveats
   20081 
   20082      * The C++ compiler does not correctly zero-initialize
   20083        pointers-to-data members. You must explicitly initialize them. For
   20084        example: int S::*m(0); will work, but depending on
   20085        default-initialization to zero will not work. This bug cannot be
   20086        fixed in GCC 3.2 without inducing unacceptable risks. It will be
   20087        fixed in GCC 3.3.
   20088      * This GCC release is based on the GCC 3.1 sourcebase, and thus has
   20089        all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
   20090        a number of C++ ABI fixes which make its C++ compiler generate
   20091        binary code which is incompatible with the C++ compilers found in
   20092        earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
   20093 
   20094   Frontend Enhancements
   20095 
   20096     C/C++/Objective-C
   20097 
   20098      * The method of constructing the list of directories to be searched
   20099        for header files has been revised. If a directory named by a -I
   20100        option is a standard system include directory, the option is
   20101        ignored to ensure that the default search order for system
   20102        directories and the special treatment of system header files are
   20103        not defeated.
   20104      * The C and Objective-C compilers no longer accept the "Naming Types"
   20105        extension (typedef foo = bar); it was already unavailable in C++.
   20106        Code which uses it will need to be changed to use the "typeof"
   20107        extension instead: typedef typeof(bar) foo. (We have removed this
   20108        extension without a period of deprecation because it has caused the
   20109        compiler to crash since version 3.0 and no one noticed until very
   20110        recently. Thus we conclude it is not in widespread use.)
   20111 
   20112     C++
   20113 
   20114      * GCC 3.2 fixed serveral differences between the C++ ABI implemented
   20115        in GCC and the multi-vendor standard, but more have been found
   20116        since the release. 3.2.1 adds a new warning, -Wabi, to warn about
   20117        code which is affected by these bugs. We will fix these bugs in
   20118        some future release, once we are confident that all have been
   20119        found; until then, it is our intention to make changes to the ABI
   20120        only if they are necessary for correct compilation of C++, as
   20121        opposed to conformance to the ABI documents.
   20122      * For details on how to build an ABI compliant compiler for GNU/Linux
   20123        systems, check the [3]common C++ ABI page.
   20124 
   20125   New Targets and Target Specific Improvements
   20126 
   20127     IA-32
   20128 
   20129      * Fixed a number of bugs in SSE and MMX intrinsics.
   20130      * Fixed common compiler crashes with SSE instruction set enabled
   20131        (implied by -march=pentium3, pentium4, athlon-xp)
   20132      * __m128 and __m128i is not 128bit aligned when used in structures.
   20133 
   20134     x86-64
   20135 
   20136      * A bug whereby the compiler could generate bad code for bzero has
   20137        been fixed.
   20138      * ABI fixes (implying ABI incompatibilities with previous version in
   20139        some corner cases)
   20140      * Fixed prefetch code generation
   20141      __________________________________________________________________
   20142 
   20143 GCC 3.2.3
   20144 
   20145    3.2.3 is a bug fix release only; there are no new features that were
   20146    not present in GCC 3.2.2.
   20147 
   20148   Bug Fixes
   20149 
   20150    This section lists the problem reports (PRs) from GCC's bug tracking
   20151    system that are known to be fixed in the 3.2.3 release. This list might
   20152    not be complete (that is, it is possible that some PRs that have been
   20153    fixed are not listed here), and some of the titles have been changed to
   20154    make them more clear.
   20155 
   20156     Internal Compiler Errors (multi-platform)
   20157 
   20158      * [4]3782: (c++) -quiet -fstats produces a segmentation fault in
   20159        cc1plus
   20160      * [5]6440: (c++) template specializations cause ICE
   20161      * [6]7050: (c++) ICE on: (i ? get_string() : throw)
   20162      * [7]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
   20163      * [8]7982: (c++) ICE due to infinite recursion (using STL set)
   20164      * [9]8068: exceedingly high (infinite) memory usage
   20165      * [10]8178: ICE with __builtin_ffs
   20166      * [11]8396: ICE in copy_to_mode_reg, in explow.c
   20167      * [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
   20168      * [13]9768: ICE when optimizing inline code at -O2
   20169      * [14]9798: (c++) Infinite recursion (segfault) in
   20170        cp/decl.c:push_using_directive with recursive using directives
   20171      * [15]9799: mismatching structure initializer with nested flexible
   20172        array member: ICE
   20173      * [16]9928: ICE on duplicate enum declaration
   20174      * [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
   20175        sparc, alpha)
   20176      * [18]10352: ICE in find_reloads_toplev
   20177      * [19]10336: ICE with -Wunreachable-code
   20178 
   20179     C/optimizer bugs:
   20180 
   20181      * [20]8224: Incorrect joining of signed and unsigned division
   20182      * [21]8613: -O2 produces wrong code with builtin strlen and
   20183        postincrements
   20184      * [22]8828: gcc reports some code is unreachable when it is not
   20185      * [23]9226: GCSE breaking argument passing
   20186      * [24]9853: miscompilation of non-constant structure initializer
   20187      * [25]9797: C99-style struct initializers are miscompiled
   20188      * [26]9967: Some standard C function calls should not be replaced
   20189        when optimizing for size
   20190      * [27]10116: ce2: invalid merge of join_bb in the context of switch
   20191        statements
   20192      * [28]10171: wrong code for inlined function
   20193      * [29]10175: -Wunreachable-code doesn't work for single lines
   20194 
   20195     C++ compiler and library:
   20196 
   20197      * [30]8316: Confusing diagnostic for code that misuses conversion
   20198        operators
   20199      * [31]9169: filebuf output fails if codecvt<>::out returns noconv
   20200      * [32]9420: incomplete type incorrectly reported
   20201      * [33]9459: typeof in return type specification of template not
   20202        supported
   20203      * [34]9507: filebuf::open handles ios_base::ate incorrectly
   20204      * [35]9538: Out-of-bounds memory access in streambuf::sputbackc
   20205      * [36]9602: Total confusion about template/friend/virtual/abstract
   20206      * [37]9993: destructor not called for local object created within and
   20207        returned from infinite loop
   20208      * [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
   20209        system
   20210 
   20211     Java compiler and library:
   20212 
   20213      * [39]9652: libgcj build fails on irix6.5.1[78]
   20214      * [40]10144: gas on solaris complains about bad .stabs lines for
   20215        java, native as unaffected
   20216 
   20217     x86-specific (Intel/AMD):
   20218 
   20219      * [41]8746: gcc miscompiles Linux kernel ppa driver on x86
   20220      * [42]9888: -mcpu=k6 -Os produces out of range loop instructions
   20221      * [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
   20222        failed
   20223      * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
   20224        failed
   20225 
   20226     SPARC-specific:
   20227 
   20228      * [45]7784: [Sparc] ICE in extract_insn, in recog.c
   20229      * [46]7796: sparc extra failure with -m64 on execute/930921-1.c in
   20230        unroll.c
   20231      * [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
   20232      * [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
   20233        execute/loop-2d.c
   20234      * [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
   20235      * [50]9414: Scheduling bug on Ultrasparc
   20236      * [51]10067: GCC-3.2.2 outputs invalid asm on sparc64
   20237 
   20238     m68k-specific:
   20239 
   20240      * [52]7248: broken "inclusive or" code
   20241      * [53]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
   20242 
   20243     PowerPC-specific:
   20244 
   20245      * [54]9732: Wrong code with -O2 -fPIC
   20246      * [55]10073: ICE: powerpc cannot split insn
   20247 
   20248     Alpha-specific:
   20249 
   20250      * [56]7702: optimization problem on a DEC alpha under OSF1
   20251      * [57]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
   20252 
   20253     HP-specific:
   20254 
   20255      * [58]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
   20256      * [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
   20257        (missing symbol)
   20258      * [60]10271: Floating point args don't get reloaded across function
   20259        calls with -O2
   20260 
   20261     MIPS specific:
   20262 
   20263      * [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
   20264        compile/920501-4.c
   20265 
   20266     CRIS specific:
   20267 
   20268      * [62]10377: gcc-3.2.2 creates bad assembler code for cris
   20269 
   20270     Miscellaneous and minor bugs:
   20271 
   20272      * [63]6955: collect2 says "core dumped" when there is no core
   20273      __________________________________________________________________
   20274 
   20275 GCC 3.2.2
   20276 
   20277    Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
   20278    install by means of the DESTDIR variable. Parts of the GCC tree have
   20279    featured that support long before, but now it is available even from
   20280    the top level.
   20281 
   20282    Other than that, GCC 3.2.2 is a bug fix release only; there are no new
   20283    features that were not present in GCC 3.2.1.
   20284 
   20285   Bug Fixes
   20286 
   20287    On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
   20288    functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
   20289    with FreeBSD 5.0 does not have this problem), Interix, a.out-based
   20290    GNU/Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI
   20291    change, and thus restores ABI-compatibility with previous releases
   20292    (except GCC 3.2.1) on these platforms.
   20293 
   20294    This section lists the problem reports (PRs) from GCC's bug tracking
   20295    system that are known to be fixed in the 3.2.2 release. This list might
   20296    not be complete (that is, it is possible that some PRs that have been
   20297    fixed are not listed here) and some of the titles have been changed to
   20298    make them more clear.
   20299 
   20300     Internal Compiler Errors (multi-platform)
   20301 
   20302      * [64]5919: (c++) ICE when passing variable array to template
   20303        function
   20304      * [65]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
   20305      * [66]7507: ICE with -O2 when address of called function is a
   20306        complicated expression
   20307      * [67]7622: ICE with nested inline functions if function's address is
   20308        taken
   20309      * [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
   20310        [69]9258)
   20311      * [70]8031: (c++) ICE in code comparing typeids and casting from
   20312        virtual base
   20313      * [71]8275: ICE in simplify_subreg
   20314      * [72]8332: (c++) builtin strlen/template interaction causes ICE
   20315      * [73]8372: (c++) ICE on explicit call of destructor
   20316      * [74]8439: (c, not c++) empty struct causes ICE
   20317      * [75]8442: (c++) ICE with nested template classes
   20318      * [76]8518: ICE when compiling mplayer ("extern inline" issue)
   20319      * [77]8615: (c++) ICE with out-of-range character constant template
   20320        argument
   20321      * [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
   20322      * [79]8799: (c++) ICE: error reporting routines re-entered
   20323      * [80]9328: (c++) ICE with typeof(X) for overloaded X
   20324      * [81]9465: (preprocessor) cpp -traditional ICE on null bytes
   20325 
   20326     C++ (compiler and library) bugs
   20327 
   20328      * [82]47: scoping in nested classes is broken
   20329      * [83]6745: problems with iostream rdbuf() member function
   20330      * [84]8214: conversion from const char* const to char* sometimes
   20331        accepted illegally
   20332      * [85]8493: builtin strlen and overload resolution (same bug as
   20333        [86]8332)
   20334      * [87]8503: strange behaviour of function types
   20335      * [88]8727: compiler confused by inheritance from an anonymous struct
   20336      * [89]7445: poor performance of std::locale::classic() in
   20337        multi-threaded applications
   20338      * [90]8230: mishandling of overflow in vector<T>::resize
   20339      * [91]8399: sync_with_stdio(false) breaks unformatted input
   20340      * [92]8662: illegal access of private member of unnamed class is
   20341        accepted
   20342      * [93]8707: "make distclean" fails in libstdc++-v3 directory
   20343      * [94]8708: __USE_MALLOC doesn't work
   20344      * [95]8790: Use of non-thread-safe strtok in src/localename.cc
   20345      * [96]8887: Bug in date formats with --enable-clocale=generic
   20346      * [97]9076: Call Frame Instructions are not handled correctly during
   20347        unwind operation
   20348      * [98]9151: std::setprecision limited to 16 digits when outputting a
   20349        double to a stream
   20350      * [99]9168: codecvt<char, char, mbstate_t> overwrites output buffers
   20351      * [100]9269: libstdc++ headers: explicit specialization of function
   20352        must precede its first use
   20353      * [101]9322: return value of basic_streambuf<>::getloc affected by
   20354        locale::global
   20355      * [102]9433: segfault in runtime support for dynamic_cast
   20356 
   20357     C and optimizer bugs
   20358 
   20359      * [103]8032: GCC incorrectly initializes static structs that have
   20360        flexible arrays
   20361      * [104]8639: simple arithmetic expression broken
   20362      * [105]8794: optimization improperly eliminates certain expressions
   20363      * [106]8832: traditional "asm volatile" code is illegally optimized
   20364      * [107]8988: loop optimizer bug: with -O2, code is generated that
   20365        segfaults (found on i386, bug present for all platforms)
   20366      * [108]9492: structure copy clobbers subsequent stores to structure
   20367 
   20368     Objective-C bugs
   20369 
   20370      * [109]9267: Objective-C parser won't build with newer bison versions
   20371        (e.g. 1.875)
   20372 
   20373     Ada bugs
   20374 
   20375      * [110]8344: Ada build problem due to conflict between gcc/final.o,
   20376        gcc/ada/final.o
   20377 
   20378     Preprocessor bugs
   20379 
   20380      * [111]8524: _Pragma within macros is improperly expanded
   20381      * [112]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
   20382        -fshort-wchar
   20383 
   20384     ARM-specific
   20385 
   20386      * [113]9090: arm ICE with >= -O2; regression from gcc-2.95
   20387 
   20388     x86-specific (Intel/AMD)
   20389 
   20390      * [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
   20391      * [115]8599: loop unroll bug with -march=k6-3
   20392      * [116]9506: ABI breakage in structure return (affects BSD and
   20393        Cygwin, but not GNU/Linux)
   20394 
   20395     FreeBSD 5.0 specific
   20396 
   20397      * [117]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
   20398 
   20399     RTEMS-specific
   20400 
   20401      * [118]9292: hppa1.1-rtems configurery problems
   20402      * [119]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
   20403      * [120]9295: [mips-rtems] config/mips/rtems.h init/fini issue
   20404      * [121]9296: gthr-rtems regression
   20405      * [122]9316: powerpc-rtems: extending multilibs
   20406 
   20407     HP-PA specific
   20408 
   20409      * [123]9493: ICE with -O2 when building a simple function
   20410 
   20411     Documentation
   20412 
   20413      * [124]7341: hyperlink to gcov in GCC documentation doesn't work
   20414      * [125]8947: Please add a warning about "-malign-double" in docs
   20415      * [126]7448, [127]8882: typo cleanups
   20416      __________________________________________________________________
   20417 
   20418 GCC 3.2.1
   20419 
   20420    3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
   20421    generates code that is known not to be binary-compatible with the
   20422    vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included
   20423    in the distribution, for details.
   20424 
   20425    This release also removes an old GCC extension, "naming types", and the
   20426    documentation now directs users to use a different GCC extension,
   20427    __typeof__, instead. The feature had evidently been broken for a while.
   20428 
   20429    Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and
   20430    the new warning there are no new features that were not present in GCC
   20431    3.2.
   20432 
   20433    In addition, the previous fix for [128]PR 7445 (poor performance of
   20434    std::locale::classic() in multi-threaded applications) was reverted
   20435    ("unfixed"), because the "fix" was not thread-safe.
   20436 
   20437   Bug Fixes
   20438 
   20439    This section lists the problem reports (PRs) from GCC's bug tracking
   20440    system that are known to be fixed in the 3.2.1 release. This list might
   20441    not be complete (that is, it is possible that some PRs that have been
   20442    fixed are not listed here). As you can see, the number of bug fixes is
   20443    quite large, so it is strongly recommended that users of earlier GCC
   20444    3.x releases upgrade to GCC 3.2.1.
   20445 
   20446     Internal Compiler Errors (multi-platform)
   20447 
   20448      * [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
   20449      * [130]5661: (c++) ICE instantiating template on array of unknown
   20450        size (bad code)
   20451      * [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
   20452        64-bit platforms
   20453      * [132]6994: (c++) ICE in find_function_data
   20454      * [133]7150: preprocessor: GCC -dM -E gives an ICE
   20455      * [134]7160: ICE when optimizing branches without a return value
   20456      * [135]7228: (c++) ICE when using member template and template
   20457        function
   20458      * [136]7266: (c++) ICE with -pedantic on missing typename
   20459      * [137]7353: ICE from use of "Naming Types" extension, see above
   20460      * [138]7411: ICE in instantiate_virtual_regs_1, in function.c
   20461      * [139]7478: (c++) ICE on static_cast inside template
   20462      * [140]7526: preprocessor core dump when _Pragma implies #pragma
   20463        dependency
   20464      * [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803
   20465        is a duplicate)
   20466      * [143]7754: (c++) ICE on union with template parameter
   20467      * [144]7788: (c++) redeclaring a definition as an incomplete class
   20468        causes ICE
   20469      * [145]8031: (c++) ICE in comptypes, in cp/typeck.c
   20470      * [146]8055: preprocessor dies with SIG11 when building FreeBSD
   20471        kernel
   20472      * [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
   20473        variables
   20474      * [148]8134: (c++) ICE in force_store_init_value on legal code
   20475      * [149]8149: (c++) ICE on incomplete type
   20476      * [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
   20477        initialization
   20478 
   20479     C++ (compiler and library) bugs
   20480 
   20481      * [151]5607: No pointer adjustment in covariant return types
   20482      * [152]6579: Infinite loop with statement expressions in member
   20483        initialization
   20484      * [153]6803: Default copy constructor bug in GCC 3.1
   20485      * [154]7176: g++ confused by friend and static member with same name
   20486      * [155]7188: Segfault with template class and recursive (incorrect)
   20487        initializer list
   20488      * [156]7306: Regression: GCC 3.x fails to compile code with virtual
   20489        inheritance if a method has a variable number of arguments
   20490      * [157]7461: ctype<char>::classic_table() returns offset array on
   20491        Cygwin
   20492      * [158]7524: f(const float arg[3]) fails
   20493      * [159]7584: Erroneous ambiguous base error on using declaration
   20494      * [160]7676: Member template overloading problem
   20495      * [161]7679: infinite loop when a right parenthesis is missing
   20496      * [162]7811: default locale not taken from environment
   20497      * [163]7961: compare( char *) implemented incorrectly in
   20498        basic_string<>
   20499      * [164]8071: basic_ostream::operator<<(streambuf*) loops forever if
   20500        streambuf::underflow() leaves gptr() NULL (dups: [165]8127,
   20501        [166]6745)
   20502      * [167]8096: deque::at() throws std::range_error instead of
   20503        std::out_of_range
   20504      * [168]8127: cout << cin.rdbuf() infinite loop
   20505      * [169]8218: Excessively large memory consumed for classes with large
   20506        array members
   20507      * [170]8287: GCC 3.2: Destructor called for non-constructed local
   20508        object
   20509      * [171]8347: empty vector range used in string construction causes
   20510        core dump
   20511      * [172]8348: fail() flag is set in istringstream when eof() flag is
   20512        set
   20513      * [173]8391: regression: infinite loop in cp/decl2.c(finish_file)
   20514 
   20515     C and optimizer bugs
   20516 
   20517      * [174]6627: -fno-align-functions doesn't seem to disable function
   20518        alignment
   20519      * [175]6631: life_analysis misoptimizes code to initialize fields of
   20520        a structure
   20521      * [176]7102: unsigned char division results in floating exception
   20522      * [177]7120: Run once loop should *always* be unrolled
   20523        (pessimization)
   20524      * [178]7209: Bug involving array referencing and ?: operator
   20525      * [179]7515: invalid inlining of global function with -O3
   20526      * [180]7814: incorrect scheduling for glibc-2.2.92 strcpy test
   20527      * [181]8467: bug in sibling call optimization
   20528 
   20529     Preprocessor bugs
   20530 
   20531      * [182]4890: incorrect line markers from the traditional preprocessor
   20532      * [183]7357: -M option omits system headers files (making it the same
   20533        as -MM)
   20534      * [184]7358: Changes to Sun's make Dependencies
   20535      * [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
   20536        C headers
   20537      * [186]7862: Interrupting GCC -MD removes .d file but not .o
   20538      * [187]8190: Failed compilation deletes -MD dependency file
   20539      * [188]8524: _Pragma within macro is improperly expanded
   20540 
   20541     x86 specific (Intel/AMD)
   20542 
   20543      * [189]5351: (i686-only) function pass-by-value structure copy
   20544        corrupts stack ([190]7591 is a duplicate)
   20545      * [191]6845, [192]7034, [193]7124, [194]7174: ICE's with
   20546        -march=pentium3/pentium2/athlon (these are all the same underlying
   20547        bug, in MMX register use)
   20548      * [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same
   20549        as above?)
   20550      * [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
   20551      * [199]6981: wrong code in 64-bit manipulation on x86
   20552      * [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
   20553        macro
   20554      * [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
   20555        intrinsics are broken
   20556      * [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
   20557        -march=pentium4
   20558      * [203]7693: Typo in i386 mmintrin.h header
   20559      * [204]7723: ICE - Pentium3 sse - GCC 3.2
   20560      * [205]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
   20561      * [206]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
   20562 
   20563     PowerPC specific
   20564 
   20565      * [207]5967: GCC bug when profiling nested functions on powerpc
   20566      * [208]6984: wrong code generated with -O2, -O3, -Os for do-while
   20567        loop on PowerPC
   20568      * [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
   20569      * [210]7130: miscompiled code for GCC-3.1 on
   20570        powerpc-unknown-linux-gnu with -funroll-all-loops
   20571      * [211]7133: PowerPC ICE: unrecognizable insn
   20572      * [212]7380: ICE in extract_insn, at recog.c:2148
   20573      * [213]8252: ICE on Altivec code with optimization turned on
   20574      * [214]8451: Altivec ICE in GCC 3.2
   20575 
   20576     HP/PA specific
   20577 
   20578      * [215]7250: __ashrdi3 returns wrong value on 32 bit hppa
   20579 
   20580     SPARC specific
   20581 
   20582      * [216]6668: when using --disable-multilib, libgcc_s.so is installed
   20583        in the wrong place on sparc-solaris
   20584      * [217]7151: ICE when compiling for UltraSPARC
   20585      * [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
   20586        double and -O1
   20587      * [219]7842: [REGRESSION] SPARC code gen bug
   20588 
   20589     ARM specific
   20590 
   20591      * [220]7856: [arm] invalid offset in constant pool reference
   20592      * [221]7967: optimization produces wrong code (ARM)
   20593 
   20594     Alpha specific
   20595 
   20596      * [222]7374: __builtin_fabsl broken on alpha
   20597 
   20598     IBM s390 specific
   20599 
   20600      * [223]7370: ICE in fixup_var_refs_1 on s390x
   20601      * [224]7409: loop optimization bug on s390x-linux-gnu
   20602      * [225]8232: s390x: ICE when using bcmp with int length argument
   20603 
   20604     SCO specific
   20605 
   20606      * [226]7623: SCO OpenServer build fails with machmode.def: undefined
   20607        symbol: BITS_PER_UNIT
   20608 
   20609     m68k/Coldfire specific
   20610 
   20611      * [227]8314: crtbegin, crtend need to be multilib'ed for this
   20612        platform
   20613 
   20614     Documentation
   20615 
   20616      * [228]761: Document some undocumented options
   20617      * [229]5610: Fix documentation about invoking SSE instructions
   20618        (-mfpmath=sse)
   20619      * [230]7484: List -Wmissing-declarations as C-only option
   20620      * [231]7531: -mcmodel not documented for x86-64
   20621      * [232]8120: Update documentation of bad use of ##
   20622      __________________________________________________________________
   20623 
   20624 GCC 3.2
   20625 
   20626    3.2 is a small bug fix release, but there is a change to the
   20627    application binary interface (ABI), hence the change to the second part
   20628    of the version number.
   20629 
   20630    The main purpose of the 3.2 release is to correct a couple of problems
   20631    in the C++ ABI, with the intention of providing a stable interface
   20632    going forward.  Accordingly, 3.2 is only a small change to 3.1.1.
   20633 
   20634   Bug Fixes
   20635 
   20636     C++
   20637 
   20638      * [233]7320: g++ 3.2 relocation problem
   20639      * [234]7470: vtable: virtual function pointers not in declaration
   20640        order
   20641 
   20642     libstdc++
   20643 
   20644      * [235]6410: Trouble with non-ASCII monetary symbols and wchar_t
   20645      * [236]6503, [237]6642, [238]7186: Problems with comparing or
   20646        subtracting various types of const and non-const iterators
   20647      * [239]7216: ambiguity with basic_iostream::traits_type
   20648      * [240]7220: problem with basic_istream::ignore(0,delimiter)
   20649      * [241]7222: locale::operator==() doesn't work on std::locale("")
   20650      * [242]7286: placement operator delete issue
   20651      * [243]7442: cxxabi.h does not match the C++ ABI
   20652      * [244]7445: poor performance of std::locale::classic() in
   20653        multi-threaded applications
   20654 
   20655     x86-64 specific
   20656 
   20657      * [245]7291: off-by-one in generated inline bzero code for x86-64
   20658 
   20659 
   20660     For questions related to the use of GCC, please consult these web
   20661     pages and the [246]GCC manuals. If that fails, the
   20662     [247]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20663     web pages and the development of GCC are welcome on our developer
   20664     list at [248]gcc (a] gcc.gnu.org. All of [249]our lists have public
   20665     archives.
   20666 
   20667    Copyright (C) [250]Free Software Foundation, Inc. Verbatim copying and
   20668    distribution of this entire article is permitted in any medium,
   20669    provided this notice is preserved.
   20670 
   20671    These pages are [251]maintained by the GCC team. Last modified
   20672    2022-10-26.
   20673 
   20674 References
   20675 
   20676    1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   20677    2. https://gcc.gnu.org/gcc-3.1/changes.html
   20678    3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
   20679    4. https://gcc.gnu.org/PR3782
   20680    5. https://gcc.gnu.org/PR6440
   20681    6. https://gcc.gnu.org/PR7050
   20682    7. https://gcc.gnu.org/PR7741
   20683    8. https://gcc.gnu.org/PR7982
   20684    9. https://gcc.gnu.org/PR8068
   20685   10. https://gcc.gnu.org/PR8178
   20686   11. https://gcc.gnu.org/PR8396
   20687   12. https://gcc.gnu.org/PR8674
   20688   13. https://gcc.gnu.org/PR9768
   20689   14. https://gcc.gnu.org/PR9798
   20690   15. https://gcc.gnu.org/PR9799
   20691   16. https://gcc.gnu.org/PR9928
   20692   17. https://gcc.gnu.org/PR10114
   20693   18. https://gcc.gnu.org/PR10352
   20694   19. https://gcc.gnu.org/PR10336
   20695   20. https://gcc.gnu.org/PR8224
   20696   21. https://gcc.gnu.org/PR8613
   20697   22. https://gcc.gnu.org/PR8828
   20698   23. https://gcc.gnu.org/PR9226
   20699   24. https://gcc.gnu.org/PR9853
   20700   25. https://gcc.gnu.org/PR9797
   20701   26. https://gcc.gnu.org/PR9967
   20702   27. https://gcc.gnu.org/PR10116
   20703   28. https://gcc.gnu.org/PR10171
   20704   29. https://gcc.gnu.org/PR10175
   20705   30. https://gcc.gnu.org/PR8316
   20706   31. https://gcc.gnu.org/PR9169
   20707   32. https://gcc.gnu.org/PR9420
   20708   33. https://gcc.gnu.org/PR9459
   20709   34. https://gcc.gnu.org/PR9507
   20710   35. https://gcc.gnu.org/PR9538
   20711   36. https://gcc.gnu.org/PR9602
   20712   37. https://gcc.gnu.org/PR9993
   20713   38. https://gcc.gnu.org/PR10167
   20714   39. https://gcc.gnu.org/PR9652
   20715   40. https://gcc.gnu.org/PR10144
   20716   41. https://gcc.gnu.org/PR8746
   20717   42. https://gcc.gnu.org/PR9888
   20718   43. https://gcc.gnu.org/PR9638
   20719   44. https://gcc.gnu.org/PR9954
   20720   45. https://gcc.gnu.org/PR7784
   20721   46. https://gcc.gnu.org/PR7796
   20722   47. https://gcc.gnu.org/PR8281
   20723   48. https://gcc.gnu.org/PR8366
   20724   49. https://gcc.gnu.org/PR8726
   20725   50. https://gcc.gnu.org/PR9414
   20726   51. https://gcc.gnu.org/PR10067
   20727   52. https://gcc.gnu.org/PR7248
   20728   53. https://gcc.gnu.org/PR8343
   20729   54. https://gcc.gnu.org/PR9732
   20730   55. https://gcc.gnu.org/PR10073
   20731   56. https://gcc.gnu.org/PR7702
   20732   57. https://gcc.gnu.org/PR9671
   20733   58. https://gcc.gnu.org/PR8694
   20734   59. https://gcc.gnu.org/PR9953
   20735   60. https://gcc.gnu.org/PR10271
   20736   61. https://gcc.gnu.org/PR6362
   20737   62. https://gcc.gnu.org/PR10377
   20738   63. https://gcc.gnu.org/PR6955
   20739   64. https://gcc.gnu.org/PR5919
   20740   65. https://gcc.gnu.org/PR7129
   20741   66. https://gcc.gnu.org/PR7507
   20742   67. https://gcc.gnu.org/PR7622
   20743   68. https://gcc.gnu.org/PR7681
   20744   69. https://gcc.gnu.org/PR9528
   20745   70. https://gcc.gnu.org/PR8031
   20746   71. https://gcc.gnu.org/PR8275
   20747   72. https://gcc.gnu.org/PR8332
   20748   73. https://gcc.gnu.org/PR8372
   20749   74. https://gcc.gnu.org/PR8439
   20750   75. https://gcc.gnu.org/PR8442
   20751   76. https://gcc.gnu.org/PR8518
   20752   77. https://gcc.gnu.org/PR8615
   20753   78. https://gcc.gnu.org/PR8663
   20754   79. https://gcc.gnu.org/PR8799
   20755   80. https://gcc.gnu.org/PR9328
   20756   81. https://gcc.gnu.org/PR9465
   20757   82. https://gcc.gnu.org/PR47
   20758   83. https://gcc.gnu.org/PR6745
   20759   84. https://gcc.gnu.org/PR8214
   20760   85. https://gcc.gnu.org/PR8493
   20761   86. https://gcc.gnu.org/PR8332
   20762   87. https://gcc.gnu.org/PR8503
   20763   88. https://gcc.gnu.org/PR8727
   20764   89. https://gcc.gnu.org/PR7445
   20765   90. https://gcc.gnu.org/PR8230
   20766   91. https://gcc.gnu.org/PR8399
   20767   92. https://gcc.gnu.org/PR8662
   20768   93. https://gcc.gnu.org/PR8707
   20769   94. https://gcc.gnu.org/PR8708
   20770   95. https://gcc.gnu.org/PR8790
   20771   96. https://gcc.gnu.org/PR8887
   20772   97. https://gcc.gnu.org/PR9076
   20773   98. https://gcc.gnu.org/PR9151
   20774   99. https://gcc.gnu.org/PR9168
   20775  100. https://gcc.gnu.org/PR9269
   20776  101. https://gcc.gnu.org/PR9322
   20777  102. https://gcc.gnu.org/PR9433
   20778  103. https://gcc.gnu.org/PR8032
   20779  104. https://gcc.gnu.org/PR8639
   20780  105. https://gcc.gnu.org/PR8794
   20781  106. https://gcc.gnu.org/PR8832
   20782  107. https://gcc.gnu.org/PR8988
   20783  108. https://gcc.gnu.org/PR9492
   20784  109. https://gcc.gnu.org/PR9267
   20785  110. https://gcc.gnu.org/PR8344
   20786  111. https://gcc.gnu.org/PR8524
   20787  112. https://gcc.gnu.org/PR8880
   20788  113. https://gcc.gnu.org/PR9090
   20789  114. https://gcc.gnu.org/PR8588
   20790  115. https://gcc.gnu.org/PR8599
   20791  116. https://gcc.gnu.org/PR9506
   20792  117. https://gcc.gnu.org/PR9484
   20793  118. https://gcc.gnu.org/PR9292
   20794  119. https://gcc.gnu.org/PR9293
   20795  120. https://gcc.gnu.org/PR9295
   20796  121. https://gcc.gnu.org/PR9296
   20797  122. https://gcc.gnu.org/PR9316
   20798  123. https://gcc.gnu.org/PR9493
   20799  124. https://gcc.gnu.org/PR7341
   20800  125. https://gcc.gnu.org/PR8947
   20801  126. https://gcc.gnu.org/PR7448
   20802  127. https://gcc.gnu.org/PR8882
   20803  128. https://gcc.gnu.org/PR7445
   20804  129. https://gcc.gnu.org/PR2521
   20805  130. https://gcc.gnu.org/PR5661
   20806  131. https://gcc.gnu.org/PR6419
   20807  132. https://gcc.gnu.org/PR6994
   20808  133. https://gcc.gnu.org/PR7150
   20809  134. https://gcc.gnu.org/PR7160
   20810  135. https://gcc.gnu.org/PR7228
   20811  136. https://gcc.gnu.org/PR7266
   20812  137. https://gcc.gnu.org/PR7353
   20813  138. https://gcc.gnu.org/PR7411
   20814  139. https://gcc.gnu.org/PR7478
   20815  140. https://gcc.gnu.org/PR7526
   20816  141. https://gcc.gnu.org/PR7721
   20817  142. https://gcc.gnu.org/PR7803
   20818  143. https://gcc.gnu.org/PR7754
   20819  144. https://gcc.gnu.org/PR7788
   20820  145. https://gcc.gnu.org/PR8031
   20821  146. https://gcc.gnu.org/PR8055
   20822  147. https://gcc.gnu.org/PR8067
   20823  148. https://gcc.gnu.org/PR8134
   20824  149. https://gcc.gnu.org/PR8149
   20825  150. https://gcc.gnu.org/PR8160
   20826  151. https://gcc.gnu.org/PR5607
   20827  152. https://gcc.gnu.org/PR6579
   20828  153. https://gcc.gnu.org/PR6803
   20829  154. https://gcc.gnu.org/PR7176
   20830  155. https://gcc.gnu.org/PR7188
   20831  156. https://gcc.gnu.org/PR7306
   20832  157. https://gcc.gnu.org/PR7461
   20833  158. https://gcc.gnu.org/PR7524
   20834  159. https://gcc.gnu.org/PR7584
   20835  160. https://gcc.gnu.org/PR7676
   20836  161. https://gcc.gnu.org/PR7679
   20837  162. https://gcc.gnu.org/PR7811
   20838  163. https://gcc.gnu.org/PR7961
   20839  164. https://gcc.gnu.org/PR8071
   20840  165. https://gcc.gnu.org/PR8127
   20841  166. https://gcc.gnu.org/PR6745
   20842  167. https://gcc.gnu.org/PR8096
   20843  168. https://gcc.gnu.org/PR8127
   20844  169. https://gcc.gnu.org/PR8218
   20845  170. https://gcc.gnu.org/PR8287
   20846  171. https://gcc.gnu.org/PR8347
   20847  172. https://gcc.gnu.org/PR8348
   20848  173. https://gcc.gnu.org/PR8391
   20849  174. https://gcc.gnu.org/PR6627
   20850  175. https://gcc.gnu.org/PR6631
   20851  176. https://gcc.gnu.org/PR7102
   20852  177. https://gcc.gnu.org/PR7120
   20853  178. https://gcc.gnu.org/PR7209
   20854  179. https://gcc.gnu.org/PR7515
   20855  180. https://gcc.gnu.org/PR7814
   20856  181. https://gcc.gnu.org/PR8467
   20857  182. https://gcc.gnu.org/PR4890
   20858  183. https://gcc.gnu.org/PR7357
   20859  184. https://gcc.gnu.org/PR7358
   20860  185. https://gcc.gnu.org/PR7602
   20861  186. https://gcc.gnu.org/PR7862
   20862  187. https://gcc.gnu.org/PR8190
   20863  188. https://gcc.gnu.org/PR8524
   20864  189. https://gcc.gnu.org/PR5351
   20865  190. https://gcc.gnu.org/PR7591
   20866  191. https://gcc.gnu.org/PR6845
   20867  192. https://gcc.gnu.org/PR7034
   20868  193. https://gcc.gnu.org/PR7124
   20869  194. https://gcc.gnu.org/PR7174
   20870  195. https://gcc.gnu.org/PR7134
   20871  196. https://gcc.gnu.org/PR7375
   20872  197. https://gcc.gnu.org/PR7390
   20873  198. https://gcc.gnu.org/PR6890
   20874  199. https://gcc.gnu.org/PR6981
   20875  200. https://gcc.gnu.org/PR7242
   20876  201. https://gcc.gnu.org/PR7396
   20877  202. https://gcc.gnu.org/PR7630
   20878  203. https://gcc.gnu.org/PR7693
   20879  204. https://gcc.gnu.org/PR7723
   20880  205. https://gcc.gnu.org/PR7951
   20881  206. https://gcc.gnu.org/PR8146
   20882  207. https://gcc.gnu.org/PR5967
   20883  208. https://gcc.gnu.org/PR6984
   20884  209. https://gcc.gnu.org/PR7114
   20885  210. https://gcc.gnu.org/PR7130
   20886  211. https://gcc.gnu.org/PR7133
   20887  212. https://gcc.gnu.org/PR7380
   20888  213. https://gcc.gnu.org/PR8252
   20889  214. https://gcc.gnu.org/PR8451
   20890  215. https://gcc.gnu.org/PR7250
   20891  216. https://gcc.gnu.org/PR6668
   20892  217. https://gcc.gnu.org/PR7151
   20893  218. https://gcc.gnu.org/PR7335
   20894  219. https://gcc.gnu.org/PR7842
   20895  220. https://gcc.gnu.org/PR7856
   20896  221. https://gcc.gnu.org/PR7967
   20897  222. https://gcc.gnu.org/PR7374
   20898  223. https://gcc.gnu.org/PR7370
   20899  224. https://gcc.gnu.org/PR7409
   20900  225. https://gcc.gnu.org/PR8232
   20901  226. https://gcc.gnu.org/PR7623
   20902  227. https://gcc.gnu.org/PR8314
   20903  228. https://gcc.gnu.org/PR761
   20904  229. https://gcc.gnu.org/PR5610
   20905  230. https://gcc.gnu.org/PR7484
   20906  231. https://gcc.gnu.org/PR7531
   20907  232. https://gcc.gnu.org/PR8120
   20908  233. https://gcc.gnu.org/PR7320
   20909  234. https://gcc.gnu.org/PR7470
   20910  235. https://gcc.gnu.org/PR6410
   20911  236. https://gcc.gnu.org/PR6503
   20912  237. https://gcc.gnu.org/PR6642
   20913  238. https://gcc.gnu.org/PR7186
   20914  239. https://gcc.gnu.org/PR7216
   20915  240. https://gcc.gnu.org/PR7220
   20916  241. https://gcc.gnu.org/PR7222
   20917  242. https://gcc.gnu.org/PR7286
   20918  243. https://gcc.gnu.org/PR7442
   20919  244. https://gcc.gnu.org/PR7445
   20920  245. https://gcc.gnu.org/PR7291
   20921  246. https://gcc.gnu.org/onlinedocs/
   20922  247. mailto:gcc-help (a] gcc.gnu.org
   20923  248. mailto:gcc (a] gcc.gnu.org
   20924  249. https://gcc.gnu.org/lists.html
   20925  250. https://www.fsf.org/
   20926  251. https://gcc.gnu.org/about.html
   20927 ======================================================================
   20928 http://gcc.gnu.org/gcc-3.1/index.html
   20929                                     GCC 3.1
   20930 
   20931    (This release series is no longer supported.)
   20932 
   20933    July 27, 2002
   20934 
   20935    The [1]GNU project and the GCC developers are pleased to announce the
   20936    release of GCC 3.1.1.
   20937 
   20938    The links below still apply to GCC 3.1.1.
   20939 
   20940    May 15, 2002
   20941 
   20942    The [2]GNU project and the GCC developers are pleased to announce the
   20943    release of GCC 3.1.
   20944 
   20945    GCC used to stand for the GNU C Compiler, but since the compiler
   20946    supports several other languages aside from C, it now stands for the
   20947    GNU Compiler Collection.
   20948 
   20949    A list of [3]successful builds is updated as new information becomes
   20950    available.
   20951 
   20952    The GCC developers would like to thank the numerous people that have
   20953    contributed [4]new features, improvements, bug fixes, and other changes
   20954    as well as test results to GCC. This [5]amazing group of volunteers is
   20955    what makes GCC successful.
   20956 
   20957    For additional information about GCC please refer to the [6]GCC project
   20958    web site or contact the [7]GCC development mailing list.
   20959 
   20960    To obtain GCC please use [8]our mirror sites, or our CVS server.
   20961      __________________________________________________________________
   20962 
   20963 
   20964     For questions related to the use of GCC, please consult these web
   20965     pages and the [9]GCC manuals. If that fails, the
   20966     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20967     web pages and the development of GCC are welcome on our developer
   20968     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   20969     archives.
   20970 
   20971    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   20972    distribution of this entire article is permitted in any medium,
   20973    provided this notice is preserved.
   20974 
   20975    These pages are [14]maintained by the GCC team. Last modified
   20976    2022-10-26.
   20977 
   20978 References
   20979 
   20980    1. http://www.gnu.org/
   20981    2. http://www.gnu.org/
   20982    3. https://gcc.gnu.org/gcc-3.1/buildstat.html
   20983    4. https://gcc.gnu.org/gcc-3.1/changes.html
   20984    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20985    6. https://gcc.gnu.org/index.html
   20986    7. mailto:gcc (a] gcc.gnu.org
   20987    8. https://gcc.gnu.org/mirrors.html
   20988    9. https://gcc.gnu.org/onlinedocs/
   20989   10. mailto:gcc-help (a] gcc.gnu.org
   20990   11. mailto:gcc (a] gcc.gnu.org
   20991   12. https://gcc.gnu.org/lists.html
   20992   13. https://www.fsf.org/
   20993   14. https://gcc.gnu.org/about.html
   20994 ======================================================================
   20995 http://gcc.gnu.org/gcc-3.1/changes.html
   20996                              GCC 3.1 Release Series
   20997                         Changes, New Features, and Fixes
   20998 
   20999 Additional changes in GCC 3.1.1
   21000 
   21001      * A bug related to how structures and unions are returned has been
   21002        fixed for powerpc-*-netbsd*.
   21003      * An important bug in the implementation of -fprefetch-loop-arrays
   21004        has been fixed. Previously the optimization prefetched random
   21005        blocks of memory for most targets except for i386.
   21006      * The Java compiler now compiles Java programs much faster and also
   21007        works with parallel make.
   21008      * Nested functions have been fixed for mips*-*-netbsd*.
   21009      * Some missing floating point support routines have beed added for
   21010        mips*-*-netbsd*.
   21011      * This [1]message gives additional information about the bugs fixed
   21012        in this release.
   21013 
   21014 Caveats
   21015 
   21016      * The -traditional C compiler option has been deprecated and will be
   21017        removed in GCC 3.3. (It remains possible to preprocess non-C code
   21018        with the traditional preprocessor.)
   21019      * The default debugging format for most ELF platforms (including
   21020        GNU/Linux and FreeBSD; notable exception is Solaris) has changed
   21021        from stabs to DWARF2. This requires GDB 5.1.1 or later.
   21022 
   21023 General Optimizer Improvements
   21024 
   21025      * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat,
   21026        and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure
   21027        for profile driven optimizations.
   21028        Options -fprofile-arcs and -fbranch-probabilities can now be used
   21029        to improve speed of the generated code by profiling the actual
   21030        program behaviour on typical runs. In the absence of profile info
   21031        the compiler attempts to guess the profile statically.
   21032      * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
   21033        monitor performance of the generated code.
   21034        According to the SPECInt2000 results on an AMD Athlon CPU, the code
   21035        generated by GCC 3.1 is 6% faster on the average (8.2% faster with
   21036        profile feedback) compared to GCC 3.0. The code produced by GCC 3.0
   21037        is about 2.1% faster compared to 2.95.3. Tests were done using the
   21038        -O2 -march=athlon command-line options.
   21039      * Alexandre Oliva, of Red Hat, has generalized the tree inlining
   21040        infrastructure developed by CodeSourcery, LLC for the C++ front
   21041        end, so that it is now used in the C front end too. Inlining
   21042        functions as trees exposes them earlier to the compiler, giving it
   21043        more opportunities for optimization.
   21044      * Support for data prefetching instructions has been added to the GCC
   21045        back end and several targets. A new __builtin_prefetch intrinsic is
   21046        available to explicitly insert prefetch instructions and
   21047        experimental support for loop array prefetching has been added (see
   21048        -fprefetch-loop-array documentation).
   21049      * Support for emitting debugging information for macros has been
   21050        added for DWARF2. It is activated using -g3.
   21051 
   21052 New Languages and Language specific improvements
   21053 
   21054   C/C++
   21055 
   21056      * A few more [4]ISO C99 features.
   21057      * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0.
   21058      * The preprocessor's symbol table has been merged with the symbol
   21059        table of the C, C++ and Objective-C front ends.
   21060      * The preprocessor consumes less memory than the preprocessor in GCC
   21061        3.0, often significantly so. On normal input files, it typically
   21062        consumes less memory than pre-3.0 cccp-based GCC, too.
   21063 
   21064   C++
   21065 
   21066      * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std
   21067        was a workaround to allow std compliant code to work with the
   21068        non-std compliant libstdc++-v2. libstdc++-v3 is std compliant.
   21069      * The C++ ABI has been fixed so that void (A::*)() const is mangled
   21070        as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only
   21071        affects pointer to cv-qualified member function types.
   21072      * The C++ ABI has been changed to correctly handle this code:
   21073     struct A {
   21074       void operator delete[] (void *, size_t);
   21075     };
   21076 
   21077     struct B : public A {
   21078     };
   21079 
   21080     new B[10];
   21081 
   21082        The amount of storage allocated for the array will be greater than
   21083        it was in 3.0, in order to store the number of elements in the
   21084        array, so that the correct size can be passed to operator delete[]
   21085        when the array is deleted. Previously, the value passed to operator
   21086        delete[] was unpredictable.
   21087        This change will only affect code that declares a two-argument
   21088        operator delete[] with a second parameter of type size_t in a base
   21089        class, and does not override that definition in a derived class.
   21090      * The C++ ABI has been changed so that:
   21091     struct A {
   21092       void operator delete[] (void *, size_t);
   21093       void operator delete[] (void *);
   21094     };
   21095 
   21096        does not cause unnecessary storage to be allocated when an array of
   21097        A objects is allocated.
   21098        This change will only affect code that declares both of these forms
   21099        of operator delete[], and declared the two-argument form before the
   21100        one-argument form.
   21101      * The C++ ABI has been changed so that when a parameter is passed by
   21102        value, any cleanup for that parameter is performed in the caller,
   21103        as specified by the ia64 C++ ABI, rather than the called function
   21104        as before. As a result, classes with a non-trivial destructor but a
   21105        trivial copy constructor will be passed and returned by invisible
   21106        reference, rather than by bitwise copy as before.
   21107      * G++ now supports the "named return value optimization": for code
   21108        like
   21109     A f () {
   21110       A a;
   21111       ...
   21112       return a;
   21113     }
   21114 
   21115        G++ will allocate a in the return value slot, so that the return
   21116        becomes a no-op. For this to work, all return statements in the
   21117        function must return the same variable.
   21118      * Improvements to the C++ library are listed in [5]the libstdc++-v3
   21119        FAQ.
   21120 
   21121   Objective-C
   21122 
   21123      * Annoying linker warnings (due to incorrect code being generated)
   21124        have been fixed.
   21125      * If a class method cannot be found, the compiler no longer issues a
   21126        warning if a corresponding instance method exists in the root
   21127        class.
   21128      * Forward @protocol declarations have been fixed.
   21129      * Loading of categories has been fixed in certain situations (GNU run
   21130        time only).
   21131      * The class lookup in the run-time library has been rewritten so that
   21132        class method dispatch is more than twice as fast as it used to be
   21133        (GNU run time only).
   21134 
   21135   Java
   21136 
   21137      * libgcj now includes RMI, java.lang.ref.*, javax.naming, and
   21138        javax.transaction.
   21139      * Property files and other system resources can be compiled into
   21140        executables which use libgcj using the new gcj --resource feature.
   21141      * libgcj has been ported to more platforms. In particular there is
   21142        now a mostly-functional mingw32 (Windows) target port.
   21143      * JNI and CNI invocation interfaces were implemented, so gcj-compiled
   21144        Java code can now be called from a C/C++ application.
   21145      * gcj can now use builtin functions for certain known methods, for
   21146        instance Math.cos.
   21147      * gcj can now automatically remove redundant array-store checks in
   21148        some common cases.
   21149      * The --no-store-checks optimization option was added. This can be
   21150        used to omit runtime store checks for code which is known not to
   21151        throw ArrayStoreException
   21152      * The following third party interface standards were added to libgcj:
   21153        org.w3c.dom and org.xml.sax.
   21154      * java.security has been merged with GNU Classpath. The new package
   21155        is now JDK 1.2 compliant, and much more complete.
   21156      * A bytecode verifier was added to the libgcj interpreter.
   21157      * java.lang.Character was rewritten to comply with the Unicode 3.0
   21158        standard, and improve performance.
   21159      * Partial support for many more locales was added to libgcj.
   21160      * Socket timeouts have been implemented.
   21161      * libgcj has been merged into a single shared library. There are no
   21162        longer separate shared libraries for the garbage collector and
   21163        zlib.
   21164      * Several performance improvements were made to gcj and libgcj:
   21165           + Hash synchronization (thin locks)
   21166           + A special allocation path for finalizer-free objects
   21167           + Thread-local allocation
   21168           + Parallel GC, and other GC tweaks
   21169 
   21170   Fortran
   21171 
   21172    Fortran improvements are listed in [6]the Fortran documentation.
   21173 
   21174   Ada
   21175 
   21176    [7]AdaCore, has contributed its GNAT Ada 95 front end and associated
   21177    tools. The GNAT compiler fully implements the Ada language as defined
   21178    by the ISO/IEC 8652 standard.
   21179 
   21180    Please note that the integration of the Ada front end is still work in
   21181    progress.
   21182 
   21183 New Targets and Target Specific Improvements
   21184 
   21185      * Hans-Peter Nilsson has contributed a port to MMIX, the CPU
   21186        architecture used in new editions of Donald E. Knuth's The Art of
   21187        Computer Programming.
   21188      * Axis Communications has contributed its port to the CRIS CPU
   21189        architecture, used in the ETRAX system-on-a-chip series.
   21190      * Alexandre Oliva, of Red Hat, has contributed a port to the SuperH
   21191        SH5 64-bit RISC microprocessor architecture, extending the existing
   21192        SH port.
   21193      * UltraSPARC is fully supported in 64-bit mode. The option -m64
   21194        enables it.
   21195      * For compatibility with the Sun compiler #pragma redefine_extname
   21196        has been implemented on Solaris.
   21197      * The x86 back end has had some noticeable work done to it.
   21198           + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas
   21199             Jaeger have contributed a port to the AMD x86-64 architecture.
   21200             For more information on x86-64 see http://www.x86-64.org.
   21201           + The compiler now supports MMX, 3DNow!, SSE, and SSE2
   21202             instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will
   21203             enable the respective instruction sets. Intel C++ compatible
   21204             MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics
   21205             will be added in next major release.
   21206           + Following those improvements, targets for Pentium MMX, K6-2,
   21207             K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were
   21208             added. Refer to the documentation on -march= and -mcpu=
   21209             options for details.
   21210           + For those targets that support it, -mfpmath=sse will cause the
   21211             compiler to generate SSE/SSE2 instructions for floating point
   21212             math instead of x87 instructions. Usually, this will lead to
   21213             quicker code  especially on the Pentium 4. Note that only
   21214             scalar floating point instructions are used and GCC does not
   21215             exploit SIMD features yet.
   21216           + Prefetch support has been added to the Pentium III, Pentium 4,
   21217             K6-2, K6-3, and Athlon series.
   21218           + Code generated for floating point to integer conversions has
   21219             been improved leading to better performance of many 3D
   21220             applications.
   21221      * The PowerPC back end has added 64-bit PowerPC GNU/Linux support.
   21222      * C++ support for AIX has been improved.
   21223      * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the
   21224        PowerPC port supporting the AltiVec programming model (SIMD). The
   21225        support, though presently useful, is experimental and is expected
   21226        to stabilize for 3.2. The support is written to conform to
   21227        Motorola's AltiVec specs. See -maltivec.
   21228 
   21229 Obsolete Systems
   21230 
   21231    Support for a number of older systems has been declared obsolete in GCC
   21232    3.1. Unless there is activity to revive them, the next release of GCC
   21233    will have their sources permanently removed.
   21234 
   21235    All configurations of the following processor architectures have been
   21236    declared obsolete:
   21237      * MIL-STD-1750A, 1750a-*-*
   21238      * AMD A29k, a29k-*-*
   21239      * Convex, c*-convex-*
   21240      * Clipper, clipper-*-*
   21241      * Elxsi, elxsi-*-*
   21242      * Intel i860, i860-*-*
   21243      * Sun picoJava, pj-*-* and pjl-*-*
   21244      * Western Electric 32000, we32k-*-*
   21245 
   21246    Most configurations of the following processor architectures have been
   21247    declared obsolete, but we are preserving a few systems which may have
   21248    active developers. It is unlikely that the remaining systems will
   21249    survive much longer unless we see definite signs of port activity.
   21250      * Motorola 88000 except
   21251           + Generic a.out, m88k-*-aout*
   21252           + Generic SVR4, m88k-*-sysv4
   21253           + OpenBSD, m88k-*-openbsd*
   21254      * NS32k except
   21255           + NetBSD, ns32k-*-netbsd*
   21256           + OpenBSD, ns32k-*-openbsd*.
   21257      * ROMP except
   21258           + OpenBSD, romp-*-openbsd*.
   21259 
   21260    Finally, only some configurations of these processor architectures are
   21261    being obsoleted.
   21262      * Alpha:
   21263           + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka
   21264             alpha*-*-osf[45], are still supported.)
   21265      * ARM:
   21266           + RISCiX, arm-*-riscix*.
   21267      * i386:
   21268           + 386BSD, i?86-*-bsd*
   21269           + Chorus, i?86-*-chorusos*
   21270           + DG/UX, i?86-*-dgux*
   21271           + FreeBSD 1.x, i?86-*-freebsd1.*
   21272           + IBM AIX, i?86-*-aix*
   21273           + ISC UNIX, i?86-*-isc*
   21274           + GNU/Linux with pre-BFD linker, i?86-*-linux*oldld*
   21275           + NEXTstep, i?86-next-*
   21276           + OSF UNIX, i?86-*-osf1* and i?86-*-osfrose*
   21277           + RTEMS/coff, i?86-*-rtemscoff*
   21278           + RTEMS/go32, i?86-go32-rtems*
   21279           + Sequent/BSD, i?86-sequent-bsd*
   21280           + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and
   21281             i?86-sequent-sysv3*
   21282           + SunOS, i?86-*-sunos*
   21283      * Motorola 68000:
   21284           + Altos, m68[k0]*-altos-*
   21285           + Apollo, m68[k0]*-apollo-*
   21286           + Apple A/UX, m68[k0]*-apple-*
   21287           + Bull, m68[k0]*-bull-*
   21288           + Convergent, m68[k0]*-convergent-*
   21289           + Generic SVR3, m68[k0]*-*-sysv3*
   21290           + ISI, m68[k0]*-isi-*
   21291           + LynxOS, m68[k0]*-*-lynxos*
   21292           + NEXT, m68[k0]*-next-*
   21293           + RTEMS/coff, m68[k0]*-*-rtemscoff*
   21294           + Sony, m68[k0]*-sony-*
   21295      * MIPS:
   21296           + DEC Ultrix, mips-*-ultrix* and mips-dec-*
   21297           + Generic BSD, mips-*-bsd*
   21298           + Generic System V, mips-*-sysv*
   21299           + IRIX before version 5, mips-sgi-irix[1234]*
   21300           + RiscOS, mips-*-riscos*
   21301           + Sony, mips-sony-*
   21302           + Tandem, mips-tandem-*
   21303      * SPARC:
   21304           + RTEMS/a.out, sparc-*-rtemsaout*.
   21305 
   21306 Documentation improvements
   21307 
   21308      * The old manual ("Using and Porting the GNU Compiler Collection")
   21309        has been replaced by a users manual ("Using the GNU Compiler
   21310        Collection") and a separate internals reference manual ("GNU
   21311        Compiler Collection Internals").
   21312      * More complete and much improved documentation about GCC's internal
   21313        representation used by the C and C++ front ends.
   21314      * Many cleanups and improvements in general.
   21315 
   21316 
   21317     For questions related to the use of GCC, please consult these web
   21318     pages and the [8]GCC manuals. If that fails, the
   21319     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21320     web pages and the development of GCC are welcome on our developer
   21321     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   21322     archives.
   21323 
   21324    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   21325    distribution of this entire article is permitted in any medium,
   21326    provided this notice is preserved.
   21327 
   21328    These pages are [13]maintained by the GCC team. Last modified
   21329    2022-10-26.
   21330 
   21331 References
   21332 
   21333    1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
   21334    2. https://gcc.gnu.org/news/profiledriven.html
   21335    3. https://gcc.gnu.org/benchmarks/
   21336    4. https://gcc.gnu.org/c99status.html
   21337    5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
   21338    6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
   21339    7. https://www.adacore.com/
   21340    8. https://gcc.gnu.org/onlinedocs/
   21341    9. mailto:gcc-help (a] gcc.gnu.org
   21342   10. mailto:gcc (a] gcc.gnu.org
   21343   11. https://gcc.gnu.org/lists.html
   21344   12. https://www.fsf.org/
   21345   13. https://gcc.gnu.org/about.html
   21346 ======================================================================
   21347 http://gcc.gnu.org/gcc-3.0/index.html
   21348                                    GCC 3.0.4
   21349 
   21350    (This release series is no longer supported.)
   21351 
   21352    February 20, 2002
   21353 
   21354    The [1]GNU project and the GCC developers are pleased to announce the
   21355    release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0
   21356    series.
   21357 
   21358    GCC used to stand for the GNU C Compiler, but since the compiler
   21359    supports several other languages aside from C, it now stands for the
   21360    GNU Compiler Collection.
   21361 
   21362    GCC 3.0.x has several new optimizations, new targets, new languages and
   21363    many other new features, relative to GCC 2.95.x. See the [2]new
   21364    features page for a more complete list.
   21365 
   21366    A list of [3]successful builds is updated as new information becomes
   21367    available.
   21368 
   21369    The GCC developers would like to thank the numerous people that have
   21370    contributed new features, test results, bug fixes, etc to GCC. This
   21371    [4]amazing group of volunteers is what makes GCC successful.
   21372 
   21373    And finally, we can't in good conscience fail to mention some
   21374    [5]caveats to using GCC 3.0.x.
   21375 
   21376    For additional information about GCC please refer to the [6]GCC project
   21377    web site or contact the [7]GCC development mailing list.
   21378 
   21379    To obtain GCC please use [8]our mirror sites, or our CVS server.
   21380      __________________________________________________________________
   21381 
   21382 Previous 3.0.x Releases
   21383 
   21384    December 20, 2001: GCC 3.0.3 has been released.
   21385    October 25, 2001: GCC 3.0.2 has been released.
   21386    August 20, 2001: GCC 3.0.1 has been released.
   21387    June 18, 2001: GCC 3.0 has been released.
   21388 
   21389 
   21390     For questions related to the use of GCC, please consult these web
   21391     pages and the [9]GCC manuals. If that fails, the
   21392     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21393     web pages and the development of GCC are welcome on our developer
   21394     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   21395     archives.
   21396 
   21397    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   21398    distribution of this entire article is permitted in any medium,
   21399    provided this notice is preserved.
   21400 
   21401    These pages are [14]maintained by the GCC team. Last modified
   21402    2022-10-26.
   21403 
   21404 References
   21405 
   21406    1. http://www.gnu.org/
   21407    2. https://gcc.gnu.org/gcc-3.0/features.html
   21408    3. https://gcc.gnu.org/gcc-3.0/buildstat.html
   21409    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   21410    5. https://gcc.gnu.org/gcc-3.0/caveats.html
   21411    6. https://gcc.gnu.org/index.html
   21412    7. mailto:gcc (a] gcc.gnu.org
   21413    8. https://gcc.gnu.org/mirrors.html
   21414    9. https://gcc.gnu.org/onlinedocs/
   21415   10. mailto:gcc-help (a] gcc.gnu.org
   21416   11. mailto:gcc (a] gcc.gnu.org
   21417   12. https://gcc.gnu.org/lists.html
   21418   13. https://www.fsf.org/
   21419   14. https://gcc.gnu.org/about.html
   21420 ======================================================================
   21421 http://gcc.gnu.org/gcc-3.0/features.html
   21422                               GCC 3.0 New Features
   21423 
   21424 Additional changes in GCC 3.0.4
   21425 
   21426      * GCC 3.0 now supports newer versions of the [1]NetBSD operating
   21427        system, which use the ELF object file format, on x86 processors.
   21428      * Correct debugging information is generated from functions that have
   21429        lines from multiple files (e.g. yacc output).
   21430      * A fix for whitespace handling in the -traditional preprocessor,
   21431        which can affect Fortran.
   21432      * Fixes to the exception handling runtime.
   21433      * More fixes for bad code generation in C++.
   21434      * A fix for shared library generation under AIX 4.3.
   21435      * Documentation updates.
   21436      * Port of GCC to Tensilica's Xtensa processor contributed.
   21437      * A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
   21438 
   21439 Additional changes in GCC 3.0.3
   21440 
   21441      * A fix to correct an accidental change to the PowerPC ABI.
   21442      * Fixes for bad code generation on a variety of architectures.
   21443      * Improvements to the debugging information generated for C++
   21444        classes.
   21445      * Fixes for bad code generation in C++.
   21446      * A fix to avoid crashes in the C++ demangler.
   21447      * A fix to the C++ standard library to avoid buffer overflows.
   21448      * Miscellaneous improvements for a variety of architectures.
   21449 
   21450 Additional changes in GCC 3.0.2
   21451 
   21452      * Fixes for bad code generation during loop unrolling.
   21453      * Fixes for bad code generation by the sibling call optimization.
   21454      * Minor improvements to x86 code generation.
   21455      * Implementation of function descriptors in C++ vtables for IA64.
   21456      * Numerous minor bug-fixes.
   21457 
   21458 Additional changes in GCC 3.0.1
   21459 
   21460      * C++ fixes for incorrect code-generation.
   21461      * Improved cross-compiling support for the C++ standard library.
   21462      * Fixes for some embedded targets that worked in GCC 2.95.3, but not
   21463        in GCC 3.0.
   21464      * Fixes for various exception-handling bugs.
   21465      * A port to the S/390 architecture.
   21466 
   21467 General Optimizer Improvements
   21468 
   21469      * [2]Basic block reordering pass.
   21470      * New if-conversion pass with support for conditional (predicated)
   21471        execution.
   21472      * New tail call and sibling call elimination optimizations.
   21473      * New register renaming pass.
   21474      * New (experimental) [3]static single assignment (SSA) representation
   21475        support.
   21476      * New dead-code elimination pass implemented using the SSA
   21477        representation.
   21478      * [4]Global null pointer test elimination.
   21479      * [5]Global code hoisting/unification.
   21480      * More builtins and optimizations for stdio.h, string.h and old BSD
   21481        functions, as well as for ISO C99 functions.
   21482      * New builtin __builtin_expect for giving hints to the branch
   21483        predictor.
   21484 
   21485 New Languages and Language specific improvements
   21486 
   21487      * The GNU Compiler for the Java(TM) language (GCJ) is now integrated
   21488        and supported, including the run-time library containing most
   21489        common non-GUI Java classes, a bytecode interpreter, and the Boehm
   21490        conservative garbage collector. Many bugs have been fixed. GCJ can
   21491        compile Java source or Java bytecodes to either native code or Java
   21492        class files, and supports native methods written in either the
   21493        standard JNI or the more efficient and convenient CNI.
   21494      * Here is a [6]partial list of C++ improvements, both new features
   21495        and those no longer supported.
   21496      * New C++ ABI. On the IA-64 platform GCC is capable of
   21497        inter-operating with other IA-64 compilers.
   21498      * The new ABI also significantly reduces the size of symbol and debug
   21499        information.
   21500      * New C++ support library and many C++ bug fixes, vastly improving
   21501        our conformance to the ISO C++ standard.
   21502      * New [7]inliner for C++.
   21503      * Rewritten C preprocessor, integrated into the C, C++ and Objective
   21504        C compilers, with very many improvements including ISO C99 support
   21505        and [8]improvements to dependency generation.
   21506      * Support for more [9]ISO C99 features.
   21507      * Many improvements to support for checking calls to format functions
   21508        such as printf and scanf, including support for ISO C99 format
   21509        features, extensions from the Single Unix Specification and GNU
   21510        libc 2.2, checking of strfmon formats and features to assist in
   21511        auditing for format string security bugs.
   21512      * New warnings for C code that may have undefined semantics because
   21513        of violations of sequence point rules in the C standard (such as a
   21514        = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall.
   21515      * Additional warning option -Wfloat-equal.
   21516      * Improvements to -Wtraditional.
   21517      * Fortran improvements are listed in [10]the Fortran documentation.
   21518 
   21519 New Targets and Target Specific Improvements
   21520 
   21521      * New x86 back end, generating much improved code.
   21522      * Support for a generic i386-elf target contributed.
   21523      * New option to emit x86 assembly code using Intel style syntax
   21524        (-mintel-syntax).
   21525      * HPUX 11 support contributed.
   21526      * Improved PowerPC code generation, including scheduled prologue and
   21527        epilogue.
   21528      * Port of GCC to Intel's IA-64 processor contributed.
   21529      * Port of GCC to Motorola's MCore 210 and 340 contributed.
   21530      * New unified back-end for Arm, Thumb and StrongArm contributed.
   21531      * Port of GCC to Intel's XScale processor contributed.
   21532      * Port of GCC to Atmel's AVR microcontrollers contributed.
   21533      * Port of GCC to Mitsubishi's D30V processor contributed.
   21534      * Port of GCC to Matsushita's AM33 processor (a member of the MN10300
   21535        processor family) contributed.
   21536      * Port of GCC to Fujitsu's FR30 processor contributed.
   21537      * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed.
   21538      * Port of GCC to Sun's picoJava processor core contributed.
   21539 
   21540 Documentation improvements
   21541 
   21542      * Substantially rewritten and improved C preprocessor manual.
   21543      * Many improvements to other documentation.
   21544      * Manpages for gcc, cpp and gcov are now generated automatically from
   21545        the master Texinfo manual, eliminating the problem of manpages
   21546        being out of date. (The generated manpages are only extracts from
   21547        the full manual, which is provided in Texinfo form, from which
   21548        info, HTML, other formats and a printed manual can be generated.)
   21549      * Generated info files are included in the release tarballs alongside
   21550        their Texinfo sources, avoiding problems on some platforms with
   21551        building makeinfo as part of the GCC distribution.
   21552 
   21553 Other significant improvements
   21554 
   21555      * Garbage collection used internally by the compiler for most memory
   21556        allocation instead of obstacks.
   21557      * Lengauer and Tarjan algorithm used for computing dominators in the
   21558        CFG. This algorithm can be significantly faster and more space
   21559        efficient than our older algorithm.
   21560      * gccbug script provided to assist in submitting bug reports to our
   21561        bug tracking system. (Bug reports previously submitted directly to
   21562        our mailing lists, for which you received no bug tracking number,
   21563        should be submitted again using gccbug if you can reproduce the
   21564        problem with GCC 3.0.)
   21565      * The internal libgcc library is [11]built as a shared library on
   21566        systems that support it.
   21567      * Extensive testsuite included with GCC, with many new tests. In
   21568        addition to tests for GCC bugs that have been fixed, many tests
   21569        have been added for language features, compiler warnings and
   21570        builtin functions.
   21571      * Additional language-independent warning options -Wpacked, -Wpadded,
   21572        -Wunreachable-code and -Wdisabled-optimization.
   21573      * Target-independent options -falign-functions, -falign-loops and
   21574        -falign-jumps.
   21575 
   21576    Plus a great many bug fixes and almost all the [12]features found in
   21577    GCC 2.95.
   21578 
   21579 
   21580     For questions related to the use of GCC, please consult these web
   21581     pages and the [13]GCC manuals. If that fails, the
   21582     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21583     web pages and the development of GCC are welcome on our developer
   21584     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   21585     archives.
   21586 
   21587    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   21588    distribution of this entire article is permitted in any medium,
   21589    provided this notice is preserved.
   21590 
   21591    These pages are [18]maintained by the GCC team. Last modified
   21592    2022-10-26.
   21593 
   21594 References
   21595 
   21596    1. http://www.netbsd.org/
   21597    2. https://gcc.gnu.org/news/reorder.html
   21598    3. https://gcc.gnu.org/news/ssa.html
   21599    4. https://gcc.gnu.org/news/null.html
   21600    5. https://gcc.gnu.org/news/unify.html
   21601    6. https://gcc.gnu.org/gcc-3.0/c++features.html
   21602    7. https://gcc.gnu.org/news/inlining.html
   21603    8. https://gcc.gnu.org/news/dependencies.html
   21604    9. https://gcc.gnu.org/c99status.html
   21605   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   21606   11. https://gcc.gnu.org/gcc-3.0/libgcc.html
   21607   12. https://gcc.gnu.org/gcc-2.95/features.html
   21608   13. https://gcc.gnu.org/onlinedocs/
   21609   14. mailto:gcc-help (a] gcc.gnu.org
   21610   15. mailto:gcc (a] gcc.gnu.org
   21611   16. https://gcc.gnu.org/lists.html
   21612   17. https://www.fsf.org/
   21613   18. https://gcc.gnu.org/about.html
   21614 ======================================================================
   21615 http://gcc.gnu.org/gcc-3.0/caveats.html
   21616                                 GCC 3.0 Caveats
   21617 
   21618      * -fstrict-aliasing is now part of -O2 and higher optimization
   21619        levels. This allows the compiler to assume the strictest aliasing
   21620        rules applicable to the language being compiled. For C and C++,
   21621        this activates optimizations based on the type of expressions. This
   21622        optimization may thus break old, non-compliant code.
   21623      * Enumerations are now properly promoted to int in function
   21624        parameters and function returns. Normally this change is not
   21625        visible, but when using -fshort-enums this is an ABI change.
   21626      * The undocumented extension that allowed C programs to have a label
   21627        at the end of a compound statement has been deprecated and may be
   21628        removed in a future version. Programs that now generate a warning
   21629        about this may be fixed by adding a null statement (a single
   21630        semicolon) after the label.
   21631      * The poorly documented extension that allowed string constants in C,
   21632        C++ and Objective C to contain unescaped newlines has been
   21633        deprecated and may be removed in a future version. Programs using
   21634        this extension may be fixed in several ways: the bare newline may
   21635        be replaced by \n, or preceded by \n\, or string concatenation may
   21636        be used with the bare newline preceded by \n" and " placed at the
   21637        start of the next line.
   21638      * The Chill compiler is not included in GCC 3.0, because of the lack
   21639        of a volunteer to convert it to use garbage collection.
   21640      * Certain non-standard iostream methods from earlier versions of
   21641        libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach,
   21642        ostream::form, and istream::gets.
   21643      * The new C++ ABI is not yet fully supported by current (as of
   21644        2001-07-01) releases and development versions of GDB, or any
   21645        earlier versions. There is a problem setting breakpoints by line
   21646        number, and other related issues that have been fixed in GCC 3.0
   21647        but not yet handled in GDB:
   21648        [1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   21649 
   21650 
   21651     For questions related to the use of GCC, please consult these web
   21652     pages and the [2]GCC manuals. If that fails, the
   21653     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21654     web pages and the development of GCC are welcome on our developer
   21655     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   21656 
   21657    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   21658    distribution of this entire article is permitted in any medium,
   21659    provided this notice is preserved.
   21660 
   21661    These pages are [7]maintained by the GCC team. Last modified
   21662    2022-10-26.
   21663 
   21664 References
   21665 
   21666    1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   21667    2. https://gcc.gnu.org/onlinedocs/
   21668    3. mailto:gcc-help (a] gcc.gnu.org
   21669    4. mailto:gcc (a] gcc.gnu.org
   21670    5. https://gcc.gnu.org/lists.html
   21671    6. https://www.fsf.org/
   21672    7. https://gcc.gnu.org/about.html
   21673 ======================================================================
   21674 http://gcc.gnu.org/gcc-2.95/index.html
   21675                                     GCC 2.95
   21676 
   21677    (This release series is no longer supported.)
   21678 
   21679    March 16, 2001: The GNU project and the GCC developers are pleased to
   21680    announce the release of GCC version 2.95.3.
   21681 
   21682 Release History
   21683 
   21684    GCC 2.95.3
   21685           March 16, 2001
   21686 
   21687    GCC 2.95.2
   21688           October 27, 1999
   21689 
   21690    GCC 2.95.1
   21691           August 19, 1999
   21692 
   21693    GCC 2.95
   21694           July 31, 1999. This is the first release of GCC since the April
   21695           1999 GCC/EGCS reunification and includes nearly a year's worth
   21696           of new development and bugfixes.
   21697 
   21698 References and Acknowledgements
   21699 
   21700    GCC used to stand for the GNU C Compiler, but since the compiler
   21701    supports several other languages aside from C, it now stands for the
   21702    GNU Compiler Collection.
   21703 
   21704    The whole suite has been extensively [1]regression tested and
   21705    [2]package tested. It should be reliable and suitable for widespread
   21706    use.
   21707 
   21708    The compiler has several new optimizations, new targets, new languages
   21709    and other new features. See the [3]new features page for a more
   21710    complete list of new features found in the GCC 2.95 releases.
   21711 
   21712    The sources include installation instructions in both HTML and
   21713    plaintext forms in the install directory in the distribution. However,
   21714    the most up to date installation instructions and [4]build/test status
   21715    are on the web pages. We will update those pages as new information
   21716    becomes available.
   21717 
   21718    The GCC developers would like to thank the numerous people that have
   21719    contributed new features, test results, bugfixes, etc to GCC. This
   21720    [5]amazing group of volunteers is what makes GCC successful.
   21721 
   21722    And finally, we can't in good conscience fail to mention some
   21723    [6]caveats to using GCC 2.95.
   21724 
   21725    Download GCC 2.95 from one of our many [7]mirror sites.
   21726 
   21727    For additional information about GCC please see the [8]GCC project web
   21728    server or contact the [9]GCC development mailing list.
   21729 
   21730 
   21731     For questions related to the use of GCC, please consult these web
   21732     pages and the [10]GCC manuals. If that fails, the
   21733     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21734     web pages and the development of GCC are welcome on our developer
   21735     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   21736     archives.
   21737 
   21738    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   21739    distribution of this entire article is permitted in any medium,
   21740    provided this notice is preserved.
   21741 
   21742    These pages are [15]maintained by the GCC team. Last modified
   21743    2022-10-26.
   21744 
   21745 References
   21746 
   21747    1. https://gcc.gnu.org/gcc-2.95/regress.html
   21748    2. https://gcc.gnu.org/gcc-2.95/othertest.html
   21749    3. https://gcc.gnu.org/gcc-2.95/features.html
   21750    4. https://gcc.gnu.org/gcc-2.95/buildstat.html
   21751    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   21752    6. https://gcc.gnu.org/gcc-2.95/caveats.html
   21753    7. https://gcc.gnu.org/mirrors.html
   21754    8. https://gcc.gnu.org/index.html
   21755    9. mailto:gcc (a] gcc.gnu.org
   21756   10. https://gcc.gnu.org/onlinedocs/
   21757   11. mailto:gcc-help (a] gcc.gnu.org
   21758   12. mailto:gcc (a] gcc.gnu.org
   21759   13. https://gcc.gnu.org/lists.html
   21760   14. https://www.fsf.org/
   21761   15. https://gcc.gnu.org/about.html
   21762 ======================================================================
   21763 http://gcc.gnu.org/gcc-2.95/features.html
   21764                              GCC 2.95 New Features
   21765 
   21766      * General Optimizer Improvements:
   21767           + [1]Localized register spilling to improve speed and code
   21768             density especially on small register class machines.
   21769           + [2]Global CSE using lazy code motion algorithms.
   21770           + [3]Improved global constant/copy propagation.
   21771           + [4]Improved control flow graph analysis and manipulation.
   21772           + [5]Local dead store elimination.
   21773           + [6]Memory Load hoisting/store sinking in loops.
   21774           + [7]Type based alias analysis is enabled by default. Note this
   21775             feature will expose bugs in the Linux kernel. Please refer to
   21776             the FAQ (as shipped with GCC 2.95) for additional information
   21777             on this issue.
   21778           + Major revamp of GIV detection, combination and simplification
   21779             to improve loop performance.
   21780           + Major improvements to register allocation and reloading.
   21781      * New Languages and Language specific improvements
   21782           + [8]Many C++ improvements.
   21783           + [9]Many Fortran improvements.
   21784           + [10]Java front-end has been integrated. A [11]runtime library
   21785             is available separately.
   21786           + [12]ISO C99 support
   21787           + [13]Chill front-end and runtime has been integrated.
   21788           + Boehm garbage collector support in libobjc.
   21789           + More support for various pragmas which appear in vendor
   21790             include files
   21791      * New Targets and Target Specific Improvements
   21792           + [14]SPARC back end rewrite.
   21793           + -mschedule=8000 will optimize code for PA8000 class
   21794             processors; -mpa-risc-2-0 will generate code for PA2.0
   21795             processors
   21796           + Various micro-optimizations for the ia32 port. K6
   21797             optimizations
   21798           + Compiler will attempt to align doubles in the stack on the
   21799             ia32 port
   21800           + Alpha EV6 support
   21801           + PowerPC 750
   21802           + RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
   21803             -mcpu=e603e was added to do -mcpu=603e and -msoft-float.
   21804           + c3x, c4x
   21805           + HyperSPARC
   21806           + SparcLite86x
   21807           + sh4
   21808           + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
   21809             arm-linux)
   21810           + vxWorks targets include support for vxWorks threads
   21811           + StrongARM 110 and ARM9 support added. ARM Scheduling
   21812             parameters rewritten.
   21813           + Various changes to the MIPS port to avoid assembler macros,
   21814             which in turn improves performance
   21815           + Various performance improvements to the i960 port.
   21816           + Major rewrite of ns32k port
   21817      * Other significant improvements
   21818           + [15]Ability to dump cfg information and display it using vcg.
   21819           + The new faster scheme for fixing vendor header files is
   21820             enabled by default.
   21821           + Experimental internationalization support.
   21822           + multibyte character support
   21823           + Some compile-time speedups for pathological problems
   21824           + Better support for complex types
   21825      * Plus the usual mountain of bugfixes
   21826      * Core compiler is based on the gcc2 development tree from Sept 30,
   21827        1998, so we have all of the [16]features found in GCC 2.8.
   21828 
   21829 Additional Changes in GCC 2.95.1
   21830 
   21831      * Generic bugfixes and improvements
   21832           + Various documentation fixes related to the GCC/EGCS merger.
   21833           + Fix memory management bug which could lead to spurious aborts,
   21834             core dumps or random parsing errors in the compiler.
   21835           + Fix a couple bugs in the dwarf1 and dwarf2 debug record
   21836             support.
   21837           + Fix infinite loop in the CSE optimizer.
   21838           + Avoid undefined behavior in compiler FP emulation code
   21839           + Fix install problem when prefix is overridden on the make
   21840             install command.
   21841           + Fix problem with unwanted installation of assert.h on some
   21842             systems.
   21843           + Fix problem with finding the wrong assembler in a single tree
   21844             build.
   21845           + Avoid increasing the known alignment of a register that is
   21846             already known to be a pointer.
   21847      * Platform specific bugfixes and improvements
   21848           + Codegen bugfix for prologue/epilogue for cpu32 target.
   21849           + Fix long long code generation bug for the Coldfire target.
   21850           + Fix various aborts in the SH compiler.
   21851           + Fix bugs in libgcc support library for the SH.
   21852           + Fix alpha ev6 code generation bug.
   21853           + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
   21854             AIX platforms.
   21855           + Fix -fpic code generation bug for rs6000/ppc svr4 targets.
   21856           + Fix varargs/stdarg code generation bug for rs6000/ppc svr4
   21857             targets.
   21858           + Fix weak symbol handling for rs6000/ppc svr4 targets.
   21859           + Fix various problems with 64bit code generation for the
   21860             rs6000/ppc port.
   21861           + Fix codegen bug which caused tetex to be mis-compiled on the
   21862             x86.
   21863           + Fix compiler abort in new cfg code exposed by x86 port.
   21864           + Fix out of range array reference in code convert flat
   21865             registers to the x87 stacked FP register file.
   21866           + Fix minor vxworks configuration bug.
   21867           + Fix return type of bsearch for SunOS 4.x.
   21868      * Language & Runtime specific fixes.
   21869           + The G++ signature extension has been deprecated. It will be
   21870             removed in the next major release of G++. Use of signatures
   21871             will result in a warning from the compiler.
   21872           + Several bugs relating to templates and namespaces were fixed.
   21873           + A bug that caused crashes when combining templates with -g on
   21874             DWARF1 platforms was fixed.
   21875           + Pointers-to-members, virtual functions, and multiple
   21876             inheritance should now work together correctly.
   21877           + Some code-generation bugs relating to function try blocks were
   21878             fixed.
   21879           + G++ is a little bit more lenient with certain archaic
   21880             constructs than in GCC 2.95.
   21881           + Fix to prevent shared library version #s from bring truncated
   21882             to 1 digit
   21883           + Fix missing std:: in the libstdc++ library.
   21884           + Fix stream locking problems in libio.
   21885           + Fix problem in java compiler driver.
   21886 
   21887 Additional Changes in GCC 2.95.2
   21888 
   21889    The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
   21890    the optimizations performed by -fstrict-aliasing are valid according to
   21891    the C and C++ standards, the optimization have caused some problems,
   21892    particularly with old non-conforming code.
   21893 
   21894    The GCC developers are experimenting with ways to warn users about code
   21895    which violates the C/C++ standards, but those warnings are not ready
   21896    for widespread use at this time. Rather than wait for those warnings
   21897    the GCC developers have chosen to disable -fstrict-aliasing by default
   21898    for the GCC 2.95.2 release.
   21899 
   21900    We strongly encourage developers to find and fix code which violates
   21901    the C/C++ standards as -fstrict-aliasing may be enabled by default in
   21902    future releases. Use the option -fstrict-aliasing to re-enable these
   21903    optimizations.
   21904      * Generic bugfixes and improvements
   21905           + Fix incorrectly optimized memory reference in global common
   21906             subexpression elimination (GCSE) optimization pass.
   21907           + Fix code generation bug in regmove.c in which it could
   21908             incorrectly change a "const" value.
   21909           + Fix bug in optimization of conditionals involving volatile
   21910             memory references.
   21911           + Avoid over-allocation of stack space for some procedures.
   21912           + Fixed bug in the compiler which caused incorrect optimization
   21913             of an obscure series of bit manipulations, shifts and
   21914             arithmetic.
   21915           + Fixed register allocator bug which caused teTeX to be
   21916             mis-compiled on SPARC targets.
   21917           + Avoid incorrect optimization of degenerate case statements for
   21918             certain targets such as the ARM.
   21919           + Fix out of range memory reference in the jump optimizer.
   21920           + Avoid dereferencing null pointer in fix-header.
   21921           + Fix test for GCC specific features so that it is possible to
   21922             bootstrap with gcc-2.6.2 and older versions of GCC.
   21923           + Fix typo in scheduler which could potentially cause out of
   21924             range memory accesses.
   21925           + Avoid incorrect loop reversal which caused incorrect code for
   21926             certain loops on PowerPC targets.
   21927           + Avoid incorrect optimization of switch statements on certain
   21928             targets (for example the ARM).
   21929      * Platform specific bugfixes and improvements
   21930           + Work around bug in Sun V5.0 compilers which caused bootstrap
   21931             comparison failures on SPARC targets.
   21932           + Fix SPARC back end bug which caused aborts in final.c.
   21933           + Fix sparc-hal-solaris2* configuration fragments.
   21934           + Fix bug in sparc block profiling.
   21935           + Fix obscure code generation bug for the PARISC targets.
   21936           + Define __STDC_EXT__ for HPUX configurations.
   21937           + Various POWERPC64 code generation bugfixes.
   21938           + Fix abort for PPC targets using ELF (ex GNU/Linux).
   21939           + Fix collect2 problems for AIX targets.
   21940           + Correct handling of .file directive for PPC targets.
   21941           + Fix bug in fix_trunc x86 patterns.
   21942           + Fix x86 port to correctly pop the FP stack for functions that
   21943             return structures in memory.
   21944           + Fix minor bug in strlen x86 pattern.
   21945           + Use stabs debugging instead of dwarf1 for x86-solaris targets.
   21946           + Fix template repository code to handle leading underscore in
   21947             mangled names.
   21948           + Fix weak/weak alias support for OpenBSD.
   21949           + GNU/Linux for the ARM has C++ compatible include files.
   21950      * Language & Runtime specific fixes.
   21951           + Fix handling of constructor attribute in the C front-end which
   21952             caused problems building the Chill runtime library on some
   21953             targets.
   21954           + Fix minor problem merging type qualifiers in the C front-end.
   21955           + Fix aliasing bug for pointers and references (C/C++).
   21956           + Fix incorrect "non-constant initializer bug" when -traditional
   21957             or -fwritable-strings is enabled.
   21958           + Fix build error for Chill front-end on SunOS.
   21959           + Do not complain about duplicate instantiations when using
   21960             -frepo (C++).
   21961           + Fix array bounds handling in C++ front-end which caused
   21962             problems with dwarf debugging information in some
   21963             circumstances.
   21964           + Fix minor namespace problem.
   21965           + Fix problem linking java programs.
   21966 
   21967 Additional Changes in GCC 2.95.3
   21968 
   21969      * Generic bugfixes and improvements
   21970           + Fix numerous problems that caused incorrect optimization in
   21971             the register reloading code.
   21972           + Fix numerous problems that caused incorrect optimization in
   21973             the loop optimizer.
   21974           + Fix aborts in the functions build_insn_chain and scan_loops
   21975             under some circumstances.
   21976           + Fix an alias analysis bug.
   21977           + Fix an infinite compilation bug in the combiner.
   21978           + A few problems with complex number support have been fixed.
   21979           + It is no longer possible for gcc to act as a fork bomb when
   21980             installed incorrectly.
   21981           + The -fpack-struct option should be recognized now.
   21982           + Fixed a bug that caused incorrect code to be generated due to
   21983             a lost stack adjustment.
   21984      * Platform specific bugfixes and improvements
   21985           + Support building ARM toolchains hosted on Windows.
   21986           + Fix attribute calculations in ARM toolchains.
   21987           + arm-linux support has been improved.
   21988           + Fix a PIC failure on sparc targets.
   21989           + On ix86 targets, the regparm attribute should now work
   21990             reliably.
   21991           + Several updates for the h8300 port.
   21992           + Fix problem building libio with glibc 2.2.
   21993 
   21994 
   21995     For questions related to the use of GCC, please consult these web
   21996     pages and the [17]GCC manuals. If that fails, the
   21997     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   21998     web pages and the development of GCC are welcome on our developer
   21999     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   22000     archives.
   22001 
   22002    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   22003    distribution of this entire article is permitted in any medium,
   22004    provided this notice is preserved.
   22005 
   22006    These pages are [22]maintained by the GCC team. Last modified
   22007    2023-09-02.
   22008 
   22009 References
   22010 
   22011    1. https://gcc.gnu.org/news/spill.html
   22012    2. https://gcc.gnu.org/news/lcm.html
   22013    3. https://gcc.gnu.org/news/cprop.html
   22014    4. https://gcc.gnu.org/news/cfg.html
   22015    5. https://gcc.gnu.org/news/dse.html
   22016    6. https://gcc.gnu.org/news/hoist.html
   22017    7. https://gcc.gnu.org/news/alias.html
   22018    8. https://gcc.gnu.org/gcc-2.95/c++features.html
   22019    9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   22020   10. https://gcc.gnu.org/news/gcj-announce.txt
   22021   11. https://gcc.gnu.org/news/javaannounce.html
   22022   12. https://gcc.gnu.org/c99status.html
   22023   13. https://gcc.gnu.org/news/chill.html
   22024   14. https://gcc.gnu.org/news/sparc.html
   22025   15. https://gcc.gnu.org/news/egcs-vcg.html
   22026   16. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   22027   17. https://gcc.gnu.org/onlinedocs/
   22028   18. mailto:gcc-help (a] gcc.gnu.org
   22029   19. mailto:gcc (a] gcc.gnu.org
   22030   20. https://gcc.gnu.org/lists.html
   22031   21. https://www.fsf.org/
   22032   22. https://gcc.gnu.org/about.html
   22033 ======================================================================
   22034 http://gcc.gnu.org/gcc-2.95/caveats.html
   22035                                 GCC 2.95 Caveats
   22036 
   22037      * GCC 2.95 will issue an error for invalid asm statements that had
   22038        been silently accepted by earlier versions of the compiler. This is
   22039        particularly noticeable when compiling older versions of the Linux
   22040        kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95)
   22041        for more information on this issue.
   22042      * GCC 2.95 implements type based alias analysis to disambiguate
   22043        memory references. Some programs, particularly the Linux kernel
   22044        violate ANSI/ISO aliasing rules and therefore may not operate
   22045        correctly when compiled with GCC 2.95. Please refer to the FAQ (as
   22046        shipped with GCC 2.95) for more information on this issue.
   22047      * GCC 2.95 has a known bug in its handling of complex variables for
   22048        64bit targets. Instead of silently generating incorrect code, GCC
   22049        2.95 will issue a fatal error for situations it can not handle.
   22050        This primarily affects the Fortran community as Fortran makes more
   22051        use of complex variables than C or C++.
   22052      * GCC 2.95 has an integrated libstdc++, but does not have an
   22053        integrated libg++. Furthermore old libg++ releases will not work
   22054        with GCC 2.95. You can retrieve a recent copy of libg++ from the
   22055        [1]GCC ftp server.
   22056        Note most C++ programs only need libstdc++.
   22057      * Exception handling may not work with shared libraries, particularly
   22058        on alphas, hppas, rs6000/powerpc and mips based platforms.
   22059        Exception handling is known to work on x86 GNU/Linux platforms with
   22060        shared libraries.
   22061      * In general, GCC 2.95 is more rigorous about rejecting invalid C++
   22062        code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
   22063        or EGCS 1.1. As a result it may be necessary to fix C++ code before
   22064        it will compile with GCC 2.95.
   22065      * G++ is also converting toward the ISO C++ standard; as a result
   22066        code which was previously valid (and thus accepted by other
   22067        compilers and older versions of g++) may no longer be accepted. The
   22068        flag -fpermissive may allow some non-conforming code to compile
   22069        with GCC 2.95.
   22070      * GCC 2.95 compiled C++ code is not binary compatible with EGCS
   22071        1.1.x, EGCS 1.0.x or GCC 2.8.x.
   22072      * GCC 2.95 does not have changes from the GCC 2.8 tree that were made
   22073        between Sept 30, 1998 and April 30, 1999 (the official end of the
   22074        GCC 2.8 project). Future GCC releases will include all the changes
   22075        from the defunct GCC 2.8 sources.
   22076 
   22077 
   22078     For questions related to the use of GCC, please consult these web
   22079     pages and the [2]GCC manuals. If that fails, the
   22080     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22081     web pages and the development of GCC are welcome on our developer
   22082     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   22083 
   22084    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   22085    distribution of this entire article is permitted in any medium,
   22086    provided this notice is preserved.
   22087 
   22088    These pages are [7]maintained by the GCC team. Last modified
   22089    2022-10-26.
   22090 
   22091 References
   22092 
   22093    1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
   22094    2. https://gcc.gnu.org/onlinedocs/
   22095    3. mailto:gcc-help (a] gcc.gnu.org
   22096    4. mailto:gcc (a] gcc.gnu.org
   22097    5. https://gcc.gnu.org/lists.html
   22098    6. https://www.fsf.org/
   22099    7. https://gcc.gnu.org/about.html
   22100 ======================================================================
   22101 http://gcc.gnu.org/egcs-1.1/index.html
   22102                                     EGCS 1.1
   22103 
   22104    September 3, 1998: We are pleased to announce the release of EGCS 1.1.
   22105    December 1, 1998: We are pleased to announce the release of EGCS 1.1.1.
   22106    March 15, 1999: We are pleased to announce the release of EGCS 1.1.2.
   22107 
   22108    EGCS is a free software project to further the development of the GNU
   22109    compilers using an open development environment.
   22110 
   22111    EGCS 1.1 is a major new release of the EGCS compiler system. It has
   22112    been [1]extensively tested and is believed to be stable and suitable
   22113    for widespread use.
   22114 
   22115    EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
   22116    development sources; it contains all of the new features found in GCC
   22117    2.8.1 as well as all new development from GCC up to June 6, 1998.
   22118 
   22119    EGCS 1.1 also contains many improvements and features not found in GCC
   22120    or in older versions of EGCS:
   22121      * Global common subexpression elimination and global constant/copy
   22122        propagation (aka [2]gcse)
   22123      * Ongoing improvements to the [3]alias analysis support to allow for
   22124        better optimizations throughout the compiler.
   22125      * Vastly improved [4]C++ compiler and integrated C++ runtime
   22126        libraries.
   22127      * Fixes for the /tmp symlink race security problems.
   22128      * New targets including mips16, arm-thumb and 64-bit PowerPC.
   22129      * Improvements to GNU Fortran (g77) compiler and runtime library made
   22130        since g77 version 0.5.23.
   22131 
   22132    See the [5]new features page for a more complete list of new features
   22133    found in EGCS 1.1 releases.
   22134 
   22135    EGCS 1.1.1 is a minor update to fix several serious problems in EGCS
   22136    1.1:
   22137      * General improvements and fixes
   22138           + Avoid some stack overflows when compiling large functions.
   22139           + Avoid incorrect loop invariant code motions.
   22140           + Fix some core dumps on Linux kernel code.
   22141           + Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
   22142           + Fix code generation problem in gcse.
   22143           + Various documentation related fixes.
   22144      * g++/libstdc++ improvements and fixes
   22145           + MT safe EH fix for setjmp/longjmp based exception handling.
   22146           + Fix a few bad interactions between optimization and exception
   22147             handling.
   22148           + Fixes for demangling of template names starting with "__".
   22149           + Fix a bug that would fail to run destructors in some cases
   22150             with -O2.
   22151           + Fix 'new' of classes with virtual bases.
   22152           + Fix crash building Qt on the Alpha.
   22153           + Fix failure compiling WIFEXITED macro on GNU/Linux.
   22154           + Fix some -frepo failures.
   22155      * g77 and libf2c improvements and fixes
   22156           + Various documentation fixes.
   22157           + Avoid compiler crash on RAND intrinsic.
   22158           + Fix minor bugs in makefiles exposed by BSD make programs.
   22159           + Define _XOPEN_SOURCE for libI77 build to avoid potential
   22160             problems on some 64-bit systems.
   22161           + Fix problem with implicit endfile on rewind.
   22162           + Fix spurious recursive I/O errors.
   22163      * platform specific improvements and fixes
   22164           + Match all versions of UnixWare7.
   22165           + Do not assume x86 SVR4 or UnixWare targets can handle stabs.
   22166           + Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
   22167             from unsigned ints to double precision floats.
   22168           + Fix ARM ABI issue with NetBSD.
   22169           + Fix a few arm code generation bugs.
   22170           + Fixincludes will fix additional broken SCO OpenServer header
   22171             files.
   22172           + Fix a m68k back end bug which caused invalid offsets in reg+d
   22173             addresses.
   22174           + Fix problems with 64bit AIX 4.3 support.
   22175           + Fix handling of long longs for varargs/stdarg functions on the
   22176             ppc.
   22177           + Minor fixes to CPP predefines for Windows.
   22178           + Fix code generation problems with gpr<->fpr copies for 64bit
   22179             ppc.
   22180           + Fix a few coldfire code generation bugs.
   22181           + Fix some more header file problems on SunOS 4.x.
   22182           + Fix assert.h handling for RTEMS.
   22183           + Fix Windows handling of TREE_SYMBOL_REFERENCED.
   22184           + Fix x86 compiler abort in reg-stack pass.
   22185           + Fix cygwin/windows problem with section attributes.
   22186           + Fix Alpha code generation problem exposed by SMP Linux
   22187             kernels.
   22188           + Fix typo in m68k 32->64bit integer conversion.
   22189           + Make sure target libraries build with -fPIC for PPC & Alpha
   22190             targets.
   22191 
   22192    EGCS 1.1.2 is a minor update to fix several serious problems in EGCS
   22193    1.1.1:
   22194      * General improvements and fixes
   22195           + Fix bug in loop optimizer which caused the SPARC (and
   22196             potentially other) ports to segfault.
   22197           + Fix infinite recursion in alias analysis and combiner code.
   22198           + Fix bug in regclass preferencing.
   22199           + Fix incorrect loop reversal which caused incorrect code to be
   22200             generated for several targets.
   22201           + Fix return value for builtin memcpy.
   22202           + Reduce compile time for certain loops which exposed quadratic
   22203             behavior in the loop optimizer.
   22204           + Fix bug which caused volatile memory to be written multiple
   22205             times when only one write was needed/desired.
   22206           + Fix compiler abort in caller-save.c
   22207           + Fix combiner bug which caused incorrect code generation for
   22208             certain division by constant operations.
   22209           + Fix incorrect code generation due to a bug in range check
   22210             optimizations.
   22211           + Fix incorrect code generation due to mis-handling of clobbered
   22212             values in CSE.
   22213           + Fix compiler abort/segfault due to incorrect register
   22214             splitting when unrolling loops.
   22215           + Fix code generation involving autoincremented addresses with
   22216             ternary operators.
   22217           + Work around bug in the scheduler which caused qt to be
   22218             mis-compiled on some platforms.
   22219           + Fix code generation problems with -fshort-enums.
   22220           + Tighten security for temporary files.
   22221           + Improve compile time for codes which make heavy use of
   22222             overloaded functions.
   22223           + Fix multiply defined constructor/destructor symbol problems.
   22224           + Avoid setting bogus RPATH environment variable during
   22225             bootstrap.
   22226           + Avoid GNU-make dependencies in the texinfo subdir.
   22227           + Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
   22228             --enable-cpp=<dirname> can be used to specify an additional
   22229             install directory for the cpp wrapper script.
   22230           + Fix CSE bug which caused incorrect label-label refs to appear
   22231             on some platforms.
   22232           + Avoid linking in EH routines from libgcc if they are not
   22233             needed.
   22234           + Avoid obscure bug in aliasing code.
   22235           + Fix bug in weak symbol handling.
   22236      * Platform-specific improvements and fixes
   22237           + Fix detection of PPro/PII on Unixware 7.
   22238           + Fix compiler segfault when building spec99 and other programs
   22239             for SPARC targets.
   22240           + Fix code-generation bugs for integer and floating point
   22241             conditional move instructions on the PPro/PII.
   22242           + Use fixincludes to fix byteorder problems on i?86-*-sysv.
   22243           + Fix build failure for the arc port.
   22244           + Fix floating point format configuration for i?86-gnu port.
   22245           + Fix problems with hppa1.0-hp-hpux10.20 configuration when
   22246             threads are enabled.
   22247           + Fix coldfire code generation bugs.
   22248           + Fix "unrecognized insn" problems for Alpha and PPC ports.
   22249           + Fix h8/300 code generation problem with floating point values
   22250             in memory.
   22251           + Fix unrecognized insn problems for the m68k port.
   22252           + Fix namespace-pollution problem for the x86 port.
   22253           + Fix problems with old assembler on x86 NeXT systems.
   22254           + Fix PIC code-generation problems for the SPARC port.
   22255           + Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
   22256           + Fix minor ISO namespace violation in Alpha varargs/stdarg
   22257             support.
   22258           + Fix incorrect "braf" instruction usage for the SH port.
   22259           + Fix minor bug in va-sh which prevented its use with -ansi.
   22260           + Fix problems recognizing and supporting FreeBSD.
   22261           + Handle OpenBSD systems correctly.
   22262           + Minor fixincludes fix for Digital UNIX 4.0B.
   22263           + Fix problems with ctors/dtors in SCO shared libraries.
   22264           + Abort instead of generating incorrect code for PPro/PII
   22265             floating point conditional moves.
   22266           + Avoid multiply defined symbols on GNU/Linux systems using
   22267             libc-5.4.xx.
   22268           + Fix abort in alpha compiler.
   22269      * Fortran-specific fixes
   22270           + Fix the IDate intrinsic (VXT) (in libg2c) so the returned year
   22271             is in the documented, non-Y2K-compliant range of 0-99, instead
   22272             of being returned as 100 in the year 2000.
   22273           + Fix the `Date_and_Time' intrinsic (in libg2c) to return the
   22274             milliseconds value properly in Values(8).
   22275           + Fix the `LStat' intrinsic (in libg2c) to return device-ID
   22276             information properly in SArray(7).
   22277 
   22278    Each release includes installation instructions in both HTML and
   22279    plaintext forms (see the INSTALL directory in the toplevel directory of
   22280    the distribution). However, we also keep the most up to date
   22281    installation instructions and [6]build/test status on our web page. We
   22282    will update those pages as new information becomes available.
   22283 
   22284    The EGCS project would like to thank the numerous people that have
   22285    contributed new features, test results, bugfixes, etc. This [7]amazing
   22286    group of volunteers is what makes EGCS successful.
   22287 
   22288    And finally, we can't in good conscience fail to mention some
   22289    [8]caveats to using EGCS 1.1.
   22290 
   22291    Download EGCS from egcs.cygnus.com (USA California).
   22292 
   22293    The EGCS 1.1 release is also available on many mirror sites.
   22294    [9]Goto mirror list to find a closer site.
   22295 
   22296 
   22297     For questions related to the use of GCC, please consult these web
   22298     pages and the [10]GCC manuals. If that fails, the
   22299     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22300     web pages and the development of GCC are welcome on our developer
   22301     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   22302     archives.
   22303 
   22304    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   22305    distribution of this entire article is permitted in any medium,
   22306    provided this notice is preserved.
   22307 
   22308    These pages are [15]maintained by the GCC team. Last modified
   22309    2024-05-18.
   22310 
   22311 References
   22312 
   22313    1. https://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
   22314    2. https://gcc.gnu.org/news/gcse.html
   22315    3. https://gcc.gnu.org/news/alias.html
   22316    4. https://gcc.gnu.org/egcs-1.1/c++features.html
   22317    5. https://gcc.gnu.org/egcs-1.1/features.html
   22318    6. https://gcc.gnu.org/egcs-1.1/buildstat.html
   22319    7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   22320    8. https://gcc.gnu.org/egcs-1.1/caveats.html
   22321    9. https://gcc.gnu.org/mirrors.html
   22322   10. https://gcc.gnu.org/onlinedocs/
   22323   11. mailto:gcc-help (a] gcc.gnu.org
   22324   12. mailto:gcc (a] gcc.gnu.org
   22325   13. https://gcc.gnu.org/lists.html
   22326   14. https://www.fsf.org/
   22327   15. https://gcc.gnu.org/about.html
   22328 ======================================================================
   22329 http://gcc.gnu.org/egcs-1.1/features.html
   22330                              EGCS 1.1 new features
   22331 
   22332      * Integrated GNU Fortran (g77) compiler and runtime library with
   22333        improvements, based on g77 version 0.5.23.
   22334      * Vast improvements in the C++ compiler; so many they have [1]page of
   22335        their own!
   22336      * Compiler implements [2]global common subexpression elimination and
   22337        global copy/constant propagation.
   22338      * More major improvements in the [3]alias analysis code.
   22339      * More major improvements in the exception handling code to improve
   22340        performance, lower static overhead and provide the infrastructure
   22341        for future improvements.
   22342      * The infamous /tmp symlink race security problems have been fixed.
   22343      * The regmove optimization pass has been nearly completely rewritten
   22344        to improve performance of generated code.
   22345      * The compiler now recomputes register usage information before local
   22346        register allocation. By providing more accurate information to the
   22347        priority based allocator, we get better register allocation.
   22348      * The register reloading phase of the compiler optimizes spill code
   22349        much better than in previous releases.
   22350      * Some bad interactions between the register allocator and
   22351        instruction scheduler have been fixed, resulting in much better
   22352        code for certain programs. Additionally, we have tuned the
   22353        scheduler in various ways to improve performance of generated code
   22354        for some architectures.
   22355      * The compiler's branch shortening algorithms have been significantly
   22356        improved to work better on targets which align jump targets.
   22357      * The compiler now supports -Os to prefer optimizing for code space
   22358        over optimizing for code speed.
   22359      * The compiler will now totally eliminate library calls which compute
   22360        constant values. This primarily helps targets with no integer
   22361        div/mul support and targets without floating point support.
   22362      * The compiler now supports an extensive "--help" option.
   22363      * cpplib has been greatly improved and may be suitable for limited
   22364        use.
   22365      * Memory footprint for the compiler has been significantly reduced
   22366        for some pathological cases.
   22367      * The time to build EGCS has been improved for certain targets
   22368        (particularly the alpha and mips platforms).
   22369      * Many infrastructure improvements throughout the compiler, plus the
   22370        usual mountain of bugfixes and minor improvements.
   22371      * Target dependent improvements:
   22372           + SPARC port now includes V8 plus and V9 support as well as
   22373             performance tuning for Ultra class machines. The SPARC port
   22374             now uses the Haifa scheduler.
   22375           + Alpha port has been tuned for the EV6 processor and has an
   22376             optimized expansion of memcpy/bzero. The Alpha port now uses
   22377             the Haifa scheduler.
   22378           + RS6000/PowerPC: support for the Power64 architecture and AIX
   22379             4.3. The RS6000/PowerPC port now uses the Haifa scheduler.
   22380           + x86: Alignment of static store data and jump targets is per
   22381             Intel recommendations now. Various improvements throughout the
   22382             x86 port to improve performance on Pentium processors
   22383             (including improved epilogue sequences for Pentium chips and
   22384             back end improvements which should help register allocation on
   22385             all x86 variants. Conditional move support has been fixed and
   22386             enabled for PPro processors. The x86 port also better supports
   22387             64bit operations now. Unixware 7, a System V Release 5 target,
   22388             is now supported and SCO OpenServer targets can support GAS.
   22389           + MIPS has improved multiply/multiply-add support and now
   22390             includes mips16 ISA support.
   22391           + M68k has many micro-optimizations and Coldfire fixes.
   22392      * Core compiler is based on the GCC development tree from June 9,
   22393        1998, so we have all of the [4]features found in GCC 2.8.
   22394 
   22395 
   22396     For questions related to the use of GCC, please consult these web
   22397     pages and the [5]GCC manuals. If that fails, the
   22398     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22399     web pages and the development of GCC are welcome on our developer
   22400     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   22401 
   22402    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   22403    distribution of this entire article is permitted in any medium,
   22404    provided this notice is preserved.
   22405 
   22406    These pages are [10]maintained by the GCC team. Last modified
   22407    2023-09-02.
   22408 
   22409 References
   22410 
   22411    1. https://gcc.gnu.org/egcs-1.1/c++features.html
   22412    2. https://gcc.gnu.org/news/gcse.html
   22413    3. https://gcc.gnu.org/news/alias.html
   22414    4. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   22415    5. https://gcc.gnu.org/onlinedocs/
   22416    6. mailto:gcc-help (a] gcc.gnu.org
   22417    7. mailto:gcc (a] gcc.gnu.org
   22418    8. https://gcc.gnu.org/lists.html
   22419    9. https://www.fsf.org/
   22420   10. https://gcc.gnu.org/about.html
   22421 ======================================================================
   22422 http://gcc.gnu.org/egcs-1.1/caveats.html
   22423                                 EGCS 1.1 Caveats
   22424 
   22425      * EGCS has an integrated libstdc++, but does not have an integrated
   22426        libg++. Furthermore old libg++ releases will not work with EGCS; HJ
   22427        Lu has made a libg++-2.8.1.2 snapshot available which may work with
   22428        EGCS.
   22429        Note most C++ programs only need libstdc++.
   22430      * Exception handling may not work with shared libraries, particularly
   22431        on alphas, hppas, rs6000/powerpc and mips based platforms.
   22432        Exception handling is known to work on x86-linux platforms with
   22433        shared libraries.
   22434      * Some versions of the Linux kernel have bugs which prevent them from
   22435        being compiled or from running when compiled by EGCS. See the FAQ
   22436        (as shipped with EGCS 1.1) for additional information.
   22437      * In general, EGCS is more rigorous about rejecting invalid C++ code
   22438        or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
   22439        a result it may be necessary to fix C++ code before it will compile
   22440        with EGCS.
   22441      * G++ is also converting toward the ISO C++ standard; as a result
   22442        code which was previously valid (and thus accepted by other
   22443        compilers and older versions of g++) may no longer be accepted.
   22444      * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x
   22445        or GCC 2.8.x due to changes necessary to support thread safe
   22446        exception handling.
   22447 
   22448 
   22449     For questions related to the use of GCC, please consult these web
   22450     pages and the [1]GCC manuals. If that fails, the
   22451     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22452     web pages and the development of GCC are welcome on our developer
   22453     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   22454 
   22455    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   22456    distribution of this entire article is permitted in any medium,
   22457    provided this notice is preserved.
   22458 
   22459    These pages are [6]maintained by the GCC team. Last modified
   22460    2022-10-26.
   22461 
   22462 References
   22463 
   22464    1. https://gcc.gnu.org/onlinedocs/
   22465    2. mailto:gcc-help (a] gcc.gnu.org
   22466    3. mailto:gcc (a] gcc.gnu.org
   22467    4. https://gcc.gnu.org/lists.html
   22468    5. https://www.fsf.org/
   22469    6. https://gcc.gnu.org/about.html
   22470 ======================================================================
   22471 http://gcc.gnu.org/egcs-1.0/index.html
   22472                                     EGCS 1.0
   22473 
   22474    December 3, 1997: We are pleased to announce the release of EGCS 1.0.
   22475    January 6, 1998: We are pleased to announce the release of EGCS 1.0.1.
   22476    March 16, 1998: We are pleased to announce the release of EGCS 1.0.2.
   22477    May 15, 1998 We are pleased to announce the release of EGCS 1.0.3.
   22478 
   22479    EGCS is a collaborative effort involving several groups of hackers
   22480    using an open development model to accelerate development and testing
   22481    of GNU compilers and runtime libraries.
   22482 
   22483    An important goal of EGCS is to allow wide scale testing of
   22484    experimental features and optimizations; therefore, EGCS contains some
   22485    features and optimizations which are still under development. However,
   22486    EGCS has been carefully tested and should be comparable in quality to
   22487    most GCC releases.
   22488 
   22489    EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
   22490    development sources; it contains nearly all of the new features found
   22491    in GCC 2.8.
   22492 
   22493    EGCS 1.0 also contains many improvements and features not found in GCC
   22494    2.7 and even the GCC 2.8 series (which was released after the original
   22495    EGCS 1.0 release).
   22496      * Integrated C++ runtime libraries, including support for most major
   22497        GNU/Linux systems!
   22498      * The integrated libstdc++ library includes a verbatim copy of SGI's
   22499        STL release.
   22500      * Integrated GNU Fortran compiler.
   22501      * New instruction scheduler.
   22502      * New alias analysis code.
   22503 
   22504    See the [1]new features page for a more complete list of new features.
   22505 
   22506    EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
   22507    critical bugs and add support for Red Hat 5.0 Linux. Changes since the
   22508    EGCS 1.0 release:
   22509      * Add support for Red Hat 5.0 Linux and better support for Linux
   22510        systems using glibc2.
   22511        Many programs failed to link when compiled with EGCS 1.0 on Red Hat
   22512        5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should
   22513        fix these problems.
   22514      * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception
   22515        handling interfaces.
   22516        To avoid future compatibility problems, we strongly urge anyone who
   22517        is planning on distributing shared libraries that contain C++ code
   22518        to upgrade to EGCS 1.0.1 first.
   22519        Soon after EGCS 1.0 was released, the GCC developers made some
   22520        incompatible changes in libgcc's exception handling interfaces.
   22521        These changes were needed to solve problems on some platforms. This
   22522        means that GCC 2.8.0, when released, will not be seamlessly
   22523        compatible with shared libraries built by EGCS 1.0. The reason is
   22524        that the libgcc.a in GCC 2.8.0 will not contain a function needed
   22525        by the old interface.
   22526        The result of this is that there may be compatibility problems with
   22527        shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
   22528        With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) interface,
   22529        and libgcc.a has the support routines for both the old and the new
   22530        interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be freely mixed,
   22531        and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed).
   22532        The maintainers of GCC 2.x have decided against including seamless
   22533        support for the old interface in 2.8.0, since it was never
   22534        "official", so to avoid future compatibility problems we recommend
   22535        against distributing any shared libraries built by EGCS 1.0 that
   22536        contain C++ code (upgrade to 1.0.1 and use that).
   22537      * Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
   22538        The x86 changes fix code generation errors exposed when building
   22539        glibc2 and the usual GNU/Linux dynamic linker (ld.so).
   22540        The hppa change fixes a compiler abort when configured for use with
   22541        RTEMS.
   22542        The MIPS changes fix problems with the definition of LONG_MAX on
   22543        newer systems, allow for command line selection of the target ABI,
   22544        and fix one code generation problem.
   22545        The rs6000/ppc change fixes some problems with passing structures
   22546        to varargs/stdarg functions.
   22547      * A few machine independent bugfixes, mostly to fix code generation
   22548        errors when building Linux kernels or glibc.
   22549      * Fix a few critical exception handling and template bugs in the C++
   22550        compiler.
   22551      * Fix Fortran namelist bug on alphas.
   22552      * Fix build problems on x86-solaris systems.
   22553 
   22554    EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
   22555    serious problems in EGCS 1.0.1.
   22556      * General improvements and fixes
   22557           + Memory consumption significantly reduced, especially for
   22558             templates and inline functions.
   22559           + Fix various problems with glibc2.1.
   22560           + Fix loop optimization bug exposed by rs6000/ppc port.
   22561           + Fix to avoid potential code generation problems in jump.c.
   22562           + Fix some undefined symbol problems in dwarf1 debug support.
   22563      * g++/libstdc++ improvements and fixes
   22564           + libstdc++ in the EGCS release has been updated and should be
   22565             link compatible with libstdc++-2.8.
   22566           + Various fixes in libio/libstdc++ to work better on GNU/Linux
   22567             systems.
   22568           + Fix problems with duplicate symbols on systems that do not
   22569             support weak symbols.
   22570           + Memory corruption bug and undefined symbols in bastring have
   22571             been fixed.
   22572           + Various exception handling fixes.
   22573           + Fix compiler abort for very long thunk names.
   22574      * g77 improvements and fixes
   22575           + Fix compiler crash for omitted bound in Fortran CASE
   22576             statement.
   22577           + Add missing entries to g77 lang-options.
   22578           + Fix problem with -fpedantic in the g77 compiler.
   22579           + Fix "backspace" problem with g77 on alphas.
   22580           + Fix x86 back end problem with Fortran literals and -fpic.
   22581           + Fix some of the problems with negative subscripts for g77 on
   22582             alphas.
   22583           + Fixes for Fortran builds on cygwin32/mingw32.
   22584      * platform specific improvements and fixes
   22585           + Fix long double problems on x86 (exposed by glibc).
   22586           + x86 ports define i386 again to keep imake happy.
   22587           + Fix exception handling support on NetBSD ports.
   22588           + Several changes to collect2 to fix many problems with AIX.
   22589           + Define __ELF__ for GNU/Linux on rs6000.
   22590           + Fix -mcall-linux problem on GNU/Linux on rs6000.
   22591           + Fix stdarg/vararg problem for GNU/Linux on rs6000.
   22592           + Allow autoconf to select a proper install problem on AIX 3.1.
   22593           + m68k port support includes -mcpu32 option as well as cpu32
   22594             multilibs.
   22595           + Fix stdarg bug for irix6.
   22596           + Allow EGCS to build on irix5 without the gnu assembler.
   22597           + Fix problem with static linking on sco5.
   22598           + Fix bootstrap on sco5 with native compiler.
   22599           + Fix for abort building newlib on H8 target.
   22600           + Fix fixincludes handling of math.h on SunOS.
   22601           + Minor fix for Motorola 3300 m68k systems.
   22602 
   22603    EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
   22604    problems reported by Red Hat for builds of Red Hat 5.1.
   22605      * Generic bugfixes:
   22606           + Fix a typo in the libio library which resulted in incorrect
   22607             behavior of istream::get.
   22608           + Fix the Fortran negative array index problem.
   22609           + Fix a major problem with the ObjC runtime thread support
   22610             exposed by glibc2.
   22611           + Reduce memory consumption of the Haifa scheduler.
   22612      * Target specific bugfixes:
   22613           + Fix one x86 floating point code generation bug exposed by
   22614             glibc2 builds.
   22615           + Fix one x86 internal compiler error exposed by glibc2 builds.
   22616           + Fix profiling bugs on the Alpha.
   22617           + Fix ImageMagick & emacs 20.2 build problems on the Alpha.
   22618           + Fix rs6000/ppc bug when converting values from integer types
   22619             to floating point types.
   22620 
   22621    The EGCS 1.0 releases include installation instructions in both HTML
   22622    and plaintext forms (see the INSTALL directory in the toplevel
   22623    directory of the distribution). However, we also keep the most up to
   22624    date installation instructions and [2]build/test status on our web
   22625    page. We will update those pages as new information becomes available.
   22626 
   22627    And, we can't in good conscience fail to mention some [3]caveats to
   22628    using EGCS.
   22629 
   22630    Update: Big thanks to Stanford for providing a high speed link for
   22631    downloading EGCS (go.cygnus.com)!
   22632 
   22633    Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com
   22634    (USA California -- High speed link provided by Stanford).
   22635 
   22636    The EGCS 1.0 release is also available many mirror sites.
   22637    [4]Goto mirror list to find a closer site
   22638 
   22639    We'd like to thank the numerous people that have contributed new
   22640    features, test results, bugfixes, etc. Unfortunately, they're far too
   22641    numerous to mention by name.
   22642 
   22643 
   22644     For questions related to the use of GCC, please consult these web
   22645     pages and the [5]GCC manuals. If that fails, the
   22646     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22647     web pages and the development of GCC are welcome on our developer
   22648     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   22649 
   22650    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   22651    distribution of this entire article is permitted in any medium,
   22652    provided this notice is preserved.
   22653 
   22654    These pages are [10]maintained by the GCC team. Last modified
   22655    2023-09-02.
   22656 
   22657 References
   22658 
   22659    1. https://gcc.gnu.org/egcs-1.0/features.html
   22660    2. https://gcc.gnu.org/egcs-1.0/buildstat.html
   22661    3. https://gcc.gnu.org/egcs-1.0/caveats.html
   22662    4. https://gcc.gnu.org/mirrors.html
   22663    5. https://gcc.gnu.org/onlinedocs/
   22664    6. mailto:gcc-help (a] gcc.gnu.org
   22665    7. mailto:gcc (a] gcc.gnu.org
   22666    8. https://gcc.gnu.org/lists.html
   22667    9. https://www.fsf.org/
   22668   10. https://gcc.gnu.org/about.html
   22669 ======================================================================
   22670 http://gcc.gnu.org/egcs-1.0/features.html
   22671                                EGCS 1.0 features
   22672 
   22673      * Core compiler is based on the gcc2 development tree from Aug 2,
   22674        1997, so we have most of the [1]features found in GCC 2.8.
   22675      * Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
   22676      * Vast improvements in the C++ compiler; so many they have [2]page of
   22677        their own!
   22678      * Integrated C++ runtime libraries, including support for most major
   22679        GNU/Linux systems!
   22680      * New instruction scheduler from IBM Haifa which includes support for
   22681        function wide instruction scheduling as well as superscalar
   22682        scheduling.
   22683      * Significantly improved alias analysis code.
   22684      * Improved register allocation for two address machines.
   22685      * Significant code generation improvements for Fortran code on
   22686        Alphas.
   22687      * Various optimizations from the g77 project as well as improved loop
   22688        optimizations.
   22689      * Dwarf2 debug format support for some targets.
   22690      * egcs libstdc++ includes the SGI STL implementation without changes.
   22691      * As a result of these and other changes, egcs libstc++ is not binary
   22692        compatible with previous releases of libstdc++.
   22693      * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The SCO
   22694        Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 and
   22695        1.1), Support for RTEMS on several embedded targets, Support for
   22696        arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
   22697        MN103, NEC V850, Sparclet, Solaris & GNU/Linux on PowerPCs, etc.
   22698      * Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
   22699      * RS6000/PowerPC ports generate code which can run on all
   22700        RS6000/PowerPC variants by default.
   22701      * -mcpu= and -march= switches for the x86 port to allow better
   22702        control over how the x86 port generates code.
   22703      * Includes the template repository patch (aka repo patch); note the
   22704        new template code makes repo obsolete for ELF systems using gnu-ld
   22705        such as GNU/Linux.
   22706      * Plus the usual assortment of bugfixes and improvements.
   22707 
   22708 
   22709     For questions related to the use of GCC, please consult these web
   22710     pages and the [3]GCC manuals. If that fails, the
   22711     [4]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22712     web pages and the development of GCC are welcome on our developer
   22713     list at [5]gcc (a] gcc.gnu.org. All of [6]our lists have public archives.
   22714 
   22715    Copyright (C) [7]Free Software Foundation, Inc. Verbatim copying and
   22716    distribution of this entire article is permitted in any medium,
   22717    provided this notice is preserved.
   22718 
   22719    These pages are [8]maintained by the GCC team. Last modified
   22720    2022-10-26.
   22721 
   22722 References
   22723 
   22724    1. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   22725    2. https://gcc.gnu.org/egcs-1.0/c++features.html
   22726    3. https://gcc.gnu.org/onlinedocs/
   22727    4. mailto:gcc-help (a] gcc.gnu.org
   22728    5. mailto:gcc (a] gcc.gnu.org
   22729    6. https://gcc.gnu.org/lists.html
   22730    7. https://www.fsf.org/
   22731    8. https://gcc.gnu.org/about.html
   22732 ======================================================================
   22733 http://gcc.gnu.org/egcs-1.0/caveats.html
   22734                                 EGCS 1.0 Caveats
   22735 
   22736      * EGCS has an integrated libstdc++, but does not have an integrated
   22737        libg++. Furthermore old libg++ releases will not work with egc; HJ
   22738        Lu has made a libg++-2.8.1.2 available which may work with EGCS.
   22739        Note most C++ programs only need libstdc++.
   22740      * Note that using -pedantic or -Wreturn-type can cause an explosion
   22741        in the amount of memory needed for template-heavy C++ code, such as
   22742        code that uses STL. Also note that -Wall includes -Wreturn-type, so
   22743        if you use -Wall you will need to specify -Wno-return-type to turn
   22744        it off.
   22745      * Exception handling may not work with shared libraries, particularly
   22746        on alphas, hppas, and mips based platforms. Exception handling is
   22747        known to work on x86-linux platforms with shared libraries.
   22748      * Some versions of the Linux kernel have bugs which prevent them from
   22749        being compiled or from running when compiled by EGCS. See the FAQ
   22750        (as shipped with EGCS 1.0) for additional information.
   22751      * In general, EGCS is more rigorous about rejecting invalid C++ code
   22752        or deprecated C++ constructs than G++ 2.7. As a result it may be
   22753        necessary to fix C++ code before it will compile with EGCS.
   22754      * G++ is also aggressively tracking the C++ standard; as a result
   22755        code which was previously valid (and thus accepted by other
   22756        compilers and older versions of G++) may no longer be accepted.
   22757      * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
   22758        1.0.x and later releases should work with Red Hat Linux 5.0.
   22759 
   22760 
   22761     For questions related to the use of GCC, please consult these web
   22762     pages and the [1]GCC manuals. If that fails, the
   22763     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22764     web pages and the development of GCC are welcome on our developer
   22765     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   22766 
   22767    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   22768    distribution of this entire article is permitted in any medium,
   22769    provided this notice is preserved.
   22770 
   22771    These pages are [6]maintained by the GCC team. Last modified
   22772    2022-10-26.
   22773 
   22774 References
   22775 
   22776    1. https://gcc.gnu.org/onlinedocs/
   22777    2. mailto:gcc-help (a] gcc.gnu.org
   22778    3. mailto:gcc (a] gcc.gnu.org
   22779    4. https://gcc.gnu.org/lists.html
   22780    5. https://www.fsf.org/
   22781    6. https://gcc.gnu.org/about.html
   22782 ======================================================================
   22783