Home | History | Annotate | Line # | Download | only in dist
      1 This file contains information about GCC releases which has been generated
      2 automatically from the online release notes.  It covers releases of GCC
      3 (and the former EGCS project) since EGCS 1.0, on the line of development
      4 that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
      5 see ONEWS.
      6 
      7 ======================================================================
      8 http://gcc.gnu.org/gcc-14/index.html
      9                              GCC 14 Release Series
     10 
     11    June 26, 2026
     12 
     13    The GCC developers are pleased to announce the release of GCC 14.4.
     14 
     15    This release is a bug-fix release, containing fixes for regressions in
     16    GCC 14.3 relative to previous releases of GCC.
     17 
     18 Release History
     19 
     20    GCC 14.4
     21           Jun 23, 2026 ([1]changes, [2]documentation)
     22 
     23    GCC 14.3
     24           May 23, 2025 ([3]changes, [4]documentation)
     25 
     26    GCC 14.2
     27           Aug 1, 2024 ([5]changes, [6]documentation)
     28 
     29    GCC 14.1
     30           May 7, 2024 ([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    2026-06-26.
     63 
     64 References
     65 
     66    1. https://gcc.gnu.org/gcc-14/changes.html
     67    2. https://gcc.gnu.org/onlinedocs/14.4.0/
     68    3. https://gcc.gnu.org/gcc-14/changes.html
     69    4. https://gcc.gnu.org/onlinedocs/14.3.0/
     70    5. https://gcc.gnu.org/gcc-14/changes.html
     71    6. https://gcc.gnu.org/onlinedocs/14.2.0/
     72    7. https://gcc.gnu.org/gcc-14/changes.html
     73    8. https://gcc.gnu.org/onlinedocs/14.1.0/
     74    9. https://gcc.gnu.org/onlinedocs/gcc-14.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-14/changes.html
     87                              GCC 14 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 14. You may also want to check out our [1]Porting
     92    to GCC 14 page and the [2]full GCC documentation.
     93 
     94 Caveats
     95 
     96      * C: Support for the GCC extension, a structure containing a C99
     97        flexible array member, or a union containing such a structure, is
     98        not the last field of another structure, is deprecated. Refer to
     99        [3]Zero Length Arrays. Any code relying on this extension should be
    100        modified to ensure that C99 flexible array members only end up at
    101        the ends of structures. Please use the warning option
    102        [4]-Wflex-array-member-not-at-end to identify all such cases in the
    103        source code and modify them.
    104      * C: Certain warnings about are now errors, see [5]Porting to GCC 14
    105        for details.
    106      * [6]-fcf-protection=[full|branch|return|none|check] has been
    107        refactored. To override -fcf-protection with a more specific
    108        setting, add -fcf-protection=none followed by a specific
    109        -fcf-protection=xxx.
    110      * Support for the ia64*-*- target ports which have been unmaintained
    111        for quite a while has been declared obsolete in GCC 14. The next
    112        release of GCC will have their sources permanently removed.
    113      * Support for the nios2*-*- target ports has also been declared
    114        obsolete in GCC 14, and the sources will also be removed in the
    115        next release of GCC.
    116      * [7]-fanalyzer is still only suitable for analyzing C code. In
    117        particular, using it on C++ is unlikely to give meaningful output.
    118 
    119 [8]General Improvements
    120 
    121      * For offload-device code generated via OpenMP and OpenACC, the math
    122        and the Fortran runtime libraries will now automatically be linked,
    123        when the user or compiler links them on the host side. Thus, it is
    124        no longer required to explicitly pass -lm and/or -lgfortran to the
    125        offload-device linker using the [9]-foffload-options= flag.
    126      * New configure options: --enable-host-pie, to build the compiler
    127        executables as PIE; and --enable-host-bind-now, to link the
    128        compiler executables with -Wl,-z,now in order to enable additional
    129        hardening.
    130      * New option [10]-fhardened, an umbrella option that enables a set of
    131        hardening flags. The options it enables can be displayed using the
    132        --help=hardened option.
    133      * New option [11]-fharden-control-flow-redundancy, to verify, at the
    134        end of functions, that the visited basic blocks correspond to a
    135        legitimate execution path, so as to detect and prevent attacks that
    136        transfer control into the middle of functions.
    137      * New type attribute [12]hardbool, for C and Ada. Hardened booleans
    138        take user-specified representations for true and false, presumably
    139        with higher hamming distance than standard booleans, and get
    140        verified at every use, detecting memory corruption and some
    141        malicious attacks.
    142      * New type attribute [13]strub to control stack scrubbing properties
    143        of functions and variables. The stack frame used by functions
    144        marked with the attribute gets zeroed-out upon returning or
    145        exception escaping. Scalar variables marked with the attribute
    146        cause functions containing or accessing them to get stack scrubbing
    147        enabled implicitly.
    148      * New option [14]-finline-stringops, to force inline expansion of
    149        memcmp, memcpy, memmove and memset, even when that is not an
    150        optimization, to avoid relying on library implementations.
    151      * New option [15]-ftrampoline-impl=, to choose the placement of
    152        generated trampolines. The default remains the stack for almost all
    153        targets. To override the default, -ftrampoline-impl=heap can be
    154        passed on supported ABIs (x86_64 Darwin, x86_64 and aarch64 Linux).
    155      * New function attribute [16]null_terminated_string_arg(PARAM_IDX)
    156        for indicating parameters that are expected to be null-terminated
    157        strings.
    158      * The vectorizer now supports vectorizing loops which contain any
    159        number of early breaks. This means loops such as:
    160             int z[100], y[100], x[100];
    161             int foo (int n)
    162             {
    163               int res = 0;
    164               for (int i = 0; i < n; i++)
    165                 {
    166                    y[i] = x[i] * 2;
    167                    res += x[i] + y[i];
    168 
    169                    if (x[i] > 5)
    170                      break;
    171 
    172                    if (z[i] > 5)
    173                      break;
    174 
    175                 }
    176               return res;
    177             }
    178 
    179        can now be vectorized on a number of targets. In this first version
    180        any input data sources must either have a statically known size at
    181        compile time or the vectorizer must be able to determine based on
    182        auxiliary information that the accesses are aligned.
    183 
    184 [17]New Languages and Language specific improvements
    185 
    186      * [18]OpenMP
    187           + The [19]GNU Offloading and Multi Processing Runtime Library
    188             Manual has been updated and extended, improving especially the
    189             description of ICVs, memory allocation, environment variables
    190             and OpenMP routines.
    191           + The requires directive's unified_address requirement is now
    192             fulfilled by both AMD GCN and nvptx devices. AMD GCN and nvptx
    193             devices now support low-latency allocators as [20]detailed in
    194             the manual. Initial support for pinned-memory allocators has
    195             been added and, on Linux, [21]libnuma is now used for
    196             allocators requesting the nearest-partition trait (both is
    197             described in the [22]memory allocation section of the manual).
    198           + OpenMP 5.0: The allocate directive is now supported for stack
    199             variables in C and Fortran, including the OpenMP 5.1 align
    200             modifier. In C and C++ the map clause now accepts lvalue
    201             expressions. For Fortran, OpenMP allocators can now be used
    202             for allocatables and pointers using the allocate directive and
    203             its OpenMP 5.2 replacement, the allocators directive; files
    204             using this allocator and all files that might directly or
    205             indirectly (intrinsic assignment, intent(out), ...) de- or
    206             reallocate such-allocated variables must be compiled with the
    207             [23]-fopenmp-allocators option.
    208           + OpenMP 5.1: Support was added for collapsing imperfectly
    209             nested loops and using present as map-type modifier and in
    210             defaultmap. The indirect clause is now supported. The
    211             performance of copying strided data from or to nvptx and AMD
    212             GPU devices using the OpenMP 5.1 routine
    213             omp_target_memcpy_rect has been improved.
    214           + OpenMP 5.2: The OMP_TARGET_OFFLOAD=mandatory handling has been
    215             updated for the clarifications and changes of the 5.2
    216             specification. For Fortran, the list of directives permitted
    217             in Fortran pure procedures was extended. Additionally, the
    218             spec change has been implemented for default implicit mapping
    219             of C/C++ pointers pointing to unmapped storage. The destroy
    220             clause now optionally accepts the depend object as argument.
    221           + OpenMP 6.0 preview (TR11/TR12): The decl attribute is now
    222             supported in C++ 11 and the directive, sequence and decl
    223             attributes are now supported in C 23.
    224      * [24]OpenACC
    225           + OpenACC 2.7: The self clause was added to be used on compute
    226             constructs and the default clause for data constructs.
    227             Additionally, the readonly modifier is now handled in the
    228             copyin clause and cache directive.
    229           + OpenACC 3.2: The following API routines are now available in
    230             Fortran using the openacc module or the openacc_lib.h header
    231             file: acc_malloc, acc_free, acc_map_data, acc_unmap_data,
    232             acc_deviceptr, acc_hostptr, acc_memcpy_to_device,
    233             acc_memcpy_to_device_async, acc_memcpy_from_device, and
    234             acc_memcpy_from_device_async.
    235 
    236   [25]Ada
    237 
    238      * New implementation-defined aspects and pragmas:
    239           + [26]Local_Restrictions, which specifies that a particular
    240             subprogram does not violate one or more local restrictions,
    241             nor can it call a subprogram that is not subject to the same
    242             requirements.
    243           + [27]User_Aspect_Definition and [28]User_Aspect, which provide
    244             a mechanism for avoiding textual duplication if some set of
    245             aspect specifications is needed in multiple places.
    246      * New implementation-defined aspects and pragmas for verification of
    247        the SPARK 2014 subset of Ada:
    248           + [29]Always_Terminates, which provides a condition for a
    249             subprogram to necessarily complete (either return normally or
    250             raise an exception).
    251           + [30]Ghost_Predicate, which introduces a subtype predicate that
    252             can reference Ghost entities.
    253           + [31]Exceptional_Cases, which lists exceptions that might be
    254             propagated by the subprogram with side effects in the context
    255             of its precondition and associates them with a specific
    256             postcondition.
    257           + [32]Side_Effects, which indicates that a function should be
    258             handled like a procedure with respect to parameter modes,
    259             Global contract, exceptional contract and termination: it may
    260             have output parameters, write global variables, raise
    261             exceptions and not terminate.
    262      * The new attributes and contracts have been applied to the relevant
    263        parts of the Ada runtime library, which has been subsequently
    264        proven to be correct with SPARK 2014.
    265      * Support for the LoongArch architecture.
    266      * Support for VxWorks 7 Cert RTP has been removed.
    267      * Additional hardening improvements. For more information related to
    268        hardening options, refer to the [33]GCC Instrumentation Options and
    269        the [34]GNAT Reference Manual, Security and Hardening Features.
    270      * Improve style checking for redundant parentheses with [35]-gnatyz
    271      * New switch [36]-gnateH to force reverse Bit_Order threshold to 64.
    272      * Experimental features:
    273           + [37]Storage Model: this feature proposes to redesign the
    274             concepts of Storage Pools into a more efficient model allowing
    275             higher performance and easier integration with low footprint
    276             embedded runtimes.
    277           + [38]String Interpolation: allows for easier string formatting.
    278      * [39]Fixed lower bound [40][RFC] : Unconstrained array types and
    279        subtypes can be specified with a lower bound that is fixed to a
    280        certain value, by writing an index range that uses the syntax
    281        <lower-bound-expression> .. <>. This guarantees that all objects of
    282        the type or subtype will have the specified lower bound.
    283      * Further clean up and improvements to the GNAT code.
    284 
    285   [41]C family
    286 
    287      * The Clang language extensions __has_feature and __has_extension
    288        have been implemented in GCC. These are available from C, C++, and
    289        Objective-C(++). This is primarily intended to aid the portability
    290        of code written against Clang.
    291      * GCC supports a new pragma #pragma GCC novector to indicate to the
    292        vectorizer not to vectorize the loop annotated with the pragma.
    293 
    294   [42]C
    295 
    296      * Some more C23 features have been implemented:
    297           + Bit-precise integer types (_BitInt (N) and unsigned _BitInt
    298             (N)): integer types with a specified number of bits. These are
    299             only supported on IA-32, x86-64 and AArch64 (little-endian) at
    300             present.
    301           + Structure, union and enumeration types may be defined more
    302             than once in the same scope with the same contents and the
    303             same tag; if such types are defined with the same contents and
    304             the same tag in different scopes, the types are compatible.
    305           + The <stdckdint.h> header for checked integer arithmetic.
    306      * In addition to those C23 features, there are new command-line
    307        options -std=c23, -std=gnu23 and -Wc11-c23-compat. These are
    308        equivalent to the previous options -std=c2x, -std=gnu2x and
    309        -Wc11-c2x-compat, which are deprecated but remain supported.
    310 
    311   [43]C++
    312 
    313      * Several C++26 features have been implemented:
    314           + [44]P1854R4, Making non-encodable string literals ill-formed
    315             ([45]PR110341)
    316           + [46]P2752R3, Static storage for braced initializers
    317             ([47]PR110346)
    318           + [48]P2361R6, Unevaluated strings ([49]PR110342)
    319           + [50]P2738R1, constexpr cast from void* ([51]PR110344)
    320           + [52]P2741R3, User-generated static_assert messages
    321             ([53]PR110348)
    322           + [54]P2169R4, Placeholder variables with no name ([55]PR110349)
    323           + [56]P2864R2, Removing deprecated arithmetic conversion on
    324             enumerations
    325           + [57]P2748R5, Disallow binding a returned reference to a
    326             temporary ([58]PR114455)
    327           + [59]P2809R3, Trivial infinite loops are not undefined behavior
    328             ([60]PR114462)
    329      * Several C++23 features have been implemented:
    330           + [61]P0847R7, Deducing this ([62]PR102609)
    331           + [63]P2280R4, Using unknown references in constant expressions
    332             ([64]PR106650)
    333           + [65]P2564R3, consteval needs to propagate up ([66]PR107687)
    334           + [67]P2582R1, Class template argument deduction from inherited
    335             constructors ([68]PR106653)
    336      * Several C++ Defect Reports have been resolved, e.g.:
    337           + [69]DR 532, Member/nonmember operator template partial
    338             ordering
    339           + [70]DR 976, Deduction for const T& conversion operators
    340           + [71]DR 2262, Attributes for asm-definition
    341           + [72]DR 2359, Unintended copy initialization with designated
    342             initializers
    343           + [73]DR 2386, tuple_size requirements for structured binding
    344           + [74]DR 2406, [[fallthrough]] attribute and iteration
    345             statements
    346           + [75]DR 2543, constinit and optimized dynamic initialization
    347           + [76]DR 2586, Explicit object parameter for assignment and
    348             comparison
    349           + [77]DR 2735, List-initialization and conversions in overload
    350             resolution
    351           + [78]DR 2799, Inheriting default constructors
    352      * When a diagnostic occurs involving a C++ template, GCC will now
    353        quote the source code of the context at which the template is
    354        instantiated ("required from here"), rather than just print
    355        filename and line/column numbers.
    356      * New built-in __type_pack_element to speed up traits such as
    357        std::tuple_element ([79]PR100157)
    358      * goto can cross the initialization of a trivially initialized object
    359        with a non-trivial destructor ([80]DR 2256)
    360      * -Wdangling-reference false positives have been reduced. The warning
    361        does not warn about std::span-like classes; there is also a new
    362        attribute gnu::no_dangling to suppress the warning. See [81]the
    363        manual for more info.
    364      * noexcept(expr) is now mangled as per the Itanium ABI
    365      * the named return value optimization can now be performed even for
    366        variables declared in an inner block of a function, see the
    367        [82]test
    368      * New -Wnrvo warning, to warn if the named return value optimization
    369        is not performed although it is allowed by [class.copy.elision].
    370        See [83]the manual for more info.
    371      * The backing array for std::initializer_list has been made static,
    372        allowing combining multiple equivalent initializer-lists ([84]git)
    373      * New -Welaborated-enum-base warning, to warn if an additional
    374        enum-base is used in an elaborated-type-specifier
    375      * Better #include hints for missing headers ([85]PR110164)
    376      * The arguments of a variable template-id are coerced earlier than
    377        before, so various problems are detected earlier ([86]PR89442)
    378      * -Wmissing-field-initializers is no longer emitted for empty classes
    379        ([87]PR110064)
    380      * The constexpr code now tracks lifetimes in constant evaluation;
    381        this change helps to detect bugs such as accessing a variable whose
    382        lifetime has ended ([88]PR70331, [89]PR96630, [90]PR98675)
    383      * Array destruction can now be devirtualized
    384      * In-class member variable template partial specializations are now
    385        accepted ([91]PR71954)
    386      * Improved diagnostic for explicit conversion functions: when a
    387        conversion doesn't work out only because the conversion function
    388        necessary to do the conversion couldn't be used because it was
    389        marked explicit, explain that to the user ([92]git)
    390      * Corrected mangling of static/thread_local structured bindings at
    391        function/block scope ([93]PR111069)
    392      * [basic.scope.block]/2 violations are detected even in compound-stmt
    393        of function-try-block and for block-scope external variables
    394        ([94]PR52953)
    395      * Improved "not a constant expression" diagnostic when taking the
    396        address of a non-static constexpr variable ([95]PR91483)
    397      * Non-dependent simple assignments are checked even in templates
    398        ([96]PR18474)
    399      * Attributes hot and cold can be applied to classes as well. See
    400        [97]the manual for more info.
    401      * Function template constraints, as well as CTAD placeholders, are
    402        now mangled
    403      * Various decltype fixes: [98]PR79620, [99]PR79378, [100]PR83167,
    404        [101]PR96917
    405      * New option -fdiagnostics-all-candidates to note all candidates
    406        during overload resolution failure
    407      * -Walloc-size and -Wcalloc-transposed-args warnings are enabled for
    408        C++ as well
    409      * The DR 2237 code no longer gives an error, it emits a
    410        -Wtemplate-id-cdtor warning instead
    411      * C++ module scanning for named modules is now available, based on
    412        the format described in [102]P1689R5, Format for describing
    413        dependencies of source files. The -fdeps-format=, -fdeps-file=, and
    414        -fdeps-target= flags may be used to generate dependency
    415        information. In GCC 14 p1689r5 is the only valid argument for
    416        -fdeps-format=.
    417 
    418     [103]Runtime Library (libstdc++)
    419 
    420      * The libstdc++exp.a library now includes all the Filesystem TS
    421        symbols from the libstdc++fs.a library. The experimental symbols
    422        for the C++23 std::stacktrace class are also in libstdc++exp.a,
    423        replacing the libstdc++_libbacktrace.a library that GCC 13
    424        provides. This means that -lstdc++exp is the only library needed
    425        for all experimental libstdc++ features.
    426      * Improved experimental support for C++20, including:
    427           + std::chrono::parse.
    428           + Unicode-aware string handling in std::format.
    429      * Improved experimental support for C++23, including:
    430           + The std::ranges::to function for converting ranges to
    431             containers.
    432           + The std::generator view for getting results from coroutines.
    433           + The <stacktrace> header is supported by default.
    434           + std::print and std::println (requires linking with -lstdc++exp
    435             on Windows).
    436           + Formatters for std::thread::id and std::stacktrace.
    437           + Smart pointer adaptors, std::out_ptr and std::inout_ptr.
    438           + Some range adaptors now support move-only types.
    439      * Experimental support for C++26, including:
    440           + Native handles for filebuf, fstream, etc.
    441           + Functions for saturation arithmetic on integers.
    442           + std::to_string now uses std::format.
    443           + Enhanced formatting of pointers with std::format.
    444           + The std::runtime_format function to allow using non-literal
    445             format strings with std::format.
    446           + Testable result types for <charconv> functions.
    447           + The std::text_encoding class for identifying character sets
    448             (requires linking with -lstdc++exp for some member functions).
    449      * Faster numeric conversions using std::to_string and
    450        std::to_wstring.
    451      * Updated parallel algorithms that are compatible with oneTBB.
    452      * std::numeric_limits<_Float32> and std::numeric_limits<_Float64> are
    453        now defined for all standard modes, not only for C++23.
    454      * Added missing functions for float and long double to <cmath>.
    455      * Using the std::setfill manipulator with std::istream is deprecated.
    456 
    457   [104]D
    458 
    459      * Support for the D programming language has been updated to version
    460        2.108.1 of the language and run-time library. Full changelog for
    461        this release and previous releases can be found on the
    462        [105]dlang.org website.
    463 
    464   [106]Fortran
    465 
    466      * The compiler now accepts the -std=f2023 option, which has been
    467        added in preparation of support of Fortran 2023. This option
    468        increases the line-length limit for source in free-form to 10000,
    469        and statements may have up to 1 million characters.
    470      * With the -save-temps option, preprocessed files with the .fii
    471        extension will be generated from free-form source files such as
    472        .F90 and .fi from fixed-form files such as .F.
    473 
    474   [107]Modula-2
    475 
    476      * The automatic dependency generation options: -M, -MD, -MF, -MMD,
    477        -MP, -MQ and -MT have been implemented in the compiler.
    478      * The -Wcase-enum and -Wuninit-variable-checking= options have been
    479        implemented to provide compile-time warnings against missing case
    480        clauses and uninitialized variables respectively.
    481 
    482   [108]Rust
    483 
    484      * Experimental support for the Rust programming language has been
    485        added. The compiler is incomplete, but already supports a subset of
    486        the Rust programming language. The frontend does not support
    487        compiling the Rust standard library, so it cannot be used for most
    488        real-world Rust code yet. However, you can experiment with the
    489        compiler to run Rust code on #[no_core] targets.
    490 
    491 [109]libgccjit
    492 
    493      * The libgccjit API gained 6 new entry points:
    494           + [110]gcc_jit_type_get_restrict for adding restrict to types
    495             ([111]LIBGCCJIT_ABI_25).
    496           + 4 functions for setting attributes on functions and variables
    497             ([112]LIBGCCJIT_ABI_26):
    498                o gcc_jit_function_add_attribute
    499                o gcc_jit_function_add_string_attribute
    500                o gcc_jit_function_add_integer_array_attribute
    501                o gcc_jit_lvalue_add_string_attribute
    502           + [113]gcc_jit_context_new_sizeof for accessing the size of a
    503             type ([114]LIBGCCJIT_ABI_27).
    504 
    505 [115]New Targets and Target Specific Improvements
    506 
    507   [116]AArch64
    508 
    509      * A number of new CPUs are supported through the -mcpu and -mtune
    510        options (GCC identifiers in parentheses).
    511           + Ampere-1B (ampere1b).
    512           + Arm Cortex-A520 (cortex-a520).
    513           + Arm Cortex-A720 (cortex-a720).
    514           + Arm Cortex-X4 (cortex-x4).
    515           + Microsoft Cobalt-100 (cobalt-100).
    516      * Additionally, the identifiers generic, generic-armv8-a and
    517        generic-armv9-a can be used to optimize code generation for a good
    518        blend of CPUs of a particular architecture version. These tunings
    519        are also used as the default optimization targets when compiling
    520        with the -march=armv8-a or -march=armv9-a options and their point
    521        releases e.g. -march=armv8.2-a or -march=armv9.3-a.
    522      * New features in the Arm architecture are supported in a number of
    523        ways:
    524           + Support is added for the Arm Streaming Matrix Extensions SME
    525             and SME2 through the +sme and +sme2 extensions to -march=. In
    526             particular, this includes support for the Beta state of the
    527             [117]SME ACLE in the form of a new intrinsics arm_sme.h
    528             intrinsics header and a number of new keyword attributes to
    529             manage use of the new Streaming SVE state. For more
    530             information please refer to the ACLE documentation.
    531           + Libatomic is updated to implement 128-bit atomic operations
    532             locklessly on systems with FEAT_LSE2.
    533           + Support for FEAT_LRCPC3 is added through ACLE intrinsics in
    534             arm_neon.h header and enabled through the +rcpc3 extension to
    535             -march=.
    536      * As well as numerous AArch64 code generation improvements, the
    537        following optimization enhancements are noteworthy:
    538           + A new AArch64-specific register allocation pass is added. It
    539             runs in addition to standard register allocation. The pass's
    540             main purpose is to make use of strided vector register
    541             operands in SME instructions. However, it can also remove
    542             redundant moves in normal Advanced SIMD and SVE code. The pass
    543             is controlled by the new option -mearly-ra= that takes the
    544             arguments all, strided, none. -mearly-ra=all is enabled by
    545             default at optimization levels -O2 and above.
    546           + A new optimization pass to fuse loads and stores to adjacent
    547             memory locations into load and store-pair AArch64
    548             instructions. The pass is enabled by default when compiling
    549             with optimization and runs twice in the optimization pipeline:
    550             before and after register allocation. This can be controlled
    551             with the options -mearly-ldp-fusion and -mlate-ldp-fusion.
    552      * Conformance with the ACLE specification is improved and a number of
    553        features aimed at helping developers deploy Arm architecture
    554        features are added:
    555           + Support for the Beta version of the [118]Function
    556             Multiversioning Specification. This feature provides
    557             facilities to annotate functions with attributes that allow
    558             the compiler to generate multiple versions of the function,
    559             selected at runtime based on the architecture features
    560             available in the system. Please refer to the ACLE
    561             specification for more details.
    562           + Support for more ACLE intrinsics in the arm_acle.h header,
    563             including the [119]Memory prefetch intrinsics and the
    564             [120]Special register intrinsics. This also includes
    565             intrinsics for the extension to 128-bit system registers,
    566             enabled through the +d128 extension to -march=.
    567           + Intrinsics enabled by the +dotprod, +fp16, +fp16fml, +i8mm,
    568             +sha3 and +sm4 extensions to -march= no longer require
    569             -march=armv8.2-a or higher to be specified. Likewise, the
    570             intrinsics enabled by +memtag no longer require
    571             -march=armv8.5-a.
    572           + Support for the [121]NEON-SVE Bridge intrinsics. These are
    573             intrinsics that allow conversions between NEON and SVE
    574             vectors, enabled through the inclusion of the
    575             arm_neon_sve_bridge.h header.
    576      * The option -mtp= is now supported for changing the TPIDR register
    577        used for TLS accesses. For more details please refer to the
    578        [122]documentation.
    579 
    580   [123]AMD Radeon (GCN)
    581 
    582      * Initial support for the AMD Radeon gfx90c (GCN5), gfx1030, gfx1036
    583        (RDNA2), gfx1100 and gfx1103 (RDNA3) devices has been added. LLVM
    584        15+ (assembler and linker) is [124]required to support GFX11.
    585      * Improved register usage and performance on CDNA Instinct MI100 and
    586        MI200 series devices.
    587      * The default device architecture is now gfx900 (Vega).
    588      * Fiji (gfx803) device support is now deprecated and will be removed
    589        from a future release. The default compiler configuration no longer
    590        uses Fiji as the default device, and no longer includes the Fiji
    591        libraries. Both can be restored by configuring with
    592        [125]--with-arch=fiji .
    593 
    594   [126]arm
    595 
    596      * The Cortex-M52 CPU is now supported through the cortex-m52 argument
    597        to the -mcpu and -mtune options.
    598 
    599   [127]AVR
    600 
    601      * On AVR64* and AVR128* devices, read-only data is now located in
    602        program memory per default and no longer in RAM.
    603           + Only a 32 KiB block of program memory can be used to store and
    604             access .rodata in that way. Which block is used can be
    605             selected by defining the symbol __flmap. As an alternative,
    606             the byte address of the block can be specified by the symbol
    607             __RODATA_FLASH_START__ which takes precedence over __flmap.
    608             For example, linking with
    609             -Wl,--defsym,__RODATA_FLASH_START__=32k chooses the second
    610             32 KiB block.
    611           + The default uses the last 32 KiB block, which is also the
    612             hardware default for bit-field NVMCTRL_CTRLB.FLMAP.
    613           + When a non-default block is used, then NVMCTRL_CTRLB.FLMAP
    614             must be initialized accordingly by hand, or AVR-LibC v2.2 that
    615             implements [128]#931 can be used. The latter initializes
    616             NVMCTRL_CTRLB.FLMAP in the startup code and according to the
    617             value of __flmap or __RODATA_FLASH_START__.
    618           + When AVR-LibC with #931 is used, then defining the symbol
    619             __flmap_lock to a non-zero value will set bit
    620             NVMCTRL_CTRLB.FLMAPLOCK. This will protect NVMCTRL_CTRLB.FLMAP
    621             from any further changes  which would be Undefined Behaviour
    622             in C/C++. If you prefer to define the symbol in a C/C++ file,
    623             an asm statement can be used:
    624 __asm (".global __flmap_lock"  "\n\t"
    625        "__flmap_lock = 1");
    626           + When you do not want the code from #931, then define a global
    627             symbol __do_flmap_init and the linker will not pull in that
    628             code from libmcu.a any more.
    629           + In order to return to the old placement of read-only data in
    630             RAM, the new compiler option -mrodata-in-ram can be used. This
    631             is required on devices where the hardware revision is affected
    632             by a silicon bug concerning the FLMAP functionality.
    633           + Read-only data is located in output section .rodata, whereas
    634             it is part of .text when located in RAM.
    635           + The feature is only available when the compiler is configured
    636             with a version of Binutils that implements [129]PR31124, which
    637             is the case for Binutils v2.42 and up.
    638           + The implementation consists of two parts:
    639               1. Binutils supports new emulations avrxmega2_flmap and
    640                  avrxmega4_flmap. The sole purpose of these emulations is
    641                  to provide adjusted default linker description files.
    642                  Apart from that, these emulations behave exactly the same
    643                  like avrxmega2 resp. avrxmega4.
    644               2. The compiler uses a [130]device-specs file which links
    645                  the program with -mavrxmega2_flmap or -mavrxmega2
    646                  depending on -m[no-]rodata-in-ram; and similar for
    647                  -mavrxmega4[_flmap].
    648             This means the feature can be used with older compiler or
    649             Binutils versions; all what's needed is an adjusted linker
    650             script and a custom device-specs file.
    651      * A new compiler option -m[no-]rodata-in-ram has been added. The
    652        default is to locate read-only data in program memory for devices
    653        that support it, e.g. for AVR64* and AVR128* devices as explained
    654        above, and for devices from the [131]avrxmega3 and [132]avrtiny
    655        families.
    656      * The new built-in macro __AVR_RODATA_IN_RAM__ is supported on all
    657        devices. It's defined to 0 or 1.
    658      * A new optimization tries to improve code generation for indirect
    659        memory accesses on [133]Reduced Tiny devices. It can be controlled
    660        by the new compiler option -mfuse-add=level where level may be 0, 1
    661        or 2.
    662      * On the Reduced Tiny devices, the meaning of register constraint "w"
    663        has been changed. It now constrains the registers R24R31 as is the
    664        case for all the other devices.
    665      * Support for the following devices has been added in GCC 14.3:
    666           + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
    667             AVR64SD48.
    668      * Support for the following devices has been added in GCC 14.4:
    669           + AVR32DA28S, AVR32DA32S, AVR32DA48S, AVR64DA28S, AVR64DA32S,
    670             AVR64DA48S AVR64DA64S, AVR128DA28S, AVR128DA32S, AVR128DA48S,
    671             AVR128DA64S, AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32,
    672             AVR16LA14, AVR16LA20, AVR16LA28, AVR16LA32, AVR32LA14,
    673             AVR32LA20, AVR32LA28, AVR32LA32.
    674 
    675   [134]IA-32/x86-64
    676 
    677      * New compiler option -m[no-]evex512 was added. The compiler switch
    678        enables/disables 512-bit vector. It will be default on if AVX512F
    679        is enabled.
    680      * Part of new feature support for Intel APX was added, including
    681        EGPR, NDD, PPX and PUSH2POP2. APX support is available via the
    682        -mapxf compiler switch.
    683      * For inline asm support with APX, by default the EGPR feature was
    684        disabled to prevent potential illegal instruction with EGPR occurs.
    685        To invoke egpr usage in inline asm, use new compiler option
    686        -mapx-inline-asm-use-gpr32 and user should ensure the instruction
    687        supports EGPR.
    688      * New ISA extension support for Intel AVX10.1 was added. AVX10.1
    689        intrinsics are available via the -mavx10.1-256 compiler switch with
    690        256-bit vector support. 512-bit vector support for AVX10.1
    691        intrinsics are available via the -mavx10.1-512 compiler switch.
    692        -mavx10.1 enables AVX10.1 intrinsics with 256-bit vector support in
    693        GCC 14.1 and GCC 14.2. Since GCC 14.3, it enables AVX10.1
    694        intrinsics with 512-bit vector support (and emits a warning due to
    695        this behavior change).
    696      * New ISA extension support for Intel AVX-VNNI-INT16 was added.
    697        AVX-VNNI-INT16 intrinsics are available via the -mavxvnniint16
    698        compiler switch.
    699      * New ISA extension support for Intel SHA512 was added. SHA512
    700        intrinsics are available via the -msha512 compiler switch.
    701      * New ISA extension support for Intel SM3 was added. SM3 intrinsics
    702        are available via the -msm3 compiler switch.
    703      * New ISA extension support for Intel SM4 was added. SM4 intrinsics
    704        are available via the -msm4 compiler switch.
    705      * New ISA extension support for Intel USER_MSR was added. USER_MSR
    706        intrinsics are available via the -muser_msr compiler switch.
    707      * GCC now supports the Intel CPU named Clearwater Forest through
    708        -march=clearwaterforest. Based on Sierra Forest, the switch in
    709        addition enables the AVX-VNNI-INT16, PREFETCHI, SHA512, SM3, SM4
    710        and USER_MSR ISA extensions. Since GCC 14.4, KL and WIDEKL are not
    711        enabled any longer.
    712      * GCC now supports the Intel CPU named Gracemont through
    713        -march=gracemont. Gracemont is based on Alder Lake. Since GCC 14.4,
    714        CLDEMOTE is not enabled any longer.
    715      * GCC now supports the Intel CPU named Arrow Lake through
    716        -march=arrowlake. Based on Alder Lake, the switch in addition
    717        enables the AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT8 and CMPccXADD
    718        ISA extensions. Since GCC 14.4, CLDEMOTE is not enabled any longer.
    719      * GCC now supports the Intel CPU named Arrow Lake S through
    720        -march=arrowlake-s. Based on Arrow Lake, the switch in addition
    721        enables the AVX-VNNI-INT16, SHA512, SM3 and SM4 ISA extensions.
    722        Since GCC 14.4, CLDEMOTE is not enabled any longer.
    723      * GCC now supports the Intel CPU named Lunar Lake through
    724        -march=lunarlake. Lunar Lake is based on Arrow Lake S. Since GCC
    725        14.4, CLDEMOTE is not enabled any longer.
    726      * GCC now supports the Intel CPU named Panther Lake through
    727        -march=pantherlake. Based on Arrow Lake S, the switch in addition
    728        further enables the PREFETCHI ISA extensions. Since GCC 14.4,
    729        CLDEMOTE, KL, PREFETCHI and WIDEKL are not enabled any longer.
    730      * Since GCC 14.4, CLDEMOTE is not enabled through the compiler
    731        switches -march=alderlake, -march=meteorlake and -march=raptorlake
    732        any longer.
    733      * Xeon Phi CPUs support (a.k.a. Knight Landing and Knight Mill) are
    734        marked as deprecated. GCC will emit a warning when using the
    735        -mavx5124fmaps, -mavx5124vnniw, -mavx512er, -mavx512pf,
    736        -mprefetchwt1, -march=knl, -march=knm, -mtune=knl or -mtune=knm
    737        compiler switches. Support will be removed in GCC 15.
    738      * [135]Hardware-assisted AddressSanitizer now works for the x86-64
    739        target with LAM_U57. -fsanitize=hwaddress will enable -mlam=u57 by
    740        default.
    741      * GCC now supports AMD CPUs based on the znver5 core via
    742        -march=znver5. In addition to the ISA extensions enabled on a
    743        znver4 core, this switch further enables the AVX512VP2INTERSECT,
    744        AVXVNNI, MOVDIR64B, MOVDIRI, and PREFETCHI ISA extensions.
    745      * The _Float16 and __bf16 type are supported independent of SSE2. W/o
    746        SSE2, these types are storage-only, compiler will issue an error
    747        when they're used in conversion, unary operation, binary operation,
    748        parameter passing or value return. Please use __SSE2__ to detect
    749        arithmetic support of these types instead of __FLT16_MAX__(or other
    750        similar Macros).
    751 
    752   [136]MCore
    753 
    754      * Bitfields are now signed by default per GCC policy. If you need
    755        bitfields to be unsigned, use -funsigned-bitfields.
    756 
    757   [137]LoongArch
    758 
    759      * Support for the following [138]-march parameters has been added:
    760           + la64v1.0
    761           + la64v1.1
    762           + la664
    763        It is now recommended to use -march=la64v1.0 as the only compiler
    764        option to describe the target ISA when building binaries for
    765        distribution. For more information on LoongArch ISA versions, see
    766        [139]Toolchain Conventions of the LoongArch Architecture.
    767      * Support for the following [140]-mtune parameters has been added:
    768           + generic
    769           + la664
    770      * New ISA Extension
    771           + LSX (Loongson SIMD Extension): Support 128-bit vector
    772             instructions and the intrinsics.
    773           + LASX (Loongson Advanced SIMD Extension): Support 256-bit
    774             vector instructions and the intrinsics.
    775           + FRECIPE: Support frecipe.{s/d} and frsqrte.{s/d} instructions
    776             and the intrinsics.
    777           + DIV32: Support div.w[u] and mod.w[u] instructions with inputs
    778             not sign-extended.
    779           + LAM_BH: Support am{swap/add}[_db].{b/h} instructions.
    780           + LAMCAS: Support amcas[_db].{b/h/w/d} instructions.
    781      * New Built-in Macros
    782           + __loongarch_arch: Target ISA preset as specified by -march=.
    783             For example, compiling with -march=la64v1.0, the value of
    784             __loongarch_arch is "la64v1.0".
    785           + __loongarch_tune: Processor model as specified by -mtune or
    786             its default value.
    787           + __loongarch_{simd,sx,asx}: These macros are not defined, or
    788             defined as 1.
    789           + __loongarch_simd_width: The maximum SIMD bit-width enabled by
    790             the compiler. (128 for lsx, and 256 for lasx).
    791           + __loongarch_frecipe: It's defined to 1 or undefined.
    792           + __loongarch_div32: It's defined to 1 or undefined.
    793           + __loongarch_lam_bh: It's defined to 1 or undefined.
    794           + __loongarch_lamcas: It's defined to 1 or undefined.
    795           + __loongarch_ld_seq_sa: It's defined to 1 or undefined.
    796           + __loongarch_version_major: The minimally required LoongArch
    797             ISA version (major) to run the compiled program, defined to 1
    798             or undefined (iff no such version is known to the compiler).
    799           + __loongarch_version_minor: The minimally required LoongArch
    800             ISA version (minor) to run the compiled program, defined to 0
    801             1 or undefined (iff __loongarch_version_major is undefined).
    802           + __FLOAT128_TYPE: It's defined to 1.
    803      * New Intrinsics
    804           + [141]__builtin_thread_pointer
    805           + [142]__lsx_*
    806           + [143]__lasx_*
    807           + [144]__frecipe_{s/d} and __frsqrte_{s/d}
    808      * New Compiler Option
    809           + [145]-m[no-]lsx
    810           + [146]-m[no-]lasx
    811           + [147]-m[no-]frecipe
    812           + [148]-m[no-]div32
    813           + [149]-m[no-]lam-bh
    814           + [150]-m[no-]lamcas
    815           + [151]-m[no-]ld-seq-sa
    816           + [152]-mrecip=
    817           + [153]-m[no-]recip
    818           + [154]-mexplicit-relocs={none,always,auto}
    819           + [155]-m[no-]relax
    820           + [156]-m[no-]pass-mrelax-to-as
    821           + [157]-mtls-dialect={trad,desc}
    822      * Support for Ada and D.
    823      * Support for libffi.
    824      * Enable -free by default at -O2 or higher.
    825      * Enable -fsched-pressure by default at -O1 or higher.
    826      * Support the extreme code model using macro instructions (under
    827        -mno-explicit-relocs).
    828      * Support call36.
    829      * Optimizing built-in functions for memory-model-aware atomic
    830        operations using hierarchical dbar instructions.
    831      * TLS descriptors support. It is not enabled by default, and can be
    832        enabled with [158]-mtls-dialect=desc. The default behavior can be
    833        configured with --with-tls=[trad|desc].
    834 
    835   [159]RISC-V
    836 
    837      * The SLP and loop vectorizer are now enabled for RISC-V when the
    838        vector extension is enabled, thanks to Ju-Zhe Zhong from
    839        [160]RiVAI, Pan Li from Intel, and Robin Dapp from [161]Ventana
    840        Micro for contributing most of the implementation.
    841      * The -mrvv-max-lmul= option has been introduced for performance
    842        tuning of the loop vectorizer. The default value is
    843        -mrvv-max-lmul=m1, which limits the maximum LMUL to 1. The
    844        -mrvv-max-lmul=dynamic setting can dynamically select the maximum
    845        LMUL value based on register pressure.
    846      * Atomic code generation has been improved and is now in conformance
    847        with the latest psABI specification, thanks to Patrick O'Neill from
    848        [162]Rivos.
    849      * Support for the vector intrinsics as specified in [163]version 1.0
    850        of the RISC-V vector intrinsic specification.
    851      * Support for the experimental vector crypto intrinsics as specified
    852        in [164]RISC-V vector intrinsic specification, thanks to Feng Wang
    853        et al. from [165]ESWIN Computing
    854      * Support for the T-head vector intrinsics.
    855      * Support for the scalar bitmanip and scalar crypto intrinsics,
    856        thanks to Liao Shihua from [166]PLCT.
    857      * Support for the large code model via option -mcmodel=large, thanks
    858        to Kuan-Lin Chen from [167]Andes Technology.
    859      * Support for the standard vector calling convention variant, thanks
    860        to Lehua Ding from [168]RiVAI.
    861      * Supports the target attribute, which allows users to compile a
    862        function with specific extensions.
    863      * The -march= option no longer requires the architecture string to be
    864        in canonical order, with only a few constraints remaining: the
    865        architecture string must start with rv[32|64][i|g|e], and must use
    866        an underscore as the separator after a multi-letter extension.
    867      * -march=help has been introduced to list all supported extensions.
    868      * Added experimental support for the -mrvv-vector-bits=zvl option and
    869        the riscv_rvv_vector_bits attribute, which specify a fixed length
    870        for scalable vector types. This option is optimized for specific
    871        vector core implementations; however, the code generated with this
    872        option is NOT portable between the core with different VLEN, thanks
    873        to Pan Li from Intel.
    874      * Support for TLS descriptors has been introduced. It can be enabled
    875        by the -mtls-dialect=desc option. The default behavior can be
    876        configured with --with-tls=[trad|desc]. This feature requires glibc
    877        2.40. Thanks to Tatsuyuki Ishi from [169]Blue Whale Systems.
    878      * Support for the following standard extensions has been added:
    879           + Vector crypto extensions:
    880                o Zvbb
    881                o Zvkb
    882                o Zvbc
    883                o Zvkg
    884                o Zvkned
    885                o Zvkhna
    886                o Zvkhnb
    887                o Zvksed
    888                o Zvksh
    889                o Zvkn
    890                o Zvknc
    891                o Zvkng
    892                o Zvks
    893                o Zvksc
    894                o Zvksg
    895                o Zvkt
    896           + Code size reduction extensions:
    897                o Zca
    898                o Zcb
    899                o Zce
    900                o Zcf
    901                o Zcd
    902                o Zcmp
    903                o Zcmt
    904           + Zicond
    905           + Zfa
    906           + Ztso
    907           + Zvfbfmin
    908           + Zvfhmin
    909           + Zvfh
    910           + Za64rs
    911           + Za128rs
    912           + Ziccif
    913           + Ziccrse
    914           + Ziccamoa
    915           + Zicclsm
    916           + Zic64b
    917           + Smaia
    918           + Smepmp
    919           + Smstateen
    920           + Ssaia
    921           + Sscofpmf
    922           + Ssstateen
    923           + Sstc
    924           + Svinval
    925           + Svnapot
    926           + Svpbmt
    927      * Support for the following vendor extensions has been added:
    928           + T-Head:
    929                o XTheadVector
    930           + CORE-V:
    931                o XCVmac
    932                o XCValu
    933                o XCVelw
    934                o XCVsimd
    935                o XCVbi
    936           + Ventana Micro:
    937                o XVentanaCondops
    938      * The following new CPUs are supported through the -mcpu option (GCC
    939        identifiers in parentheses).
    940           + SiFive's X280 (sifive-x280).
    941           + SiFive's P450 (sifive-p450).
    942           + SiFive's P670 (sifive-p670).
    943      * The following new CPUs are supported through the -mtune option (GCC
    944        identifiers in parentheses).
    945           + Generic out-of-order core (generic-ooo).
    946           + SiFive's P400 series (sifive-p400-series).
    947           + SiFive's P600 series (sifive-p600-series).
    948           + XiangShan's Nanhu microarchitecture (xiangshan-nanhu).
    949 
    950   [170]SPARC
    951 
    952      * The implementation of calling conventions for small structures
    953        containing arrays of floating-point components has been changed in
    954        64-bit mode for the Solaris port to match the implementation of the
    955        vendor compiler (and the ABI). As a result, the code generated will
    956        not be binary compatible with earlier releases in these cases.
    957 
    958 Documentation improvements
    959 
    960      * GCC's ability to provide clickable hyperlinks to the documentation
    961        has been extended, so that whenever GCC refers to a command-line
    962        option in quotes in a diagnostic message, the option is a clickable
    963        hyperlink (assuming a suitably capable terminal).
    964 
    965 [171]Improvements to Static Analyzer
    966 
    967      * New warnings:
    968           + [172]-Wanalyzer-infinite-loop warns about paths through the
    969             code which appear to lead to an infinite loop.
    970           + [173]-Wanalyzer-overlapping-buffers warns for paths through
    971             the code in which overlapping buffers are passed to an API for
    972             which the behavior on such buffers is undefined.
    973           + [174]-Wanalyzer-undefined-behavior-strtok warns for paths
    974             through the code in which a call is made to strtok with
    975             undefined behavior.
    976      * Previously, the analyzer's "taint" tracking to be explicitly
    977        enabled via [175]-fanalyzer-checker=taint (along with
    978        [176]-fanalyzer). This is now enabled by default when
    979        [177]-fanalyzer is selected, thus also enabling the 6 taint-based
    980        warnings:
    981           + [178]-Wanalyzer-tainted-allocation-size
    982           + [179]-Wanalyzer-tainted-array-index
    983           + [180]-Wanalyzer-tainted-assertion
    984           + [181]-Wanalyzer-tainted-divisor
    985           + [182]-Wanalyzer-tainted-offset
    986           + [183]-Wanalyzer-tainted-size
    987      * The analyzer will now simulate API calls that expect
    988        null-terminated string arguments, and will warn about code paths in
    989        which such a call is made with a buffer that isn't properly
    990        terminated, either due to a read of an uninitialized byte or an
    991        out-of-range accesses seen before any zero byte is seen. This
    992        applies to functions that use the new
    993        [184]null_terminated_string_arg(PARAM_IDX) attribute, functions
    994        that use the [185]format attribute, and to the library functions
    995        error (parameter 3), error_at_line (parameter 5), putenv, strchr
    996        (parameter 1), and strcpy (parameter 2).
    997      * The analyzer now makes use of the function attribute
    998        [186]alloc_size allowing [187]-fanalyzer to emit
    999        [188]-Wanalyzer-allocation-size, [189]-Wanalyzer-out-of-bounds, and
   1000        [190]-Wanalyzer-tainted-allocation-size on execution paths
   1001        involving allocations using such functions.
   1002      * The analyzer's knowledge about the behavior of the standard library
   1003        has been extended to cover fopen, strcat, strncpy, and strstr. The
   1004        analyzer will also more precisely model the behavior of memcpy,
   1005        memmove, strcpy, strdup, strlen, and of various atomic built-in
   1006        functions.
   1007      * The warning [191]-Wanalyzer-out-of-bounds has been extended so
   1008        that, where possible, it will emit a text-based diagram visualizing
   1009        the spatial relationship between
   1010          1. the memory region that the analyzer predicts would be
   1011             accessed, versus
   1012          2. the range of memory that is valid to access
   1013        whether they overlap, are touching, are close or far apart; which
   1014        one is before or after in memory, the relative sizes involved, the
   1015        direction of the access (read vs write), and, in some cases, the
   1016        values of data involved.
   1017        Such "text art" diagrams can be controlled (or suppressed) via a
   1018        new [192]-fdiagnostics-text-art-charset= option.
   1019        For example, given the out-of-bounds write in strcat in:
   1020 void test (void)
   1021 {
   1022    char buf[10];
   1023    strcpy (buf, "hello");
   1024    strcat (buf, " world!");
   1025 }
   1026 
   1027        it emits:
   1028                                  
   1029                                  [0] [1] [2] [3] [4]  [5]  [6]  [7] 
   1030                                  
   1031                                  ' ' 'w' 'o' 'r' 'l'  'd'  '!'  NUL 
   1032                                  
   1033                                       string literal (type: 'char[8]')      
   1034                                  
   1035                                                                    
   1036                                                                    
   1037                                    v    v    v    v    v      v     v     v
   1038       
   1039        [0]         ...         [5]      ...      [9]                  
   1040                        
   1041        'h' 'e' 'l' 'l' 'o' NUL                     after valid range
   1042                        
   1043                    'buf' (type: 'char[10]')                               
   1044       
   1045       
   1046                                                                    
   1047                                       
   1048 
   1049                       capacity: 10 bytes                overflow of 3 bytes
   1050 
   1051                                       
   1052 
   1053 
   1054        showing that the overflow occurs partway through the second string
   1055        fragment.
   1056      * The analyzer will now attempt to track execution paths involving
   1057        computed gotos, whereas previously it gave up on such paths.
   1058 
   1059 [193]Improvements to SARIF support
   1060 
   1061      * The SARIF output from [194]-fdiagnostics-format= now adds
   1062        indentation and newlines to reflect the logical JSON structure of
   1063        the data. The previous compact behavior can be restored via the new
   1064        option [195]-fno-diagnostics-json-formatting. This also applies to
   1065        the older output format named "json".
   1066      * If profiling information about the compiler itself is requested via
   1067        [196]-ftime-report, and a SARIF output format is requested via
   1068        [197]-fdiagnostics-format=, then the timing and memory usage data
   1069        is now written in JSON form into the SARIF output, rather than as
   1070        plain text to stderr.
   1071 
   1072 [198]Improvements for plugin authors
   1073 
   1074      * GCC diagnostics have been able to have execution paths associated
   1075        with them since GCC 10, but previously these were required to be
   1076        single-threaded. As of GCC 14, these execution paths can have
   1077        multiple named threads associated with them, with each event being
   1078        associated with one of the threads. No existing GCC diagnostics
   1079        take advantage of this, but GCC plugins may find this useful for
   1080        their own diagnostics; an [199]example is provided in the
   1081        testsuite.
   1082      * GCC's diagnostics can now optionally add per-diagnostic property
   1083        bags to the SARIF output, allowing plugins to capture custom data
   1084        as needed with their diagnostics.
   1085 
   1086 [200]GCC 14.1
   1087 
   1088    This is the [201]list of problem reports (PRs) from GCC's bug tracking
   1089    system that are known to be fixed in the 14.1 release. This list might
   1090    not be complete (that is, it is possible that some PRs that have been
   1091    fixed are not listed here).
   1092 
   1093 [202]GCC 14.2
   1094 
   1095    This is the [203]list of problem reports (PRs) from GCC's bug tracking
   1096    system that are known to be fixed in the 14.2 release. This list might
   1097    not be complete (that is, it is possible that some PRs that have been
   1098    fixed are not listed here).
   1099 
   1100 [204]GCC 14.3
   1101 
   1102    This is the [205]list of problem reports (PRs) from GCC's bug tracking
   1103    system that are known to be fixed in the 14.3 release. This list might
   1104    not be complete (that is, it is possible that some PRs that have been
   1105    fixed are not listed here).
   1106 
   1107 [206]GCC 14.4
   1108 
   1109    This is the [207]list of problem reports (PRs) from GCC's bug tracking
   1110    system that are known to be fixed in the 14.4 release. This list might
   1111    not be complete (that is, it is possible that some PRs that have been
   1112    fixed are not listed here).
   1113 
   1114 
   1115     For questions related to the use of GCC, please consult these web
   1116     pages and the [208]GCC manuals. If that fails, the
   1117     [209]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1118     web pages and the development of GCC are welcome on our developer
   1119     list at [210]gcc (a] gcc.gnu.org. All of [211]our lists have public
   1120     archives.
   1121 
   1122    Copyright (C) [212]Free Software Foundation, Inc. Verbatim copying and
   1123    distribution of this entire article is permitted in any medium,
   1124    provided this notice is preserved.
   1125 
   1126    These pages are [213]maintained by the GCC team. Last modified
   1127    2026-06-26.
   1128 
   1129 References
   1130 
   1131    1. https://gcc.gnu.org/gcc-14/porting_to.html
   1132    2. https://gcc.gnu.org/onlinedocs/index.html#current
   1133    3. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Zero-Length.html
   1134    4. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wflex-array-member-not-at-end
   1135    5. https://gcc.gnu.org/gcc-14/porting_to.html#warnings-as-errors
   1136    6. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html
   1137    7. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html
   1138    8. https://gcc.gnu.org/gcc-14/changes.html#general
   1139    9. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C-Dialect-Options.html#index-foffload-options
   1140   10. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fhardened
   1141   11. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy
   1142   12. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Type-Attributes.html#index-hardbool-type-attribute
   1143   13. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Type-Attributes.html#index-strub-type-attribute
   1144   14. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Optimize-Options.html#index-finline-stringops
   1145   15. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Code-Gen-Options.html#index-ftrampoline-impl
   1146   16. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-null_005fterminated_005fstring_005farg-function-attribute
   1147   17. https://gcc.gnu.org/gcc-14/changes.html#languages
   1148   18. https://gcc.gnu.org/projects/gomp/
   1149   19. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/
   1150   20. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/Offload-Target-Specifics.html
   1151   21. https://github.com/numactl/numactl
   1152   22. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/Memory-allocation.html
   1153   23. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gfortran/Fortran-Dialect-Options.html#index-fopenmp-allocators
   1154   24. https://gcc.gnu.org/wiki/OpenACC
   1155   25. https://gcc.gnu.org/gcc-14/changes.html#ada
   1156   26. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Local_005fRestrictions.html
   1157   27. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-User_005fAspect_005fDefinition.html
   1158   28. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-User_005fAspect.html
   1159   29. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Always_005fTerminates.html
   1160   30. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Ghost_005fPredicate.html
   1161   31. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Exceptional_005fCases.html
   1162   32. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Side_005fEffects.html
   1163   33. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fharden-compares
   1164   34. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Security-Hardening-Features.html
   1165   35. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Style-Checking.html#index--gnatyz-_0028gcc_0029
   1166   36. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Alphabetical-List-of-All-Switches.html#index--gnateH-_0028gcc_0029
   1167   37. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-Storage_005fModel.html
   1168   38. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/String-interpolation.html
   1169   39. https://gcc.gnu.org/onlinedocs/gnat_rm/Fixed-lower-bounds-for-array-types-and-subtypes.html
   1170   40. https://github.com/AdaCore/ada-spark-rfcs/blob/master/features/rfc-fixed-lower-bound.rst
   1171   41. https://gcc.gnu.org/gcc-14/changes.html#c-family
   1172   42. https://gcc.gnu.org/gcc-14/changes.html#c
   1173   43. https://gcc.gnu.org/gcc-14/changes.html#cxx
   1174   44. https://wg21.link/P1854R4
   1175   45. https://gcc.gnu.org/PR110341
   1176   46. https://wg21.link/P2752R3
   1177   47. https://gcc.gnu.org/PR110346
   1178   48. https://wg21.link/P2361R6
   1179   49. https://gcc.gnu.org/PR110342
   1180   50. https://wg21.link/P2738R1
   1181   51. https://gcc.gnu.org/PR110344
   1182   52. https://wg21.link/P2741R3
   1183   53. https://gcc.gnu.org/PR110348
   1184   54. https://wg21.link/P2169R4
   1185   55. https://gcc.gnu.org/PR110349
   1186   56. https://wg21.link/P2864R2
   1187   57. https://wg21.link/P2748R5
   1188   58. https://gcc.gnu.org/PR114455
   1189   59. https://wg21.link/P2809R3
   1190   60. https://gcc.gnu.org/PR114462
   1191   61. https://wg21.link/P0847R7
   1192   62. https://gcc.gnu.org/PR102609
   1193   63. https://wg21.link/P2280R4
   1194   64. https://gcc.gnu.org/PR106650
   1195   65. https://wg21.link/P2564R3
   1196   66. https://gcc.gnu.org/PR107687
   1197   67. https://wg21.link/P2582R1
   1198   68. https://gcc.gnu.org/PR106653
   1199   69. https://wg21.link/cwg532
   1200   70. https://wg21.link/cwg976
   1201   71. https://wg21.link/cwg2262
   1202   72. https://wg21.link/cwg2359
   1203   73. https://wg21.link/cwg2386
   1204   74. https://wg21.link/cwg2406
   1205   75. https://wg21.link/cwg2543
   1206   76. https://wg21.link/cwg2586
   1207   77. https://wg21.link/cwg2735
   1208   78. https://wg21.link/cwg2799
   1209   79. https://gcc.gnu.org/PR100157
   1210   80. https://cplusplus.github.io/CWG/issues/2256.html
   1211   81. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
   1212   82. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/g++.dg/opt/nrv23.C;h=9e1253cd830a84ad4de5ff3076a07c543afe344f;hb=7e0b65b239c3a0d68ce94896b236b03de666ffd6
   1213   83. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wnrvo
   1214   84. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4d935f52b0d5c00fcc154461b87415ebd8791a94
   1215   85. https://gcc.gnu.org/PR110164
   1216   86. https://gcc.gnu.org/PR89442
   1217   87. https://gcc.gnu.org/PR110064
   1218   88. https://gcc.gnu.org/PR70331
   1219   89. https://gcc.gnu.org/PR96630
   1220   90. https://gcc.gnu.org/PR98675
   1221   91. https://gcc.gnu.org/PR71954
   1222   92. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=85ad41a494e31311f8a6b2dbe930a128c5e85840
   1223   93. https://gcc.gnu.org/PR111069
   1224   94. https://gcc.gnu.org/PR52953
   1225   95. https://gcc.gnu.org/PR91483
   1226   96. https://gcc.gnu.org/PR18474
   1227   97. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Attributes.html#index-cold-type-attribute
   1228   98. https://gcc.gnu.org/PR79620
   1229   99. https://gcc.gnu.org/PR79378
   1230  100. https://gcc.gnu.org/PR83167
   1231  101. https://gcc.gnu.org/PR96917
   1232  102. https://wg21.link/P1689R5
   1233  103. https://gcc.gnu.org/gcc-14/changes.html#libstdcxx
   1234  104. https://gcc.gnu.org/gcc-14/changes.html#d
   1235  105. https://dlang.org/changelog/2.108.1.html
   1236  106. https://gcc.gnu.org/gcc-14/changes.html#fortran
   1237  107. https://gcc.gnu.org/gcc-14/changes.html#modula2
   1238  108. https://gcc.gnu.org/gcc-14/changes.html#rust
   1239  109. https://gcc.gnu.org/gcc-14/changes.html#jit
   1240  110. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/types.html#c.gcc_jit_type_get_restrict
   1241  111. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-25
   1242  112. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-26
   1243  113. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_sizeof
   1244  114. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-27
   1245  115. https://gcc.gnu.org/gcc-14/changes.html#targets
   1246  116. https://gcc.gnu.org/gcc-14/changes.html#aarch64
   1247  117. https://github.com/ARM-software/acle/blob/main/main/acle.md#sme-language-extensions-and-intrinsics
   1248  118. https://github.com/ARM-software/acle/blob/main/main/acle.md#function-multi-versioning
   1249  119. https://github.com/ARM-software/acle/blob/main/main/acle.md#memory-prefetch-intrinsics
   1250  120. https://github.com/ARM-software/acle/blob/main/main/acle.md#special-register-intrinsics
   1251  121. https://github.com/ARM-software/acle/blob/main/main/acle.md#neon-sve-bridge
   1252  122. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AArch64-Options.html
   1253  123. https://gcc.gnu.org/gcc-14/changes.html#amdgcn
   1254  124. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   1255  125. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   1256  126. https://gcc.gnu.org/gcc-14/changes.html#arm
   1257  127. https://gcc.gnu.org/gcc-14/changes.html#avr
   1258  128. https://github.com/avrdudes/avr-libc/issues/931
   1259  129. https://sourceware.org/PR31124
   1260  130. https://gcc.gnu.org/wiki/avr-gcc#spec-files
   1261  131. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrxmega3
   1262  132. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
   1263  133. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
   1264  134. https://gcc.gnu.org/gcc-14/changes.html#x86
   1265  135. https://gcc.gnu.org/gcc-11/changes.html
   1266  136. https://gcc.gnu.org/gcc-14/changes.html#mcore
   1267  137. https://gcc.gnu.org/gcc-14/changes.html#loongarch
   1268  138. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-march-7
   1269  139. https://github.com/loongson/la-toolchain-conventions/
   1270  140. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtune-8
   1271  141. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
   1272  142. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-SX-Vector-Intrinsics.html
   1273  143. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-ASX-Vector-Intrinsics.html
   1274  144. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
   1275  145. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
   1276  146. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
   1277  147. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mfrecipe
   1278  148. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mdiv32
   1279  149. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlam-bh
   1280  150. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlamcas
   1281  151. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mld-seq-sa
   1282  152. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip_003dopt
   1283  153. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip
   1284  154. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mexplicit-relocs-1
   1285  155. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrelax-2
   1286  156. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mpass-mrelax-to-as
   1287  157. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
   1288  158. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
   1289  159. https://gcc.gnu.org/gcc-14/changes.html#riscv
   1290  160. https://rivai-ic.com.cn/
   1291  161. https://www.ventanamicro.com/
   1292  162. https://www.rivosinc.com/
   1293  163. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/tree/v0.11.x
   1294  164. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/pull/234
   1295  165. https://eswincomputing.com/
   1296  166. https://plctlab.org/
   1297  167. https://www.andestech.com/
   1298  168. https://rivai-ic.com.cn/
   1299  169. https://bluewhale.systems/
   1300  170. https://gcc.gnu.org/gcc-14/changes.html#sparc
   1301  171. https://gcc.gnu.org/gcc-14/changes.html#analyzer
   1302  172. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-loop
   1303  173. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers
   1304  174. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-undefined-behavior-strtok
   1305  175. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
   1306  176. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1307  177. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1308  178. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   1309  179. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
   1310  180. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
   1311  181. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
   1312  182. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
   1313  183. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
   1314  184. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-null_005fterminated_005fstring_005farg-function-attribute
   1315  185. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-format-function-attribute
   1316  186. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-alloc_005fsize-function-attribute
   1317  187. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1318  188. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
   1319  189. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   1320  190. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   1321  191. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   1322  192. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset
   1323  193. https://gcc.gnu.org/gcc-14/changes.html#sarif
   1324  194. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1325  195. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-json-formatting
   1326  196. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Developer-Options.html#index-ftime-report
   1327  197. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1328  198. https://gcc.gnu.org/gcc-14/changes.html#plugins
   1329  199. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a1e9f3ed7aa49adad02190ace0614e0b37fc089
   1330  200. https://gcc.gnu.org/gcc-14/changes.html#14.1
   1331  201. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.0
   1332  202. https://gcc.gnu.org/gcc-14/changes.html#14.2
   1333  203. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.2
   1334  204. https://gcc.gnu.org/gcc-14/changes.html#14.3
   1335  205. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.3
   1336  206. https://gcc.gnu.org/gcc-14/changes.html#14.4
   1337  207. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.4
   1338  208. https://gcc.gnu.org/onlinedocs/
   1339  209. mailto:gcc-help (a] gcc.gnu.org
   1340  210. mailto:gcc (a] gcc.gnu.org
   1341  211. https://gcc.gnu.org/lists.html
   1342  212. https://www.fsf.org/
   1343  213. https://gcc.gnu.org/about.html
   1344 ======================================================================
   1345 http://gcc.gnu.org/gcc-13/index.html
   1346                              GCC 13 Release Series
   1347 
   1348    June 5, 2025
   1349 
   1350    The GCC developers are pleased to announce the release of GCC 13.4.
   1351 
   1352    This release is a bug-fix release, containing fixes for regressions in
   1353    GCC 13.3 relative to previous releases of GCC.
   1354 
   1355 Release History
   1356 
   1357    GCC 13.4
   1358           June 5, 2025 ([1]changes, [2]documentation)
   1359 
   1360    GCC 13.3
   1361           May 21, 2024 ([3]changes, [4]documentation)
   1362 
   1363    GCC 13.2
   1364           July 27, 2023 ([5]changes, [6]documentation)
   1365 
   1366    GCC 13.1
   1367           April 26, 2023 ([7]changes, [8]documentation)
   1368 
   1369 References and Acknowledgements
   1370 
   1371    GCC used to stand for the GNU C Compiler, but since the compiler
   1372    supports several other languages aside from C, it now stands for the
   1373    GNU Compiler Collection.
   1374 
   1375    The GCC developers would like to thank the numerous people that have
   1376    contributed new features, improvements, bug fixes, and other changes as
   1377    well as test results to GCC. This [9]amazing group of volunteers is
   1378    what makes GCC successful.
   1379 
   1380    For additional information about GCC please refer to the [10]GCC
   1381    project web site or contact the [11]GCC development mailing list.
   1382 
   1383    To obtain GCC please use [12]our mirror sites or [13]our version
   1384    control system.
   1385 
   1386 
   1387     For questions related to the use of GCC, please consult these web
   1388     pages and the [14]GCC manuals. If that fails, the
   1389     [15]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1390     web pages and the development of GCC are welcome on our developer
   1391     list at [16]gcc (a] gcc.gnu.org. All of [17]our lists have public
   1392     archives.
   1393 
   1394    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
   1395    distribution of this entire article is permitted in any medium,
   1396    provided this notice is preserved.
   1397 
   1398    These pages are [19]maintained by the GCC team. Last modified
   1399    2025-06-05.
   1400 
   1401 References
   1402 
   1403    1. https://gcc.gnu.org/gcc-13/changes.html
   1404    2. https://gcc.gnu.org/onlinedocs/13.4.0/
   1405    3. https://gcc.gnu.org/gcc-13/changes.html
   1406    4. https://gcc.gnu.org/onlinedocs/13.3.0/
   1407    5. https://gcc.gnu.org/gcc-13/changes.html
   1408    6. https://gcc.gnu.org/onlinedocs/13.2.0/
   1409    7. https://gcc.gnu.org/gcc-13/changes.html
   1410    8. https://gcc.gnu.org/onlinedocs/13.1.0/
   1411    9. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
   1412   10. https://gcc.gnu.org/index.html
   1413   11. mailto:gcc (a] gcc.gnu.org
   1414   12. https://gcc.gnu.org/mirrors.html
   1415   13. https://gcc.gnu.org/git.html
   1416   14. https://gcc.gnu.org/onlinedocs/
   1417   15. mailto:gcc-help (a] gcc.gnu.org
   1418   16. mailto:gcc (a] gcc.gnu.org
   1419   17. https://gcc.gnu.org/lists.html
   1420   18. https://www.fsf.org/
   1421   19. https://gcc.gnu.org/about.html
   1422 ======================================================================
   1423 http://gcc.gnu.org/gcc-13/changes.html
   1424                              GCC 13 Release Series
   1425                         Changes, New Features, and Fixes
   1426 
   1427    This page is a "brief" summary of some of the huge number of
   1428    improvements in GCC 13. You may also want to check out our [1]Porting
   1429    to GCC 13 page and the [2]full GCC documentation.
   1430 
   1431 Caveats
   1432 
   1433      * OpenMP offloading to Intel MIC has been removed.
   1434      * The support for the cr16-elf, tilegx*-linux, tilepro*-linux,
   1435        hppa[12]*-*-hpux10*, hppa[12]*-*-hpux11* and m32c-rtems
   1436        configurations has been removed.
   1437      * Support for Solaris 11.3 (*-*-solaris2.11.3) has been declared
   1438        obsolete. The next release of GCC will have corresponding code
   1439        permanently removed. Details can be found in the [3]announcement.
   1440      * Support for emitting the STABS debugging format (including the
   1441        -gstabs and -gxcoff options) has been removed. (This means the dbx
   1442        debugger is no longer supported, either.)
   1443      * Legacy debug info compression option -gz=zlib-gnu was removed and
   1444        the option is ignored right now.
   1445      * [4]-Warray-bounds=2 will no longer issue warnings for out of bounds
   1446        accesses to trailing struct members of one-element array type
   1447        anymore. Instead it diagnoses accesses to trailing arrays according
   1448        to [5]-fstrict-flex-arrays.
   1449      * [6]-fanalyzer is still only suitable for analyzing C code. In
   1450        particular, using it on C++ is unlikely to give meaningful output.
   1451      * In the arm port, support for the iWMMXt extensions, enabled through
   1452        -mcpu=iwmmxt, has been deprecated and will be removed in a future
   1453        release. This includes support for the [7]iWMMXt built-in
   1454        functions.
   1455      * For C++, construction of the global iostream objects std::cout,
   1456        std::cin, etc. is now done inside the standard library, instead of
   1457        in every source file that includes the <iostream> header. This
   1458        change improves the start-up performance of C++ programs, but it
   1459        means that code compiled with GCC 13.1 will crash if the correct
   1460        version of libstdc++.so is not used at run time. See the
   1461        [8]documentation about using the right libstdc++.so at run time.
   1462        Future GCC releases will mitigate the problem so that the program
   1463        cannot be run at all with an older libstdc++.so.
   1464 
   1465 [9]General Improvements
   1466 
   1467      * [10]OpenMP
   1468           + Reverse offload is now supported with AMD GCN and nvptx
   1469             devices. Additionally, the requires handling has been improved
   1470             and all clauses are now accepted. If a requirement cannot be
   1471             fulfilled for an accessible device, this device is excluded
   1472             from the list of available devices. This may imply that the
   1473             only device left is the host (the initial device). In
   1474             particular, unified_address and unified_shared_memory are
   1475             unsupported by all non-host devices.
   1476           + OpenMP 5.0: Fortran now supports some non-rectangular loop
   1477             nests; for C/C++, the support was added in GCC 11.
   1478           + The following OpenMP 5.1 features have been added: the
   1479             omp_all_memory reserved locator, the inoutset modifier to the
   1480             depend clause, the nowait clause for the taskwait directive
   1481             and the omp_target_is_accessible, omp_target_memcpy_async,
   1482             omp_target_memcpy_rect_async and omp_get_mapped_ptr API
   1483             routines. The assume and assumes directives, the begin/end
   1484             declare target syntax in C/C++ and device-specific ICV
   1485             settings with environment variables are now supported.
   1486           + Initial support for OpenMP 5.2 features has been added:
   1487             firstprivate and allocate clauses on the scope construct; the
   1488             OpenMP 5.2 syntax of the linear clause; new enum/constants
   1489             omp_initial_device and omp_invalid_device; and optionally
   1490             omitting the map-type in target enter/exit data. The enter
   1491             clause (as alias for to) has been added to the declare target
   1492             directive. Also added have been the omp_in_explicit_task
   1493             routine and the doacross clause as alias for depend with
   1494             source/sink modifier.
   1495           + The _ALL suffix to the device-scope environment variables
   1496             added in Technical Report (TR11) is already handled.
   1497           + For user defined allocators requesting high bandwidth or large
   1498             capacity memspaces or interleaved partitioning, the
   1499             [11]memkind library is used, if available at run time.
   1500      * AddressSanitizer defaults to detect_stack_use_after_return=1 on
   1501        GNU/Linux targets. For compatibility, it can be disabled with env
   1502        ASAN_OPTIONS=detect_stack_use_after_return=0.
   1503      * New debug info compression option value -gz=zstd has been added.
   1504      * Link-time optimization improvements:
   1505           + LTO supports the newly added jobserver of GNU make jobserver
   1506             that uses named pipes (--jobserver-style=fifo) by default.
   1507           + If make's jobserver is active, parallel LTO WPA streaming
   1508             communicates with it and thus avoids system overcommitting.
   1509      * -Ofast, -ffast-math and -funsafe-math-optimizations will no longer
   1510        add startup code to alter the floating-point environment when
   1511        producing a shared object with -shared.
   1512      * GCC can now emit its diagnostics using [12]SARIF. This is a
   1513        JSON-based format suited for capturing the results of static
   1514        analysis tools (like GCC's [13]-fanalyzer), but it can also be used
   1515        to capture other GCC warnings and errors in a machine-readable
   1516        format. Specifically, the [14]-fdiagnostics-format= option has been
   1517        extended to support these new values:
   1518           + -fdiagnostics-format=sarif-stderr
   1519           + -fdiagnostics-format=sarif-file
   1520           + -fdiagnostics-format=json-stderr, a synonym for the existing
   1521             -fdiagnostics-format=json
   1522           + -fdiagnostics-format=json-file
   1523        where the json-prefixed variants refer to GCC's own JSON diagnostic
   1524        format.
   1525      * Support for profiling and test coverage in freestanding
   1526        environments has been added, see also [15]Profiling and Test
   1527        Coverage in Freestanding Environments.
   1528      * New options -fharden-compares and -fharden-conditional-branches to
   1529        verify compares and conditional branches, to detect some
   1530        power-deprivation hardware attacks, using reversed conditions.
   1531 
   1532 [16]New Languages and Language specific improvements
   1533 
   1534   [17]Ada
   1535 
   1536      * Traceback support added in RTEMS for the PPC ELF and ARM
   1537        architectures.
   1538      * Support for versions older than VxWorks 7 has been removed.
   1539      * General improvements to the contracts in the standard libraries.
   1540      * Addition of GNAT.Binary_Search.
   1541      * Further additions and fixes for the Ada 2022 specification.
   1542      * The Pragma SPARK_Mode=>Auto is now accepted. Contract analysis has
   1543        been further improved.
   1544      * Documentation improvements.
   1545 
   1546   [18]C family
   1547 
   1548      * New warnings:
   1549           + [19]-Wxor-used-as-pow warns about uses of ^, the exclusive or
   1550             operator, where it appears the user meant exponentiation
   1551             ([20]PR90885)
   1552      * Three new function attributes for documenting int arguments that
   1553        are file descriptors:
   1554           + [21]__attribute__((fd_arg(N)))
   1555           + [22]__attribute__((fd_arg_read(N)))
   1556           + [23]__attribute__((fd_arg_write(N)))
   1557        These are used by [24]-fanalyzer to detect misuses of file
   1558        descriptors.
   1559      * A new statement attribute for C++23 [25]P1774R8 Portable
   1560        assumptions support also in C or older C++:
   1561        [26]__attribute__((assume(EXPR)));
   1562      * GCC can now control when to treat the trailing array of a structure
   1563        as a flexible array member for the purpose of accessing the
   1564        elements of such an array. By default, all trailing arrays in
   1565        aggregates are treated as flexible array members. Use the new
   1566        command-line option [27]-fstrict-flex-arrays to control which array
   1567        members are treated as flexible arrays.
   1568 
   1569   [28]C
   1570 
   1571      * Several C23 features have been implemented:
   1572           + [29]N3042, Introduce the nullptr constant
   1573           + [30]N2963, Enhanced Enumerations (fixed underlying types)
   1574           + [31]N2975, Relax requirements for variadic parameter lists
   1575           + [32]N3007, Type inference for object definitions (auto)
   1576           + [33]N3018, The constexpr specifier for object definitions
   1577           + [34]N3038, Introduce storage-class specifiers for compound
   1578             literals
   1579           + typeof (previously supported as an extension) and
   1580             typeof_unqual
   1581           + New keywords alignas, alignof, bool, false, static_assert,
   1582             thread_local, true
   1583           + [35]N2764, The noreturn attribute
   1584           + Support for empty initializer braces
   1585           + __STDC_VERSION_*_H__ header version macros
   1586           + Removal of ATOMIC_VAR_INIT
   1587           + unreachable macro in <stddef.h>
   1588           + Removal of trigraphs
   1589           + Removal of unprototyped functions
   1590           + printf and scanf format checking with [36]-Wformat for %wN and
   1591             %wfN format length modifiers
   1592           + [37]N2836, Identifier Syntax using Unicode Standard Annex 31
   1593      * In addition to those C23 features, existing features adopted in C23
   1594        have been adjusted to follow C23 requirements and are not diagnosed
   1595        with -std=c2x -Wpedantic.
   1596      * New warnings:
   1597           + [38]-Wenum-int-mismatch warns about mismatches between an
   1598             enumerated type and an integer type ([39]PR105131)
   1599 
   1600   [40]C++
   1601 
   1602      * Excess precision support (which has been available in C since GCC
   1603        4.5) has been implemented for C++ as well. It is enabled by default
   1604        in strict standard modes like -std=c++17, where it defaults to
   1605        -fexcess-precision=standard, while in GNU standard modes like
   1606        -std=gnu++20 it defaults to -fexcess-precision=fast. The option
   1607        mainly affects IA-32/x86-64 using x87 math and in some cases on
   1608        Motorola 68000, where float and double expressions are evaluated in
   1609        long double precision and S/390, System z, IBM z Systems where
   1610        float expressions are evaluated in double precision. Also, on
   1611        several architectures where std::float16_t or std::bfloat16_t types
   1612        are supported those are evaluated in float precision.
   1613        -fexcess-precision=fast restores previous behavior.
   1614      * Several C++23 features have been implemented:
   1615           + [41]P2324R1, Labels at the end of compound statements
   1616             ([42]PR103539)
   1617           + [43]P2255R2, A type trait to detect reference binding to
   1618             temporary ([44]PR104477)
   1619           + [45]P2327R1, De-deprecating volatile compound operations
   1620           + [46]P2437R1, Support for #warning ([47]PR106646)
   1621           + [48]P2290R3, Delimited escape sequences ([49]PR106645)
   1622           + [50]P2071R2, Named universal character escapes ([51]PR106648)
   1623           + [52]P2513R3, char8_t Compatibility and Portability Fix
   1624             ([53]PR106656)
   1625           + [54]P1169R4, static operator() ([55]PR106651)
   1626           + [56]P2266R3, Simpler implicit move ([57]PR101165)
   1627           + [58]P2468R2, The Equality Operator You Are Looking For
   1628             ([59]PR106644)
   1629           + [60]P2362R3, Remove non-encodable wide character literals and
   1630             multicharacter wide character literals ([61]PR106647)
   1631           + [62]P2448R2, Relaxing some constexpr restrictions
   1632             ([63]PR106649)
   1633           + [64]P1467R9, Extended floating-point types and standard names
   1634             ([65]PR106652)
   1635           + [66]P1774R8, Portable assumptions ([67]PR106654)
   1636           + [68]P2295R6, Support for UTF-8 as a portable source file
   1637             encoding ([69]PR106655)
   1638           + [70]P2589R1, static operator[] ([71]PR107684)
   1639      * New warnings:
   1640           + [72]-Wself-move warns when a value is moved to itself with
   1641             std::move ([73]PR81159)
   1642           + [74]-Wdangling-reference warns when a reference is bound to a
   1643             temporary whose lifetime has ended ([75]PR106393)
   1644      * The [76]-Wpessimizing-move and [77]-Wredundant-move warnings have
   1645        been extended to warn in more contexts.
   1646      * The [78]-nostdlib++ option has been added, to enable linking with
   1647        g++ without implicitly linking in the C++ standard library.
   1648 
   1649     [79]Runtime Library (libstdc++)
   1650 
   1651      * Improved experimental support for C++20, including:
   1652           + <format> header and std::format.
   1653           + std::chrono::utc_clock and other clocks, time zones, and
   1654             std::format support in the <chrono> header.
   1655      * Improved experimental support for C++23, including:
   1656           + Additions to the <ranges> header: views::zip,
   1657             views::zip_transform, views::adjacent,
   1658             views::adjacent_transform views::pairwise, views::slide,
   1659             views::chunk, views::chunk_by, views::repeat, views::chunk_by,
   1660             views::cartesian_product, views::as_rvalue, views::enumerate,
   1661             views::as_const.
   1662           + Additions to the <algorithm> header: ranges::contains,
   1663             ranges::contains_subrange, ranges::iota, ranges::find_last,
   1664             ranges::find_last_if, ranges::find_last_if_not,
   1665             ranges::fold_left, ranges::fold_left_first,
   1666             ranges::fold_right, ranges::fold_right_last,
   1667             ranges::fold_left_with_iter,
   1668             ranges::fold_left_first_with_iter.
   1669           + Monadic operations for std::expected.
   1670           + Constexpr std::bitset, std::to_chars and std::from_chars.
   1671           + Library support for extended floating-point types.
   1672      * Support for the <experimental/scope> header from v3 of the Library
   1673        Fundamentals Technical Specification.
   1674      * Support for the <experimental/synchronized_value> header from v2 of
   1675        the Concurrency Technical Specification.
   1676      * Support for many previously unavailable features in freestanding
   1677        mode, thanks to Arsen Arsenovi. For example, std::tuple is now
   1678        available for freestanding compilation. The freestanding subset
   1679        contains all the components made freestanding by [80]P1642, and
   1680        libstdc++ adds more components such as std::array and
   1681        std::string_view. Additionally, libstdc++ now respects the
   1682        -ffreestanding compiler option and so it is not necessary to build
   1683        a separate freestanding installation of libstdc++. Compiling with
   1684        -ffreestanding restricts the available features to the freestanding
   1685        subset, even if libstdc++ was built as a full, hosted
   1686        implementation.
   1687 
   1688   [81]D
   1689 
   1690      * Support for the D programming language has been updated to version
   1691        2.103.1 of the language and run-time library. Full changelog for
   1692        this release and previous releases can be found on the
   1693        [82]dlang.org website.
   1694      * The following GCC attributes are now recognized and available from
   1695        the gcc.attributes module with short-hand aliases for convenience:
   1696           + @attribute("no_sanitize", arguments) or
   1697             @no_sanitize(arguments).
   1698           + @attribute("register") or @register.
   1699           + @attribute("simd") or @simd.
   1700           + @attribute("simd_clones", mask) or @simd_clones(mask).
   1701           + @attribute("visibility", arguments) or @visibility(arguments).
   1702      * New aliases have been added to gcc.attributes for compatibility
   1703        with ldc.attributes.
   1704           + The @hidden attribute is an alias for @attribute("visibility",
   1705             "hidden").
   1706           + The @noSanitize attribute is an alias for
   1707             @attribute("no_sanitize").
   1708      * Vector operation intrinsics prefetch, loadUnaligned,
   1709        storeUnaligned, shuffle, shufflevector, extractelement,
   1710        insertelement, convertvector, and blendvector have been added to
   1711        the gcc.simd module.
   1712      * New warnings:
   1713           + [83]-Wbuiltin-declaration-mismatch= warns when a built-in
   1714             function is declared with the wrong signature.
   1715           + [84]-Wmismatched-special-enum warns when a special enum is
   1716             declared with the wrong base type.
   1717      * New version identifier D_Optimized is now predefined when the -O
   1718        option, or any higher optimization level is used.
   1719      * The predefinition of version D_Exceptions can now by controlled by
   1720        the option -fexception.
   1721      * The predefinition of version D_TypeInfo can now by controlled by
   1722        the option -frtti.
   1723      * The -fdebug= and -fversion= compiler switches no longer accept an
   1724        integer argument.
   1725 
   1726   [85]Fortran
   1727 
   1728      * Finalization is now fully supported.
   1729 
   1730   [86]Go
   1731 
   1732      * GCC 13, like GCC 12, provides a complete implementation of the Go
   1733        1.18 user packages.
   1734      * Although Go 1.18 includes support for generic programming, that
   1735        support is not yet available in GCC.
   1736 
   1737   [87]Modula-2
   1738 
   1739      * Support for the language Modula-2 has been added. This includes
   1740        support for the ISO/IEC 10514-1, PIM2, PIM3, PIM4 dialects together
   1741        with a complete set of ISO/IEC 10514-1 and PIM libraries.
   1742      * The <* noreturn *> attribute is supported with the -Wreturn-type
   1743        [88]option.
   1744 
   1745 [89]New Targets and Target Specific Improvements
   1746 
   1747   [90]AArch64
   1748 
   1749      * The AArch64 target now supports Decimal Floating-point in the BID
   1750        format through the libbid library.
   1751      * A number of new CPUs are supported through the -mcpu and -mtune
   1752        options (GCC identifiers in parentheses).
   1753           + Ampere-1A (ampere1a).
   1754           + Arm Cortex-A715 (cortex-a715).
   1755           + Arm Cortex-X1C (cortex-x1c).
   1756           + Arm Cortex-X3 (cortex-x3).
   1757           + Arm Neoverse V2 (neoverse-v2).
   1758      * Support has been added for the armv9.1-a, armv9.2-a and armv9.3-a
   1759        arguments to the -march= option.
   1760      * The FEAT_LRCPC feature is now supported by generating the LDAPR
   1761        instructions for C and C++ atomic loads with an acquire memory
   1762        model. This is enabled when compiling with the +rcpc extension to
   1763        -march or a CPU target that supports this feature.
   1764      * The FEAT_CSSC feature from the 2022 Arm Architecture extensions is
   1765        supported through the +cssc extension option. When enabled, scalar
   1766        operations like integer minimum, maximum, absolute value, count
   1767        trailing zeroes (__builtin_ctz), population count
   1768        (__builtin_popcount) can be implemented in a single instruction.
   1769      * The FEAT_LSE2 feature is now supported through libatomic and
   1770        provides lockless 16-byte atomics on systems that implement it.
   1771 
   1772   [91]AMD Radeon (GCN)
   1773 
   1774      * Support for the Instinct MI200 series devices ([92] gfx90a) has
   1775        been added.
   1776      * SIMD vectorization support has been improved; this and
   1777        stack-handling changes [93]require newlib 4.3.0 (or newer).
   1778 
   1779   [94]arm
   1780 
   1781      * A number of new CPUs are supported through the -mcpu and -mtune
   1782        options (GCC identifiers in parentheses).
   1783           + STAR-MC1 (star-mc1).
   1784           + Arm Cortex-X1C (cortex-x1c).
   1785           + Arm Cortex-M85 (cortex-m85).
   1786      * Support has been added for the M-profile PACBTI extension that can
   1787        help harden the generated code against return-oriented and
   1788        jump-oriented attacks. It can be enabled through the
   1789        -mbranch-protection= option.
   1790 
   1791   [95]AVR
   1792 
   1793      * Support for the following devices has been added in GCC 13.3:
   1794           + ATtiny102, ATtiny104, ATtiny424, ATtiny426, ATtiny427,
   1795             ATtiny824, ATtiny826, ATtiny827, ATtiny1624, ATtiny1626,
   1796             ATtiny1627, ATtiny3224, ATtiny3226, ATtiny3227, AVR32DD14,
   1797             AVR32DD20, AVR32DD28, AVR32DD32, AVR32DU14, AVR32DU20,
   1798             AVR32DU28, AVR32DU32, AVR32EA28, AVR32EA32, AVR32EA48,
   1799             AVR64DD14, AVR64DD20, AVR64DD28, AVR64DD32, AVR64DU28,
   1800             AVR64DU32, AVR64EA28, AVR64EA32, AVR64EA48, ATA5787, ATA5835,
   1801             ATA5700M322.
   1802      * Support for the following devices has been added in GCC 13.4:
   1803           + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
   1804             AVR64SD48.
   1805      * Support for the following devices has been added in GCC 13.5:
   1806           + AVR32DA28S, AVR32DA32S, AVR32DA48S, AVR64DA28S, AVR64DA32S,
   1807             AVR64DA48S AVR64DA64S, AVR128DA28S, AVR128DA32S, AVR128DA48S,
   1808             AVR128DA64S, AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32,
   1809             AVR16LA14, AVR16LA20, AVR16LA28, AVR16LA32, AVR32LA14,
   1810             AVR32LA20, AVR32LA28, AVR32LA32.
   1811 
   1812   [96]IA-32/x86-64
   1813 
   1814      * For both C and C++ the __bf16 type is supported on x86 systems with
   1815        SSE2 and above enabled.
   1816      * Use this __bf16 type for AVX512BF16 intrinsics instead of
   1817        __bfloat16 which is typedef for short. __bf16 is now part of the
   1818        x86 psABI. Users need to adjust their AVX512BF16-related source
   1819        code when upgrading to GCC 13.
   1820      * New ISA extension support for Intel AMX-COMPLEX was added.
   1821        AMX-COMPLEX intrinsics are available via the -mamx-complex compiler
   1822        switch.
   1823      * New ISA extension support for Intel AMX-FP16 was added. AMX-FP16
   1824        intrinsics are available via the -mamx-fp16 compiler switch.
   1825      * New ISA extension support for Intel AVX-IFMA was added. AVX-IFMA
   1826        intrinsics are available via the -mavxifma compiler switch.
   1827      * New ISA extension support for Intel AVX-NE-CONVERT was added.
   1828        AVX-NE-CONVERT intrinsics are available via the -mavxneconvert
   1829        compiler switch.
   1830      * New ISA extension support for Intel AVX-VNNI-INT8 was added.
   1831        AVX-VNNI-INT8 intrinsics are available via the -mavxvnniint8
   1832        compiler switch.
   1833      * New ISA extension support for Intel CMPccXADD was added. CMPccXADD
   1834        intrinsics are available via the -mcmpccxadd compiler switch.
   1835      * New ISA extension support for Intel PREFETCHI was added. PREFETCHI
   1836        intrinsics are available via the -mprefetchi compiler switch.
   1837      * New ISA extension support for Intel RAO-INT was added. RAO-INT
   1838        intrinsics are available via the -mraoint compiler switch.
   1839      * GCC now supports the Intel CPU named Raptor Lake through
   1840        -march=raptorlake. Raptor Lake is based on Alder Lake. Since GCC
   1841        13.5, CLDEMOTE is not enabled any longer.
   1842      * GCC now supports the Intel CPU named Meteor Lake through
   1843        -march=meteorlake. Meteor Lake is based on Alder Lake. Since GCC
   1844        13.5, CLDEMOTE is not enabled any longer.
   1845      * GCC now supports the Intel CPU named Sierra Forest through
   1846        -march=sierraforest. Based on ISA extensions enabled on Alder Lake,
   1847        the switch in addition enables the AVX-IFMA, AVX-NE-CONVERT,
   1848        AVX-VNNI-INT8 and CMPccXADD ISA extensions. Since GCC 13.2, ENQCMD
   1849        and UINTR are further enabled.
   1850      * GCC now supports the Intel CPU named Grand Ridge through
   1851        -march=grandridge. Based on Sierra Forest, the switch in addition
   1852        enables the RAO-INT ISA extensions. Since GCC 13.2, ENQCMD and
   1853        UINTR are further enabled. Since GCC 13.3, RAO-INT is not enabled
   1854        any longer.
   1855      * GCC now supports the Intel CPU named Emerald Rapids through
   1856        -march=emeraldrapids. Emerald Rapids is based on Sapphire Rapids.
   1857      * GCC now supports the Intel CPU named Granite Rapids through
   1858        -march=graniterapids. Based on Sapphire Rapids, the switch in
   1859        addition enables the AMX-FP16 and PREFETCHI ISA extensions.
   1860      * GCC now supports the Intel CPU named Granite Rapids D through
   1861        -march=graniterapids-d. Based on Granite Rapids, the switch in
   1862        addition enables the AMX-COMPLEX ISA extensions.
   1863      * Since GCC 13.5, CLDEMOTE is not enabled through the compiler switch
   1864        -march=alderlake any longer.
   1865      * GCC now supports AMD CPUs based on the znver4 core via
   1866        -march=znver4. The switch makes GCC consider using 512-bit vectors
   1867        when auto-vectorizing.
   1868 
   1869   [97]LoongArch
   1870 
   1871      * New features
   1872           + The new command-line option -mexplicit-relocs decides whether
   1873             to use the assembler relocation operator when dealing with
   1874             symbolic addresses. It is enabled by default if a compatible
   1875             assembler (binutils 2.40 or later) is present at GCC build
   1876             time.
   1877           + The new command-line option -mdirect-extern-access can be used
   1878             to prevent accessing external symbols through GOT.
   1879           + The new variable attribute [98]model has been added.
   1880      * Built-in functions
   1881           + The rint and copysign mathematical builtins (and their float
   1882             variants) are now implemented as inline LoongArch intrinsics.
   1883           + The lrint, logb, scalbln, scalbn and ldexp mathematical
   1884             builtins (and their float variants) are now implemented as
   1885             inline LoongArch intrinsics when using -fno-math-errno.
   1886           + The lceil and lfloor mathematical builtins (and their float
   1887             variants) are now implemented as inline LoongArch intrinsics
   1888             when using -ffp-int-builtin-inexact.
   1889      * Subprojects Support
   1890           + libvtv now supports LoongArch.
   1891           + libitm now supports LoongArch.
   1892           + Address sanitizers other than HWASan and TSan are now
   1893             supported on LoongArch.
   1894 
   1895   [99]NVPTX
   1896 
   1897      * The default value for the [100]-march option can be now changed
   1898        when [101]building GCC using the [102]--with-arch= configure
   1899        option. GCC's target libraries are then build both with sm_30 and
   1900        the specified target architecture. If not specified, GCC defaults
   1901        to sm_30.
   1902 
   1903   [103]RISC-V
   1904 
   1905      * Support for vector intrinsics as specified in [104]version 0.11 of
   1906        the RISC-V vector intrinsic specification, thanks Ju-Zhe Zhong from
   1907        [105]RiVAI for contributing most of implementation.
   1908      * Support for the following standard extensions has been added:
   1909           + Zawrs
   1910           + Zbkb
   1911           + Zbkc
   1912           + Zbkx
   1913           + Zdinx
   1914           + Zfinx
   1915           + Zfh
   1916           + Zfhmin
   1917           + Zhinx
   1918           + Zhinxmin
   1919           + Zicbom
   1920           + Zicbop
   1921           + Zicboz
   1922           + Zknd
   1923           + Zkne
   1924           + Zksed
   1925           + Zksh
   1926           + Zmmul
   1927      * Support for the following vendor extensions has been added:
   1928           + XTheadBa
   1929           + XTheadBb
   1930           + XTheadBs
   1931           + XTheadCmo
   1932           + XTheadCondMov
   1933           + XTheadFMemIdx
   1934           + XTheadFmv
   1935           + XTheadInt
   1936           + XTheadMac
   1937           + XTheadMemIdx
   1938           + XTheadMemPair
   1939           + XTheadSync
   1940      * The following new CPUs are supported through the -mcpu option (GCC
   1941        identifiers in parentheses).
   1942           + T-Head's XuanTie C906 (thead-c906).
   1943      * Improves the multi-lib selection mechanism for the bare-metal
   1944        toolchain (riscv*-elf*). GCC will now automatically select the
   1945        best-fit multi-lib candidate instead of requiring all possible
   1946        reuse rules to be listed at build time.
   1947 
   1948 [106]Operating Systems
   1949 
   1950   [107]Windows
   1951 
   1952      * The GNU threads library used by the win32 thread model has been
   1953        reimplemented using direct Win32 API calls, except for the
   1954        Objective-C specific subset. It requires Windows XP/Server 2003 or
   1955        later. The new implementation also adds the support needed for the
   1956        C++11 threads, using again direct Win32 API calls; this additional
   1957        layer requires Windows Vista/Server 2008 or later. It is
   1958        recommended to use a recent version of MinGW-W64 in conjunction
   1959        with the win32 thread model.
   1960 
   1961 [108]Improvements to Static Analyzer
   1962 
   1963      * The analyzer has gained 20 new warnings:
   1964           + [109]-Wanalyzer-allocation-size
   1965           + [110]-Wanalyzer-deref-before-check
   1966           + [111]-Wanalyzer-exposure-through-uninit-copy
   1967           + Seven new warnings relating to misuse of file descriptors:
   1968                o [112]-Wanalyzer-fd-access-mode-mismatch
   1969                o [113]-Wanalyzer-fd-double-close
   1970                o [114]-Wanalyzer-fd-leak
   1971                o [115]-Wanalyzer-fd-phase-mismatch (e.g. calling accept on
   1972                  a socket before calling listen on it)
   1973                o [116]-Wanalyzer-fd-type-mismatch (e.g. using a stream
   1974                  socket operation on a datagram socket)
   1975                o [117]-Wanalyzer-fd-use-after-close
   1976                o [118]-Wanalyzer-fd-use-without-check
   1977             along with special-casing handling of the behavior of open,
   1978             close, creat, dup, dup2, dup3, pipe, pipe2, read, and write.
   1979           + [119]-Wanalyzer-imprecise-fp-arithmetic
   1980           + [120]-Wanalyzer-infinite-recursion
   1981           + [121]-Wanalyzer-jump-through-null
   1982           + [122]-Wanalyzer-out-of-bounds
   1983           + [123]-Wanalyzer-putenv-of-auto-var
   1984           + [124]-Wanalyzer-tainted-assertion
   1985           + Four new warnings for misuses of <stdarg.h>:
   1986                o [125]-Wanalyzer-va-list-leak for complaining about
   1987                  missing va_end after a va_start or va_copy
   1988                o [126]-Wanalyzer-va-list-use-after-va-end for complaining
   1989                  about va_arg or va_copy used on a va_list that's had
   1990                  va_end called on it
   1991                o [127]-Wanalyzer-va-arg-type-mismatch for type-checking of
   1992                  va_arg usage in interprocedural execution paths against
   1993                  the types of the parameters that were actually passed to
   1994                  the variadic call
   1995                o [128]-Wanalyzer-va-list-exhausted for complaining in
   1996                  interprocedural execution paths if va_arg is used too
   1997                  many times on a va_list
   1998        along with numerous other improvements.
   1999 
   2000 [129]Improvements for plugin authors
   2001 
   2002      * GCC diagnostics can now be [130]associated with rules such as from
   2003        coding standards documents, or specifications. Such rules have a
   2004        code name and can have a URL, which GCC can print in text form or
   2005        capture in its [131]SARIF output when emitting diagnostics.
   2006 
   2007 Other significant improvements
   2008 
   2009 [132]GCC 13.1
   2010 
   2011    This is the [133]list of problem reports (PRs) from GCC's bug tracking
   2012    system that are known to be fixed in the 13.1 release. This list might
   2013    not be complete (that is, it is possible that some PRs that have been
   2014    fixed are not listed here).
   2015 
   2016 [134]GCC 13.2
   2017 
   2018    This is the [135]list of problem reports (PRs) from GCC's bug tracking
   2019    system that are known to be fixed in the 13.2 release. This list might
   2020    not be complete (that is, it is possible that some PRs that have been
   2021    fixed are not listed here).
   2022 
   2023 [136]GCC 13.3
   2024 
   2025    This is the [137]list of problem reports (PRs) from GCC's bug tracking
   2026    system that are known to be fixed in the 13.3 release. This list might
   2027    not be complete (that is, it is possible that some PRs that have been
   2028    fixed are not listed here).
   2029 
   2030   Language Specific Changes
   2031 
   2032   C++
   2033 
   2034      * The libstdc++exp.a library now includes all the Filesystem TS
   2035        symbols from the libstdc++fs.a library, and the experimental
   2036        symbols for the C++23 std::stacktrace class from the
   2037        libstdc++_libbacktrace.a library. This means that -lstdc++exp is
   2038        the only library needed for all experimental libstdc++ features.
   2039 
   2040 [138]GCC 13.4
   2041 
   2042    This is the [139]list of problem reports (PRs) from GCC's bug tracking
   2043    system that are known to be fixed in the 13.4 release. This list might
   2044    not be complete (that is, it is possible that some PRs that have been
   2045    fixed are not listed here).
   2046 
   2047 
   2048     For questions related to the use of GCC, please consult these web
   2049     pages and the [140]GCC manuals. If that fails, the
   2050     [141]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2051     web pages and the development of GCC are welcome on our developer
   2052     list at [142]gcc (a] gcc.gnu.org. All of [143]our lists have public
   2053     archives.
   2054 
   2055    Copyright (C) [144]Free Software Foundation, Inc. Verbatim copying and
   2056    distribution of this entire article is permitted in any medium,
   2057    provided this notice is preserved.
   2058 
   2059    These pages are [145]maintained by the GCC team. Last modified
   2060    2026-03-15.
   2061 
   2062 References
   2063 
   2064    1. https://gcc.gnu.org/gcc-13/porting_to.html
   2065    2. https://gcc.gnu.org/onlinedocs/index.html#current
   2066    3. https://gcc.gnu.org/pipermail/gcc/2022-December/240322.html
   2067    4. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Warray-bounds
   2068    5. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
   2069    6. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2070    7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/ARM-iWMMXt-Built-in-Functions.html
   2071    8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic
   2072    9. https://gcc.gnu.org/gcc-13/changes.html#general
   2073   10. https://gcc.gnu.org/projects/gomp/
   2074   11. http://memkind.github.io/memkind/
   2075   12. https://sarifweb.azurewebsites.net/
   2076   13. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2077   14. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2078   15. https://gcc.gnu.org/onlinedocs/gcc/Freestanding-Environments.html
   2079   16. https://gcc.gnu.org/gcc-13/changes.html#languages
   2080   17. https://gcc.gnu.org/gcc-13/changes.html#ada
   2081   18. https://gcc.gnu.org/gcc-13/changes.html#c-family
   2082   19. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wxor-used-as-pow
   2083   20. https://gcc.gnu.org/PR90885
   2084   21. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg-function-attribute
   2085   22. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fread-function-attribute
   2086   23. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fwrite-function-attribute
   2087   24. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2088   25. https://wg21.link/p1774r8
   2089   26. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Statement-Attributes.html#index-assume-statement-attribute
   2090   27. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
   2091   28. https://gcc.gnu.org/gcc-13/changes.html#c
   2092   29. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm
   2093   30. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2963.htm
   2094   31. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf
   2095   32. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3007.htm
   2096   33. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm
   2097   34. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3038.htm
   2098   35. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf
   2099   36. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wformat
   2100   37. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
   2101   38. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wenum-int-mismatch
   2102   39. https://gcc.gnu.org/PR105131
   2103   40. https://gcc.gnu.org/gcc-13/changes.html#cxx
   2104   41. https://wg21.link/p2324
   2105   42. https://gcc.gnu.org/PR103539
   2106   43. https://wg21.link/p2255
   2107   44. https://gcc.gnu.org/PR104477
   2108   45. https://wg21.link/p2327
   2109   46. https://wg21.link/p2437
   2110   47. https://gcc.gnu.org/PR106646
   2111   48. https://wg21.link/p2290
   2112   49. https://gcc.gnu.org/PR106645
   2113   50. https://wg21.link/p2071
   2114   51. https://gcc.gnu.org/PR106648
   2115   52. https://wg21.link/p2513
   2116   53. https://gcc.gnu.org/PR106656
   2117   54. https://wg21.link/p1169r4
   2118   55. https://gcc.gnu.org/PR106651
   2119   56. https://wg21.link/p2266r3
   2120   57. https://gcc.gnu.org/PR101165
   2121   58. https://wg21.link/p2468r2
   2122   59. https://gcc.gnu.org/PR106644
   2123   60. https://wg21.link/p2362r3
   2124   61. https://gcc.gnu.org/PR106647
   2125   62. https://wg21.link/p2448r2
   2126   63. https://gcc.gnu.org/PR106649
   2127   64. https://wg21.link/p1467r9
   2128   65. https://gcc.gnu.org/PR106652
   2129   66. https://wg21.link/p1774r8
   2130   67. https://gcc.gnu.org/PR106654
   2131   68. https://wg21.link/p2295r6
   2132   69. https://gcc.gnu.org/PR106655
   2133   70. https://wg21.link/p2589r1
   2134   71. https://gcc.gnu.org/PR107684
   2135   72. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wself-move
   2136   73. https://gcc.gnu.org/PR81159
   2137   74. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
   2138   75. https://gcc.gnu.org/PR106393
   2139   76. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   2140   77. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   2141   78. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Link-Options.html#index-nostdlib_002b_002b
   2142   79. https://gcc.gnu.org/gcc-13/changes.html#libstdcxx
   2143   80. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1642r11.html
   2144   81. https://gcc.gnu.org/gcc-13/changes.html#d
   2145   82. https://dlang.org/changelog/2.103.1.html
   2146   83. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gdc/Warnings.html#index-Wno-builtin-declaration-mismatch
   2147   84. https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gdc/Warnings.html#index-Wmismatched-special-enum
   2148   85. https://gcc.gnu.org/gcc-13/changes.html#fortran
   2149   86. https://gcc.gnu.org/gcc-13/changes.html#go
   2150   87. https://gcc.gnu.org/gcc-13/changes.html#modula2
   2151   88. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gm2/Compiler-options.html
   2152   89. https://gcc.gnu.org/gcc-13/changes.html#targets
   2153   90. https://gcc.gnu.org/gcc-13/changes.html#aarch64
   2154   91. https://gcc.gnu.org/gcc-13/changes.html#amdgcn
   2155   92. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/AMD-GCN-Options.html
   2156   93. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   2157   94. https://gcc.gnu.org/gcc-13/changes.html#arm
   2158   95. https://gcc.gnu.org/gcc-13/changes.html#avr
   2159   96. https://gcc.gnu.org/gcc-13/changes.html#x86
   2160   97. https://gcc.gnu.org/gcc-13/changes.html#loongarch
   2161   98. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/LoongArch-Variable-Attributes.html#LoongArch-Variable-Attributes
   2162   99. https://gcc.gnu.org/gcc-13/changes.html#nvptx
   2163  100. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Nvidia-PTX-Options.html
   2164  101. https://gcc.gnu.org/install/
   2165  102. https://gcc.gnu.org/install/specific.html#nvptx-x-none
   2166  103. https://gcc.gnu.org/gcc-13/changes.html#riscv
   2167  104. https://github.com/riscv-non-isa/riscv-rvv-intrinsic-doc/tree/v0.11.x
   2168  105. https://rivai-ic.com.cn/
   2169  106. https://gcc.gnu.org/gcc-13/changes.html#os
   2170  107. https://gcc.gnu.org/gcc-13/changes.html#windows
   2171  108. https://gcc.gnu.org/gcc-13/changes.html#analyzer
   2172  109. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
   2173  110. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check
   2174  111. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy
   2175  112. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch
   2176  113. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close
   2177  114. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak
   2178  115. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch
   2179  116. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch
   2180  117. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close
   2181  118. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check
   2182  119. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic
   2183  120. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion
   2184  121. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null
   2185  122. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   2186  123. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var
   2187  124. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
   2188  125. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak
   2189  126. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end
   2190  127. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch
   2191  128. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted
   2192  129. https://gcc.gnu.org/gcc-13/changes.html#plugins
   2193  130. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=0b14f590e3e9d95b8211b77d992589d5ab4c25f0
   2194  131. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2195  132. https://gcc.gnu.org/gcc-13/changes.html#13.1
   2196  133. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.0
   2197  134. https://gcc.gnu.org/gcc-13/changes.html#13.2
   2198  135. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
   2199  136. https://gcc.gnu.org/gcc-13/changes.html#13.3
   2200  137. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
   2201  138. https://gcc.gnu.org/gcc-13/changes.html#13.4
   2202  139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.4
   2203  140. https://gcc.gnu.org/onlinedocs/
   2204  141. mailto:gcc-help (a] gcc.gnu.org
   2205  142. mailto:gcc (a] gcc.gnu.org
   2206  143. https://gcc.gnu.org/lists.html
   2207  144. https://www.fsf.org/
   2208  145. https://gcc.gnu.org/about.html
   2209 ======================================================================
   2210 http://gcc.gnu.org/gcc-12/index.html
   2211                              GCC 12 Release Series
   2212 
   2213    (This release series is no longer supported.)
   2214 
   2215    July 11, 2025
   2216 
   2217    The GCC developers are pleased to announce the release of GCC 12.5.
   2218 
   2219    This release is a bug-fix release, containing fixes for regressions in
   2220    GCC 12.4 relative to previous releases of GCC.
   2221 
   2222 Release History
   2223 
   2224    GCC 12.5
   2225           July 11, 2025 ([1]changes, [2]documentation)
   2226 
   2227    GCC 12.4
   2228           Jun 20, 2024 ([3]changes, [4]documentation)
   2229 
   2230    GCC 12.3
   2231           May 8, 2023 ([5]changes, [6]documentation)
   2232 
   2233    GCC 12.2
   2234           Aug 19, 2022 ([7]changes, [8]documentation)
   2235 
   2236    GCC 12.1
   2237           May 6, 2022 ([9]changes, [10]documentation)
   2238 
   2239 References and Acknowledgements
   2240 
   2241    GCC used to stand for the GNU C Compiler, but since the compiler
   2242    supports several other languages aside from C, it now stands for the
   2243    GNU Compiler Collection.
   2244 
   2245    The GCC developers would like to thank the numerous people that have
   2246    contributed new features, improvements, bug fixes, and other changes as
   2247    well as test results to GCC. This [11]amazing group of volunteers is
   2248    what makes GCC successful.
   2249 
   2250    For additional information about GCC please refer to the [12]GCC
   2251    project web site or contact the [13]GCC development mailing list.
   2252 
   2253    To obtain GCC please use [14]our mirror sites or [15]our version
   2254    control system.
   2255 
   2256 
   2257     For questions related to the use of GCC, please consult these web
   2258     pages and the [16]GCC manuals. If that fails, the
   2259     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2260     web pages and the development of GCC are welcome on our developer
   2261     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   2262     archives.
   2263 
   2264    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   2265    distribution of this entire article is permitted in any medium,
   2266    provided this notice is preserved.
   2267 
   2268    These pages are [21]maintained by the GCC team. Last modified
   2269    2025-08-04.
   2270 
   2271 References
   2272 
   2273    1. https://gcc.gnu.org/gcc-12/changes.html
   2274    2. https://gcc.gnu.org/onlinedocs/12.5.0/
   2275    3. https://gcc.gnu.org/gcc-12/changes.html
   2276    4. https://gcc.gnu.org/onlinedocs/12.4.0/
   2277    5. https://gcc.gnu.org/gcc-12/changes.html
   2278    6. https://gcc.gnu.org/onlinedocs/12.3.0/
   2279    7. https://gcc.gnu.org/gcc-12/changes.html
   2280    8. https://gcc.gnu.org/onlinedocs/12.2.0/
   2281    9. https://gcc.gnu.org/gcc-12/changes.html
   2282   10. https://gcc.gnu.org/onlinedocs/12.1.0/
   2283   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
   2284   12. https://gcc.gnu.org/index.html
   2285   13. mailto:gcc (a] gcc.gnu.org
   2286   14. https://gcc.gnu.org/mirrors.html
   2287   15. https://gcc.gnu.org/git.html
   2288   16. https://gcc.gnu.org/onlinedocs/
   2289   17. mailto:gcc-help (a] gcc.gnu.org
   2290   18. mailto:gcc (a] gcc.gnu.org
   2291   19. https://gcc.gnu.org/lists.html
   2292   20. https://www.fsf.org/
   2293   21. https://gcc.gnu.org/about.html
   2294 ======================================================================
   2295 http://gcc.gnu.org/gcc-12/changes.html
   2296                              GCC 12 Release Series
   2297                         Changes, New Features, and Fixes
   2298 
   2299    This page is a "brief" summary of some of the huge number of
   2300    improvements in GCC 12. You may also want to check out our [1]Porting
   2301    to GCC 12 page and the [2]full GCC documentation.
   2302 
   2303 Caveats
   2304 
   2305      * An ABI incompatibility between C and C++ when passing or returning
   2306        by value certain aggregates containing zero width bit-fields has
   2307        been discovered on various targets. As mentioned in [3]PR102024,
   2308        since the [4]PR42217 fix in GCC 4.5 the C++ front-end has been
   2309        removing zero width bit-fields from the internal representation of
   2310        the aggregates after the layout of those aggregates, but the C
   2311        front-end kept them, so passing e.g. struct S { float a; int : 0;
   2312        float b; } or struct T { float c; int : 0; } by value could differ
   2313        between C and C++. Starting with GCC 12 the C++ front-end no longer
   2314        removes those bit-fields from the internal representation and per
   2315        clarified psABI some targets have been changed, so that they either
   2316        ignore those bit-fields in the argument passing by value decisions
   2317        in both C and C++, or they always take them into account. x86-64,
   2318        ARM and AArch64 will always ignore them (so there is a C ABI
   2319        incompatibility between GCC 11 and earlier with GCC 12 or later),
   2320        PowerPC64 ELFv2 and S/390 always take them into account (so there
   2321        is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with
   2322        GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V
   2323        has changed the handling of these already starting with GCC 10. As
   2324        the ABI requires, MIPS takes them into account handling function
   2325        return values so there is a C++ ABI incompatibility with GCC 4.5
   2326        through 11. For function arguments on MIPS, refer to [5]the MIPS
   2327        specific entry. GCC 12 on the above targets will report such
   2328        incompatibilities as warnings or other diagnostics unless
   2329        -Wno-psabi is used.
   2330      * C: Computed gotos require a pointer type now.
   2331      * C++: Two non-standard std::pair constructors have been deprecated.
   2332        These allowed the use of an rvalue and a literal 0 to construct a
   2333        pair containing a move-only type and a pointer. The nullptr keyword
   2334        should be used to initialize the pointer member instead of a
   2335        literal 0, as this is portable to other C++ implementations.
   2336      * The configuration option --enable-libstdcxx-allocator no longer
   2337        supports the bitmap, mt, and pool arguments. Those configurations
   2338        had been broken for some time.
   2339      * D: Building and bootstrapping GDC, the D compiler, now requires a
   2340        working GDC (GCC version 9.1 or later) and D runtime library,
   2341        libphobos, as the D front end is written in D. On some targets,
   2342        libphobos isn't enabled by default, but compiles and works if
   2343        --enable-libphobos is used. Other targets may require a more recent
   2344        version of GCC to bootstrap. Specifics are documented for affected
   2345        targets in the [6]Installing GCC manual.
   2346      * Fortran: OpenMP code using the omp_lib.h include file can no longer
   2347        be compiled with -std=f95 but now requires at least -std=f2003.
   2348        Alternatively, use the omp_lib module, which still supports
   2349        -std=f95 and is recommended to be used instead in general.
   2350      * OpenMP offloading to Intel MIC has been deprecated and will be
   2351        removed in a future release.
   2352      * The cr16 target with the cr16-*-* configuration has been obsoleted
   2353        and will be removed in a future release.
   2354      * The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations
   2355        targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be
   2356        removed in a future release.
   2357      * The m32c*-*-rtems* configuration has been obsoleted and will be
   2358        removed in a future release.
   2359      * The support for the m32r-*-linux*, m32rle-*-linux*,
   2360        m68k*-*-openbsd* and vax-*-openbsd* configurations has been
   2361        removed.
   2362      * STABS: Support for emitting the STABS debugging format is
   2363        deprecated and will be removed in the next release. All ports now
   2364        default to emit DWARF (version 2 or later) debugging info or are
   2365        obsoleted.
   2366      * The optimization level -Ofast now implies
   2367        -fno-semantic-interposition.
   2368 
   2369 [7]General Improvements
   2370 
   2371      * Vectorization is enabled at -O2 which is now equivalent to what
   2372        would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
   2373        in the past. Note that the default vectorizer cost model has been
   2374        changed; it used to behave as if -fvect-cost-model=cheap had been
   2375        specified.
   2376      * GCC now supports the [8]ShadowCallStack sanitizer, which can be
   2377        enabled using the command-line option
   2378        [9]-fsanitize=shadow-call-stack. This sanitizer currently only
   2379        works on AArch64 targets and it requires an environment in which
   2380        all code has been compiled with -ffixed-r18. Its primary initial
   2381        user is the Linux kernel.
   2382 
   2383 [10]New Languages and Language specific improvements
   2384 
   2385      * OpenMP
   2386           + OpenMP 5.0 support has been extended: The close map modifier
   2387             and the affinity clause are now supported. In addition,
   2388             Fortran gained the following features which were available in
   2389             C and C++ before: declare variant is now available, depobj,
   2390             mutexinoutset and iterator can now also be used with the
   2391             depend clause, defaultmap has been updated for OpenMP 5.0, and
   2392             the loop directive and combined directives involving the
   2393             master directive have been added.
   2394           + The following OpenMP 5.1 features have been added: support for
   2395             expressing OpenMP directives as C++ 11 attributes, the masked
   2396             and scope constructs, the nothing and error directives, and
   2397             using primary with the proc_bind clause and OMP_PROC_BIND
   2398             environment variable, the reproducible and unconstrained
   2399             modifiers to the order clause, and, for C/C++ only, the align
   2400             and allocator modifiers to the allocate clause and the atomic
   2401             extensions are now available. The OMP_PLACE environment
   2402             variable supports the OpenMP 5.1 features. In addition, the
   2403             OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT environment variables
   2404             and their associated API routines are now supported as well as
   2405             the memory-allocation routines added for Fortran and extended
   2406             for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
   2407             blocks can be used.
   2408           + The [11]OpenMP Implementation Status can be found in the
   2409             libgomp manual.
   2410      * Version 2.6 of the [12]OpenACC specification continues to be
   2411        maintained and improved in the C, C++ and Fortran compilers. See
   2412        the [13]implementation status section on the OpenACC wiki page and
   2413        the [14]run-time library documentation for further information. In
   2414        addition to general performance tuning and bug fixing, new features
   2415        include:
   2416           + OpenACC worker parallelism for [15]AMD GPUs (already for a
   2417             long time supported for [16]Nvidia GPUs).
   2418           + Data privatization/sharing at the OpenACC gang level.
   2419           + Considerable improvements for the experimental OpenACC
   2420             'kernels' decomposition ([17]--param
   2421             openacc-kernels=decompose).
   2422           + A new warning flag [18]-Wopenacc-parallelism to warn about
   2423             potentially suboptimal choices related to OpenACC parallelism.
   2424      * The offload target code generation for OpenMP and OpenACC can now
   2425        be better adjusted using the new [19]-foffload-options= flag and
   2426        the pre-existing but now documented [20]-foffload= flag.
   2427 
   2428   [21]Ada
   2429 
   2430      * Ada 2022
   2431           + Added the -gnat2022 flag to indicate strict Ada 2022
   2432             compliance. The old -gnat2020 flag is now deprecated.
   2433           + Support for Big Numbers (Annex G) has seen continuous
   2434             improvements. It is now considered complete. It is compatible
   2435             with SPARK, i.e. can be used from SPARK code.
   2436           + Continuous improvements to the Ada 2022 standard since GCC 11.
   2437           + Greatly improved compile time support. More functions can now
   2438             have the with Static aspect and can be used in more contexts.
   2439      * Ada 2022 extensions. The use of the -gnatX flag is necessary to
   2440        access these features as they are not considered stable or
   2441        standard.
   2442           + Fixed lower bound for unconstrained arrays.
   2443                o type Matrix is array (Natural range 0 .. <>, Natural
   2444                  range 0 .. <>) of Integer; is now valid.
   2445                o Subtypes can also specify a lower bound: subtype String_1
   2446                  is String (1 .. <>);. Boundaries from slices will "slide"
   2447                  to the correct lower bound of the subtype.
   2448           + Generalized Object.Operand notation. The following code is now
   2449             valid V.Add_Element(42);, with V being a vector, for example.
   2450           + Additional when constructs. Keywords return, goto and raise
   2451             can now use when in addition to the existing exit when. The
   2452             following expression is therefore now valid raise
   2453             Constraint_Error with "Element is null" when Element = null;
   2454           + Pattern matching
   2455                o The case statement has been extended to cover records and
   2456                  arrays as well as finer grained casing on scalar types.
   2457                  In the future it is expected to provide more compile time
   2458                  guarantees when accessing discriminated fields. Case
   2459                  exhaustion is supported for pattern matching. An example
   2460                  would be
   2461 type Sign is (Neg, Zero, Pos);
   2462 
   2463 function Multiply (S1, S2 : Sign) return Sign is
   2464   (case (S1, S2) is
   2465      when (Neg, Neg) | (Pos, Pos) => Pos,
   2466      when (Zero, <>) | (<>, Zero) => Zero,
   2467      when (Neg, Pos) | (Pos, Neg) => Neg);
   2468 
   2469      * gnatfind and gnatxref, which were already deprecated, have been
   2470        removed.
   2471      * Greatly expanded code covered by contracts. Thanks to this work,
   2472        there are now several Ada standard libraries fully proven in SPARK
   2473        which means they have no runtime nor logical errors. They are
   2474        mostly numeric and string handling libraries.
   2475      * Enable return-slot optimization for Pure functions.
   2476      * General optimizations, improvements and additions to the standard
   2477        library. Performance, correctness and in some cases stability was
   2478        improved. Memory pools have also seen some minor enhancements.
   2479      * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
   2480        QNX. Older targets were removed or cleaned.
   2481      * Added some [22]hardening features.
   2482 
   2483   [23]C family
   2484 
   2485      * Support for __builtin_shufflevector compatible with the clang
   2486        language extension was added.
   2487      * Support for attribute unavailable was added.
   2488      * A new built-in function, __builtin_assoc_barrier, was added. It can
   2489        be used to inhibit re-association of floating-point expressions.
   2490      * Support for __builtin_dynamic_object_size compatible with the clang
   2491        language extension was added.
   2492      * New warnings:
   2493           + [24]-Wbidi-chars warns about potentially misleading UTF-8
   2494             bidirectional control characters. The default is
   2495             -Wbidi-chars=unpaired ([25]PR103026)
   2496           + [26]-Warray-compare warns about comparisons between two
   2497             operands of array type ([27]PR97573)
   2498      * Enhancements to existing warnings:
   2499           + [28]-Wattributes has been extended so that it's possible to
   2500             use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
   2501             suppress warnings about unknown scoped attributes (in C++11
   2502             and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
   2503             "vendor::attr" can be used to achieve the same effect
   2504             ([29]PR101940)
   2505 
   2506   [30]C
   2507 
   2508      * Some new features from the upcoming C2X revision of the ISO C
   2509        standard are supported with -std=c2x and -std=gnu2x. Some of these
   2510        features are also supported as extensions when compiling for older
   2511        language versions. In addition to the features listed, some
   2512        features previously supported as extensions and now added to the C
   2513        standard are enabled by default in C2X mode and not diagnosed with
   2514        -std=c2x -Wpedantic.
   2515           + Digit separators (as in C++) are supported for C2X.
   2516           + The #elifdef and #elifndef preprocessing directives are now
   2517             supported.
   2518           + The printf and scanf format checking with [31]-Wformat now
   2519             supports the %b format specified by C2X for binary integers,
   2520             and the %B format recommended by C2X for printf.
   2521 
   2522   [32]C++
   2523 
   2524      * Several C++23 features have been implemented:
   2525           + [33]P1938R3, if consteval ([34]PR100974)
   2526           + [35]P0849R8, auto(x): decay-copy in the language
   2527             ([36]PR103049)
   2528           + [37]P2242R3, Non-literal variables (and labels and gotos) in
   2529             constexpr functions ([38]PR102612)
   2530           + [39]P2334R1, Support for preprocessing directives elifdef and
   2531             elifndef ([40]PR102616)
   2532           + [41]P2360R0, Extend init-statement to allow alias-declaration
   2533             ([42]PR102617)
   2534           + [43]P2128R6, Multidimensional subscript operator
   2535           + [44]DR 2397, auto specifier for pointers and references to
   2536             arrays ([45]PR100975)
   2537      * Several C++ Defect Reports have been resolved, e.g.:
   2538           + [46]DR 960, Covariant functions and lvalue/rvalue references
   2539           + [47]DR 1227, Mixing immediate and non-immediate contexts in
   2540             deduction failure
   2541           + [48]DR 1315, Restrictions on non-type template arguments in
   2542             partial specializations
   2543           + [49]DR 2082, Referring to parameters in unevaluated operands
   2544             of default arguments
   2545           + [50]DR 2351, void{}
   2546           + [51]DR 2374, Overly permissive specification of enum
   2547             direct-list-initialization
   2548           + [52]DR 2397, auto specifier for pointers and references to
   2549             arrays
   2550           + [53]DR 2446, Questionable type-dependency of concept-ids
   2551      * New command-line option -fimplicit-constexpr can be used to make
   2552        inline functions implicitly constexpr ([54]git)
   2553      * New command-line option -ffold-simple-inlines can be used to fold
   2554        calls to certain trivial inline functions (currently std::move,
   2555        std::forward, std::addressof and std::as_const). In contrast to
   2556        inlining such calls, folding means that no intermediate code or
   2557        debug information will be generated for them; this minimizes the
   2558        abstraction penalty incurred for using these functions versus using
   2559        the fundamental operations from which they're defined (e.g.
   2560        std::move versus static_cast). This flag is enabled by default when
   2561        -fno-inline is not active.
   2562      * Deduction guides can be declared at class scope ([55]PR79501)
   2563      * [56]-Wuninitialized warns about using uninitialized variables in
   2564        member initializer lists ([57]PR19808)
   2565      * [58]-Wint-in-bool-context is now disabled when instantiating a
   2566        template ([59]git)
   2567      * Stricter checking of attributes on friend declarations: if a friend
   2568        declaration has an attribute, that declaration must be a
   2569        definition. Moreover, a C++11 attribute cannot appear in the middle
   2570        of the decl-specifier-seq. ([60]PR99032)
   2571      * New warning options for C++ language mismatches:
   2572        -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
   2573        -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
   2574        default and can be used to control existing pedwarns about
   2575        occurrences of new C++ constructs in code using an old C++ standard
   2576        dialect.
   2577      * New warning [61]-Wmissing-requires warns about missing requires
   2578        ([62]git)
   2579      * The existing std::is_constant_evaluated in if warning was extended
   2580        to warn in more cases ([63]PR100995)
   2581      * [64]-Waddress has been enhanced so that it now warns about, for
   2582        instance, comparing the address of a nonstatic member function to
   2583        null ([65]PR102103)
   2584      * Errors about narrowing are no longer hidden if they occur in system
   2585        headers
   2586      * Ordered comparison of null pointers is now rejected ([66]PR99701)
   2587      * Anonymous structs with bases are now rejected ([67]git)
   2588      * The compiler rejects taking the address of an immediate member
   2589        function ([68]PR102753)
   2590      * The compiler has support for C++20
   2591        __cpp_lib_is_pointer_interconvertible and
   2592        __cpp_lib_is_layout_compatible to help the C++ library implement
   2593        [69]P0466, Layout-compatibility and Pointer-interconvertibility
   2594        Traits ([70]PR101539)
   2595      * Memory usage of constraint subsumption has been improved
   2596        ([71]PR100828)
   2597      * constinit thread_local variables are optimized better
   2598        ([72]PR101786)
   2599      * Support for C++17 std::hardware_destructive_interference_size was
   2600        added, along with the [73]-Winterference-size warning ([74]git)
   2601      * Many bugs in the CTAD handling have been fixed ([75]PR101344,
   2602        [76]PR101883, [77]PR89062, [78]PR101233, [79]PR88252, [80]PR86439,
   2603        [81]PR98832, [82]PR102933 ...)
   2604      * Two-stage name lookup for dependent operator expressions has been
   2605        corrected ([83]PR51577)
   2606      * Several issues with constrained variable templates have been fixed
   2607        ([84]PR98486)
   2608      * The compiler performs less instantiating when doing speculative
   2609        constant evaluation ([85]git)
   2610      * Various diagnostic improvements; e.g., a more precise caret
   2611        location for pointer-to-member expressions
   2612      * The new -fconstexpr-fp-except flag allows IEC559 floating point
   2613        exceptions in constant-expressions.
   2614 
   2615     [86]Runtime Library (libstdc++)
   2616 
   2617      * Improved experimental C++20 support, including:
   2618           + std::vector, std::basic_string, std::optional, and
   2619             std::variant can be used in constexpr functions.
   2620           + std::make_shared for arrays with default initialization, and
   2621             std::atomic<std::shared_ptr<T>>.
   2622           + Layout-compatibility and pointer-interconvertibility traits.
   2623      * Improved experimental C++23 support, including:
   2624           + Monadic operations for std::optional.
   2625           + std::expected
   2626           + std::move_only_function
   2627           + <spanstream>
   2628           + std::basic_string::resize_and_overwrite
   2629           + std::unique_ptr can be used in constexpr functions.
   2630           + <stacktrace> (not built by default, requires linking to an
   2631             extra library).
   2632           + <stdatomic.h>
   2633           + std::invoke_r
   2634           + constexpr std::type_info::operator==
   2635 
   2636   [87]D
   2637 
   2638      * New features:
   2639           + Support for the D programming language has been updated to
   2640             version 2.100.1 of the language and run-time library. Full
   2641             changelog for this release and previous releases can be found
   2642             on the [88]dlang.org website.
   2643           + On supported targets, the __traits(compiles) expression can
   2644             now be used to determine whether a target-specific built-in is
   2645             available without error during CTFE ([89]PR101127).
   2646           + Functions annotated with pragma(inline, true) are now compiled
   2647             into every module where they are used from ([90]PR106563).
   2648           + Partial support for directly importing C99 sources into a D
   2649             compilation ([91]ImportC) has been added to the language. A
   2650             notable missing feature is support for preprocessing C
   2651             imports, which can be worked around by preprocessing all C
   2652             sources used for importing ahead of time.
   2653      * New language options:
   2654           + -fcheck=, enables or disables the code generation of specific
   2655             run-time contract checks.
   2656           + -fcheckaction=, controls the run-time behavior on an assert,
   2657             array bounds check, or final switch contract failure. The
   2658             default is -fcheckaction=throw.
   2659           + -fdump-c++-spec=, dumps all compiled extern(C++) declarations
   2660             as C++ code to the given file. The supplementary option
   2661             -fdump-c++-spec-verbose turns on emission of comments for
   2662             ignored declarations in the generated spec.
   2663           + -fextern-std=, controls which C++ standard extern(C++)
   2664             declarations are compiled to be compatible with. The default
   2665             is -fextern-std=c++17.
   2666           + -fpreview=, added to enable upcoming D language features in
   2667             the compiler.
   2668           + -frevert=, added to revert D language changes to support older
   2669             D codebases that need more time to transition.
   2670           + -fsave-mixins=, saves mixins expanded at compile-time to a
   2671             file.
   2672      * Deprecated and removed features:
   2673           + The -Wtemplates compiler switch has been removed, as it had
   2674             been superceded by -ftransition=templates, which more
   2675             accurately reports on which templates have been instantiated.
   2676           + The -ftransition=dip25 and -ftransition=dip1000 compiler
   2677             switches have been renamed to -fpreview=dip25 and
   2678             -fpreview=dip1000.
   2679 
   2680   [92]Fortran
   2681 
   2682      * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
   2683        is now fully supported. In addition to implementing previously
   2684        missing functionality, such as support for character arguments of
   2685        length greater than one in functions marked bind(c) and gaps in the
   2686        handling for assumed-rank arrays, numerous other bugs have been
   2687        fixed, and an extensive set of new conformance test cases has been
   2688        added.
   2689      * GCC 12 now uses OPERATION as the name of the function to the
   2690        CO_REDUCE intrinsic for the pairwise reduction, thus conforming to
   2691        the Fortran 2018 standard. Previous versions used OPERATOR which
   2692        conforms to TS 18508.
   2693      * On POWER systems which support it, the -mabi=ieeelongdouble option
   2694        now selects the IEEE 128-bit floating point format for
   2695        REAL(KIND=16). R16_IBM and R16_IEEE have been added to the
   2696        -fconvert option, the CONVERT specifier of the OPEN statement and
   2697        the GFORTRAN_CONVERT_UNIT environment variable.
   2698 
   2699   [93]Go
   2700 
   2701      * GCC 12 provides a complete implementation of the Go 1.18 user
   2702        packages.
   2703      * Although Go 1.18 includes support for generic programming, that
   2704        support is not yet available in GCC.
   2705 
   2706 [94]libgccjit
   2707 
   2708      * The libgccjit API gained 30 new entry points:
   2709           + 17 new "reflection" entry points for querying functions and
   2710             types ([95]LIBGCCJIT_ABI_16)
   2711           + [96]gcc_jit_lvalue_set_tls_model for supporting thread-local
   2712             variables ([97]LIBGCCJIT_ABI_17)
   2713           + [98]gcc_jit_lvalue_set_link_section for setting the link
   2714             section of global variables, analogous to
   2715             [99]__attribute__((section(".section")))
   2716             ([100]LIBGCCJIT_ABI_18)
   2717           + 4 new entry points for initializing global variables and
   2718             creating constructors for rvalues ([101]LIBGCCJIT_ABI_19)
   2719           + Support for sized integer types, including 128-bit integers
   2720             and helper functions for such types ([102]LIBGCCJIT_ABI_20)
   2721           + [103]gcc_jit_context_new_bitcast for reinterpreting the bits
   2722             of an rvalue as a different type ([104]LIBGCCJIT_ABI_21)
   2723           + [105]gcc_jit_lvalue_set_register_name for setting a specific
   2724             register for a variable ([106]LIBGCCJIT_ABI_22)
   2725           + [107]gcc_jit_context_set_bool_print_errors_to_stderr
   2726             ([108]LIBGCCJIT_ABI_23)
   2727           + 2 new entry points for setting the alignment of a variable
   2728             ([109]LIBGCCJIT_ABI_24)
   2729      * libgccjit has gained support for the use of various atomic builtins
   2730        ([110]PR96066, [111]PR96067)
   2731      * [112]gcc_jit_context_new_cast is now able to handle truncation and
   2732        extension between different integer types ([113]PR95498)
   2733 
   2734 [114]New Targets and Target Specific Improvements
   2735 
   2736   [115]AArch64 & arm
   2737 
   2738      * Newer revisions of the Arm Architecture are supported as arguments
   2739        to the -march option: armv8.7-a, armv8.8-a, armv9-a.
   2740      * The Arm Cortex-A510 CPU is now supported through the cortex-a510
   2741        argument to the -mcpu and -mtune options.
   2742      * GCC can now auto-vectorize operations performing sign-differing
   2743        dot-product operations, taking advantage of instructions in the
   2744        Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
   2745 
   2746   [116]AArch64
   2747 
   2748      * A number of new CPUs are supported through the -mcpu and -mtune
   2749        options (GCC identifiers in parentheses).
   2750           + Ampere-1 (ampere1).
   2751           + Arm Cortex-A710 (cortex-a710).
   2752           + Arm Cortex-X2 (cortex-x2).
   2753      * The 64-byte atomic load/store intrinsics to accelerator memory from
   2754        the [117]2020 Arm Architecture extensions are supported through the
   2755        +ls64 option extension.
   2756      * Initial code generation support is supported for hardware
   2757        instructions used to accelerate the memcpy,memmove and memset
   2758        standard functions. These instructions can be generated when
   2759        compiling with the +mopsoption extension.
   2760      * The ACLE Advanced SIMD intrinsics accessible through the arm_neon.h
   2761        header have been significantly reimplemented and generate
   2762        higher-performing code than previous GCC versions.
   2763      * The option -mtune=neoverse-512tvb is added to tune for Arm Neoverse
   2764        cores that have a total vector bandwidth of 512 bits. Please refer
   2765        to the documentation for more details.
   2766 
   2767   [118]AMD Radeon (GCN)
   2768 
   2769      * Debug experience with ROCGDB has been improved.
   2770      * Support for the type __int128_t/integer(kind=16) was added.
   2771      * For offloading, the limitation of using only one wavefront per
   2772        compute unit (CU) has been lifted. Up to 40 workgroups per CU and
   2773        16 wavefronts per workgroup are supported (up to a limit of 40
   2774        wavefronts in total, per CU). Additionally, the number of used
   2775        wavefronts and workgroups was tuned for performance.
   2776 
   2777   [119]arm
   2778 
   2779      * Support is added for accessing the stack canary value via the TLS
   2780        register through the -fstack-protector-guard=tls and
   2781        -mstack-protector-guard-offset= options. This intended for use in
   2782        Linux kernel development. Please refer to the documentation for
   2783        more details.
   2784 
   2785   [120]BPF
   2786 
   2787      * Support for CO-RE (compile-once, run-everywhere) has been added to
   2788        the BPF back end. CO-RE allows to compile portable BPF programs
   2789        that are able to run among different versions of the Linux kernel.
   2790 
   2791   [121]IA-32/x86-64
   2792 
   2793      * New ISA extension support for Intel AVX512-FP16 was added.
   2794        AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
   2795        switch.
   2796      * Since GCC 12.5, CLDEMOTE is not enabled through the compiler switch
   2797        -march=alderlake any longer.
   2798      * For both C and C++ the _Float16 type is supported on x86 systems
   2799        with SSE2 enabled. Without {-mavx512fp16}, all operations will be
   2800        emulated in software and float instructions.
   2801      * Mitigation against straight line speculation (SLS) for function
   2802        return and indirect jump is supported via
   2803        -mharden-sls=[none|all|return|indirect-jmp].
   2804      * Add CS prefix to call and jmp to indirect thunk with branch target
   2805        in r8-r15 registers via -mindirect-branch-cs-prefix.
   2806      * Always use global offset table (GOT) to access external data and
   2807        function symbols when the new -mno-direct-extern-access
   2808        command-line option is specified.
   2809 
   2810   [122]LoongArch
   2811 
   2812      * Support for the LoongArch architecture instruction set has been
   2813        added.
   2814      * The Loongson CPU codename LA464 and LoongArch 64-bit generic CPU
   2815        codename loongarch64 are supported through the -march= and -mtune=
   2816        options (GCC identifiers in parentheses).
   2817           + Loongson LA464 core (la464).
   2818           + LoongArch 64-bit generic core (loongarch64).
   2819 
   2820   [123]MIPS
   2821 
   2822      * The ABI passing arguments containing zero-width fields (for
   2823        example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
   2824        and GNU C empty structs) has changed. Now a zero-width field will
   2825        not prevent an aligned 64-bit floating-point field next to it from
   2826        being passed through FPR. This is compatible with LLVM, but
   2827        incompatible with previous GCC releases. GCC 12 on MIPS will report
   2828        such incompatibilities as an inform unless -Wno-psabi is used.
   2829      * The ABI returning values containing C++17 empty bases has changed.
   2830        Now an empty base will not prevent an aggregate containing only one
   2831        or two floating-point fields from being returned through FPR. This
   2832        is compatible with GCC 6 and earlier, but incompatible with GCC 7
   2833        through 11. GCC 12 on MIPS will report such incompatibilities as an
   2834        inform unless -Wno-psabi is used.
   2835 
   2836   [124]NVPTX
   2837 
   2838      * The -march flag has been added. The -misa flag is now considered an
   2839        alias of the -march flag.
   2840      * Support for PTX ISA target architectures sm_53, sm_70, sm_75 and
   2841        sm_80 has been added. These can be specified using the -march flag.
   2842      * The default PTX ISA target architecture has been set back to sm_30,
   2843        to fix support for sm_30 boards.
   2844      * The -march-map flag has been added. The -march-map value will be
   2845        mapped to an valid -march flag value. For instance,
   2846        -march-map=sm_50 maps to -march=sm_35. This can be used to specify
   2847        that generated code is to be executed on a board with at least some
   2848        specific compute capability, without having to know the valid
   2849        values for the -march flag.
   2850      * The -mptx flag has been added to specify the PTX ISA version for
   2851        the generated code; permitted values are 3.1 (matches previous GCC
   2852        versions), 6.0, 6.3, and 7.0. If not specified, the used version is
   2853        the minimal version required for -march but at least 6.0.
   2854      * An mptx-3.1 multilib was added. This allows using older drivers
   2855        which do not support PTX ISA version 6.0.
   2856      * The new __PTX_SM__ predefined macro allows code to check the PTX
   2857        ISA target architecture being targeted by the compiler.
   2858      * The new __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__
   2859        predefined macros allows code to check the PTX ISA version being
   2860        targeted by the compiler.
   2861 
   2862   [125]PowerPC / PowerPC64 / RS6000
   2863 
   2864      * The internal implementation of Power's target-specific built-in
   2865        functions has been rewritten to be easier and less error-prone to
   2866        maintain. Every attempt has been made to ensure that the new
   2867        behavior matches the old behavior, but inevitably some bugs can be
   2868        expected. Please [126]report any problems.
   2869      * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
   2870        __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
   2871        __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
   2872        now behave as documented in all supported configurations. On prior
   2873        releases, the arguments and return values of these functions were
   2874        treated as unsigned long long instead of as unsigned long, when the
   2875        options -m32 -mpowerpc64 were in effect.
   2876      * The overloaded built-in functions vec_cntlz_lsbb and vec_cnttz_lsbb
   2877        now behave as documented. On prior releases, these built-in
   2878        functions had incorrect semantics on little-endian targets.
   2879 
   2880   [127]PRU
   2881 
   2882      * The [128]__regio_symbol variable qualifier has been added. It
   2883        allows easier access in C programs to the __R30 and __R31 CPU I/O
   2884        registers.
   2885 
   2886   [129]RISC-V
   2887 
   2888      * The default ISA spec version was bumped to 20191213; see [130]this
   2889        announcement for details.
   2890      * New ISA extension support for zba, zbb, zbc, zbs was added.
   2891      * New ISA extension support for vector and scalar crypto was added,
   2892        only support architecture testing macro and -march= parsing.
   2893      * The option -mtune=thead-c906 is added to tune for T-HEAD c906
   2894        cores.
   2895      * libstdc++ no longer attempts to detect built-in atomics.
   2896        Distributions that have out-of-tree workarounds for -latomic should
   2897        check their ABIs again.
   2898 
   2899 [131]Operating Systems
   2900 
   2901 [132]Improvements to Static Analyzer
   2902 
   2903      * The analyzer has gained a
   2904        [133]-Wanalyzer-use-of-uninitialized-value warning, similar to
   2905        [134]-Wuninitialized and [135]-Wmaybe-uninitialized, but based on
   2906        an interprocedural path-sensitive analysis ([136]PR95006).
   2907        Such warnings are not disabled by the new
   2908        [137]-ftrivial-auto-var-init (see below), as the latter is
   2909        considered a mitigation option.
   2910      * [138]-Wanalyzer-write-to-const and
   2911        [139]-Wanalyzer-write-to-string-literal will now check for
   2912        [140]__attribute__ ((access, ....)) on calls to externally-defined
   2913        functions, and complain about read-only regions pointed to by
   2914        arguments marked with a write_only or read_write attribute
   2915        ([141]PR104793).
   2916      * The analyzer's "taint" mode, activated by
   2917        [142]-fanalyzer-checker=taint (in addition to [143]-fanalyzer), has
   2918        gained four new taint-based warnings:
   2919           + [144]-Wanalyzer-tainted-allocation-size for e.g.
   2920             attacker-controlled malloc and alloca,
   2921           + [145]-Wanalyzer-tainted-divisor for detecting where an
   2922             attacker can inject a divide-by-zero,
   2923           + [146]-Wanalyzer-tainted-offset for attacker-controlled pointer
   2924             offsets,
   2925           + [147]-Wanalyzer-tainted-size for attacker-controlled values
   2926             being used as a size parameter to calls to memset or to
   2927             functions marked with [148]__attribute__ ((access, ....)).
   2928        The existing [149]-Wanalyzer-tainted-array-index has been reworded
   2929        to talk about "attacker-controlled" rather than "tainted" values,
   2930        for consistency with the new warnings.
   2931        A new [150]__attribute__ ((tainted_args)) has been added to the C
   2932        and C++ front ends, usable on functions, and on function pointer
   2933        callback fields in structs. The analyzer's taint mode will treat
   2934        all parameters and buffers pointed to by parameters of such
   2935        functions as being attacker-controlled, such as for annotating
   2936        system calls in an operating system kernel as being an "attack
   2937        surface".
   2938      * The analyzer now respects [151]__attribute__((const)): it will
   2939        treat such functions as returning the same value when given the
   2940        same inputs ([152]PR104434), and as having no side effects
   2941        ([153]PR104576).
   2942      * The analyzer is now able to split its analysis into multiple
   2943        execution paths in places where there isn't a split in the control
   2944        flow graph. For example, it now handles realloc calls by splitting
   2945        the execution path into three possible outcomes for the call:
   2946           + failure, returning NULL
   2947           + success, growing the buffer in-place without moving it
   2948           + success, allocating a new buffer, copying the content of the
   2949             old buffer to it, and freeing the old buffer
   2950      * The analyzer's interprocedural path exploration logic is now able
   2951        to track calls through function pointers.
   2952      * The analyzer now makes the assumption that if we know PTR is
   2953        non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
   2954        true, but eliminates false positives in practice ([154]PR101962).
   2955      * The analyzer has gained some initial support for inline assembler
   2956        code. This is extremely limited, and is purely to help suppress
   2957        false positives when analyzing the Linux kernel, which makes heavy
   2958        use of inline assembler ([155]PR101570).
   2959      * The way the analyzer tracks the state of memory along an execution
   2960        path has been improved in various ways for GCC 12:
   2961           + An optimization for representing bulk updates to memory (e.g.
   2962             zero fills) has been removed as it never worked well. In GCC
   2963             12 it has been replaced with a simpler and more accurate
   2964             approach, eliminating many false positives ([156]PR95006).
   2965           + Various optimizations have been added, speeding up the
   2966             analysis on a particularly problematic source file from 4
   2967             minutes down to 17 seconds ([157]PR104943, [158]PR104954, and
   2968             [159]PR104955).
   2969           + The analyzer now tracks the sizes of dynamically-allocated
   2970             regions, both on the heap (via malloc etc) and stack (via
   2971             alloca), though none of the analyzer warnings make use of this
   2972             yet in GCC 12.
   2973      * The analyzer's handling of switch statements has been rewritten,
   2974        fixing various bugs.
   2975 
   2976 Other significant improvements
   2977 
   2978   [160]Eliminating uninitialized variables
   2979 
   2980      * GCC can now [161]initialize all stack variables implicitly,
   2981        including padding. This is intended to eliminate all classes of
   2982        uninitialized stack variable flaws. Lack of explicit initialization
   2983        will still warn when [162]-Wuninitialized is active. For best
   2984        debugging, use of the new command-line option
   2985        [163]-ftrivial-auto-var-init=pattern can be used to fill variables
   2986        with a repeated 0xFE pattern, which tends to illuminate many bugs
   2987        (e.g. pointers receive invalid addresses, sizes and indices are
   2988        very large). For best production results, the new command-line
   2989        option [164]-ftrivial-auto-var-init=zero can be used to fill
   2990        variables with 0x00, which tends to provide a safer state for bugs
   2991        (e.g. pointers are NULL, strings are NUL filled, and sizes and
   2992        indices are 0).
   2993 
   2994   [165]Debugging formats
   2995 
   2996      * GCC can now generate debugging information in CTF, a lightweight
   2997        debugging format that provides information about C types and the
   2998        association between functions and data symbols and types. This
   2999        format is designed to be embedded in ELF files and to be very
   3000        compact and simple. A new command-line option -gctf enables the
   3001        generation of CTF.
   3002      * GCC can now generate debugging information in BTF. This is a
   3003        debugging format mainly used in BPF programs and the Linux kernel.
   3004        The compiler can generate BTF for any target, when enabled with the
   3005        command-line option -gbtf
   3006 
   3007 [166]GCC 12.1
   3008 
   3009    This is the [167]list of problem reports (PRs) from GCC's bug tracking
   3010    system that are known to be fixed in the 12.1 release. This list might
   3011    not be complete (that is, it is possible that some PRs that have been
   3012    fixed are not listed here).
   3013 
   3014 [168]GCC 12.2
   3015 
   3016    This is the [169]list of problem reports (PRs) from GCC's bug tracking
   3017    system that are known to be fixed in the 12.2 release. This list might
   3018    not be complete (that is, it is possible that some PRs that have been
   3019    fixed are not listed here).
   3020 
   3021   Target Specific Changes
   3022 
   3023     LoongArch
   3024 
   3025      * The default setting of -m[check|no-check]-zero-division is changed
   3026        for optimized code. Now -mno-check-zero-division is the default for
   3027        all optimization levels but -O0 and -Og. The old behavior can be
   3028        obtained by explicitly passing -mcheck-zero-division to GCC.
   3029 
   3030 [170]GCC 12.3
   3031 
   3032   Target Specific Changes
   3033 
   3034   x86-64
   3035 
   3036      * GCC now supports AMD CPUs based on the znver4 core via
   3037        -march=znver4. The switch makes GCC consider using 512-bit vectors
   3038        when auto-vectorizing.
   3039 
   3040    This is the [171]list of problem reports (PRs) from GCC's bug tracking
   3041    system that are known to be fixed in the 12.3 release. This list might
   3042    not be complete (that is, it is possible that some PRs that have been
   3043    fixed are not listed here).
   3044 
   3045 [172]GCC 12.4
   3046 
   3047    This is the [173]list of problem reports (PRs) from GCC's bug tracking
   3048    system that are known to be fixed in the 12.4 release. This list might
   3049    not be complete (that is, it is possible that some PRs that have been
   3050    fixed are not listed here).
   3051 
   3052 [174]GCC 12.5
   3053 
   3054    This is the [175]list of problem reports (PRs) from GCC's bug tracking
   3055    system that are known to be fixed in the 12.5 release. This list might
   3056    not be complete (that is, it is possible that some PRs that have been
   3057    fixed are not listed here).
   3058 
   3059 
   3060     For questions related to the use of GCC, please consult these web
   3061     pages and the [176]GCC manuals. If that fails, the
   3062     [177]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3063     web pages and the development of GCC are welcome on our developer
   3064     list at [178]gcc (a] gcc.gnu.org. All of [179]our lists have public
   3065     archives.
   3066 
   3067    Copyright (C) [180]Free Software Foundation, Inc. Verbatim copying and
   3068    distribution of this entire article is permitted in any medium,
   3069    provided this notice is preserved.
   3070 
   3071    These pages are [181]maintained by the GCC team. Last modified
   3072    2025-12-29.
   3073 
   3074 References
   3075 
   3076    1. https://gcc.gnu.org/gcc-12/porting_to.html
   3077    2. https://gcc.gnu.org/onlinedocs/index.html#current
   3078    3. https://gcc.gnu.org/PR102024
   3079    4. https://gcc.gnu.org/PR42217
   3080    5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
   3081    6. https://gcc.gnu.org/install/specific.html
   3082    7. https://gcc.gnu.org/gcc-12/changes.html#general
   3083    8. https://clang.llvm.org/docs/ShadowCallStack.html
   3084    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
   3085   10. https://gcc.gnu.org/gcc-12/changes.html#languages
   3086   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
   3087   12. https://www.openacc.org/
   3088   13. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-12
   3089   14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
   3090   15. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   3091   16. https://gcc.gnu.org/gcc-12/changes.html#nvptx
   3092   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
   3093   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
   3094   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
   3095   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
   3096   21. https://gcc.gnu.org/gcc-12/changes.html#ada
   3097   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
   3098   23. https://gcc.gnu.org/gcc-12/changes.html#c-family
   3099   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
   3100   25. https://gcc.gnu.org/PR103026
   3101   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
   3102   27. https://gcc.gnu.org/PR97573
   3103   28. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
   3104   29. https://gcc.gnu.org/PR101940
   3105   30. https://gcc.gnu.org/gcc-12/changes.html#c
   3106   31. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
   3107   32. https://gcc.gnu.org/gcc-12/changes.html#cxx
   3108   33. https://wg21.link/p1938
   3109   34. https://gcc.gnu.org/PR100974
   3110   35. https://wg21.link/p0849
   3111   36. https://gcc.gnu.org/PR103049
   3112   37. https://wg21.link/p2242
   3113   38. https://gcc.gnu.org/PR102612
   3114   39. https://wg21.link/p2334
   3115   40. https://gcc.gnu.org/PR102616
   3116   41. https://wg21.link/p2360
   3117   42. https://gcc.gnu.org/PR102617
   3118   43. https://wg21.link/p2128
   3119   44. https://wg21.link/cwg2397
   3120   45. https://gcc.gnu.org/PR100975
   3121   46. https://wg21.link/cwg960
   3122   47. https://wg21.link/cwg1227
   3123   48. https://wg21.link/cwg1315
   3124   49. https://wg21.link/cwg2082
   3125   50. https://wg21.link/cwg2351
   3126   51. https://wg21.link/cwg2374
   3127   52. https://wg21.link/cwg2397
   3128   53. https://wg21.link/cwg2446
   3129   54. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
   3130   55. https://gcc.gnu.org/PR79501
   3131   56. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3132   57. https://gcc.gnu.org/PR19808
   3133   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
   3134   59. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
   3135   60. https://gcc.gnu.org/PR99032
   3136   61. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
   3137   62. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
   3138   63. https://gcc.gnu.org/PR100995
   3139   64. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
   3140   65. https://gcc.gnu.org/PR102103
   3141   66. https://gcc.gnu.org/PR99701
   3142   67. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
   3143   68. https://gcc.gnu.org/PR102753
   3144   69. https://wg21.link/p0466
   3145   70. https://gcc.gnu.org/PR101539
   3146   71. https://gcc.gnu.org/PR100828
   3147   72. https://gcc.gnu.org/PR101786
   3148   73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
   3149   74. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
   3150   75. https://gcc.gnu.org/PR101344
   3151   76. https://gcc.gnu.org/PR101883
   3152   77. https://gcc.gnu.org/PR89062
   3153   78. https://gcc.gnu.org/PR101233
   3154   79. https://gcc.gnu.org/PR88252
   3155   80. https://gcc.gnu.org/PR86439
   3156   81. https://gcc.gnu.org/PR98832
   3157   82. https://gcc.gnu.org/PR102933
   3158   83. https://gcc.gnu.org/PR51577
   3159   84. https://gcc.gnu.org/PR98486
   3160   85. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
   3161   86. https://gcc.gnu.org/gcc-12/changes.html#libstdcxx
   3162   87. https://gcc.gnu.org/gcc-12/changes.html#d
   3163   88. https://dlang.org/changelog/2.100.1.html
   3164   89. https://gcc.gnu.org/PR101127
   3165   90. https://gcc.gnu.org/PR106563
   3166   91. https://dlang.org/spec/importc.html
   3167   92. https://gcc.gnu.org/gcc-12/changes.html#fortran
   3168   93. https://gcc.gnu.org/gcc-12/changes.html#go
   3169   94. https://gcc.gnu.org/gcc-12/changes.html#jit
   3170   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
   3171   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
   3172   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
   3173   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
   3174   99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
   3175  100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
   3176  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
   3177  102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
   3178  103. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
   3179  104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
   3180  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
   3181  106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
   3182  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
   3183  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
   3184  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
   3185  110. https://gcc.gnu.org/PR96066
   3186  111. https://gcc.gnu.org/PR96067
   3187  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
   3188  113. https://gcc.gnu.org/PR95498
   3189  114. https://gcc.gnu.org/gcc-12/changes.html#targets
   3190  115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
   3191  116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
   3192  117. https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
   3193  118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   3194  119. https://gcc.gnu.org/gcc-12/changes.html#arm
   3195  120. https://gcc.gnu.org/gcc-12/changes.html#bpf
   3196  121. https://gcc.gnu.org/gcc-12/changes.html#x86
   3197  122. https://gcc.gnu.org/gcc-12/changes.html#loongarch
   3198  123. https://gcc.gnu.org/gcc-12/changes.html#mips
   3199  124. https://gcc.gnu.org/gcc-12/changes.html#nvptx
   3200  125. https://gcc.gnu.org/gcc-12/changes.html#powerpc
   3201  126. https://gcc.gnu.org/bugs/
   3202  127. https://gcc.gnu.org/gcc-12/changes.html#pru
   3203  128. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
   3204  129. https://gcc.gnu.org/gcc-12/changes.html#riscv
   3205  130. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
   3206  131. https://gcc.gnu.org/gcc-12/changes.html#os
   3207  132. https://gcc.gnu.org/gcc-12/changes.html#analyzer
   3208  133. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
   3209  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3210  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   3211  136. https://gcc.gnu.org/PR95006
   3212  137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3213  138. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   3214  139. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   3215  140. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   3216  141. https://gcc.gnu.org/PR104793
   3217  142. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
   3218  143. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   3219  144. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   3220  145. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
   3221  146. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
   3222  147. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
   3223  148. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   3224  149. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
   3225  150. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
   3226  151. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
   3227  152. https://gcc.gnu.org/PR104434
   3228  153. https://gcc.gnu.org/PR104576
   3229  154. https://gcc.gnu.org/PR101962
   3230  155. https://gcc.gnu.org/PR101570
   3231  156. https://gcc.gnu.org/PR95006
   3232  157. https://gcc.gnu.org/PR104943
   3233  158. https://gcc.gnu.org/PR104954
   3234  159. https://gcc.gnu.org/PR104955
   3235  160. https://gcc.gnu.org/gcc-12/changes.html#uninitialized
   3236  161. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3237  162. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3238  163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3239  164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3240  165. https://gcc.gnu.org/gcc-12/changes.html#debug
   3241  166. https://gcc.gnu.org/gcc-12/changes.html#12.1
   3242  167. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
   3243  168. https://gcc.gnu.org/gcc-12/changes.html#12.2
   3244  169. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
   3245  170. https://gcc.gnu.org/gcc-12/changes.html#12.3
   3246  171. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
   3247  172. https://gcc.gnu.org/gcc-12/changes.html#12.4
   3248  173. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
   3249  174. https://gcc.gnu.org/gcc-12/changes.html#12.5
   3250  175. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.5
   3251  176. https://gcc.gnu.org/onlinedocs/
   3252  177. mailto:gcc-help (a] gcc.gnu.org
   3253  178. mailto:gcc (a] gcc.gnu.org
   3254  179. https://gcc.gnu.org/lists.html
   3255  180. https://www.fsf.org/
   3256  181. https://gcc.gnu.org/about.html
   3257 ======================================================================
   3258 http://gcc.gnu.org/gcc-11/index.html
   3259                              GCC 11 Release Series
   3260 
   3261    (This release series is no longer supported.)
   3262 
   3263    July 19, 2024
   3264 
   3265    The GCC developers are pleased to announce the release of GCC 11.5.
   3266 
   3267    This release is a bug-fix release, containing fixes for regressions in
   3268    GCC 11.4 relative to previous releases of GCC.
   3269 
   3270 Release History
   3271 
   3272    GCC 11.5
   3273           July 19, 2024 ([1]changes, [2]documentation)
   3274 
   3275    GCC 11.4
   3276           May 29, 2023 ([3]changes, [4]documentation)
   3277 
   3278    GCC 11.3
   3279           April 21, 2022 ([5]changes, [6]documentation)
   3280 
   3281    GCC 11.2
   3282           July 28, 2021 ([7]changes, [8]documentation)
   3283 
   3284    GCC 11.1
   3285           April 27, 2021 ([9]changes, [10]documentation)
   3286 
   3287 References and Acknowledgements
   3288 
   3289    GCC used to stand for the GNU C Compiler, but since the compiler
   3290    supports several other languages aside from C, it now stands for the
   3291    GNU Compiler Collection.
   3292 
   3293    The GCC developers would like to thank the numerous people that have
   3294    contributed new features, improvements, bug fixes, and other changes as
   3295    well as test results to GCC. This [11]amazing group of volunteers is
   3296    what makes GCC successful.
   3297 
   3298    For additional information about GCC please refer to the [12]GCC
   3299    project web site or contact the [13]GCC development mailing list.
   3300 
   3301    To obtain GCC please use [14]our mirror sites or [15]our version
   3302    control system.
   3303 
   3304 
   3305     For questions related to the use of GCC, please consult these web
   3306     pages and the [16]GCC manuals. If that fails, the
   3307     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3308     web pages and the development of GCC are welcome on our developer
   3309     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   3310     archives.
   3311 
   3312    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   3313    distribution of this entire article is permitted in any medium,
   3314    provided this notice is preserved.
   3315 
   3316    These pages are [21]maintained by the GCC team. Last modified
   3317    2025-08-04.
   3318 
   3319 References
   3320 
   3321    1. https://gcc.gnu.org/gcc-11/changes.html
   3322    2. https://gcc.gnu.org/onlinedocs/11.5.0/
   3323    3. https://gcc.gnu.org/gcc-11/changes.html
   3324    4. https://gcc.gnu.org/onlinedocs/11.4.0/
   3325    5. https://gcc.gnu.org/gcc-11/changes.html
   3326    6. https://gcc.gnu.org/onlinedocs/11.3.0/
   3327    7. https://gcc.gnu.org/gcc-11/changes.html
   3328    8. https://gcc.gnu.org/onlinedocs/11.2.0/
   3329    9. https://gcc.gnu.org/gcc-11/changes.html
   3330   10. https://gcc.gnu.org/onlinedocs/11.1.0/
   3331   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
   3332   12. https://gcc.gnu.org/index.html
   3333   13. mailto:gcc (a] gcc.gnu.org
   3334   14. https://gcc.gnu.org/mirrors.html
   3335   15. https://gcc.gnu.org/git.html
   3336   16. https://gcc.gnu.org/onlinedocs/
   3337   17. mailto:gcc-help (a] gcc.gnu.org
   3338   18. mailto:gcc (a] gcc.gnu.org
   3339   19. https://gcc.gnu.org/lists.html
   3340   20. https://www.fsf.org/
   3341   21. https://gcc.gnu.org/about.html
   3342 ======================================================================
   3343 http://gcc.gnu.org/gcc-11/changes.html
   3344                              GCC 11 Release Series
   3345                         Changes, New Features, and Fixes
   3346 
   3347    This page is a "brief" summary of some of the huge number of
   3348    improvements in GCC 11. You may also want to check out our [1]Porting
   3349    to GCC 11 page and the [2]full GCC documentation.
   3350 
   3351 Caveats
   3352 
   3353      * The default mode for C++ is now -std=gnu++17 instead of
   3354        -std=gnu++14. Note that [3]C++17 changes to template template
   3355        parameter matching can be disabled independently of other features
   3356        with -fno-new-ttp-matching.
   3357      * When building GCC itself, the host compiler must now support C++11,
   3358        rather than C++98. In particular bootstrapping GCC 11 using an
   3359        older version of GCC requires a binary of GCC 4.8 or later, rather
   3360        than of GCC 3.4 or later as was the case for bootstrapping GCC 10.
   3361      * Naming and location of auxiliary and dump output files changed. If
   3362        you compile multiple input files in a single command, if you enable
   3363        Link Time Optimization, or if you use -dumpbase, -dumpdir,
   3364        -save-temps=*, and you expect any file other than the primary
   3365        output file(s) to be created as a side effect, watch out for
   3366        improvements and a few surprises. See [4]the patch, particularly
   3367        its textual description, for more details about the changes.
   3368      * -gsplit-dwarf no longer enables debug info generation on its own
   3369        but requires a separate -g for this.
   3370      * The libstdc++ configure option --enable-cheaders=c_std is
   3371        deprecated and will be removed in a future release. It should be
   3372        possible to use --enable-cheaders=c_global (the default) with no
   3373        change in behavior.
   3374      * The front end for compiling BRIG format of Heterogeneous System
   3375        Architecture Intermediate Language (HSAIL) has been deprecated and
   3376        will likely be removed in a future release.
   3377      * Some short options of the gcov tool have been renamed: -i to -j and
   3378        -j to -H.
   3379 
   3380 [5]General Improvements
   3381 
   3382      * [6]ThreadSanitizer improvements to support alternative runtimes and
   3383        environments. The [7]Linux Kernel Concurrency Sanitizer (KCSAN) is
   3384        now supported.
   3385           + Add --param tsan-distinguish-volatile to optionally emit
   3386             instrumentation distinguishing volatile accesses.
   3387           + Add --param tsan-instrument-func-entry-exit to optionally
   3388             control if function entries and exits should be instrumented.
   3389      * In previous releases of GCC, the "column numbers" emitted in
   3390        diagnostics were actually a count of bytes from the start of the
   3391        source line. This could be problematic, both because of:
   3392           + multibyte characters (requiring more than one byte to encode),
   3393             and
   3394           + multicolumn characters (requiring more than one column to
   3395             display in a monospace font)
   3396        For example, the character  ("GREEK SMALL LETTER PI (U+03C0)")
   3397        occupies one column, and its UTF-8 encoding requires two bytes; the
   3398        character  ("SLIGHTLY SMILING FACE (U+1F642)") occupies two
   3399        columns, and its UTF-8 encoding requires four bytes.
   3400        In GCC 11 the column numbers default to being column numbers,
   3401        respecting multi-column characters. The old behavior can be
   3402        restored using a new option [8]-fdiagnostics-column-unit=byte.
   3403        There is also a new option [9]-fdiagnostics-column-origin=,
   3404        allowing the pre-existing default of the left-hand column being
   3405        column 1 to be overridden if desired (e.g. for 0-based columns).
   3406        The output of [10]-fdiagnostics-format=json has been extended to
   3407        supply both byte counts and column numbers for all source
   3408        locations.
   3409        Additionally, in previous releases of GCC, tab characters in the
   3410        source would be emitted verbatim when quoting source code, but be
   3411        prefixed with whitespace or line number information, leading to
   3412        misalignments in the resulting output when compared with the actual
   3413        source. Tab characters are now printed as an appropriate number of
   3414        spaces, using the [11]-ftabstop option (which defaults to 8 spaces
   3415        per tab stop).
   3416      * Introduce [12]Hardware-assisted AddressSanitizer support. This
   3417        sanitizer currently only works for the AArch64 target. It helps
   3418        debug address problems similarly to [13]AddressSanitizer but is
   3419        based on partial hardware assistance and provides probabilistic
   3420        protection to use less RAM at run time. [14]Hardware-assisted
   3421        AddressSanitizer is not production-ready for user space, and is
   3422        provided mainly for use compiling the Linux Kernel.
   3423        To use this sanitizer the command line arguments are:
   3424           + -fsanitize=hwaddress to instrument userspace code.
   3425           + -fsanitize=kernel-hwaddress to instrument kernel code.
   3426      * For targets that produce DWARF debugging information GCC now
   3427        defaults to [15]DWARF version 5 (with the exception of VxWorks and
   3428        Darwin/Mac OS X which default to version 2 and AIX which defaults
   3429        to version 4). This can produce up to 25% more compact debug
   3430        information compared to earlier versions.
   3431        To take full advantage of DWARF version 5 GCC needs to be built
   3432        against binutils version 2.35.2 or higher. When GCC is built
   3433        against earlier versions of binutils GCC will still emit DWARF
   3434        version 5 for most debuginfo data, but will generate version 4
   3435        debug line tables (even when explicitly given -gdwarf-5).
   3436        The following debug information consumers can process DWARF version
   3437        5:
   3438           + GDB 8.0, or higher
   3439           + valgrind 3.17.0
   3440           + elfutils 0.172, or higher (for use with systemtap,
   3441             dwarves/pahole, perf and libabigail)
   3442           + dwz 0.14
   3443        Programs embedding libbacktrace are urged to upgrade to the version
   3444        shipping with GCC 11.
   3445        To make GCC 11 generate an older DWARF version use -g together with
   3446        -gdwarf-2, -gdwarf-3 or -gdwarf-4.
   3447      * Vectorizer improvements:
   3448           + The straight-line code vectorizer now considers the whole
   3449             function when vectorizing and can handle opportunities
   3450             crossing CFG merges and backedges.
   3451      * A series of conditional expressions that compare the same variable
   3452        can be transformed into a switch statement if each of them contains
   3453        a comparison expression. Example:
   3454         int IsHTMLWhitespace(int aChar) {
   3455           return aChar == 0x0009 || aChar == 0x000A ||
   3456                  aChar == 0x000C || aChar == 0x000D ||
   3457                  aChar == 0x0020;
   3458         }
   3459 
   3460        This statement can be transformed into a switch statement and then
   3461        expanded into a bit-test.
   3462      * New command-line options:
   3463           + [16]-fbit-tests, enabled by default, can be used to enable or
   3464             disable switch expansion using bit-tests.
   3465      * Inter-procedural optimization improvements:
   3466           + A new IPA-modref pass was added to track side effects of
   3467             function calls and improve precision of points-to-analysis.
   3468             The pass can be controlled by the [17]-fipa-modref option.
   3469           + The identical code folding pass (controlled by [18]-fipa-icf)
   3470             was significantly improved to increase the number of unified
   3471             functions and to reduce compile-time memory use.
   3472           + IPA-CP (Interprocedural constant propagation) heuristics
   3473             improved its estimation of potential usefulness of known loop
   3474             bounds and strides by taking the estimated frequency of these
   3475             loops into account.
   3476      * Link-time optimization improvements:
   3477           + The LTO bytecode format was optimized for smaller object files
   3478             and faster streaming.
   3479           + Memory allocation of the linking stage was improved to reduce
   3480             peak memory use.
   3481      * Profile driven optimization improvements:
   3482           + Using [19]-fprofile-values, was improved by tracking more
   3483             target values for e.g. indirect calls.
   3484           + GCOV data file format outputs smaller files by representing
   3485             zero counters in a more compact way.
   3486 
   3487 [20]New Languages and Language specific improvements
   3488 
   3489      * GCC 11 adds support for non-rectangular loop nests in OpenMP
   3490        constructs and the allocator routines of [21]OpenMP 5.0, including
   3491        initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
   3492        environment variable and the active-levels routines are now
   3493        supported. For C/C++, the declare variant and map support has been
   3494        extended. For Fortran, OpenMP 4.5 is now fully supported and OpenMP
   3495        5.0 support has been extended, including the following features
   3496        which were before only available in C and C++: order(concurrent),
   3497        device_type, memorder-clauses for flush, lastprivate with
   3498        conditional modifier, atomic construct and reduction clause
   3499        extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
   3500        target data without map clause, and limited support for the
   3501        requires construct.
   3502      * Version 2.6 of the [22]OpenACC specification continues to be
   3503        maintained and improved in the C, C++ and Fortran compilers. See
   3504        the [23]implementation status section on the OpenACC wiki page and
   3505        the [24]run-time library documentation for further information.
   3506 
   3507   [25]C family
   3508 
   3509      * New attributes:
   3510           + The [26]no_stack_protector attribute has been added to mark
   3511             functions which should not be instrumented with stack
   3512             protection (-fstack-protector).
   3513           + The existing [27]malloc attribute has been extended so that it
   3514             can be used to identify allocator/deallocator API pairs. A
   3515             pair of new [28]-Wmismatched-dealloc and
   3516             [29]-Wmismatched-new-delete warnings will complain about
   3517             mismatched calls, and [30]-Wfree-nonheap-object about
   3518             deallocation calls with pointers not obtained from allocation
   3519             functions. Additionally, the static analyzer will use these
   3520             attributes when checking for leaks, double-frees,
   3521             use-after-frees, and similar issues.
   3522      * New warnings:
   3523           + [31]-Wmismatched-dealloc, enabled by default, warns about
   3524             calls to deallocation functions with pointers returned from
   3525             mismatched allocation functions.
   3526           + [32]-Wsizeof-array-div, enabled by -Wall, warns about
   3527             divisions of two sizeof operators when the first one is
   3528             applied to an array and the divisor does not equal the size of
   3529             the array element.
   3530           + [33]-Wstringop-overread, enabled by default, warns about calls
   3531             to string functions reading past the end of the arrays passed
   3532             to them as arguments. In prior GCC releases most instances of
   3533             his warning are diagnosed by -Wstringop-overflow.
   3534           + [34]-Wtsan, enabled by default, warns about unsupported
   3535             features in ThreadSanitizer (currently
   3536             std::atomic_thread_fence).
   3537      * Enhancements to existing warnings:
   3538           + [35]-Wfree-nonheap-object detects many more instances of calls
   3539             to deallocation functions with pointers not returned from a
   3540             dynamic memory allocation function.
   3541           + [36]-Wmaybe-uninitialized diagnoses passing pointers or
   3542             references to uninitialized memory to functions taking
   3543             const-qualified arguments.
   3544           + [37]-Wuninitialized detects reads from uninitialized
   3545             dynamically allocated memory.
   3546      * For ELF targets that support the GNU or FreeBSD OSABIs, the used
   3547        attribute will now save the symbol declaration it is applied to
   3548        from linker garbage collection.
   3549        To support this behavior, used symbols that have not been placed in
   3550        specific sections (e.g. with the section attribute, or the
   3551        -f{function,data}-sections options) will be placed in new, unique
   3552        sections.
   3553        This functionality requires Binutils version 2.36 or later.
   3554 
   3555   [38]C
   3556 
   3557      * Several new features from the upcoming C2X revision of the ISO C
   3558        standard are supported with -std=c2x and -std=gnu2x. Some of these
   3559        features are also supported as extensions when compiling for older
   3560        language versions. In addition to the features listed, some
   3561        features previously supported as extensions and now added to the C
   3562        standard are enabled by default in C2X mode and not diagnosed with
   3563        -std=c2x -Wpedantic.
   3564           + The BOOL_MAX and BOOL_WIDTH macros are provided in <limits.h>.
   3565           + As in C++, function definitions no longer need to give names
   3566             for unused function parameters.
   3567           + The expansions of the true and false macros in <stdbool.h>
   3568             have changed so that they have type bool.
   3569           + The [[nodiscard]] standard attribute is now supported.
   3570           + The __has_c_attribute preprocessor operator is now supported.
   3571           + Macros INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN,
   3572             DEC_INFINITY, DEC_NAN, and corresponding signaling NaN macros
   3573             for _FloatN, _FloatNx and _DecimalN types, are provided in
   3574             <float.h>. There are also corresponding built-in functions
   3575             __builtin_nansdN for decimal signaling NaNs.
   3576           + Macros FLT_IS_IEC_60559, DBL_IS_IEC_60559 and
   3577             LDBL_IS_IEC_60559 are provided in <float.h>.
   3578           + The feature test macro __STDC_WANT_IEC_60559_EXT__ is
   3579             supported by <float.h>.
   3580           + Labels may appear before declarations and at the end of a
   3581             compound statement.
   3582      * New warnings:
   3583           + [39]-Warray-parameter, enabled by -Wall, warns about
   3584             redeclarations of functions with ordinary array arguments
   3585             declared using inconsistent forms. The warning also enables
   3586             the detection of the likely out of bounds accesses in calls to
   3587             such functions with smaller arrays.
   3588           + [40]-Wvla-parameter, enabled by -Wall, warns redeclarations of
   3589             functions with variable length array arguments declared using
   3590             inconsistent forms or with mismatched bounds. The warning also
   3591             enables the detection of the likely out of bounds accesses in
   3592             calls to such functions with smaller arrays.
   3593 
   3594   [41]C++
   3595 
   3596      * The default mode has been changed to -std=gnu++17.
   3597      * Several C++20 features have been implemented:
   3598           + the compiler now supports consteval virtual functions
   3599           + P2082R1, Fixing CTAD for aggregates
   3600           + P0593R6, Pseudo-destructors end object lifetimes
   3601           + P1907R1, Inconsistencies with non-type template parameters
   3602             (complete implementation)
   3603           + P1975R0, Fixing the wording of parenthesized
   3604             aggregate-initialization
   3605           + P1009R2, Array size deduction in new-expressions
   3606           + P1099R5, using enum
   3607           + Modules, Requires -fmodules-ts and some aspects are
   3608             incomplete. Refer to [42]C++ 20 Status
   3609      * The C++ front end has experimental support for some of the upcoming
   3610        C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
   3611        or -std=gnu++2b flags, including
   3612           + P0330R8, Literal Suffix for (signed) size_t.
   3613        For a full list of new features, see [43]the C++ status page.
   3614      * Several C++ Defect Reports have been resolved, e.g.:
   3615           + DR 625, Use of auto as a template-argument
   3616           + DR 1512, Pointer comparison vs qualification conversions
   3617           + DR 1722, Should lambda to function pointer conversion function
   3618             be noexcept?
   3619           + DR 1914, Duplicate standard attributes
   3620           + DR 2032, Default template-arguments of variable templates
   3621           + DR 2289, Uniqueness of decomposition declaration names
   3622           + DR 2237, Can a template-id name a constructor?
   3623           + DR 2303, Partial ordering and recursive variadic inheritance
   3624           + DR 2369, Ordering between constraints and substitution
   3625           + DR 2450, braced-init-list as a template-argument
   3626      * G++ now performs better access checking in templates ([44]PR41437).
   3627      * reinterpret_casts in constexpr evaluation are now checked more
   3628        completely ([45]PR95307).
   3629      * The diagnostic for static_assert has been improved: the compiler
   3630        now shows the expression including its template arguments (if there
   3631        were any), and can point to the failing clause if the condition
   3632        comprised of any logical AND operators ([46]PR97518).
   3633      * New warnings:
   3634           + [47]-Wctad-maybe-unsupported, disabled by default, warns about
   3635             performing class template argument deduction on a type with no
   3636             deduction guides.
   3637           + [48]-Wrange-loop-construct, enabled by -Wall, warns when a
   3638             range-based for-loop is creating unnecessary and expensive
   3639             copies.
   3640           + [49]-Wdeprecated-enum-enum-conversion, enabled by default in
   3641             C++20, warns about deprecated arithmetic conversions on
   3642             operands of enumeration types, as outlined in
   3643             [depr.arith.conv.enum].
   3644           + [50]-Wdeprecated-enum-float-conversion, enabled by default in
   3645             C++20, warns about deprecated arithmetic conversions on
   3646             operands where one is of enumeration type and the other is of
   3647             a floating-point type, as outlined in [depr.arith.conv.enum].
   3648           + [51]-Wmismatched-new-delete, enabled by -Wall, warns about
   3649             calls to C++ operator delete with pointers returned from
   3650             mismatched forms of operator new or from other mismatched
   3651             allocation functions.
   3652           + [52]-Wvexing-parse, enabled by default, warns about the most
   3653             vexing parse rule: the cases when a declaration looks like a
   3654             variable definition, but the C++ language requires it to be
   3655             interpreted as a function declaration.
   3656      * Enhancements to existing warnings:
   3657           + [53]-Wnonnull considers the implicit this argument of every
   3658             C++ nonstatic member function to have been implicitly declared
   3659             with attribute nonnull and triggers warnings for calls where
   3660             the pointer is null.
   3661 
   3662     [54]Runtime Library (libstdc++)
   3663 
   3664      * Improved C++17 support, including:
   3665           + std::from_chars and std::to_chars for floating-point types.
   3666      * Improved experimental C++20 support, including:
   3667           + Calendar additions to <chrono>. Thanks to Cassio Neri for
   3668             optimizations.
   3669           + std::bit_cast
   3670           + std::source_location
   3671           + Atomic wait and notify operations.
   3672           + <barrier>, <latch>, and <semaphore>
   3673           + <syncstream>
   3674           + Efficient access to basic_stringbuf's buffer.
   3675           + Heterogeneous lookup in unordered containers.
   3676      * Experimental C++23 support, including:
   3677           + contains member functions for strings, thanks to Paul Fee.
   3678           + std::to_underlying, std::is_scoped_enum
   3679      * Experimental support for Data-Parallel Types (simd) from the
   3680        Parallelism 2 TS, thanks to Matthias Kretz.
   3681      * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
   3682 
   3683   [55]D
   3684 
   3685      * New features:
   3686           + A new bottom type typeof(*null) has been added to represent
   3687             run-time errors and non-terminating functions. This also
   3688             introduces a new standard alias for the type named noreturn,
   3689             and is implicitly imported into every module.
   3690           + Printf-like and scanf-like functions are now detected by
   3691             prefixing them with pragma(printf) for printf-like functions
   3692             or pragma(scanf) for scanf-like functions.
   3693           + The __traits() expression now supports the extensions
   3694             isDeprecated, isDisabled, isFuture, isModule, isPackage,
   3695             child, isReturnOnStack, isZeroInit, getTargetInfo,
   3696             getLocation, hasPostblit, isCopyable, getVisibility, and
   3697             totype.
   3698           + An expression-based contract syntax has been added to the
   3699             language.
   3700           + Function literals can now return a value by reference with the
   3701             ref keyword.
   3702           + A new syntax is available to declare aliases to function types
   3703             using the alias syntax based on the assignment operator.
   3704           + New types __c_complex_float, __c_complex_double,
   3705             __c_complex_real, and __c_wchar_t have been added for
   3706             interfacing with C and C++ code, and are available from the
   3707             core.stdc.config module.
   3708           + User-defined attributes can now be used to annotate enum
   3709             members, alias declarations, and function parameters.
   3710           + Template alias parameters can now be instantiated with basic
   3711             types such as int or void function().
   3712           + The mixin construct can now be used as types in the form
   3713             mixin(string) var.
   3714           + The mixin construct can now take an argument list, same as
   3715             pragma(msg).
   3716      * New intrinsics:
   3717           + Bitwise rotate intrinsics core.bitop.rol and core.bitop.ror
   3718             have been added.
   3719           + Byte swap intrinsic core.bitop.byteswap for swapping bytes in
   3720             a 2-byte ushort has been added.
   3721           + Math intrinsics available from core.math now have overloads
   3722             for float and double types.
   3723           + Volatile intrinsics core.volatile.volatileLoad and
   3724             core.volatile.volatileStore have been moved from the
   3725             core.bitop module.
   3726      * New attributes:
   3727           + The following GCC attributes are now recognized and available
   3728             from the gcc.attributes module with short-hand aliases for
   3729             convenience:
   3730                o @attribute("alloc_size", arguments) or
   3731                  @alloc_size(arguments).
   3732                o @attribute("always_inline") or @always_inline.
   3733                o @attribute("used") or @used.
   3734                o @attribute("optimize", arguments) or
   3735                  @optimize(arguments).
   3736                o @attribute("cold") or @cold.
   3737                o @attribute("noplt") or @noplt.
   3738                o @attribute("target_clones", arguments) or
   3739                  @target_clones(arguments).
   3740                o @attribute("no_icf") or @no_icf.
   3741                o @attribute("noipa") or @noipa.
   3742                o @attribute("symver", arguments) or @symver(arguments).
   3743           + New aliases have been added to gcc.attributes for
   3744             compatibility with ldc.attributes.
   3745                o The @allocSize(arguments) attribute is the same as
   3746                  @alloc_size(arguments), but uses a 0-based index for
   3747                  function arguments.
   3748                o The @assumeUsed attribute is an alias for
   3749                  @attribute("used").
   3750                o The @fastmath attribute is an alias for
   3751                  @optimize("Ofast").
   3752                o The @naked attribute is an alias for @attribute("naked").
   3753                  This attribute may not be available on all targets.
   3754                o The @restrict attribute has been added to specify that a
   3755                  function parameter is to be restrict-qualified in the C99
   3756                  sense of the term.
   3757                o The @optStrategy(strategy) attribute is an alias for
   3758                  @optimize("O0") when the strategy is "none", otherwise
   3759                  @optimize("Os") for the "optsize" and "minsize"
   3760                  strategies.
   3761                o The @polly attribute is an alias for
   3762                  @optimize("loop-parallelize-all").
   3763                o The @section(name) attribute is an alias for
   3764                  @attribute("section", name).
   3765                o The @target(arguments) attribute is an alias for
   3766                  attribute("target", arguments).
   3767                o The @weak attribute is an alias for @attribute("weak").
   3768      * New language options:
   3769           + -fweak-templates, added to control whether declarations that
   3770             can be defined in multiple objects should be emitted as weak
   3771             symbols. The default is to emit all symbols with extern
   3772             linkage as weak, unless the target lacks support for weak
   3773             symbols.
   3774           + -Wdeprecated, this option is now enabled by default.
   3775           + -Wextra, this option now turns on all warnings that are not
   3776             part of the core D language front-end - -Waddress,
   3777             -Wcast-result, -Wunknown-pragmas.
   3778           + -Wvarargs, added to turn on warnings about questionable usage
   3779             of the va_start intrinsic.
   3780      * Deprecated and removed features:
   3781           + Compiler-recognized attributes are now made available from the
   3782             gcc.attributes module, the former module gcc.attribute has
   3783             been deprecated and will be removed in a future release.
   3784           + The @attribute("alias") attribute has been removed, as it had
   3785             been superseded by pragma(mangle).
   3786           + The @attribute("forceinline") attribute has been removed and
   3787             renamed to @always_inline.
   3788           + __vector types that are not supported in hardware are now
   3789             rejected at compile-time. Previously all vector types were
   3790             accepted by the compiler and emulated when target support was
   3791             absent.
   3792           + The extern(Pascal) linkage attribute has been removed.
   3793           + The deprecation phase for -ftransition=import and
   3794             -ftransition=checkimports is finished. These switches no
   3795             longer have an effect and are now removed. Symbols that are
   3796             not visible in a particular scope will no longer be found by
   3797             the compiler.
   3798           + It is now an error to use private variables selectively
   3799             imported from other modules. Due to a bug, some imported
   3800             private members were visible from other modules, violating the
   3801             specification.
   3802           + The -fweak compiler switch has been removed, as it existed
   3803             only for testing.
   3804 
   3805   [56]Fortran
   3806 
   3807      * Added DEPRECATED to !GCC$'s attributes directive.
   3808 
   3809   [57]Go
   3810 
   3811      * GCC 11 provides a complete implementation of the Go 1.16.3 user
   3812        packages.
   3813 
   3814 [58]libgccjit
   3815 
   3816      * libgccjit was marked as merely "Alpha" quality when [59]originally
   3817        added in GCC 5. Given that we have maintained [60]API and ABI
   3818        compatibility since then and it is in use by various projects, we
   3819        have removed that caveat.
   3820      * libgccjit can now be built for MinGW
   3821      * The libgccjit API gained 10 new entry points:
   3822           + [61]gcc_jit_global_set_initializer
   3823           + 9 entrypoints for [62]directly embedding asm statements into a
   3824             compile, analogous to inline asm in the C front end
   3825 
   3826 [63]New Targets and Target Specific Improvements
   3827 
   3828   [64]AArch64 & arm
   3829 
   3830      * A number of new CPUs are supported through arguments to the -mcpu
   3831        and -mtune options in both the arm and aarch64 back ends (GCC
   3832        identifiers in parentheses):
   3833           + Arm Cortex-A78 (cortex-a78).
   3834           + Arm Cortex-A78AE (cortex-a78ae).
   3835           + Arm Cortex-A78C (cortex-a78c).
   3836           + Arm Cortex-X1 (cortex-x1).
   3837           + Arm Neoverse V1 (neoverse-v1).
   3838           + Arm Neoverse N2 (neoverse-n2).
   3839      * GCC can now auto-vectorize operations performing addition,
   3840        subtraction, multiplication and the accumulate/subtract variants on
   3841        complex numbers, taking advantage of the Advanced SIMD instructions
   3842        in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
   3843        and MVE (AArch32 M-profile) instruction sets.
   3844 
   3845   [65]AArch64
   3846 
   3847      * In addition to the above, the following AArch64-only CPUs are now
   3848        supported:
   3849           + Fujitsu A64FX (a64fx).
   3850           + Arm Cortex-R82 (cortex-r82).
   3851      * The AArch64 Armv8-R architecture is now supported through the
   3852        -march=armv8-r option.
   3853      * Mitigation against the [66]Straight-line Speculation vulnerability
   3854        is supported with the -mharden-sls= option. Please refer to the
   3855        documentation for usage instructions.
   3856      * The availability of Advanced SIMD intrinsics available through the
   3857        arm_neon.h header is improved and GCC 11 supports the full set of
   3858        intrinsics defined by ACLE Q3 2020.
   3859 
   3860   [67]AMD Radeon (GCN)
   3861 
   3862      * Initial support for gfx908 GPUs has been added.
   3863 
   3864   [68]arm
   3865 
   3866      * Initial auto-vectorization is now available when targeting the MVE
   3867        instruction set.
   3868      * GCC can now make use of the Low Overhead Branch instruction in
   3869        Armv8.1-M to optimize loop counters and checks.
   3870      * The -mcpu=cortex-m55 option now supports the extensions +nomve and
   3871        +nomve.fp to control generation of MVE and MVE floating-point
   3872        instructions.
   3873 
   3874   [69]IA-32/x86-64
   3875 
   3876      * New ISA extension support for Intel TSXLDTRK was added to GCC.
   3877        TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
   3878        switch.
   3879      * New ISA extension support for Intel SERIALIZE was added to GCC.
   3880        SERIALIZE intrinsics are available via the -mserialize compiler
   3881        switch.
   3882      * New ISA extension support for Intel HRESET was added to GCC. HRESET
   3883        intrinsics are available via the -mhreset compiler switch.
   3884      * New ISA extension support for Intel UINTR was added to GCC. UINTR
   3885        intrinsics are available via the -muintr compiler switch.
   3886      * New ISA extension support for Intel KEYLOCKER was added to GCC.
   3887        KEYLOCKER intrinsics are available via the -mkeylocker compiler
   3888        switch.
   3889      * New ISA extension support for Intel AMX-TILE, AMX-INT8, AMX-BF16
   3890        was added to GCC. AMX-TILE, AMX-INT8, AMX-BF16 intrinsics are
   3891        available via the -mamx-tile, -mamx-int8, -mamx-bf16 compiler
   3892        switches.
   3893      * New ISA extension support for Intel AVX-VNNI was added to GCC.
   3894        AVX-VNNI intrinsics are available via the -mavxvnni compiler
   3895        switch.
   3896      * GCC now supports the Intel CPU named Sapphire Rapids through
   3897        -march=sapphirerapids. The switch enables the MOVDIRI, MOVDIR64B,
   3898        AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG,
   3899        TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16, and AVX-VNNI ISA
   3900        extensions.
   3901      * GCC now supports the Intel CPU named Alderlake through
   3902        -march=alderlake. The switch enables the CLDEMOTE, PTWRITE,
   3903        WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI, and HRESET ISA extensions.
   3904      * GCC now supports the Intel CPU named Rocketlake through
   3905        -march=rocketlake. Rocket Lake is based on Icelake client and minus
   3906        SGX.
   3907      * GCC now supports AMD CPUs based on the znver3 core via
   3908        -march=znver3.
   3909      * GCC now supports micro-architecture levels defined in the x86-64
   3910        psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
   3911 
   3912   [70]Nios II
   3913 
   3914      * The options -mcustom-insn=N no longer produce compiler warnings if
   3915        the custom instruction is not generated due to missing optimization
   3916        options such as -fno-math-errno, -ffinite-math-only, or
   3917        -funsafe-math-optimizations. These warnings were not consistently
   3918        emitted for all custom instructions.
   3919      * The -mcustom-fpu-cfg=fph2 option has been added to enable the
   3920        custom instructions supported by the Nios II Floating Point
   3921        Hardware 2 Component.
   3922 
   3923   [71]NVPTX
   3924 
   3925      * The -misa default has changed from sm_30 to sm_35.
   3926      * The -m32 compiler switch has been removed.
   3927      * The -msoft-stack-reserve-local format has been fixed. Previously,
   3928        it accepted -msoft-stack-reserve-local<n>. It now accepts
   3929        -msoft-stack-reserve-local=<n>.
   3930 
   3931   [72]S/390, System z, IBM Z Systems
   3932 
   3933      * The behavior when compiling with -fexcess-precision=standard (e.g.,
   3934        implied by -std=c99) on s390(x) targets can now be controlled at
   3935        configure time with the flag --enable-s390-excess-float-precision.
   3936        When enabled, GCC will maintain previous behavior and evaluate
   3937        float expressions in double precision, which aligns with the
   3938        definition of float_t as double. With the flag disabled, GCC will
   3939        always evaluate float expressions in single precision. In native
   3940        builds and cross compiles that have target libc headers, GCC will
   3941        by default match the definition of float_t in the installed glibc.
   3942 
   3943   [73]RISC-V
   3944 
   3945      * Support address sanitizer for RISC-V.
   3946      * Support big-endian for RISC-V, thanks to Marcus Comstedt.
   3947      * Implement new style of architecture extension test macros: each
   3948        architecture extension has a corresponding feature test macro,
   3949        which can be used to test its existence and version information.
   3950      * Legacy architecture extension test macros like __riscv_atomic are
   3951        deprecated, but will still be supported for at least 2 release
   3952        cycles.
   3953      * Support IFUNC for riscv*-*-linux*.
   3954      * Add new option -misa-spec=* to control ISA spec version. This
   3955        controls the default version of each extensions. It defaults to
   3956        2.2.
   3957      * Introduce the --with-multilib-generator configure time option. This
   3958        allows for flexible config multi-lib settings. Its syntax is the
   3959        same as RISC-V's multilib-generator.
   3960      * Extend the sytax for multilib-generator, support expansion operator
   3961        * to reduce the complexity of complicated multi-lib re-use rules.
   3962      * Support -mcpu=* option aligned with RISC-V clang/LLVM. It sets the
   3963        pipeline model and architecture extensions, like -mtune=* plus
   3964        -march=*.
   3965      * Support for TLS stack protector canary access, thanks to Cooper Qu.
   3966      * Support __builtin_thread_pointer for RISC-V.
   3967      * Introduce shorten_memrefs optimization, which reduces the code size
   3968        for memory access, thanks to Craig Blackmore.
   3969 
   3970 [74]Operating Systems
   3971 
   3972   [75]AIX
   3973 
   3974      * GCC for AIX can be built as a 64-bit application and the runtime is
   3975        built as FAT libraries containing both 32-bit and 64-bit objects.
   3976      * Support AIX Vector Extended ABI with -mabi=vec-extabi.
   3977      * Thread-Local uninitiated data placed in local common section.
   3978      * Use thread-safe access in ctype.
   3979      * Link with libc128.a when long-double-128 enabled.
   3980 
   3981 [76]Improvements to Static Analyzer
   3982 
   3983      * The implementation of how program state is tracked within
   3984        [77]-fanalyzer has been completely rewritten for GCC 11, fixing
   3985        numerous bugs, and allowing for the analyzer to scale to larger C
   3986        source files.
   3987      * The analysis of allocations and deallocations has been generalized
   3988        beyond malloc and free.
   3989           + As preliminary work towards eventually supporting C++, the
   3990             malloc/free checking will also check new/delete and
   3991             new[]/delete[]. However, C++ is not yet properly supported by
   3992             [78]-fanalyzer (for example, exception-handling is
   3993             unimplemented).
   3994           + As noted above, the existing [79]malloc attribute has been
   3995             extended so that it can be used to identify
   3996             allocator/deallocator API pairs. The analyzer will use these
   3997             attributes when checking for leaks, double-frees,
   3998             use-after-frees, and similar issues.
   3999           + A new [80]-Wanalyzer-mismatching-deallocation warning has been
   4000             added, covering such mismatches as using scalar delete rather
   4001             vector delete[].
   4002      * The analyzer has gained warnings
   4003        [81]-Wanalyzer-shift-count-negative,
   4004        [82]-Wanalyzer-shift-count-overflow, [83]-Wanalyzer-write-to-const,
   4005        and [84]-Wanalyzer-write-to-string-literal, all enabled by default
   4006        when [85]-fanalyzer is enabled.
   4007      * The analyzer can now be extended by GCC plugins, allowing for
   4008        domain-specific path-sensitive warnings. An example of using a
   4009        [86]GCC plugin to check for misuses of CPython's global interpreter
   4010        lock can be seen in the test suite
   4011      * The analyzer has gained new debugging options
   4012        [87]-fdump-analyzer-json and [88]-fno-analyzer-feasibility.
   4013 
   4014 Other significant improvements
   4015 
   4016      * GCC has gained a new environment variable
   4017        [89]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
   4018        request machine-readable fix-it hints without needing to adjust
   4019        build flags.
   4020 
   4021 [90]GCC 11.1
   4022 
   4023    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   4024    system that are known to be fixed in the 11.1 release. This list might
   4025    not be complete (that is, it is possible that some PRs that have been
   4026    fixed are not listed here).
   4027 
   4028 [92]GCC 11.2
   4029 
   4030    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   4031    system that are known to be fixed in the 11.2 release. This list might
   4032    not be complete (that is, it is possible that some PRs that have been
   4033    fixed are not listed here).
   4034 
   4035 [94]GCC 11.3
   4036 
   4037    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   4038    system that are known to be fixed in the 11.3 release. This list might
   4039    not be complete (that is, it is possible that some PRs that have been
   4040    fixed are not listed here).
   4041 
   4042 [96]GCC 11.4
   4043 
   4044    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   4045    system that are known to be fixed in the 11.4 release. This list might
   4046    not be complete (that is, it is possible that some PRs that have been
   4047    fixed are not listed here).
   4048 
   4049   Target Specific Changes
   4050 
   4051     x86-64
   4052 
   4053      * The x86-64 ABI of passing and returning structure with a 64-bit
   4054        single precision vector changed in GCC 11.1 when 3DNOW is disabled.
   4055        Disabling 3DNOW no longer changes how they are passed nor returned.
   4056        This ABI change is now diagnosed with -Wpsabi.
   4057      * Mitigation against straight line speculation (SLS) for function
   4058        return and indirect jump is supported via
   4059        -mharden-sls=[none|all|return|indirect-jmp].
   4060      * Add CS prefix to call and jmp to indirect thunk with branch target
   4061        in r8-r15 registers via -mindirect-branch-cs-prefix.
   4062 
   4063 [98]GCC 11.5
   4064 
   4065    This is the [99]list of problem reports (PRs) from GCC's bug tracking
   4066    system that are known to be fixed in the 11.5 release. This list might
   4067    not be complete (that is, it is possible that some PRs that have been
   4068    fixed are not listed here).
   4069 
   4070   Caveats
   4071 
   4072     aarch64
   4073 
   4074      * Due to a bug introduced a few weeks before the 11.5.0 release if
   4075        the compiler is configured without explicit --with-arch=,
   4076        --with=cpu= and/or --with-tune= configure options the compiler
   4077        without explicit -march= etc. options might act as if asked for
   4078        cortex-a34. This can be fixed by applying manually the
   4079        [100]r12-8060 commit patch on top of GCC 11.5.0. See [101]PR116029
   4080        for more details. GCC 11.4.0 or earlier releases are not affected.
   4081 
   4082 
   4083     For questions related to the use of GCC, please consult these web
   4084     pages and the [102]GCC manuals. If that fails, the
   4085     [103]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4086     web pages and the development of GCC are welcome on our developer
   4087     list at [104]gcc (a] gcc.gnu.org. All of [105]our lists have public
   4088     archives.
   4089 
   4090    Copyright (C) [106]Free Software Foundation, Inc. Verbatim copying and
   4091    distribution of this entire article is permitted in any medium,
   4092    provided this notice is preserved.
   4093 
   4094    These pages are [107]maintained by the GCC team. Last modified
   4095    2026-06-07.
   4096 
   4097 References
   4098 
   4099    1. https://gcc.gnu.org/gcc-11/porting_to.html
   4100    2. https://gcc.gnu.org/onlinedocs/index.html#current
   4101    3. https://wg21.link/p0522r0
   4102    4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
   4103    5. https://gcc.gnu.org/gcc-11/changes.html#general
   4104    6. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
   4105    7. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
   4106    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
   4107    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
   4108   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   4109   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
   4110   12. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   4111   13. https://github.com/google/sanitizers/wiki/AddressSanitizer
   4112   14. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   4113   15. https://dwarfstd.org/doc/DWARF5.pdf
   4114   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
   4115   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
   4116   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
   4117   19. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
   4118   20. https://gcc.gnu.org/gcc-11/changes.html#languages
   4119   21. https://www.openmp.org/specifications/
   4120   22. https://www.openacc.org/
   4121   23. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11
   4122   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
   4123   25. https://gcc.gnu.org/gcc-11/changes.html#c-family
   4124   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
   4125   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   4126   28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   4127   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   4128   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   4129   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   4130   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
   4131   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
   4132   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
   4133   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   4134   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   4135   37. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
   4136   38. https://gcc.gnu.org/gcc-11/changes.html#c
   4137   39. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
   4138   40. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
   4139   41. https://gcc.gnu.org/gcc-11/changes.html#cxx
   4140   42. https://gcc.gnu.org/projects/cxx-status.html#cxx20
   4141   43. https://gcc.gnu.org/projects/cxx-status.html#cxx23
   4142   44. https://gcc.gnu.org/PR41437
   4143   45. https://gcc.gnu.org/PR95307
   4144   46. https://gcc.gnu.org/PR97518
   4145   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
   4146   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
   4147   49. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
   4148   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
   4149   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   4150   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
   4151   53. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
   4152   54. https://gcc.gnu.org/gcc-11/changes.html#libstdcxx
   4153   55. https://gcc.gnu.org/gcc-11/changes.html#d
   4154   56. https://gcc.gnu.org/gcc-11/changes.html#fortran
   4155   57. https://gcc.gnu.org/gcc-11/changes.html#go
   4156   58. https://gcc.gnu.org/gcc-11/changes.html#jit
   4157   59. https://gcc.gnu.org/gcc-5/changes.html#jit
   4158   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
   4159   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
   4160   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
   4161   63. https://gcc.gnu.org/gcc-11/changes.html#targets
   4162   64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
   4163   65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
   4164   66. https://developer.arm.com/documentation/110280/latest
   4165   67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
   4166   68. https://gcc.gnu.org/gcc-11/changes.html#arm
   4167   69. https://gcc.gnu.org/gcc-11/changes.html#x86
   4168   70. https://gcc.gnu.org/gcc-11/changes.html#nios2
   4169   71. https://gcc.gnu.org/gcc-11/changes.html#nvptx
   4170   72. https://gcc.gnu.org/gcc-11/changes.html#s390
   4171   73. https://gcc.gnu.org/gcc-11/changes.html#riscv
   4172   74. https://gcc.gnu.org/gcc-11/changes.html#os
   4173   75. https://gcc.gnu.org/gcc-11/changes.html#aix
   4174   76. https://gcc.gnu.org/gcc-11/changes.html#analyzer
   4175   77. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4176   78. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4177   79. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   4178   80. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
   4179   81. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
   4180   82. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
   4181   83. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   4182   84. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   4183   85. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4184   86. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
   4185   87. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
   4186   88. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
   4187   89. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
   4188   90. https://gcc.gnu.org/gcc-11/changes.html#11.1
   4189   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
   4190   92. https://gcc.gnu.org/gcc-11/changes.html#11.2
   4191   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
   4192   94. https://gcc.gnu.org/gcc-11/changes.html#11.3
   4193   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
   4194   96. https://gcc.gnu.org/gcc-11/changes.html#11.4
   4195   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
   4196   98. https://gcc.gnu.org/gcc-11/changes.html#11.5
   4197   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.5
   4198  100. https://gcc.gnu.org/r12-8060
   4199  101. https://gcc.gnu.org/PR116029
   4200  102. https://gcc.gnu.org/onlinedocs/
   4201  103. mailto:gcc-help (a] gcc.gnu.org
   4202  104. mailto:gcc (a] gcc.gnu.org
   4203  105. https://gcc.gnu.org/lists.html
   4204  106. https://www.fsf.org/
   4205  107. https://gcc.gnu.org/about.html
   4206 ======================================================================
   4207 http://gcc.gnu.org/gcc-10/index.html
   4208                              GCC 10 Release Series
   4209 
   4210    (This release series is no longer supported.)
   4211 
   4212    July, 7, 2023
   4213 
   4214    The [1]GNU project and the GCC developers are pleased to announce the
   4215    release of GCC 10.5.
   4216 
   4217    This release is a bug-fix release, containing fixes for regressions in
   4218    GCC 10.4 relative to previous releases of GCC.
   4219 
   4220 Release History
   4221 
   4222    GCC 10.5
   4223           July 7, 2023 ([2]changes, [3]documentation)
   4224 
   4225    GCC 10.4
   4226           June 28, 2022 ([4]changes, [5]documentation)
   4227 
   4228    GCC 10.3
   4229           April 8, 2021 ([6]changes, [7]documentation)
   4230 
   4231    GCC 10.2
   4232           July 23, 2020 ([8]changes, [9]documentation)
   4233 
   4234    GCC 10.1
   4235           May 7, 2020 ([10]changes, [11]documentation)
   4236 
   4237 References and Acknowledgements
   4238 
   4239    GCC used to stand for the GNU C Compiler, but since the compiler
   4240    supports several other languages aside from C, it now stands for the
   4241    GNU Compiler Collection.
   4242 
   4243    The GCC developers would like to thank the numerous people that have
   4244    contributed new features, improvements, bug fixes, and other changes as
   4245    well as test results to GCC. This [12]amazing group of volunteers is
   4246    what makes GCC successful.
   4247 
   4248    For additional information about GCC please refer to the [13]GCC
   4249    project web site or contact the [14]GCC development mailing list.
   4250 
   4251    To obtain GCC please use [15]our mirror sites or [16]our version
   4252    control system.
   4253 
   4254 
   4255     For questions related to the use of GCC, please consult these web
   4256     pages and the [17]GCC manuals. If that fails, the
   4257     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4258     web pages and the development of GCC are welcome on our developer
   4259     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   4260     archives.
   4261 
   4262    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   4263    distribution of this entire article is permitted in any medium,
   4264    provided this notice is preserved.
   4265 
   4266    These pages are [22]maintained by the GCC team. Last modified
   4267    2024-05-30.
   4268 
   4269 References
   4270 
   4271    1. http://www.gnu.org/
   4272    2. https://gcc.gnu.org/gcc-10/changes.html
   4273    3. https://gcc.gnu.org/onlinedocs/10.5.0/
   4274    4. https://gcc.gnu.org/gcc-10/changes.html
   4275    5. https://gcc.gnu.org/onlinedocs/10.4.0/
   4276    6. https://gcc.gnu.org/gcc-10/changes.html
   4277    7. https://gcc.gnu.org/onlinedocs/10.3.0/
   4278    8. https://gcc.gnu.org/gcc-10/changes.html
   4279    9. https://gcc.gnu.org/onlinedocs/10.2.0/
   4280   10. https://gcc.gnu.org/gcc-10/changes.html
   4281   11. https://gcc.gnu.org/onlinedocs/10.1.0/
   4282   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
   4283   13. https://gcc.gnu.org/index.html
   4284   14. mailto:gcc (a] gcc.gnu.org
   4285   15. https://gcc.gnu.org/mirrors.html
   4286   16. https://gcc.gnu.org/git.html
   4287   17. https://gcc.gnu.org/onlinedocs/
   4288   18. mailto:gcc-help (a] gcc.gnu.org
   4289   19. mailto:gcc (a] gcc.gnu.org
   4290   20. https://gcc.gnu.org/lists.html
   4291   21. https://www.fsf.org/
   4292   22. https://gcc.gnu.org/about.html
   4293 ======================================================================
   4294 http://gcc.gnu.org/gcc-10/changes.html
   4295                              GCC 10 Release Series
   4296                         Changes, New Features, and Fixes
   4297 
   4298    This page is a "brief" summary of some of the huge number of
   4299    improvements in GCC 10. You may also want to check out our [1]Porting
   4300    to GCC 10 page and the [2]full GCC documentation.
   4301 
   4302 Caveats
   4303 
   4304      * An ABI incompatibility between C++14 and C++17 has been fixed. On
   4305        some targets a class with a zero-sized subobject would be passed
   4306        incorrectly when compiled as C++17 or C++20. See the [3]C++ notes
   4307        below for more details.
   4308      * The deprecated Profile Mode and array_allocator extensions have
   4309        been removed from libstdc++.
   4310      * The non-standard std::__is_nullptr_t type trait is deprecated and
   4311        will be removed from libstdc++ in a future release. The standard
   4312        trait std::is_null_pointer should be instead.
   4313      * The minimum version of the [4]MPFR library required for building
   4314        GCC has been increased to version 3.1.0 (released 2011-10-03).
   4315      * The automatic template instantiation at link time (-frepo) has been
   4316        removed.
   4317      * The --param allow-store-data-races internal parameter has been
   4318        removed in favor of a new official option -fallow-store-data-races.
   4319        While default behavior is unchanged and the new option allows to
   4320        correctly maintain a per compilation unit setting across link-time
   4321        optimization, alteration of the default via --param
   4322        allow-store-data-races will now be diagnosed and build systems have
   4323        to be adjusted accordingly.
   4324      * Offloading to Heterogeneous System Architecture Intermediate
   4325        Language (HSAIL) has been deprecated and will likely be removed in
   4326        a future release.
   4327      * The type of the std::iterator base class of
   4328        std::istreambuf_iterator was changed in C++98 mode to be consistent
   4329        with C++11 and later standards. See the [5]libstdc++ notes below
   4330        for more details.
   4331      * GCC 10.5 does not bootstrap with a C++98 compiler; if you need to
   4332        start from C++98, you should build 10.4 or 9.5 instead.
   4333 
   4334 [6]General Improvements
   4335 
   4336      * New built-in functions:
   4337           + The [7]__has_builtin built-in preprocessor operator can be
   4338             used to query support for built-in functions provided by GCC
   4339             and other compilers that support it.
   4340           + __builtin_roundeven for the corresponding function from
   4341             ISO/IEC TS 18661.
   4342      * New command-line options:
   4343           + [8]-fallocation-dce removes unneeded pairs of new and delete
   4344             operators.
   4345           + [9]-fprofile-partial-training can now be used to inform the
   4346             compiler that code paths not covered by the training run
   4347             should not be optimized for size.
   4348           + [10]-fprofile-reproducible controls level of reproducibility
   4349             of profile gathered by [11]-fprofile-generate. This makes it
   4350             possible to rebuild program with same outcome which is useful,
   4351             for example, for distribution packages.
   4352           + [12]-fprofile-prefix-path can be used in combination with
   4353             -fprofile-generate=profile_dir and -fprofile-use=profile_dir
   4354             to inform GCC where the base directory of build source tree is
   4355             in case it differs between instrumentation and optimized
   4356             builds.
   4357           + [13]-fanalyzer enables a new static analysis pass and
   4358             associated warnings. This pass performs a time-consuming
   4359             exploration of paths through the code in the hope of detecting
   4360             various common errors, such as double-free bugs. This option
   4361             should be regarded as experimental in this release. In
   4362             particular, analysis of non-C code is unlikely to work.
   4363      * Inter-procedural optimization improvements:
   4364           + The inter-procedural scalar replacement of aggregates
   4365             (IPA-SRA) pass was re-implemented to work at link-time and can
   4366             now also remove computing and returning unused return values.
   4367           + [14]-finline-functions is now enabled at -O2 and was retuned
   4368             for better code size versus runtime performance trade-offs.
   4369             Inliner heuristics was also significantly sped up to avoid
   4370             negative impact to -flto -O2 compile times.
   4371           + Inliner heuristics and function cloning can now use
   4372             value-range information to predict effectivity of individual
   4373             transformations.
   4374           + During link-time optimization the C++ One Definition Rule is
   4375             used to increase precision of type based alias analysis.
   4376      * Link-time optimization improvements:
   4377           + A new binary [15]lto-dump has been added. It dumps various
   4378             information about LTO bytecode object files.
   4379           + The parallel phase of the LTO can automatically detect a
   4380             running make's jobserver or fall back to number of available
   4381             cores.
   4382           + The LTO bytecode can be compressed with the [16]zstd
   4383             algorithm. The configure script automatically detects zstd
   4384             support.
   4385           + Most --param values can now be specified at translation unit
   4386             granularity. This includes all parameters controlling the
   4387             inliner and other inter-procedural optimizations. Unlike
   4388             earlier releases, GCC 10 will ignore parameters controlling
   4389             optimizations specified at link-time and apply parameters
   4390             specified at compile-time in the same manner as done for
   4391             optimization flags.
   4392      * Profile driven optimization improvements:
   4393           + Profile maintenance during compilation and hot/cold code
   4394             partitioning have been improved.
   4395           + Using [17]-fprofile-values, an instrumented binary can track
   4396             multiple values (up to 4) for e.g. indirect calls and provide
   4397             more precise profile information.
   4398 
   4399 [18]New Languages and Language-Specific Improvements
   4400 
   4401      * Version 2.6 of the [19]OpenACC specification is now supported by
   4402        the C, C++ and Fortran compilers. See the [20]implementation status
   4403        section on the OpenACC wiki page and the [21]run-time library
   4404        documentation for further information.
   4405      * GCC 10 adds a number of newly implemented [22]OpenMP 5.0 features
   4406        such as conditional lastprivate clause, scan and loop directives,
   4407        order(concurrent) and use_device_addr clauses support, if clause on
   4408        simd construct, and partial support for the declare variant
   4409        directive, getting closer to full support of the OpenMP 5.0
   4410        standard.
   4411      * OpenMP and OpenACC now support [23]offloading to AMD Radeon (GCN)
   4412        GPUs; supported are the third-generation Fiji (fiji) and the
   4413        fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
   4414 
   4415   [24]C family
   4416 
   4417      * New attributes:
   4418           + The access function and type attribute has been added to
   4419             describe how a function accesses objects passed to it by
   4420             pointer or reference, and to associate such arguments with
   4421             integer arguments denoting the objects' sizes. The attribute
   4422             is used to enable the detection of invalid accesses by
   4423             user-defined functions, such as those diagnosed by
   4424             -Wstringop-overflow.
   4425           + The symver attribute can be used to bind symbols to specific
   4426             version nodes on ELF platforms. This is preferred to using
   4427             inline assembly with GNU as symver directive because the
   4428             latter is not compatible with link-time optimizations.
   4429      * New warnings:
   4430           + [25]-Wstring-compare, enabled by -Wextra, warns about equality
   4431             and inequality expressions between zero and the result of a
   4432             call to either strcmp and strncmp that evaluate to a constant
   4433             as a result of the length of one argument being greater than
   4434             the size of the array pointed to by the other.
   4435           + [26]-Wzero-length-bounds, enabled by -Warray-bounds, warns
   4436             about accesses to elements of zero-length arrays that might
   4437             overlap other members of the same object.
   4438      * Enhancements to existing warnings:
   4439           + [27]-Warray-bounds detects more out-of-bounds accesses to
   4440             member arrays as well as accesses to elements of zero-length
   4441             arrays.
   4442           + [28]-Wformat-overflow makes full use of string length
   4443             information computed by the strlen optimization pass.
   4444           + [29]-Wrestrict detects overlapping accesses to dynamically
   4445             allocated objects.
   4446           + [30]-Wreturn-local-addr diagnoses more instances of return
   4447             statements returning addresses of automatic variables.
   4448           + [31]-Wstringop-overflow detects more out-of-bounds stores to
   4449             member arrays including zero-length arrays, dynamically
   4450             allocated objects and variable length arrays, as well as more
   4451             instances of reads of unterminated character arrays by string
   4452             built-in functions. The warning also detects out-of-bounds
   4453             accesses by calls to user-defined functions declared with the
   4454             new attribute access.
   4455           + [32]-Warith-conversion re-enables warnings from -Wconversion,
   4456             -Wfloat-conversion, and -Wsign-conversion that are now off by
   4457             default for an expression where the result of an arithmetic
   4458             operation will not fit in the target type due to promotion,
   4459             but the operands of the expression do fit in the target type.
   4460      * Extended characters in identifiers may now be specified directly in
   4461        the input encoding (UTF-8, by default), in addition to the UCN
   4462        syntax (\uNNNN or \UNNNNNNNN) that is already supported:
   4463 
   4464 static const int  = 3;
   4465 int get_nave_pi() {
   4466   return ;
   4467 }
   4468 
   4469   [33]C
   4470 
   4471      * Several new features from the upcoming C2X revision of the ISO C
   4472        standard are supported with -std=c2x and -std=gnu2x. Some of these
   4473        features are also supported as extensions when compiling for older
   4474        language versions. In addition to the features listed, some
   4475        features previously supported as extensions and now added to the C
   4476        standard are enabled by default in C2X mode and not diagnosed with
   4477        -std=c2x -Wpedantic.
   4478           + The [[]] attribute syntax is supported, as in C++. Existing
   4479             attributes can be used with this syntax in forms such as
   4480             [[gnu::const]]. The standard attributes [[deprecated]],
   4481             [[fallthrough]] and [[maybe_unused]] are supported.
   4482           + UTF-8 character constants using the u8'' syntax are supported.
   4483           + <float.h> defines macros FLT_NORM_MAX, DBL_NORM_MAX and
   4484             LDBL_NORM_MAX.
   4485           + When decimal floating-point arithmetic is supported, <float.h>
   4486             defines macros DEC32_TRUE_MIN, DEC64_TRUE_MIN and
   4487             DEC128_TRUE_MIN, in addition to the macros that were
   4488             previously only defined if __STDC_WANT_DEC_FP__ was defined
   4489             before including <float.h>.
   4490           + In C2X mode, empty parentheses in a function definition give
   4491             that function a type with a prototype for subsequent calls;
   4492             other old-style function definitions are diagnosed by default
   4493             in C2X mode.
   4494           + The strftime format checking supports the %OB and %Ob formats.
   4495           + In C2X mode, -fno-fp-int-builtin-inexact is enabled by
   4496             default.
   4497      * GCC now defaults to -fno-common. As a result, global variable
   4498        accesses are more efficient on various targets. In C, global
   4499        variables with multiple tentative definitions now result in linker
   4500        errors. With -fcommon such definitions are silently merged during
   4501        linking.
   4502 
   4503   [34]C++
   4504 
   4505      * Several C++20 features have been implemented:
   4506           + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
   4507             P0848R3, P1616R1, P1452R2
   4508           + P1668R1, Permitting Unevaluated inline-assembly in constexpr
   4509             Functions
   4510           + P1161R3, Deprecate a[b,c]
   4511           + P0848R3, Conditionally Trivial Special Member Functions
   4512           + P1091R3, Extending structured bindings
   4513           + P1143R2, Adding the constinit keyword
   4514           + P1152R4, Deprecating volatile
   4515           + P0388R4, Permit conversions to arrays of unknown bound
   4516           + P0784R7, constexpr new
   4517           + P1301R4, [[nodiscard("with reason")]]
   4518           + P1814R0, class template argument deduction for alias templates
   4519           + P1816R0, class template argument deduction for aggregates
   4520           + P0960R3, Parenthesized initialization of aggregates
   4521           + P1331R2, Allow trivial default initialization in constexpr
   4522             contexts
   4523           + P1327R1, Allowing dynamic_cast and polymorphic typeid in
   4524             constexpr contexts
   4525           + P0912R5, Coroutines (requires -fcoroutines)
   4526      * Several C++ Defect Reports have been resolved, e.g.:
   4527           + DR 1560, lvalue-to-rvalue conversion in ?:
   4528           + DR 1813, __is_standard_layout for a class with repeated bases
   4529           + DR 2094, volatile scalars are trivially copyable,
   4530           + DR 2096, constraints on literal unions
   4531           + DR 2413, typename in conversion-function-ids
   4532           + DR 2352, Similar types and reference binding
   4533           + DR 1601, Promotion of enumeration with fixed underlying type
   4534           + DR 330, Qualification conversions and pointers to arrays of
   4535             pointers
   4536           + DR 1307, Overload resolution based on size of array
   4537             initializer-list
   4538           + DR 1710, Missing template keyword in class-or-decltype
   4539      * New warnings:
   4540           + [35]-Wmismatched-tags, disabled by default, warns about
   4541             declarations of structs, classes, and class templates and
   4542             their specializations with a class-key that does not match
   4543             either the definition or the first declaration if no
   4544             definition is provided. The option is provided to ease
   4545             portability to Windows-based compilers.
   4546           + [36]-Wredundant-tags, disabled by default, warns about
   4547             redundant class-key and enum-key in contexts where the key can
   4548             be eliminated without causing an syntactic ambiguity.
   4549      * G++ can now detect modifying constant objects in constexpr
   4550        evaluation (which is undefined behavior).
   4551      * G++ no longer emits bogus -Wsign-conversion warnings with explicit
   4552        casts.
   4553      * Narrowing is now detected in more contexts (e.g., case values).
   4554      * Memory consumption of the compiler has been reduced in constexpr
   4555        evaluation.
   4556      * The noexcept-specifier is now properly treated as a complete-class
   4557        context as per [class.mem].
   4558      * The attribute deprecated can now be used on namespaces too.
   4559      * The ABI of passing and returning certain C++ classes by value
   4560        changed on several targets in GCC 10, including [37]AArch64,
   4561        [38]ARM, [39]PowerPC ELFv2, [40]S/390 and [41]Itanium. These
   4562        changes affect classes with a zero-sized subobject (an empty base
   4563        class, or data member with the [[no_unique_address]] attribute)
   4564        where all other non-static data members have the same type (this is
   4565        called a "homogeneous aggregate" in some ABI specifications, or if
   4566        there is only one such member, a "single element"). In -std=c++17
   4567        and -std=c++20 modes, classes with an empty base class were not
   4568        considered to have a single element or to be a homogeneous
   4569        aggregate, and so could be passed differently (in the wrong
   4570        registers or at the wrong stack address). This could make code
   4571        compiled with -std=c++17 and -std=c++14 ABI incompatible. This has
   4572        been corrected and the empty bases are ignored in those ABI
   4573        decisions, so functions compiled with -std=c++14 and -std=c++17 are
   4574        now ABI compatible again. Example: struct empty {}; struct S :
   4575        empty { float f; }; void f(S);. Similarly, in classes containing
   4576        non-static data members with empty class types using the C++20
   4577        [[no_unique_address]] attribute, those members weren't ignored in
   4578        the ABI argument passing decisions as they should be. Both of these
   4579        ABI changes are now diagnosed with -Wpsabi.
   4580 
   4581     [42]Runtime Library (libstdc++)
   4582 
   4583      * Improved experimental C++2a support, including:
   4584           + Library concepts in <concepts> and <iterator>.
   4585           + Constrained algorithms in <ranges>, <algorithm>, and <memory>
   4586             (thanks to Patrick Palka).
   4587           + New algorithms shift_left and shift_right (thanks to Patrick
   4588             Palka).
   4589           + std::span (thanks to JeanHeyd Meneide).
   4590           + Three-way comparisons in <compare> and throughout the library.
   4591           + Constexpr support in <algorithm> and elsewhere (thanks to
   4592             Edward Smith-Rowland).
   4593           + <stop_token> and std::jthread (thanks to Thomas Rodgers).
   4594           + std::atomic_ref and std::atomic<floating point>.
   4595           + Integer comparison functions (cmp_equal, cmp_less etc.).
   4596           + std::ssize, std::to_array.
   4597           + std::construct_at, std::destroy, constexpr std::allocator.
   4598           + Mathematical constants in <numbers>.
   4599      * Support for RDSEED in std::random_device.
   4600      * Reduced header dependencies, leading to faster compilation for some
   4601        code.
   4602      * The std::iterator base class of std::istreambuf_iterator was
   4603        changed in C++98 mode to be consistent with C++11 and later
   4604        standards. This is expected to have no noticeable effect except in
   4605        the unlikely case of a class which has potentially overlapping
   4606        subobjects of type std::istreambuf_iterator<C> and another iterator
   4607        type with a std::iterator<input_iterator_tag, C, ...> base class.
   4608        The layout of such a type might change when compiled as C++98.
   4609        [43]Bug 92285 has more details and concrete examples.
   4610 
   4611   [44]D
   4612 
   4613      * Support for static foreach has been implemented.
   4614      * Aliases can now be created directly from any __traits that return
   4615        symbols or tuples. Previously, an AliasSeq was necessary in order
   4616        to alias their return.
   4617      * It is now possible to detect the language ABI specified for a
   4618        struct, class, or interface using __traits(getLinkage, ...).
   4619      * Support for core.math.toPrec intrinsics has been added. These
   4620        intrinsics guarantee the rounding to specific floating-point
   4621        precisions at specified points in the code.
   4622      * Support for pragma(inline) has been implemented. Previously the
   4623        pragma was recognized, but had no effect on the compilation.
   4624      * Optional parentheses in asm operands are deprecated and will be
   4625        removed in a future release.
   4626      * All content imported files are now included in the make dependency
   4627        list when compiling with -M.
   4628      * Compiler recognized attributes provided by the gcc.attribute module
   4629        will now take effect when applied to function prototypes as well as
   4630        when applied to full function declarations.
   4631      * Added a --enable-libphobos-checking configure option to control
   4632        whether run-time checks are compiled into the D runtime library.
   4633      * Added a --with-libphobos-druntime-only configure option to indicate
   4634        whether to build only the core D runtime library, or both the core
   4635        and standard libraries into libphobos.
   4636 
   4637   [45]Fortran
   4638 
   4639      * use_device_addr of version 5.0 of the [46]OpenMP specification is
   4640        now supported. Note that otherwise OpenMP 4.5 is partially
   4641        supported in the Fortran compiler; the largest missing item is
   4642        structure element mapping.
   4643      * The default buffer size for I/O using unformatted files has been
   4644        increased to 1048576. The buffer size for can now be set at runtime
   4645        via the environment variables GFORTRAN_FORMATTED_BUFFER_SIZE and
   4646        GFORTRAN_UNFORMATTED_BUFFER_SIZE for formatted and unformatted
   4647        files, respectively.
   4648      * Mismatches between actual and dummy argument lists in a single file
   4649        are now rejected with an error. Use the new option
   4650        -fallow-argument-mismatch to turn these errors into warnings; this
   4651        option is implied with -std=legacy. -Wargument-mismatch has been
   4652        removed.
   4653      * The handling of a BOZ literal constant has been reworked to provide
   4654        better conformance to the Fortran 2008 and 2018 standards. In these
   4655        Fortran standards, a BOZ literal constant is a typeless and
   4656        kindless entity. As a part of the rework, documented and
   4657        undocumented extensions to the Fortran standard now emit errors
   4658        during compilation. Some of these extensions are permitted with the
   4659        -fallow-invalid-boz option, which degrades the error to a warning
   4660        and the code is compiled as with older gfortran.
   4661      * At any optimization level except-Os, gfortran now uses inline
   4662        packing for arguments instead of calling a library routine. If the
   4663        source contains a large number of arguments that need to be
   4664        repacked, code size or time for compilation can become excessive.
   4665        If that is the case, -fno-inline-arg-packing can be used to disable
   4666        inline argument packing.
   4667      * Legacy extensions:
   4668           + For formatted input/output, if the explicit widths after the
   4669             data-edit descriptors I, F and G have been omitted, default
   4670             widths are used.
   4671           + A blank format item at the end of a format specification, i.e.
   4672             nothing following the final comma, is allowed. Use the option
   4673             -fdec-blank-format-item; this option is implied with -fdec.
   4674           + The existing support for AUTOMATIC and STATIC attributes has
   4675             been extended to allow variables with the AUTOMATIC attribute
   4676             to be used in EQUIVALENCE statements. Use -fdec-static; this
   4677             option is implied by -fdec.
   4678           + Allow character literals in assignments and DATA statements
   4679             for numeric (INTEGER, REAL, or COMPLEX) or LOGICAL variables.
   4680             Use the option -fdec-char-conversions; this option is implied
   4681             with -fdec.
   4682           + DEC comparisons, i.e. allow Hollerith constants to be used in
   4683             comparisons with INTEGER, REAL, COMPLEX and CHARACTER
   4684             expressions. Use the option -fdec.
   4685      * Character type names in errors and warnings now include len in
   4686        addition to kind; * is used for assumed length. The kind is omitted
   4687        if it is the default kind. Examples: CHARACTER(12), CHARACTER(6,4).
   4688      * CO_BROADCAST now supports derived type variables including objects
   4689        with allocatable components. In this case, the optional arguments
   4690        STAT= and ERRMSG= are currently ignored.
   4691      * The handling of module and submodule names has been reworked to
   4692        allow the full 63-character length mandated by the standard.
   4693        Previously symbol names were truncated if the combined length of
   4694        module, submodule, and function name exceeded 126 characters. This
   4695        change therefore breaks the ABI, but only for cases where this 126
   4696        character limit was exceeded.
   4697 
   4698   [47]Go
   4699 
   4700      * GCC 10 provides a complete implementation of the Go 1.14.6 user
   4701        packages.
   4702 
   4703 [48]libgccjit
   4704 
   4705      * The libgccjit API gained four new entry points:
   4706           + [49]gcc_jit_version_major, [50]gcc_jit_version_minor, and
   4707             [51]gcc_jit_version_patchlevel for programmatically checking
   4708             the libgccjit version from client code, and
   4709           + [52]gcc_jit_context_new_bitfield
   4710 
   4711 [53]New Targets and Target Specific Improvements
   4712 
   4713   [54]AArch64 & arm
   4714 
   4715      * The AArch64 and arm ports now support condition flag output
   4716        constraints in inline assembly, as indicated by the
   4717        __GCC_ASM_FLAG_OUTPUTS__. On arm this feature is only available for
   4718        A32 and T32 targets. Please refer to the documentation for more
   4719        details.
   4720 
   4721   [55]AArch64
   4722 
   4723      * There have been several improvements related to the Scalable Vector
   4724        Extension (SVE):
   4725           + The SVE ACLE types and intrinsics are now supported. They can
   4726             be accessed using the header file arm_sve.h.
   4727           + It is now possible to create fixed-length SVE types using the
   4728             arm_sve_vector_bits attribute. For example:
   4729 #if __ARM_FEATURE_SVE_BITS==512
   4730 typedef svint32_t vec512 __attribute__((arm_sve_vector_bits(512)));
   4731 typedef svbool_t pred512 __attribute__((arm_sve_vector_bits(512)));
   4732 #endif
   4733           + -mlow-precision-div, -mlow-precision-sqrt and
   4734             -mlow-precision-recip-sqrt now work for SVE.
   4735           + -msve-vector-bits=128 now generates vector-length-specific
   4736             code for little-endian targets. It continues to generate
   4737             vector-length-agnostic code for big-endian targets, just as
   4738             previous releases did for all targets.
   4739           + The vectorizer is now able to use extending loads and
   4740             truncating stores, including gather loads and scatter stores.
   4741           + The vectorizer now compares the cost of vectorizing with SVE
   4742             and vectorizing with Advanced SIMD and tries to pick the best
   4743             one. Previously it would always use SVE if possible.
   4744           + If a vector loop uses Advanced SIMD rather than SVE, the
   4745             vectorizer now considers using SVE to vectorize the left-over
   4746             elements (the scalar tail or epilog).
   4747           + Besides these specific points, there have been many general
   4748             improvements to the way that the vectorizer uses SVE.
   4749      * The -mbranch-protection=pac-ret option now accepts the optional
   4750        argument +b-key extension to perform return address signing with
   4751        the B-key instead of the A-key.
   4752      * The option -moutline-atomics has been added to aid deployment of
   4753        the Large System Extensions (LSE) on GNU/Linux systems built with a
   4754        baseline architecture targeting Armv8-A. When the option is
   4755        specified code is emitted to detect the presence of LSE
   4756        instructions at runtime and use them for standard atomic
   4757        operations. For more information please refer to the documentation.
   4758      * The Transactional Memory Extension is now supported through ACLE
   4759        intrinsics. It can be enabled through the +tme option extension
   4760        (for example, -march=armv8.5-a+tme).
   4761      * A number of features from Armv8.5-A are now supported through ACLE
   4762        intrinsics. These include:
   4763           + The random number instructions that can be enabled through the
   4764             (already present in GCC 9.1) +rng option extension.
   4765           + Floating-point intrinsics to round to integer instructions
   4766             from Armv8.5-A when targeting -march=armv8.5-a or later.
   4767           + Memory Tagging Extension intrinsics enabled through the
   4768             +memtag option extension.
   4769      * Similarly, the following Armv8.6-A features are now supported
   4770        through ACLE intrinsics:
   4771           + The bfloat16 extension. This extension is enabled
   4772             automatically when Armv8.6-A is selected (such as by
   4773             -march=armv8.6-a). It can also be enabled for Armv8.2-A and
   4774             later using the +bf16 option extension.
   4775           + The Matrix Multiply extension. This extension is split into
   4776             three parts, one for each supported data type:
   4777                o Support for 8-bit integer matrix multiply instructions.
   4778                  This extension is enabled automatically when Armv8.6-A is
   4779                  selected. It can also be enabled for Armv8.2-A and later
   4780                  using the +i8mm option extension.
   4781                o Support for 32-bit floating-point matrix multiply
   4782                  instructions. This extension can be enabled using the
   4783                  +f32mm option extension, which also has the effect of
   4784                  enabling SVE.
   4785                o Support for 64-bit floating-point matrix multiply
   4786                  instructions. This extension can be enabled using the
   4787                  +f64mm option extension, which likewise has the effect of
   4788                  enabling SVE.
   4789      * SVE2 is now supported through ACLE intrinsics and (to a limited
   4790        extent) through autovectorization. It can be enabled through the
   4791        +sve2 option extension (for example, -march=armv8.5-a+sve2).
   4792        Additional extensions can be enabled through +sve2-sm4, +sve2-aes,
   4793        +sve2-sha3 and +sve2-bitperm.
   4794      * Support has been added for the following processors (GCC
   4795        identifiers in parentheses):
   4796           + Arm Cortex-A77 (cortex-a77).
   4797           + Arm Cortex-A76AE (cortex-a76ae).
   4798           + Arm Cortex-A65 (cortex-a65).
   4799           + Arm Cortex-A65AE (cortex-a65ae).
   4800           + Arm Cortex-A34 (cortex-a34).
   4801           + Marvell ThunderX3 (thunderx3t110).
   4802        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4803        options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
   4804        arguments to the equivalent target attributes and pragmas.
   4805 
   4806   [56]arm
   4807 
   4808      * Support for the FDPIC ABI has been added. It uses 64-bit function
   4809        descriptors to represent pointers to functions, and enables code
   4810        sharing on MMU-less systems. The corresponding target triple is
   4811        arm-uclinuxfdpiceabi, and the C library is uclibc-ng.
   4812      * Support has been added for the Arm EABI on NetBSD through the
   4813        arm*-*-netbsdelf-*eabi* triplet.
   4814      * The handling of 64-bit integer operations has been significantly
   4815        reworked and improved leading to improved performance and reduced
   4816        stack usage when using 64-bit integral data types. The option
   4817        -mneon-for-64bits is now deprecated and will be removed in a future
   4818        release.
   4819      * Support has been added for the following processors (GCC
   4820        identifiers in parentheses):
   4821           + Arm Cortex-A77 (cortex-a77).
   4822           + Arm Cortex-A76AE (cortex-a76ae).
   4823           + Arm Cortex-M35P (cortex-m35p).
   4824           + Arm Cortex-M55 (cortex-m55).
   4825        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4826        options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
   4827      * Support has been extended for the [57]ACLE data-processing
   4828        intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
   4829        multiplication and other related intrinsics aimed at DSP algorithm
   4830        optimization.
   4831      * Support for -mpure-code in Thumb-1 (v6m) has been added: this
   4832        M-profile feature is no longer restricted to targets with MOVT. For
   4833        example, -mcpu=cortex-m0 now supports this option.
   4834      * Support for the [58]Armv8.1-M Mainline Architecture has been added.
   4835           + Armv8.1-M Mainline can be enabled by using the
   4836             -march=armv8.1-m.main command-line option.
   4837      * Support for the [59]MVE beta ACLE intrinsics has been added. These
   4838        intrinsics can be enabled by including the arm_mve.h header file
   4839        and passing the +mve or +mve.fp option extensions (for example:
   4840        -march=armv8.1-m.main+mve).
   4841      * Support for the Custom Datapath Extension beta ACLE intrinsics has
   4842        been added.
   4843      * Support for Armv8.1-M Mainline Security Extensions architecture has
   4844        been added. The -mcmse option, when used in combination with an
   4845        Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
   4846        -mcmse), now leads to the generation of improved code sequences
   4847        when changing security states.
   4848 
   4849   [60]AMD Radeon (GCN)
   4850 
   4851      * Code generation and in particular vectorization support have been
   4852        much improved.
   4853 
   4854   [61]ARC
   4855 
   4856      * The interrupt service routine functions save all used registers,
   4857        including extension registers and auxiliary registers used by Zero
   4858        Overhead Loops.
   4859      * Improve code size by using multiple short instructions instead of a
   4860        single long mov or ior instruction when its long immediate constant
   4861        is known.
   4862      * Fix usage of the accumulator register for ARC600.
   4863      * Fix issues with uncached attribute.
   4864      * Remove -mq-class option.
   4865      * Improve 64-bit integer addition and subtraction operations.
   4866 
   4867   [62]AVR
   4868 
   4869      * Support for the XMEGA-like devices
   4870 
   4871      ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804,
   4872      ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808,
   4873      ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209,
   4874      ATmega4808, ATmega4809
   4875        has been added.
   4876      * A new command-line option -nodevicespecs has been added. It allows
   4877        to provide a custom device-specs file by means of
   4878 
   4879      avr-gcc -nodevicespecs -specs=my-spec-file <options>
   4880        and without the need to provide options -B and -mmcu=. See [63]AVR
   4881        command-line options for details. This feature is also available in
   4882        GCC 9.3+ and GCC 8.4+.
   4883      * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
   4884        have been added. They allow to choose the size (in bits) of the
   4885        double and long double types, respectively. Whether or not the
   4886        mentioned layouts are available, whether the options act as a
   4887        multilib option, and the default for either option are controlled
   4888        by the new [64]AVR configure options --with-double= and
   4889        --with-long-double=.
   4890      * A new configure option --with-libf7= has been added. It controls to
   4891        which level avr-libgcc provides 64-bit floating point support by
   4892        means of [65]Libf7.
   4893      * A new configure option --with-double-comparison= has been added.
   4894        It's unlikely you need to set this option by hand.
   4895 
   4896   [66]IA-32/x86-64
   4897 
   4898      * Support to expand __builtin_roundeven into the appropriate SSE 4.1
   4899        instruction has been added.
   4900      * New ISA extension support for Intel ENQCMD was added to GCC. ENQCMD
   4901        intrinsics are available via the -menqcmd compiler switch.
   4902      * GCC now supports the Intel CPU named Cooperlake through
   4903        -march=cooperlake. The switch enables the AVX512BF16 ISA
   4904        extensions.
   4905      * GCC now supports the Intel CPU named Tigerlake through
   4906        -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
   4907        AVX512VP2INTERSECT ISA extensions.
   4908 
   4909   [67]MIPS
   4910 
   4911      * The mips*-*-linux* targets now mark object files with appropriate
   4912        GNU-stack note, facilitating use of non-executable stack hardening
   4913        on GNU/Linux. The soft-float targets have this feature enabled by
   4914        default, while for hard-float targets it is required for GCC to be
   4915        configured with --with-glibc-version=2.31 against glibc 2.31 or
   4916        later.
   4917 
   4918   [68]PowerPC / PowerPC64 / RS6000
   4919 
   4920      * Many vector builtins have been listed as deprecated in the
   4921        [69]64-Bit ELF V2 ABI Specification for quite a number of years.
   4922        The vector builtins listed in Tables A.8 through A.10 are now
   4923        deprecated for GCC 10, and will likely be removed from support in
   4924        GCC 11. Note that this does not result in any loss of function.
   4925        These deprecated builtins generally provide somewhat nonsensical
   4926        argument lists (for example, mixing signed, unsigned, and bool
   4927        vector arguments arbitrarily), or are duplicate builtins that are
   4928        inconsistent with the expected naming scheme. We expect that this
   4929        will be unlikely to affect much if any code, and any required code
   4930        changes will be trivial.
   4931 
   4932   [70]PRU
   4933 
   4934      * A new back end targeting TI PRU I/O processors has been contributed
   4935        to GCC.
   4936 
   4937   [71]RISC-V
   4938 
   4939      * The riscv*-*-* targets now require GNU binutils version 2.30 or
   4940        later, to support new assembly instructions produced by GCC.
   4941 
   4942   [72]V850
   4943 
   4944      * The ABI for V850 nested functions has been changed. Previously the
   4945        V850 port used %r20 for the static chain pointer, now the port uses
   4946        %r19. This corrects a long standing latent bug in the v850 port
   4947        where a call to a nested function would unexpectedly change the
   4948        value in %r20.
   4949 
   4950 [73]Operating Systems
   4951 
   4952 [74]Improvements for plugin authors
   4953 
   4954      * GCC diagnostics can now have a chain of events associated with
   4955        them, describing a path through the code that triggers the problem.
   4956        These can be printed by the diagnostics subsystem in various ways,
   4957        controlled by the [75]-fdiagnostics-path-format option, or captured
   4958        in JSON form via [76]-fdiagnostics-format=json.
   4959      * GCC diagnostics can now be associated with [77]CWE weakness
   4960        identifiers, which will appear on the standard error stream, and in
   4961        the JSON output from [78]-fdiagnostics-format=json.
   4962 
   4963 Other significant improvements
   4964 
   4965      * To allow inline expansion of both memcpy and memmove, the existing
   4966        movmem instruction patterns used for non-overlapping memory copies
   4967        have been renamed to cpymem. The movmem name is now used for
   4968        overlapping memory moves, consistent with the library functions
   4969        memcpy and memmove.
   4970      * For many releases, when GCC emits a warning it prints the option
   4971        controlling that warning. As of GCC 10, that option text is now a
   4972        clickable hyperlink for the documentation of that option (assuming
   4973        a [79]sufficiently capable terminal). This behavior can be
   4974        controlled via a new [80]-fdiagnostics-urls option (along with
   4975        various environment variables and heuristics documented with that
   4976        option).
   4977 
   4978 GCC 10.1
   4979 
   4980    This is the [81]list of problem reports (PRs) from GCC's bug tracking
   4981    system that are known to be fixed in the 10.1 release. This list might
   4982    not be complete (that is, it is possible that some PRs that have been
   4983    fixed are not listed here).
   4984 
   4985 [82]GCC 10.2
   4986 
   4987    This is the [83]list of problem reports (PRs) from GCC's bug tracking
   4988    system that are known to be fixed in the 10.2 release. This list might
   4989    not be complete (that is, it is possible that some PRs that have been
   4990    fixed are not listed here).
   4991 
   4992 [84]GCC 10.3
   4993 
   4994    This is the [85]list of problem reports (PRs) from GCC's bug tracking
   4995    system that are known to be fixed in the 10.3 release. This list might
   4996    not be complete (that is, it is possible that some PRs that have been
   4997    fixed are not listed here).
   4998 
   4999   Target Specific Changes
   5000 
   5001     AArch64
   5002 
   5003      * A bug with the Random Number intrinsics in the arm_acle.h header
   5004        that resulted in an incorrect status result being returned has been
   5005        fixed.
   5006      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   5007        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   5008        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   5009        tunes the code for the A64FX. This includes tuning the SVE code,
   5010        although by default the code is still length-agnostic and so works
   5011        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   5012        code specific to 512-bit SVE.
   5013 
   5014   x86-64
   5015 
   5016      * GCC 10.3 supports AMD CPUs based on the znver3 core via
   5017        -march=znver3.
   5018 
   5019 [86]GCC 10.4
   5020 
   5021    This is the [87]list of problem reports (PRs) from GCC's bug tracking
   5022    system that are known to be fixed in the 10.4 release. This list might
   5023    not be complete (that is, it is possible that some PRs that have been
   5024    fixed are not listed here).
   5025 
   5026   Target Specific Changes
   5027 
   5028     x86-64
   5029 
   5030      * The x86-64 ABI of passing and returning structures with a 64-bit
   5031        integer vector changed in GCC 10.1 when MMX is disabled. Disabling
   5032        MMX no longer changes how they are passed nor returned. This ABI
   5033        change is now diagnosed with -Wpsabi.
   5034 
   5035 [88]GCC 10.5
   5036 
   5037    This is the [89]list of problem reports (PRs) from GCC's bug tracking
   5038    system that are known to be fixed in the 10.5 release. This list might
   5039    not be complete (that is, it is possible that some PRs that have been
   5040    fixed are not listed here).
   5041 
   5042 
   5043     For questions related to the use of GCC, please consult these web
   5044     pages and the [90]GCC manuals. If that fails, the
   5045     [91]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5046     web pages and the development of GCC are welcome on our developer
   5047     list at [92]gcc (a] gcc.gnu.org. All of [93]our lists have public
   5048     archives.
   5049 
   5050    Copyright (C) [94]Free Software Foundation, Inc. Verbatim copying and
   5051    distribution of this entire article is permitted in any medium,
   5052    provided this notice is preserved.
   5053 
   5054    These pages are [95]maintained by the GCC team. Last modified
   5055    2026-06-16.
   5056 
   5057 References
   5058 
   5059    1. https://gcc.gnu.org/gcc-10/porting_to.html
   5060    2. https://gcc.gnu.org/onlinedocs/index.html#current
   5061    3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
   5062    4. https://www.mpfr.org/
   5063    5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
   5064    6. https://gcc.gnu.org/gcc-10/changes.html#general
   5065    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
   5066    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
   5067    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
   5068   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
   5069   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
   5070   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
   5071   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
   5072   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
   5073   15. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
   5074   16. https://facebook.github.io/zstd/
   5075   17. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
   5076   18. https://gcc.gnu.org/gcc-10/changes.html#languages
   5077   19. https://www.openacc.org/
   5078   20. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10
   5079   21. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
   5080   22. https://www.openmp.org/specifications/
   5081   23. https://gcc.gnu.org/wiki/Offloading
   5082   24. https://gcc.gnu.org/gcc-10/changes.html#c-family
   5083   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
   5084   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
   5085   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
   5086   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   5087   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
   5088   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
   5089   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
   5090   32. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
   5091   33. https://gcc.gnu.org/gcc-10/changes.html#c
   5092   34. https://gcc.gnu.org/gcc-10/changes.html#cxx
   5093   35. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
   5094   36. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
   5095   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
   5096   38. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
   5097   39. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
   5098   40. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
   5099   41. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
   5100   42. https://gcc.gnu.org/gcc-10/changes.html#libstdcxx
   5101   43. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
   5102   44. https://gcc.gnu.org/gcc-10/changes.html#d
   5103   45. https://gcc.gnu.org/gcc-10/changes.html#fortran
   5104   46. https://www.openmp.org/specifications/
   5105   47. https://gcc.gnu.org/gcc-10/changes.html#go
   5106   48. https://gcc.gnu.org/gcc-10/changes.html#jit
   5107   49. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
   5108   50. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
   5109   51. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
   5110   52. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
   5111   53. https://gcc.gnu.org/gcc-10/changes.html#targets
   5112   54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
   5113   55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
   5114   56. https://gcc.gnu.org/gcc-10/changes.html#arm
   5115   57. https://github.com/ARM-software/acle/releases
   5116   58. https://developer.arm.com/Architectures/M-Profile Architecture
   5117   59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
   5118   60. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
   5119   61. https://gcc.gnu.org/gcc-10/changes.html#arc
   5120   62. https://gcc.gnu.org/gcc-10/changes.html#avr
   5121   63. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
   5122   64. https://gcc.gnu.org/install/configure.html#avr
   5123   65. https://gcc.gnu.org/wiki/avr-gcc#Libf7
   5124   66. https://gcc.gnu.org/gcc-10/changes.html#x86
   5125   67. https://gcc.gnu.org/gcc-10/changes.html#mips
   5126   68. https://gcc.gnu.org/gcc-10/changes.html#powerpc
   5127   69. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
   5128   70. https://gcc.gnu.org/gcc-10/changes.html#pru
   5129   71. https://gcc.gnu.org/gcc-10/changes.html#riscv
   5130   72. https://gcc.gnu.org/gcc-10/changes.html#v850
   5131   73. https://gcc.gnu.org/gcc-10/changes.html#os
   5132   74. https://gcc.gnu.org/gcc-10/changes.html#plugins
   5133   75. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
   5134   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   5135   77. https://cwe.mitre.org/
   5136   78. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   5137   79. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
   5138   80. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
   5139   81. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
   5140   82. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
   5141   83. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
   5142   84. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
   5143   85. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
   5144   86. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
   5145   87. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
   5146   88. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
   5147   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
   5148   90. https://gcc.gnu.org/onlinedocs/
   5149   91. mailto:gcc-help (a] gcc.gnu.org
   5150   92. mailto:gcc (a] gcc.gnu.org
   5151   93. https://gcc.gnu.org/lists.html
   5152   94. https://www.fsf.org/
   5153   95. https://gcc.gnu.org/about.html
   5154 ======================================================================
   5155 http://gcc.gnu.org/gcc-9/index.html
   5156                               GCC 9 Release Series
   5157 
   5158    (This release series is no longer supported.)
   5159 
   5160    May 27, 2022
   5161 
   5162    The [1]GNU project and the GCC developers are pleased to announce the
   5163    release of GCC 9.5.
   5164 
   5165    This release is a bug-fix release, containing fixes for regressions in
   5166    GCC 9.4 relative to previous releases of GCC.
   5167 
   5168 Release History
   5169 
   5170    GCC 9.5
   5171           May 27, 2022 ([2]changes, [3]documentation)
   5172 
   5173    GCC 9.4
   5174           June 1, 2021 ([4]changes, [5]documentation)
   5175 
   5176    GCC 9.3
   5177           Mar 12, 2020 ([6]changes, [7]documentation)
   5178 
   5179    GCC 9.2
   5180           Aug 12, 2019 ([8]changes, [9]documentation)
   5181 
   5182    GCC 9.1
   5183           May 3, 2019 ([10]changes, [11]documentation)
   5184 
   5185 References and Acknowledgements
   5186 
   5187    GCC used to stand for the GNU C Compiler, but since the compiler
   5188    supports several other languages aside from C, it now stands for the
   5189    GNU Compiler Collection.
   5190 
   5191    The GCC developers would like to thank the numerous people that have
   5192    contributed new features, improvements, bug fixes, and other changes as
   5193    well as test results to GCC. This [12]amazing group of volunteers is
   5194    what makes GCC successful.
   5195 
   5196    For additional information about GCC please refer to the [13]GCC
   5197    project web site or contact the [14]GCC development mailing list.
   5198 
   5199    To obtain GCC please use [15]our mirror sites or [16]our version
   5200    control system.
   5201 
   5202 
   5203     For questions related to the use of GCC, please consult these web
   5204     pages and the [17]GCC manuals. If that fails, the
   5205     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5206     web pages and the development of GCC are welcome on our developer
   5207     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   5208     archives.
   5209 
   5210    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   5211    distribution of this entire article is permitted in any medium,
   5212    provided this notice is preserved.
   5213 
   5214    These pages are [22]maintained by the GCC team. Last modified
   5215    2024-05-30.
   5216 
   5217 References
   5218 
   5219    1. http://www.gnu.org/
   5220    2. https://gcc.gnu.org/gcc-9/changes.html
   5221    3. https://gcc.gnu.org/onlinedocs/9.5.0/
   5222    4. https://gcc.gnu.org/gcc-9/changes.html
   5223    5. https://gcc.gnu.org/onlinedocs/9.4.0/
   5224    6. https://gcc.gnu.org/gcc-9/changes.html
   5225    7. https://gcc.gnu.org/onlinedocs/9.3.0/
   5226    8. https://gcc.gnu.org/gcc-9/changes.html
   5227    9. https://gcc.gnu.org/onlinedocs/9.2.0/
   5228   10. https://gcc.gnu.org/gcc-9/changes.html
   5229   11. https://gcc.gnu.org/onlinedocs/9.1.0/
   5230   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
   5231   13. https://gcc.gnu.org/index.html
   5232   14. mailto:gcc (a] gcc.gnu.org
   5233   15. https://gcc.gnu.org/mirrors.html
   5234   16. https://gcc.gnu.org/git.html
   5235   17. https://gcc.gnu.org/onlinedocs/
   5236   18. mailto:gcc-help (a] gcc.gnu.org
   5237   19. mailto:gcc (a] gcc.gnu.org
   5238   20. https://gcc.gnu.org/lists.html
   5239   21. https://www.fsf.org/
   5240   22. https://gcc.gnu.org/about.html
   5241 ======================================================================
   5242 http://gcc.gnu.org/gcc-9/changes.html
   5243                               GCC 9 Release Series
   5244                         Changes, New Features, and Fixes
   5245 
   5246    This page is a "brief" summary of some of the huge number of
   5247    improvements in GCC 9. You may also want to check out our [1]Porting to
   5248    GCC 9 page and the [2]full GCC documentation.
   5249 
   5250 Caveats
   5251 
   5252      * On Arm targets (arm*-*-*), [3]a bug in the implementation of the
   5253        procedure call standard (AAPCS) in the GCC 6, 7 and 8 releases has
   5254        been fixed: a structure containing a bit-field based on a 64-bit
   5255        integral type and where no other element in a structure required
   5256        64-bit alignment could be passed incorrectly to functions. This is
   5257        an ABI change. If the option -Wpsabi is enabled (on by default) the
   5258        compiler will emit a diagnostic note for code that might be
   5259        affected.
   5260      * Support for a number of older systems and recently unmaintained or
   5261        untested target ports of GCC has been declared obsolete in GCC 9.
   5262        Unless there is activity to revive them, the next release of GCC
   5263        will have their sources permanently removed.
   5264        The following ports for individual systems on particular
   5265        architectures have been obsoleted:
   5266           + Solaris 10 (*-*-solaris2.10). Details can be found in the
   5267             [4]announcement.
   5268           + Cell Broadband Engine SPU (spu*-*-*). Details can be found in
   5269             the [5]announcement.
   5270      * A change to the C++ std::rotate algorithm in GCC 9.1.0 can cause
   5271        ABI incompatibilities with object files compiled with other
   5272        versions of GCC. If the std::rotate algorithm is called with an
   5273        empty range then it might cause a divide-by-zero error (as a SIGFPE
   5274        signal) and crash. The change has been reverted for GCC 9.2.0 and
   5275        future releases. For more details see [6]Bug 90920. The problem can
   5276        be avoided by recompiling any objects that might call std::rotate
   5277        with an empty range, so that the GCC 9.1.0 definition of
   5278        std::rotate is not used.
   5279      * The automatic template instantiation at link time ([7]-frepo) has
   5280        been deprecated and will be removed in a future release.
   5281      * The --with-default-libstdcxx-abi=gcc4-compatible configure option
   5282        is broken in the 9.1 and 9.2 releases, producing a shared library
   5283        with missing symbols (see [8]Bug 90361). As a workaround, configure
   5284        without that option and build GCC as normal, then edit the
   5285        installed <bits/c++config.h> headers to define the
   5286        _GLIBCXX_USE_CXX11_ABI macro to 0.
   5287 
   5288 [9]General Improvements
   5289 
   5290    The following GCC command-line options have been introduced or
   5291    improved.
   5292      * All command-line options that take a byte-size argument accept
   5293        64-bit integers as well as standard SI and IEC suffixes such as kb
   5294        and KiB, MB and MiB, or GB and GiB denoting the corresponding
   5295        multiples of bytes. See [10]Invoking GCC for more.
   5296      * A new option [11]-flive-patching=[inline-only-static|inline-clone]
   5297        generates code suitable for live patching. At the same time it
   5298        provides multiple-level control over IPA optimizations. See the
   5299        user guide for more details.
   5300      * A new option, --completion, has been added to provide more fine
   5301        option completion in a shell. It is intended to be used by
   5302        Bash-completion.
   5303      * GCC's diagnostics now print source code with a left margin showing
   5304        line numbers, configurable with
   5305        [12]-fno-diagnostics-show-line-numbers.
   5306        GCC's diagnostics can also now label regions of the source code to
   5307        show pertinent information, such as the types within an expression.
   5308 $ g++ t.cc
   5309 t.cc: In function 'int test(const shape&, const shape&)':
   5310 t.cc:15:4: error: no match for 'operator+' (operand types are 'boxed_value<doubl
   5311 e>' and 'boxed_value<double>')
   5312    14 |   return (width(s1) * height(s1)
   5313       |           ~~~~~~~~~~~~~~~~~~~~~~
   5314       |                     |
   5315       |                     boxed_value<[...]>
   5316    15 |    + width(s2) * height(s2));
   5317       |    ^ ~~~~~~~~~~~~~~~~~~~~~~
   5318       |                |
   5319       |                boxed_value<[...]>
   5320 
   5321        These labels can be disabled via [13]-fno-diagnostics-show-labels.
   5322      * A new option [14]-fdiagnostics-format=json has been introduced for
   5323        emitting diagnostics in a machine-readable format.
   5324      * The alignment-related options [15]-falign-functions,
   5325        [16]-falign-labels, [17]-falign-loops, and [18]-falign-jumps
   5326        received support for a secondary alignment (e.g.
   5327        -falign-loops=n:m:n2:m2).
   5328      * New pair of profiling options ([19]-fprofile-filter-files and
   5329        [20]-fprofile-exclude-files) has been added. The options help to
   5330        filter which source files are instrumented.
   5331      * AddressSanitizer generates more compact redzones for automatic
   5332        variables. That helps to reduce memory footprint of a sanitized
   5333        binary.
   5334      * Numerous improvements have been made to the output of
   5335        [21]-fopt-info.
   5336        Messages are now prefixed with optimized, missed, or note, rather
   5337        than the old behavior of all being prefixed with note.
   5338        The output from -fopt-info can now contain information on inlining
   5339        decisions:
   5340 $ g++ -c inline.cc -O2 -fopt-info-inline-all
   5341 inline.cc:24:11: note: Considering inline candidate void foreach(T, T, void (*)(
   5342 E)) [with T = char**; E = char*]/2.
   5343 inline.cc:24:11: optimized:  Inlining void foreach(T, T, void (*)(E)) [with T =
   5344 char**; E = char*]/2 into int main(int, char**)/1.
   5345 inline.cc:19:12: missed:   not inlinable: void inline_me(char*)/0 -> int std::pu
   5346 ts(const char*)/3, function body not available
   5347 inline.cc:13:8: optimized:  Inlined void inline_me(char*)/4 into int main(int, c
   5348 har**)/1 which now has time 127.363637 and size 11, net change of +0.
   5349 Unit growth for small function inlining: 16->16 (0%)
   5350 
   5351 Inlined 2 calls, eliminated 1 functions
   5352 
   5353 
   5354        The output from the vectorizer has been rationalized so that failed
   5355        attempts to vectorize a loop are displayed in the form
   5356     [LOOP-LOCATION]: couldn't vectorize this loop
   5357     [PROBLEM-LOCATION]: because of [REASON]
   5358 
   5359        rather than an exhaustive log of all decisions made by the
   5360        vectorizer. For example:
   5361 $ gcc -c v.c -O3 -fopt-info-all-vec
   5362 v.c:7:3: missed: couldn't vectorize loop
   5363 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   5364 mory");
   5365 v.c:3:6: note: vectorized 0 loops in function.
   5366 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   5367 mory");
   5368 
   5369        The old behavior can be obtained via a new -internals suboption of
   5370        -fopt-info.
   5371      * A new option, [22]-fsave-optimization-record has been added, which
   5372        writes a SRCFILE.opt-record.json.gz file describing the
   5373        optimization decisions made by GCC. This is similar to the output
   5374        of -fopt-info, but with additional metadata such as the inlining
   5375        chain, and profile information (if available).
   5376      * Inter-procedural propagation of stack alignment can now be
   5377        controlled by [23]-fipa-stack-alignment.
   5378      * Propagation of addressability, readonly, and writeonly flags on
   5379        static variables can now be controlled by
   5380        [24]-fipa-reference-addressable.
   5381 
   5382    The following built-in functions have been introduced.
   5383      * [25]__builtin_expect_with_probability to provide branch prediction
   5384        probability hints to the optimizer.
   5385      * [26]__builtin_has_attribute determines whether a function, type, or
   5386        variable has been declared with some attribute.
   5387      * [27]__builtin_speculation_safe_value can be used to help mitigate
   5388        against unsafe speculative execution.
   5389 
   5390    The following attributes have been introduced.
   5391      * The [28]copy function attribute has been added. The attribute can
   5392        also be applied to type definitions and to variable declarations.
   5393 
   5394    A large number of improvements to code generation have been made,
   5395    including but not limited to the following.
   5396      * Switch expansion has been improved by using a different strategy
   5397        (jump table, bit test, decision tree) for a subset of switch cases.
   5398      * A linear function expression defined as a switch statement can be
   5399        transformed by [29]-ftree-switch-conversion. For example:
   5400 
   5401 int
   5402 foo (int how)
   5403 {
   5404   switch (how) {
   5405     case 2: how = 205; break;
   5406     case 3: how = 305; break;
   5407     case 4: how = 405; break;
   5408     case 5: how = 505; break;
   5409     case 6: how = 605; break;
   5410   }
   5411   return how;
   5412 }
   5413 
   5414        can be transformed into 100 * how + 5 (for values defined in the
   5415        switch statement).
   5416      * Inter-procedural optimization improvements:
   5417           + Inliner defaults were tuned to better suit modern C++
   5418             codebases, especially when built with link time-optimizations.
   5419             New parameters max-inline-insns-small, max-inline-insns-size,
   5420             uninlined-function-insns, uninlined-function-time,
   5421             uninlined-thunk-insns, and uninlined-thunk-time were added.
   5422           + Hot/cold partitioning is now more precise and aggressive.
   5423           + Improved scalability for very large translation units
   5424             (especially when link-time optimizing large programs).
   5425      * Profile driven optimization improvements:
   5426           + [30]-fprofile-use now enables [31]-fversion-loops-for-strides,
   5427             [32]-floop-interchange, [33]-floop-unroll-and-jam,
   5428             [34]-ftree-loop-distribution.
   5429           + Streaming of counter histograms was removed, which reduces the
   5430             size of profile files. Histograms are computed on the fly with
   5431             link-time optimization.
   5432           + The parameter hot-bb-count-ws-permille was reduced from 999 to
   5433             990 to account for more precise histograms.
   5434      * Link-time optimization improvements:
   5435           + Types are now simplified prior to streaming resulting in
   5436             significant reductions of LTO object file sizes and link-time
   5437             memory use as well as improvements of link-time parallelism.
   5438           + The default number of partitions (--param lto-partitions) was
   5439             increased from 32 to 128 enabling effective use of CPUs with
   5440             more than 32 hyperthreads. --param
   5441             lto-max-streaming-parallelism can now be used to control the
   5442             number of streaming processes.
   5443           + Warnings on C++ One Decl Rule violations (-Wodr) are now more
   5444             informative and produce fewer redundant results.
   5445        Overall compile time of Firefox 66 and LibreOffice 6.2.3 on an
   5446        8-core machine was reduced by about 5% compared to GCC 8.3, and the
   5447        size of LTO object files by 7%. LTO link time improves by 11% on an
   5448        8-core machine and scales significantly better for more parallel
   5449        build environments. The serial stage of the link-time optimization
   5450        is 28% faster consuming 20% less memory. The parallel stage now
   5451        scales to up to 128 partitions rather than 32 and reduces memory
   5452        use for every worker by 30%.
   5453 
   5454    The following improvements to the gcov command-line utility have been
   5455    made.
   5456      * The gcov tool received a new option [35]--use-hotness-colors (-q)
   5457        that can provide perf-like coloring of hot functions.
   5458      * The gcov tool has changed its intermediate format to a new JSON
   5459        format.
   5460 
   5461 [36]New Languages and Language specific improvements
   5462 
   5463    [37]OpenACC support in C, C++, and Fortran continues to be maintained
   5464    and improved. Most of the OpenACC 2.5 specification is implemented. See
   5465    the [38]implementation status section on the OpenACC wiki page for
   5466    further information.
   5467 
   5468   [39]C family
   5469 
   5470      * Version 5.0 of the [40]OpenMP specification is now partially
   5471        supported in the C and C++ compilers. For details which features of
   5472        OpenMP 5.0 are and which are not supported in the GCC 9 release see
   5473        [41]this mail.
   5474      * New extensions:
   5475           + [42]__builtin_convertvector built-in for vector conversions
   5476             has been added.
   5477      * New warnings:
   5478           + [43]-Waddress-of-packed-member, enabled by default, warns
   5479             about an unaligned pointer value from the address of a packed
   5480             member of a struct or union.
   5481      * Enhancements to existing warnings:
   5482           + [44]-Warray-bounds detects more instances of out-of-bounds
   5483             indices.
   5484           + [45]-Wattribute-alias also detects attribute mismatches
   5485             between alias declarations and their targets, in addition to
   5486             mismatches between their types.
   5487           + [46]-Wformat-overflow and [47]-Wformat-truncation have been
   5488             extended to all formatted input/output functions (where
   5489             applicable) and enhanced to detect a subset of instances of
   5490             reading past the end of unterminated constant character arrays
   5491             in %s directives.
   5492           + [48]-Wmissing-attributes detects instances of missing function
   5493             attributes on declarations of aliases and weak references.
   5494           + [49]-Wstringop-truncation also detects a subset of instances
   5495             of reading past the end of unterminated constant character
   5496             arrays,
   5497      * If a macro is used with the wrong argument count, the C and C++
   5498        front ends now show the definition of that macro via a note.
   5499      * The spelling corrector now considers transposed letters, and the
   5500        threshold for similarity has been tightened, to avoid nonsensical
   5501        suggestions.
   5502 
   5503   [50]C
   5504 
   5505      * There is now experimental support for -std=c2x, to select support
   5506        for the upcoming C2X revision of the ISO C standard. This standard
   5507        is in the early stages of development and the only feature
   5508        supported in GCC 9 is _Static_assert with a single argument
   5509        (support for _Static_assert with two arguments was added in C11 and
   5510        GCC 4.6). There are also new options -std=gnu2x, for C2X with GNU
   5511        extensions, and -Wc11-c2x-compat, to warn for uses of features
   5512        added in C2X (such warnings are also enabled by use of -Wpedantic
   5513        if not using -std=c2x or -std=gnu2x).
   5514      * New warnings:
   5515           + [51]-Wabsolute-value warns for calls to standard functions
   5516             that compute the absolute value of an argument when a more
   5517             appropriate standard function is available. For example,
   5518             calling abs(3.14) triggers the warning because the appropriate
   5519             function to call to compute the absolute value of a double
   5520             argument is fabs. The option also triggers warnings when the
   5521             argument in a call to such a function has an unsigned type.
   5522             This warning can be suppressed with an explicit type cast and
   5523             it is also enabled by -Wextra.
   5524 
   5525   [52]C++
   5526 
   5527      * New warnings:
   5528           + [53]-Wdeprecated-copy, implied by -Wextra, warns about the
   5529             C++11 deprecation of implicitly declared copy constructor and
   5530             assignment operator if one of them is user-provided.
   5531             -Wdeprecated-copy-dtor also warns if the destructor is
   5532             user-provided, as specified in C++11.
   5533           + [54]-Winit-list-lifetime, on by default, warns about uses of
   5534             std::initializer_list that are likely to result in a dangling
   5535             pointer, such as returning or assigning from a temporary list.
   5536           + [55]-Wredundant-move, implied by -Wextra, warns about
   5537             redundant calls to std::move.
   5538           + [56]-Wpessimizing-move, implied by -Wall, warns when a call to
   5539             std::move prevents copy elision.
   5540           + [57]-Wclass-conversion, on by default, warns when a conversion
   5541             function will never be called due to the type it converts to.
   5542      * The C++ front end has experimental support for some of the upcoming
   5543        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   5544        including range-based for statements with initializer, default
   5545        constructible and assignable stateless lambdas, lambdas in
   5546        unevaluated contexts, language support for empty data members,
   5547        allowing pack expansion in lambda init-capture, likely and unlikely
   5548        attributes, class types in non-type template parameters, allowing
   5549        virtual function calls in constant expressions, explicit(bool),
   5550        std::is_constant_evaluated, nested inline namespaces, etc. For a
   5551        full list of new features, see [58]the C++ status page.
   5552      * The C++ front end now preserves source locations for literals,
   5553        id-expression, and mem-initializer for longer. For example it is
   5554        now able to pin-point the pertinent locations for bad
   5555        initializations such as these
   5556 $ g++ -c bad-inits.cc
   5557 bad-inits.cc:10:14: error: cannot convert 'json' to 'int' in initialization
   5558    10 |   { 3, json::object },
   5559       |        ~~~~~~^~~~~~
   5560       |              |
   5561       |              json
   5562 bad-inits.cc:14:31: error: initializer-string for array of chars is too long [-f
   5563 permissive]
   5564    14 | char buffers[3][5] = { "red", "green", "blue" };
   5565       |                               ^~~~~~~
   5566 bad-inits.cc: In constructor 'X::X()':
   5567 bad-inits.cc:17:13: error: invalid conversion from 'int' to 'void*' [-fpermissiv
   5568 e]
   5569    17 |   X() : one(42), two(42), three(42)
   5570       |             ^~
   5571       |             |
   5572       |             int
   5573 
   5574        rather than emitting the error at the final closing parenthesis or
   5575        brace.
   5576      * Error-reporting of overload resolution has been special-cased to
   5577        make the case of a single failed candidate easier to read. For
   5578        example:
   5579 $ g++ param-type-mismatch.cc
   5580 param-type-mismatch.cc: In function 'int test(int, const char*, float)':
   5581 param-type-mismatch.cc:8:32: error: cannot convert 'const char*' to 'const char*
   5582 *'
   5583     8 |   return foo::member_1 (first, second, third);
   5584       |                                ^~~~~~
   5585       |                                |
   5586       |                                const char*
   5587 param-type-mismatch.cc:3:46: note:   initializing argument 2 of 'static int foo:
   5588 :member_1(int, const char**, float)'
   5589     3 |   static int member_1 (int one, const char **two, float three);
   5590       |                                 ~~~~~~~~~~~~~^~~
   5591 
   5592        highlights both the problematic argument, and the parameter that it
   5593        can't be converted to.
   5594      * Diagnostics involving binary operators now use color to distinguish
   5595        the two operands, and label them separately (as per the example of
   5596        source labelling above).
   5597      * Diagnostics involving function calls now highlight the pertinent
   5598        parameter of the declaration in more places.
   5599 $ g++ bad-conversion.cc
   5600 bad-conversion.cc: In function 'void caller()':
   5601 bad-conversion.cc:9:14: error: cannot convert 'bool' to 'void*'
   5602     9 |   callee (0, false, 2);
   5603       |              ^~~~~
   5604       |              |
   5605       |              bool
   5606 bad-conversion.cc:3:19: note:   initializing argument 2 of 'void callee(int, voi
   5607 d*, int)'
   5608     3 | void callee (int, void *, int)
   5609       |                   ^~~~~~
   5610 
   5611      * The C++ front end's implementation of [59]-Wformat now shows
   5612        precise locations within string literals, and underlines the
   5613        pertinent arguments at bogus call sites (the C front end has been
   5614        doing this since GCC 7). For example:
   5615 $ g++ -c bad-printf.cc -Wall
   5616 bad-printf.cc: In function 'void print_field(const char*, float, long int, long
   5617 int)':
   5618 bad-printf.cc:6:17: warning: field width specifier '*' expects argument of type
   5619 'int', but argument 3 has type 'long int' [-Wformat=]
   5620     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   5621       |                ~^~~               ~~~~~~~~~~~~~~
   5622       |                 |                        |
   5623       |                 int                      long int
   5624 bad-printf.cc:6:19: warning: format '%ld' expects argument of type 'long int', b
   5625 ut argument 4 has type 'double' [-Wformat=]
   5626     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   5627       |                ~~~^                               ~~~~~
   5628       |                   |                               |
   5629       |                   long int                        double
   5630       |                %*f
   5631 
   5632      * The C++ front end has gained new fix-it hints for forgetting the
   5633        return *this; needed by various C++ operators:
   5634 $ g++ -c operator.cc
   5635 operator.cc: In member function 'boxed_ptr& boxed_ptr::operator=(const boxed_ptr
   5636 &)':
   5637 operator.cc:7:3: warning: no return statement in function returning non-void [-W
   5638 return-type]
   5639     6 |     m_ptr = other.m_ptr;
   5640   +++ |+    return *this;
   5641     7 |   }
   5642       |   ^
   5643 
   5644        for when the compiler needs a typename:
   5645 $ g++ -c template.cc
   5646 template.cc:3:3: error: need 'typename' before 'Traits::type' because 'Traits' i
   5647 s a dependent scope
   5648     3 |   Traits::type type;
   5649       |   ^~~~~~
   5650       |   typename
   5651 
   5652        when trying to use an accessor member as if it were a data member:
   5653 $ g++ -c fncall.cc
   5654 fncall.cc: In function 'void hangman(const mystring&)':
   5655 fncall.cc:12:11: error: invalid use of member function 'int mystring::get_length
   5656 () const' (did you forget the '()' ?)
   5657    12 |   if (str.get_length > 0)
   5658       |       ~~~~^~~~~~~~~~
   5659       |                     ()
   5660 
   5661        for C++11's scoped enums:
   5662 $ g++ -c enums.cc
   5663 enums.cc: In function 'void json::test(const json::value&)':
   5664 enums.cc:12:26: error: 'STRING' was not declared in this scope; did you mean 'js
   5665 on::kind::STRING'?
   5666    12 |     if (v.get_kind () == STRING)
   5667       |                          ^~~~~~
   5668       |                          json::kind::STRING
   5669 enums.cc:3:44: note: 'json::kind::STRING' declared here
   5670     3 |   enum class kind { OBJECT, ARRAY, NUMBER, STRING, TRUE, FALSE, NULL_ };
   5671       |                                            ^~~~~~
   5672 
   5673        and a tweak to integrate the suggestions about misspelled members
   5674        with that for accessors:
   5675 $ g++ -c accessor-fixit.cc
   5676 accessor-fixit.cc: In function 'int test(t*)':
   5677 accessor-fixit.cc:17:15: error: 'class t' has no member named 'ratio'; did you m
   5678 ean 'int t::m_ratio'? (accessible via 'int t::get_ratio() const')
   5679    17 |   return ptr->ratio;
   5680       |               ^~~~~
   5681       |               get_ratio()
   5682 
   5683        In addition, various diagnostics in the C++ front-end have been
   5684        streamlined by consolidating the suggestion into the initial error,
   5685        rather than emitting a follow-up note:
   5686 $ g++ typo.cc
   5687 typo.cc:5:13: error: 'BUFSIZE' was not declared in this scope; did you mean 'BUF
   5688 _SIZE'?
   5689     5 | uint8_t buf[BUFSIZE];
   5690       |             ^~~~~~~
   5691       |             BUF_SIZE
   5692 
   5693     [60]Runtime Library (libstdc++)
   5694 
   5695      * Improved support for C++17, including:
   5696           + The C++17 implementation is no longer experimental.
   5697           + Parallel algorithms and <execution> (requires [61]Thread
   5698             Building Blocks 2018 or newer).
   5699           + <memory_resource>.
   5700           + Using the types and functions in <filesystem> does not require
   5701             linking with -lstdc++fs now.
   5702      * Improved experimental support for C++2a, including:
   5703           + Type traits std::remove_cvref, std::unwrap_reference,
   5704             std::unwrap_decay_ref, std::is_nothrow_convertible, and
   5705             std::type_identity.
   5706           + Headers <bit> and <version>.
   5707           + Uniform container erasure (std::erase_if).
   5708           + contains member of maps and sets.
   5709           + String prefix and suffix checking (starts_with, ends_with).
   5710           + Functions std::midpoint and std::lerp for interpolation.
   5711           + std::bind_front.
   5712           + std::visit<R>.
   5713           + std::assume_aligned.
   5714           + Uses-allocator construction utilities.
   5715           + std::pmr::polymorphic_allocator<std::byte>.
   5716           + Library support for char8_t type.
   5717           + Destroying delete.
   5718           + std::is_constant_evaluated() function.
   5719      * Support for opening file streams with wide character paths on
   5720        Windows
   5721      * Incomplete support for the C++17 Filesystem library and the
   5722        Filesystem TS on Windows.
   5723      * Incomplete, experimental support for the Networking TS.
   5724 
   5725   [62]D
   5726 
   5727      * Support for the D programming language has been added to GCC,
   5728        implementing version 2.076 of the language and run-time library.
   5729 
   5730   [63]Fortran
   5731 
   5732      * Asynchronous I/O is now fully supported. The program needs to be
   5733        linked against the pthreads library to use it, otherwise the I/O is
   5734        done synchronously. For systems which do not support POSIX
   5735        condition variables, such as AIX, all I/O is still done
   5736        synchronously.
   5737      * The BACK argument for MINLOC and MAXLOC has been implemented.
   5738      * The FINDLOC intrinsic function has been implemented.
   5739      * The IS_CONTIGUOUS intrinsic function has been implemented.
   5740      * Direct access to the real and imaginary parts of a complex variable
   5741        via c%re and c%im has been implemented.
   5742      * Type parameter inquiry via str%len and a%kind has been implemented.
   5743      * C descriptors and the ISO_Fortran_binding.h source file have been
   5744        implemented.
   5745      * The MAX and MIN intrinsics are no longer guaranteed to return any
   5746        particular value in case one of the arguments is a NaN. Note that
   5747        this conforms to the Fortran standard and to what other Fortran
   5748        compilers do. If there is a need to handle that case in some
   5749        specific way, one needs to explicitly check for NaN's before
   5750        calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
   5751        intrinsic module IEEE_ARITHMETIC.
   5752      * A new command-line option [64]-fdec-include, set also by the
   5753        [65]-fdec option, has been added to increase compatibility with
   5754        legacy code. With this option, an INCLUDE directive is also parsed
   5755        as a statement, which allows the directive to be spread across
   5756        multiple source lines with line continuations.
   5757      * A new [66]BUILTIN directive, has been added. The purpose of the
   5758        directive is to provide an API between the GCC compiler and the GNU
   5759        C Library which would define vector implementations of math
   5760        routines.
   5761 
   5762   [67]Go
   5763 
   5764      * GCC 9 provides a complete implementation of the Go 1.12.2 user
   5765        packages.
   5766 
   5767 [68]libgccjit
   5768 
   5769      * The libgccjit API gained a new entry point:
   5770        [69]gcc_jit_context_add_driver_option.
   5771 
   5772 [70]New Targets and Target Specific Improvements
   5773 
   5774   [71]AArch64 & Arm
   5775 
   5776      * Support has been added for the following processors (GCC
   5777        identifiers in parentheses):
   5778           + Arm Cortex-A76 (cortex-a76).
   5779           + Arm Cortex-A55/Cortex-A76 DynamIQ big.LITTLE
   5780             (cortex-a76.cortex-a55).
   5781           + Arm Neoverse N1 (neoverse-n1).
   5782        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   5783        options, for example: -mcpu=cortex-a76 or
   5784        -mtune=cortex-a76.cortex-a55 or as arguments to the equivalent
   5785        target attributes and pragmas.
   5786      * The Armv8.3-A complex number instructions are now supported via
   5787        intrinsics when the option -march=armv8.3-a or equivalent is
   5788        specified. For the half-precision floating-point variants of these
   5789        instructions use the architecture extension flag +fp16, e.g.
   5790        -march=armv8.3-a+fp16.
   5791        The intrinsics are defined by the ACLE specification.
   5792      * The Armv8.5-A architecture is now supported through the
   5793        -march=armv8.5-a option.
   5794      * The Armv8.5-A architecture also adds some security features that
   5795        are optional to all older architecture versions. These are now
   5796        supported and only affect the assembler.
   5797           + Speculation Barrier instruction through the -march=armv8-a+sb
   5798             option.
   5799           + Execution and Data Prediction Restriction instructions through
   5800             the -march=armv8-a+predres option.
   5801           + Speculative Store Bypass Safe instruction through the
   5802             -march=armv8-a+ssbs option. This does not require a compiler
   5803             option for Arm and thus -march=armv8-a+ssbs is an
   5804             AArch64-specific option.
   5805 
   5806     [72]AArch64 specific
   5807 
   5808      * Support has been added for the Arm Neoverse E1 processor
   5809        (-mcpu=neoverse-e1).
   5810      * The AArch64 port now has support for stack clash protection using
   5811        the [73]-fstack-clash-protection option. The probing interval/guard
   5812        size can be set by using --param
   5813        stack-clash-protection-guard-size=12|16. The value of this
   5814        parameter must be in bytes represented as a power of two. The two
   5815        supported values for this parameter are 12 (for a 4KiB size, 2^12)
   5816        and 16 (for a 64KiB size, 2^16). The default value is 16 (64Kb) and
   5817        can be changed at configure time using the flag
   5818        --with-stack-clash-protection-guard-size=12|16.
   5819      * The option -msign-return-address= has been deprecated. This has
   5820        been replaced by the new -mbranch-protection= option. This new
   5821        option can now be used to enable the return address signing as well
   5822        as the new Branch Target Identification feature of Armv8.5-A
   5823        architecture. For more information on the arguments accepted by
   5824        this option, please refer to [74]AArch64-Options.
   5825      * The following optional extensions to Armv8.5-A architecture are now
   5826        supported and only affect the assembler.
   5827           + Random Number Generation instructions through the
   5828             -march=armv8.5-a+rng option.
   5829           + Memory Tagging Extension through the -march=armv8.5-a+memtag
   5830             option.
   5831 
   5832     [75]Arm specific
   5833 
   5834      * Support for the deprecated Armv2 and Armv3 architectures and their
   5835        variants has been removed. Their corresponding -march values and
   5836        the -mcpu options that used these architectures have been removed.
   5837      * Support for the Armv5 and Armv5E architectures (which have no known
   5838        implementations) has been removed. Note that Armv5T, Armv5TE and
   5839        Armv5TEJ architectures remain supported.
   5840      * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
   5841        their respective -mcpu options.
   5842 
   5843   [76]AMD GCN
   5844 
   5845      * A new back end targeting AMD GCN GPUs has been contributed to GCC.
   5846        The implementation is currently limited to compiling
   5847        single-threaded, stand-alone programs. Future versions will add
   5848        support for offloading multi-threaded kernels via OpenMP and
   5849        OpenACC. The following devices are supported (GCC identifiers in
   5850        parentheses):
   5851           + Fiji (fiji).
   5852           + Vega 10 (gfx900).
   5853 
   5854   [77]ARC
   5855 
   5856      * LRA is now on by default for the ARC target. This can be controlled
   5857        by -mlra.
   5858      * Add support for frame code-density and branch-and-index
   5859        instructions.
   5860 
   5861   [78]C-SKY
   5862 
   5863      * A new back end targeting C-SKY V2 processors has been contributed
   5864        to GCC.
   5865 
   5866   [79]IA-32/x86-64
   5867 
   5868      * Support of Intel MPX (Memory Protection Extensions) has been
   5869        removed.
   5870      * New ISA extension support for Intel PTWRITE was added to GCC.
   5871        PTWRITE intrinsics are available via the -mptwrite compiler switch.
   5872      * GCC now supports the Intel CPU named Cascade Lake with AVX512
   5873        extensions through -march=cascadelake. The switch enables the
   5874        following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
   5875        AVX512DQ, AVX512VNNI.
   5876 
   5877   [80]MIPS
   5878 
   5879      * The Loongson loongson-mmi and loongson-ext extensions have been
   5880        split from loongson3a:
   5881           + loongson-mmi contains the Loongson MMI (MultiMedia extensions
   5882             Instructions).
   5883           + loongson-ext contains the Loongson EXT (EXTensions
   5884             instructions).
   5885      * The Loongson EXT2 (EXTensions R2 instructions) are now supported.
   5886           + loongson-ext2 contains the Loongson EXT2 instructions.
   5887        Command-line options-m[no-]loongson-mmi, -m[no-]loongson-ext, and
   5888        -m[no-]loongson-ext2 enable or disable those extensions.
   5889      * Support has been added for the following processors (GCC
   5890        identifiers in parentheses):
   5891           + Loongson 3A1000 (gs464) which enables loongson-mmi,
   5892             loongson-ext by default.
   5893           + Loongson 3A2000/3A3000 (gs464e) which enables loongson-mmi,
   5894             loongson-ext, loongson-ext2 by default.
   5895           + Loongson 2K1000 (gs264e) which enables loongson-ext,
   5896             loongson-ext2, msa by default.
   5897        The GCC identifiers can be used as arguments to the -mcpu and
   5898        -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
   5899        to the equivalent target attributes and pragmas.
   5900 
   5901   [81]OpenRISC
   5902 
   5903      * A new back end targeting OpenRISC processors has been contributed
   5904        to GCC.
   5905 
   5906   [82]S/390, System z, IBM z Systems
   5907 
   5908      * Support for the arch13 architecture has been added. When using the
   5909        -march=arch13 option, the compiler will generate code making use of
   5910        the new instructions introduced with the vector enhancement
   5911        facility 2 and the miscellaneous instruction extension facility 2.
   5912        The -mtune=arch13 option enables arch13 specific instruction
   5913        scheduling 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      * Support for ESA architecture machines g5 and g6 is deprecated since
   5917        GCC 6.1.0 and has been removed now.
   5918      * When compiling with -march=z14 or higher GCC emits alignments hints
   5919        on the vector load/store instructions (8 or 16 byte).
   5920      * Functions now have a default alignment of 16 bytes. This helps with
   5921        branch prediction effects.
   5922      * -mfentry is now supported. As well as the mcount mechanism the
   5923        __fentry__ is called before the function prologue. However, since
   5924        just a single instruction is required to call __fentry__ the call
   5925        sequence imposes a smaller overhead than mcount (4 instructions).
   5926        The produced code is compatible only with newer glibc versions,
   5927        which provide the __fentry__ symbol and do not clobber r0 when
   5928        resolving lazily bound functions. -mfentry is only supported when
   5929        generating 64-bit code and does not work with nested C functions.
   5930      * The -mnop-mcount option can be used to emit NOP instructions
   5931        instead of an mcount or fentry call stub.
   5932      * With the -mrecord-mcount option a __mcount_loc section is generated
   5933        containing pointers to each profiling call stub. This is useful for
   5934        automatically patching in and out calls.
   5935 
   5936 [83]Operating Systems
   5937 
   5938   [84]Solaris
   5939 
   5940      * g++ now unconditionally enables large file support when compiling
   5941        32-bit code.
   5942      * Support for the AddressSanitizer and UndefinedBehaviorSanitizer has
   5943        been merged from LLVM. For the moment, this only works for 32-bit
   5944        code on both SPARC and x86.
   5945      * An initial port of the D runtime library has been completed on
   5946        Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
   5947        support is still work-in-progress.
   5948 
   5949   [85]Windows
   5950 
   5951      * A C++ Microsoft ABI bitfield layout bug, [86]PR87137 has been
   5952        fixed. A non-field declaration could cause the current bitfield
   5953        allocation unit to be completed, incorrectly placing a following
   5954        bitfield into a new allocation unit. The Microsoft ABI is selected
   5955        for:
   5956           + Mingw targets
   5957           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   5958             option is specified, or __attribute__((ms_struct)) is used
   5959           + SuperH targets when the -mhitachi option is specified, or
   5960             __attribute__((renesas)) is used
   5961 
   5962 [87]Improvements for plugin authors
   5963 
   5964      * GCC's diagnostic subsystem now has a way to logically group
   5965        together related diagnostics, auto_diagnostic_group. Such
   5966        diagnostics will be nested by the output of
   5967        [88]-fdiagnostics-format=json.
   5968      * GCC now has a set of [89]user experience guidelines for GCC, with
   5969        information and advice on implementing new diagnostics.
   5970 
   5971 Other significant improvements
   5972 
   5973      * GCC's internal "selftest" suite now runs for C++ as well as C (in
   5974        debug builds of the compiler).
   5975 
   5976 [90]GCC 9.1
   5977 
   5978    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   5979    system that are known to be fixed in the 9.1 release. This list might
   5980    not be complete (that is, it is possible that some PRs that have been
   5981    fixed are not listed here).
   5982 
   5983 [92]GCC 9.2
   5984 
   5985    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   5986    system that are known to be fixed in the 9.2 release. This list might
   5987    not be complete (that is, it is possible that some PRs that have been
   5988    fixed are not listed here).
   5989 
   5990 [94]GCC 9.3
   5991 
   5992    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   5993    system that are known to be fixed in the 9.3 release. This list might
   5994    not be complete (that is, it is possible that some PRs that have been
   5995    fixed are not listed here).
   5996 
   5997 [96]GCC 9.4
   5998 
   5999    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   6000    system that are known to be fixed in the 9.4 release. This list might
   6001    not be complete (that is, it is possible that some PRs that have been
   6002    fixed are not listed here).
   6003 
   6004   Target Specific Changes
   6005 
   6006     AArch64
   6007 
   6008      * The option -moutline-atomics has been added to aid deployment of
   6009        the Large System Extensions (LSE) on GNU/Linux systems built with a
   6010        baseline architecture targeting Armv8-A. When the option is
   6011        specified code is emitted to detect the presence of LSE
   6012        instructions at run time and use them for standard atomic
   6013        operations. For more information please refer to the documentation.
   6014      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   6015        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   6016        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   6017        tunes the code for the A64FX. This includes tuning the SVE code,
   6018        although by default the code is still length-agnostic and so works
   6019        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   6020        code specific to 512-bit SVE.
   6021 
   6022 [98]GCC 9.5
   6023 
   6024    This is the [99]list of problem reports (PRs) from GCC's bug tracking
   6025    system that are known to be fixed in the 9.5 release. This list might
   6026    not be complete (that is, it is possible that some PRs that have been
   6027    fixed are not listed here).
   6028 
   6029 
   6030     For questions related to the use of GCC, please consult these web
   6031     pages and the [100]GCC manuals. If that fails, the
   6032     [101]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6033     web pages and the development of GCC are welcome on our developer
   6034     list at [102]gcc (a] gcc.gnu.org. All of [103]our lists have public
   6035     archives.
   6036 
   6037    Copyright (C) [104]Free Software Foundation, Inc. Verbatim copying and
   6038    distribution of this entire article is permitted in any medium,
   6039    provided this notice is preserved.
   6040 
   6041    These pages are [105]maintained by the GCC team. Last modified
   6042    2026-06-10.
   6043 
   6044 References
   6045 
   6046    1. https://gcc.gnu.org/gcc-9/porting_to.html
   6047    2. https://gcc.gnu.org/onlinedocs/index.html#current
   6048    3. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
   6049    4. https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html
   6050    5. https://gcc.gnu.org/ml/gcc/2019-04/msg00023.html
   6051    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
   6052    7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
   6053    8. https://gcc.gnu.org/PR90361
   6054    9. https://gcc.gnu.org/gcc-9/changes.html#general
   6055   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
   6056   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
   6057   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
   6058   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
   6059   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   6060   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
   6061   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
   6062   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
   6063   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
   6064   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
   6065   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
   6066   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
   6067   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
   6068   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
   6069   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
   6070   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
   6071   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
   6072   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
   6073   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
   6074   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
   6075   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
   6076   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
   6077   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
   6078   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
   6079   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
   6080   35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
   6081   36. https://gcc.gnu.org/gcc-9/changes.html#languages
   6082   37. https://www.openacc.org/
   6083   38. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9
   6084   39. https://gcc.gnu.org/gcc-9/changes.html#c-family
   6085   40. https://www.openmp.org/specifications/
   6086   41. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
   6087   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
   6088   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
   6089   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
   6090   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
   6091   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   6092   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   6093   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   6094   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   6095   50. https://gcc.gnu.org/gcc-9/changes.html#c
   6096   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
   6097   52. https://gcc.gnu.org/gcc-9/changes.html#cxx
   6098   53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
   6099   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
   6100   55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   6101   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   6102   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
   6103   58. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   6104   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
   6105   60. https://gcc.gnu.org/gcc-9/changes.html#libstdcxx
   6106   61. https://github.com/uxlfoundation/oneTBB
   6107   62. https://gcc.gnu.org/gcc-9/changes.html#d
   6108   63. https://gcc.gnu.org/gcc-9/changes.html#fortran
   6109   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
   6110   65. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
   6111   66. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
   6112   67. https://gcc.gnu.org/gcc-9/changes.html#go
   6113   68. https://gcc.gnu.org/gcc-9/changes.html#jit
   6114   69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
   6115   70. https://gcc.gnu.org/gcc-9/changes.html#targets
   6116   71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
   6117   72. https://gcc.gnu.org/gcc-9/changes.html#aarch64
   6118   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
   6119   74. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
   6120   75. https://gcc.gnu.org/gcc-9/changes.html#arm
   6121   76. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
   6122   77. https://gcc.gnu.org/gcc-9/changes.html#arc
   6123   78. https://gcc.gnu.org/gcc-9/changes.html#csky
   6124   79. https://gcc.gnu.org/gcc-9/changes.html#x86
   6125   80. https://gcc.gnu.org/gcc-9/changes.html#mips
   6126   81. https://gcc.gnu.org/gcc-9/changes.html#or1k
   6127   82. https://gcc.gnu.org/gcc-9/changes.html#s390
   6128   83. https://gcc.gnu.org/gcc-9/changes.html#os
   6129   84. https://gcc.gnu.org/gcc-9/changes.html#solaris
   6130   85. https://gcc.gnu.org/gcc-9/changes.html#windows
   6131   86. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   6132   87. https://gcc.gnu.org/gcc-9/changes.html#plugins
   6133   88. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   6134   89. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
   6135   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
   6136   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
   6137   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
   6138   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
   6139   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
   6140   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
   6141   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
   6142   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
   6143   98. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
   6144   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
   6145  100. https://gcc.gnu.org/onlinedocs/
   6146  101. mailto:gcc-help (a] gcc.gnu.org
   6147  102. mailto:gcc (a] gcc.gnu.org
   6148  103. https://gcc.gnu.org/lists.html
   6149  104. https://www.fsf.org/
   6150  105. https://gcc.gnu.org/about.html
   6151 ======================================================================
   6152 http://gcc.gnu.org/gcc-8/index.html
   6153                               GCC 8 Release Series
   6154 
   6155    (This release series is no longer supported.)
   6156 
   6157    May 14, 2021
   6158 
   6159    The [1]GNU project and the GCC developers are pleased to announce the
   6160    release of GCC 8.5.
   6161 
   6162    This release is a bug-fix release, containing fixes for regressions in
   6163    GCC 8.4 relative to previous releases of GCC.
   6164 
   6165 Release History
   6166 
   6167    GCC 8.5
   6168           May 14, 2021 ([2]changes, [3]documentation)
   6169 
   6170    GCC 8.4
   6171           Mar 4, 2020 ([4]changes, [5]documentation)
   6172 
   6173    GCC 8.3
   6174           Feb 22, 2019 ([6]changes, [7]documentation)
   6175 
   6176    GCC 8.2
   6177           Jul 26, 2018 ([8]changes, [9]documentation)
   6178 
   6179    GCC 8.1
   6180           May 2, 2018 ([10]changes, [11]documentation)
   6181 
   6182 References and Acknowledgements
   6183 
   6184    GCC used to stand for the GNU C Compiler, but since the compiler
   6185    supports several other languages aside from C, it now stands for the
   6186    GNU Compiler Collection.
   6187 
   6188    A list of [12]successful builds is updated as new information becomes
   6189    available.
   6190 
   6191    The GCC developers would like to thank the numerous people that have
   6192    contributed new features, improvements, bug fixes, and other changes as
   6193    well as test results to GCC. This [13]amazing group of volunteers is
   6194    what makes GCC successful.
   6195 
   6196    For additional information about GCC please refer to the [14]GCC
   6197    project web site or contact the [15]GCC development mailing list.
   6198 
   6199    To obtain GCC please use [16]our mirror sites or [17]our version
   6200    control system.
   6201 
   6202 
   6203     For questions related to the use of GCC, please consult these web
   6204     pages and the [18]GCC manuals. If that fails, the
   6205     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6206     web pages and the development of GCC are welcome on our developer
   6207     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   6208     archives.
   6209 
   6210    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   6211    distribution of this entire article is permitted in any medium,
   6212    provided this notice is preserved.
   6213 
   6214    These pages are [23]maintained by the GCC team. Last modified
   6215    2024-05-30.
   6216 
   6217 References
   6218 
   6219    1. http://www.gnu.org/
   6220    2. https://gcc.gnu.org/gcc-8/changes.html
   6221    3. https://gcc.gnu.org/onlinedocs/8.5.0/
   6222    4. https://gcc.gnu.org/gcc-8/changes.html
   6223    5. https://gcc.gnu.org/onlinedocs/8.4.0/
   6224    6. https://gcc.gnu.org/gcc-8/changes.html
   6225    7. https://gcc.gnu.org/onlinedocs/8.3.0/
   6226    8. https://gcc.gnu.org/gcc-8/changes.html
   6227    9. https://gcc.gnu.org/onlinedocs/8.2.0/
   6228   10. https://gcc.gnu.org/gcc-8/changes.html
   6229   11. https://gcc.gnu.org/onlinedocs/8.1.0/
   6230   12. https://gcc.gnu.org/gcc-8/buildstat.html
   6231   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
   6232   14. https://gcc.gnu.org/index.html
   6233   15. mailto:gcc (a] gcc.gnu.org
   6234   16. https://gcc.gnu.org/mirrors.html
   6235   17. https://gcc.gnu.org/git.html
   6236   18. https://gcc.gnu.org/onlinedocs/
   6237   19. mailto:gcc-help (a] gcc.gnu.org
   6238   20. mailto:gcc (a] gcc.gnu.org
   6239   21. https://gcc.gnu.org/lists.html
   6240   22. https://www.fsf.org/
   6241   23. https://gcc.gnu.org/about.html
   6242 ======================================================================
   6243 http://gcc.gnu.org/gcc-8/changes.html
   6244                               GCC 8 Release Series
   6245                         Changes, New Features, and Fixes
   6246 
   6247    This page is a "brief" summary of some of the huge number of
   6248    improvements in GCC 8. You may also want to check out our [1]Porting to
   6249    GCC 8 page and the [2]full GCC documentation.
   6250 
   6251 Caveats
   6252 
   6253      * The default mode for C is now -std=gnu17 instead of -std=gnu11.
   6254      * Support for the obsolete SDB/coff debug info format has been
   6255        removed. The option -gcoff no longer does anything.
   6256      * The Cilk+ extensions to the C and C++ languages have been removed.
   6257      * The MPX extensions to the C and C++ languages have been deprecated
   6258        and will be removed in a future release.
   6259      * The extension allowing arithmetic on std::atomic<void*> and types
   6260        like std::atomic<R(*)()> has been deprecated.
   6261      * The non-standard C++0x std::copy_exception function was removed.
   6262        std::make_exception_ptr should be used instead.
   6263      * Support for the powerpc*-*-*spe* target ports which have been
   6264        recently unmaintained and untested in GCC has been declared
   6265        obsolete in GCC 8 as [3]announced. Unless there is activity to
   6266        revive them, the next release of GCC will have their sources
   6267        permanently removed.
   6268 
   6269 [4]General Improvements
   6270 
   6271      * Inter-procedural optimization improvements:
   6272           + Reworked run-time estimation metrics leading to more realistic
   6273             guesses driving inliner and cloning heuristics.
   6274           + The ipa-pure-const pass is extended to propagate the malloc
   6275             attribute, and the corresponding warning option
   6276             -Wsuggest-attribute=malloc emits a diagnostic for functions
   6277             which can be annotated with the malloc attribute.
   6278      * Profile driven optimization improvements:
   6279           + New infrastructure for representing profiles (both statically
   6280             guessed and profile feedback) which allows propagation of
   6281             additional information about the reliability of the profile.
   6282           + A number of improvements in the profile updating code solving
   6283             problems found by new verification code.
   6284           + Static detection of code which is not executed in a valid run
   6285             of the program. This includes paths which trigger undefined
   6286             behavior as well as calls to functions declared with the cold
   6287             attribute. Newly the noreturn attribute does not imply all
   6288             effects of cold to differentiate between exit (which is
   6289             noreturn) and abort (which is in addition not executed in
   6290             valid runs).
   6291           + -freorder-blocks-and-partition, a pass splitting function
   6292             bodies into hot and cold regions, is now enabled by default at
   6293             -O2 and higher for x86 and x86-64.
   6294      * Link-time optimization improvements:
   6295           + We have significantly improved debug information on ELF
   6296             targets using DWARF by properly preserving language-specific
   6297             information. This allows for example the libstdc++
   6298             pretty-printers to work with LTO optimized executables.
   6299      * A new option -fcf-protection=[full|branch|return|none] is
   6300        introduced to perform code instrumentation to increase program
   6301        security by checking that target addresses of control-flow transfer
   6302        instructions (such as indirect function call, function return,
   6303        indirect jump) are valid. Currently the instrumentation is
   6304        supported on x86 GNU/Linux targets only. See the user guide for
   6305        further information about the option syntax and section "New
   6306        Targets and Target Specific Improvements" for IA-32/x86-64 for more
   6307        details.
   6308      * The -gcolumn-info option is now enabled by default. It includes
   6309        column information in addition to just filenames and line numbers
   6310        in DWARF debugging information.
   6311      * The polyhedral-based loop nest optimization pass
   6312        -floop-nest-optimize has been overhauled. It's still considered
   6313        experimental and may not result in any runtime improvements.
   6314      * Two new classical loop nest optimization passes have been added.
   6315        -floop-unroll-and-jam performs outer loop unrolling and fusing of
   6316        the inner loop copies. -floop-interchange exchanges loops in a loop
   6317        nest to improve data locality. Both passes are enabled by default
   6318        at -O3 and above.
   6319      * The classic loop nest optimization pass -ftree-loop-distribution
   6320        has been improved and enabled by default at -O3 and above. It
   6321        supports loop nest distribution in some restricted scenarios; it
   6322        also supports cancellable innermost loop distribution with loop
   6323        versioning under run-time alias checks.
   6324      * The new option -fstack-clash-protection causes the compiler to
   6325        insert probes whenever stack space is allocated statically or
   6326        dynamically to reliably detect stack overflows and thus mitigate
   6327        the attack vector that relies on jumping over a stack guard page as
   6328        provided by the operating system.
   6329      * A new pragma GCC unroll has been implemented in the C family of
   6330        languages, as well as Fortran and Ada, so as to make it possible
   6331        for the user to have a finer-grained control over the loop
   6332        unrolling optimization.
   6333      * GCC has been enhanced to detect more instances of meaningless or
   6334        mutually exclusive attribute specifications and handle such
   6335        conflicts more consistently. Mutually exclusive attribute
   6336        specifications are ignored with a warning regardless of whether
   6337        they appear on the same declaration or on distinct declarations of
   6338        the same entity. For example, because the noreturn attribute on the
   6339        second declaration below is mutually exclusive with the malloc
   6340        attribute on the first, it is ignored and a warning is issued.
   6341 >
   6342       void* __attribute__ ((malloc)) f (unsigned);
   6343       void* __attribute__ ((noreturn)) f (unsigned);
   6344 
   6345       warning: ignoring attribute 'noreturn' because it conflicts with attribute
   6346  'malloc' [-Wattributes]
   6347      * The gcov tool can distinguish functions that begin on a same line
   6348        in a source file. This can be a different template instantiation or
   6349        a class constructor:
   6350 
   6351 File 'ins.C'
   6352 Lines executed:100.00% of 8
   6353 Creating 'ins.C.gcov'
   6354 
   6355         -:    0:Source:ins.C
   6356         -:    0:Graph:ins.gcno
   6357         -:    0:Data:ins.gcda
   6358         -:    0:Runs:1
   6359         -:    0:Programs:1
   6360         -:    1:template<class T>
   6361         -:    2:class Foo
   6362         -:    3:{
   6363         -:    4: public:
   6364         2:    5:   Foo(): b (1000) {}
   6365 ------------------
   6366 Foo<char>::Foo():
   6367         1:    5:   Foo(): b (1000) {}
   6368 ------------------
   6369 Foo<int>::Foo():
   6370         1:    5:   Foo(): b (1000) {}
   6371 ------------------
   6372         2:    6:   void inc () { b++; }
   6373 ------------------
   6374 Foo<char>::inc():
   6375         1:    6:   void inc () { b++; }
   6376 ------------------
   6377 Foo<int>::inc():
   6378         1:    6:   void inc () { b++; }
   6379 ------------------
   6380         -:    7:
   6381         -:    8:  private:
   6382         -:    9:   int b;
   6383         -:   10:};
   6384         -:   11:
   6385         1:   12:int main(int argc, char **argv)
   6386         -:   13:{
   6387         1:   14:  Foo<int> a;
   6388         1:   15:  Foo<char> b;
   6389         -:   16:
   6390         1:   17:  a.inc ();
   6391         1:   18:  b.inc ();
   6392         1:   19:}
   6393 
   6394      * The gcov tool has more accurate numbers for execution of lines in a
   6395        source file.
   6396      * The gcov tool can use TERM colors to provide more readable output.
   6397      * AddressSanitizer gained a new pair of sanitization options,
   6398        -fsanitize=pointer-compare and -fsanitize=pointer-subtract, which
   6399        warn about subtraction (or comparison) of pointers that point to a
   6400        different memory object:
   6401 
   6402 int
   6403 main ()
   6404 {
   6405   /* Heap allocated memory.  */
   6406   char *heap1 = (char *)__builtin_malloc (42);
   6407   char *heap2 = (char *)__builtin_malloc (42);
   6408   if (heap1 > heap2)
   6409       return 1;
   6410 
   6411   return 0;
   6412 }
   6413 
   6414 ==17465==ERROR: AddressSanitizer: invalid-pointer-pair: 0x604000000010 0x6040000
   6415 00050
   6416     #0 0x40070f in main /tmp/pointer-compare.c:7
   6417     #1 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6418     #2 0x400629 in _start (/tmp/a.out+0x400629)
   6419 
   6420 0x604000000010 is located 0 bytes inside of 42-byte region [0x604000000010,0x604
   6421 00000003a)
   6422 allocated by thread T0 here:
   6423     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   6424 _malloc_linux.cc:86
   6425     #1 0x4006ea in main /tmp/pointer-compare.c:5
   6426     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6427 
   6428 0x604000000050 is located 0 bytes inside of 42-byte region [0x604000000050,0x604
   6429 00000007a)
   6430 allocated by thread T0 here:
   6431     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   6432 _malloc_linux.cc:86
   6433     #1 0x4006f8 in main /tmp/pointer-compare.c:6
   6434     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6435 
   6436 SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-compare.c:7 in main
   6437 
   6438      * The store merging pass has been enhanced to handle bit-fields and
   6439        not just constant stores, but also data copying from adjacent
   6440        memory locations into other adjacent memory locations, including
   6441        bitwise logical operations on the data. The pass can also handle
   6442        byte swapping into memory locations.
   6443      * The undefined behavior sanitizer gained two new options included in
   6444        -fsanitize=undefined: -fsanitize=builtin which diagnoses at run
   6445        time invalid arguments to __builtin_clz or __builtin_ctz prefixed
   6446        builtins, and -fsanitize=pointer-overflow which performs cheap run
   6447        time tests for pointer wrapping.
   6448      * A new attribute no_sanitize can be applied to functions to instruct
   6449        the compiler not to do sanitization of the options provided as
   6450        arguments to the attribute. Acceptable values for no_sanitize match
   6451        those acceptable by the -fsanitize command-line option.
   6452 
   6453 void __attribute__ ((no_sanitize ("alignment", "object-size")))
   6454 f () { /* Do something. */; }
   6455 
   6456 [5]New Languages and Language specific improvements
   6457 
   6458   [6]Ada
   6459 
   6460      * For its internal exception handling used on the host for error
   6461        recovery in the front-end, the compiler now relies on the native
   6462        exception handling mechanism of the host platform, which should be
   6463        more efficient than the former mechanism.
   6464 
   6465   [7]BRIG (HSAIL)
   6466 
   6467    In this release cycle, the focus for the BRIGFE was on stabilization
   6468    and performance improvements. Also a couple of completely new features
   6469    were added.
   6470      * Improved support for function and module scope group segment
   6471        variables. PRM specs define function and module scope group segment
   6472        variables as an experimental feature. However, PRM test suite uses
   6473        them. Now group segment is handled by separate book keeping of
   6474        module scope and function (kernel) offsets. Each function has a
   6475        "frame" in the group segment offset to which is given as an
   6476        argument, similar to traditional call stack frame handling.
   6477      * Reduce the number of type conversions due to the untyped HSAIL
   6478        registers. Instead of always representing the HSAIL's untyped
   6479        registers as unsigned int, the gccbrig now pre-analyzes the BRIG
   6480        code and builds the register variables as a type used the most when
   6481        storing or reading data to/from each register. This reduces the
   6482        number of total casts which cannot be always optimized away.
   6483      * Support for BRIG_KIND_NONE directives.
   6484      * Made -O3 the default optimization level for BRIGFE.
   6485      * Fixed illegal addresses generated from address expressions which
   6486        refer only to offset 0.
   6487      * Fixed a bug with reg+offset addressing on 32b segments. In 'large'
   6488        mode, the offset is treated as 32-bit unless it's in global,
   6489        read-only or kernarg address space.
   6490      * Fixed a crash caused sometimes by calls with more than 4 arguments.
   6491      * Fixed a mis-execution issue with kernels that have both unexpanded
   6492        ID functions and calls to subfunctions.
   6493      * Treat HSAIL barrier builtins as setjmp/longjump style functions to
   6494        avoid illegal optimizations.
   6495      * Ensure per WI copies of private variables are aligned correctly.
   6496      * libhsail-rt: Assume the host runtime allocates the work group
   6497        memory.
   6498 
   6499   [8]C family
   6500 
   6501      * New command-line options have been added for the C and C++
   6502        compilers:
   6503           + [9]-Wmultistatement-macros warns about unsafe macros expanding
   6504             to multiple statements used as a body of a statement such as
   6505             if, else, while, switch, or for.
   6506           + [10]-Wstringop-truncation warns for calls to bounded string
   6507             manipulation functions such as strncat, strncpy, and stpncpy
   6508             that might either truncate the copied string or leave the
   6509             destination unchanged. For example, the following call to
   6510             strncat is diagnosed because it appends just three of the four
   6511             characters from the source string.
   6512 void append (char *buf, size_t bufsize)
   6513 {
   6514     strncat (buf, ".txt", 3);
   6515 }
   6516 warning: 'strncat' output truncated copying 3 bytes from a string of length 4 [-
   6517 Wstringop-truncation]
   6518             Similarly, in the following example, the call to strncpy
   6519             specifies the size of the destination buffer as the bound. If
   6520             the length of the source string is equal to or greater than
   6521             this size the result of the copy will not be NUL-terminated.
   6522             Therefore, the call is also diagnosed. To avoid the warning,
   6523             specify sizeof buf - 1 as the bound and set the last element
   6524             of the buffer to NUL.
   6525 void copy (const char *s)
   6526 {
   6527     char buf[80];
   6528     strncpy (buf, s, sizeof buf);
   6529     
   6530 }
   6531 warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
   6532 tion]
   6533             The -Wstringop-truncation option is included in -Wall.
   6534             Note that due to GCC bug [11]82944, defining strncat, strncpy,
   6535             or stpncpy as a macro in a system header as some
   6536             implementations do, suppresses the warning.
   6537           + [12]-Wif-not-aligned controls warnings issued in response to
   6538             invalid uses of objects declared with attribute
   6539             [13]warn_if_not_aligned.
   6540             The -Wif-not-aligned option is included in -Wall.
   6541           + [14]-Wmissing-attributes warns when a declaration of a
   6542             function is missing one or more attributes that a related
   6543             function is declared with and whose absence may adversely
   6544             affect the correctness or efficiency of generated code. For
   6545             example, in C++, the warning is issued when an explicit
   6546             specialization of a primary template declared with attribute
   6547             alloc_align, alloc_size, assume_aligned, format, format_arg,
   6548             malloc, or nonnull is declared without it. Attributes
   6549             deprecated, error, and warning suppress the warning.
   6550             The -Wmissing-attributes option is included in -Wall.
   6551           + [15]-Wpacked-not-aligned warns when a struct or union declared
   6552             with attribute packed defines a member with an explicitly
   6553             specified alignment greater than 1. Such a member will wind up
   6554             under-aligned. For example, a warning will be issued for the
   6555             definition of struct A in the following:
   6556 struct __attribute__ ((aligned (8)))
   6557 S8 { char a[8]; };
   6558 
   6559 struct __attribute__ ((packed)) A
   6560 {
   6561     struct S8 s8;
   6562 };
   6563 warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-not-aligned]
   6564             The -Wpacked-not-aligned option is included in -Wall.
   6565           + -Wcast-function-type warns when a function pointer is cast to
   6566             an incompatible function pointer. This warning is enabled by
   6567             -Wextra.
   6568           + -Wsizeof-pointer-div warns for suspicious divisions of the
   6569             size of a pointer by the size of the elements it points to,
   6570             which looks like the usual way to compute the array size but
   6571             won't work out correctly with pointers. This warning is
   6572             enabled by -Wall.
   6573           + -Wcast-align=strict warns whenever a pointer is cast such that
   6574             the required alignment of the target is increased. For
   6575             example, warn if a char * is cast to an int * regardless of
   6576             the target machine.
   6577           + -fprofile-abs-path creates absolute path names in the .gcno
   6578             files. This allows gcov to find the correct sources in
   6579             projects where compilations occur with different working
   6580             directories.
   6581      * -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and
   6582        signed integer overflow is now undefined by default at all
   6583        optimization levels. Using -fsanitize=signed-integer-overflow is
   6584        now the preferred way to audit code, -Wstrict-overflow is
   6585        deprecated.
   6586      * The [16]-Warray-bounds option has been improved to detect more
   6587        instances of out-of-bounds array indices and pointer offsets. For
   6588        example, negative or excessive indices into flexible array members
   6589        and string literals are detected.
   6590      * The [17]-Wrestrict option introduced in GCC 7 has been enhanced to
   6591        detect many more instances of overlapping accesses to objects via
   6592        restrict-qualified arguments to standard memory and string
   6593        manipulation functions such as memcpy and strcpy. For example, the
   6594        strcpy call in the function below attempts to truncate the string
   6595        by replacing its initial characters with the last four. However,
   6596        because the function writes the terminating NUL into a[4], the
   6597        copies overlap and the call is diagnosed.
   6598 void f (void)
   6599 {
   6600     char a[] = "abcd1234";
   6601     strcpy (a, a + 4);
   6602     
   6603 }
   6604 warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   6605  4 [-Wrestrict]
   6606        The -Wrestrict option is included in -Wall.
   6607      * Several optimizer enhancements have enabled improvements to the
   6608        [18]-Wformat-overflow and [19]-Wformat-truncation options. The
   6609        warnings detect more instances of buffer overflow and truncation
   6610        than in GCC 7 and are better at avoiding certain kinds of false
   6611        positives.
   6612      * When reporting mismatching argument types at a function call, the C
   6613        and C++ compilers now underline both the argument and the pertinent
   6614        parameter in the declaration.
   6615 $ gcc arg-type-mismatch.cc
   6616 arg-type-mismatch.cc: In function 'int caller(int, int, float)':
   6617 arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' to 'const char*'
   6618  [-fpermissive]
   6619    return callee(first, second, third);
   6620                         ^~~~~~
   6621 arg-type-mismatch.cc:1:40: note:   initializing argument 2 of 'int callee(int, c
   6622 onst char*, float)'
   6623  extern int callee(int one, const char *two, float three);
   6624                             ~~~~~~~~~~~~^~~
   6625 
   6626      * When reporting on unrecognized identifiers, the C and C++ compilers
   6627        will now emit fix-it hints suggesting #include directives for
   6628        various headers in the C and C++ standard libraries.
   6629 $ gcc incomplete.c
   6630 incomplete.c: In function 'test':
   6631 incomplete.c:3:10: error: 'NULL' undeclared (first use in this function)
   6632    return NULL;
   6633           ^~~~
   6634 incomplete.c:3:10: note: 'NULL' is defined in header '<stddef.h>'; did you forge
   6635 t to '#include <stddef.h>'?
   6636 incomplete.c:1:1:
   6637 +#include <stddef.h>
   6638  const char *test(void)
   6639 incomplete.c:3:10:
   6640    return NULL;
   6641           ^~~~
   6642 incomplete.c:3:10: note: each undeclared identifier is reported only once for ea
   6643 ch function it appears in
   6644 
   6645 $ gcc incomplete.cc
   6646 incomplete.cc:1:6: error: 'string' in namespace 'std' does not name a type
   6647  std::string s("hello world");
   6648       ^~~~~~
   6649 incomplete.cc:1:1: note: 'std::string' is defined in header '<string>'; did you
   6650 forget to '#include <string>'?
   6651 +#include <string>
   6652  std::string s("hello world");
   6653  ^~~
   6654 
   6655      * The C and C++ compilers now use more intuitive locations when
   6656        reporting on missing semicolons, and offer fix-it hints:
   6657 $ gcc t.c
   6658 t.c: In function 'test':
   6659 t.c:3:12: error: expected ';' before '}' token
   6660    return 42
   6661             ^
   6662             ;
   6663  }
   6664  ~
   6665 
   6666      * When reporting on missing '}' and ')' tokens, the C and C++
   6667        compilers will now highlight the corresponding '{' and '(' token,
   6668        issuing a 'note' if it's on a separate line:
   6669 $ gcc unclosed.c
   6670 unclosed.c: In function 'log_when_out_of_range':
   6671 unclosed.c:12:50: error: expected ')' before '{' token
   6672        && (temperature < MIN || temperature > MAX) {
   6673                                                   ^~
   6674                                                   )
   6675 unclosed.c:11:6: note: to match this '('
   6676    if (logging_enabled && check_range ()
   6677       ^
   6678 
   6679        or highlighting it directly if it's on the same line:
   6680 $ gcc unclosed-2.c
   6681 unclosed-2.c: In function 'test':
   6682 unclosed-2.c:8:45: error: expected ')' before '{' token
   6683    if (temperature < MIN || temperature > MAX {
   6684       ~                                      ^~
   6685                                              )
   6686 
   6687        They will also emit fix-it hints.
   6688 
   6689   [20]C
   6690 
   6691      * New options -std=c17, to select support for the 2018 edition of the
   6692        ISO C standard (__STDC_VERSION__ == 201710L), and -std=gnu17, for
   6693        C17 with GNU extensions.
   6694      * The default mode has been changed to -std=gnu17.
   6695 
   6696   [21]C++
   6697 
   6698      * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
   6699        convention, which changes the ABI for some uncommon code:
   6700           + Passing an empty class as an argument now takes up no space on
   6701             x86_64, as required by the psABI.
   6702           + Passing or returning a class with only deleted copy and move
   6703             constructors now uses the same calling convention as a class
   6704             with a non-trivial copy or move constructor. This only affects
   6705             C++17 mode, as in earlier standards passing or returning such
   6706             a class was impossible.
   6707           + WARNING: In GCC 8.1 the second change mistakenly also affects
   6708             classes with a deleted copy constructor and defaulted trivial
   6709             move constructor (bug [22]c++/86094). This issue is fixed in
   6710             GCC 8.2 (-fabi-version=13).
   6711        You can test whether these changes affect your code with -Wabi=11
   6712        (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
   6713        problematic for your project, the GCC 7 ABI can be selected with
   6714        -fabi-version=11.
   6715      * The value of the C++11 alignof operator has been corrected to match
   6716        C _Alignof (minimum alignment) rather than GNU __alignof__
   6717        (preferred alignment); on ia32 targets this means that
   6718        alignof(double) is now 4 rather than 8. Code that wants the
   6719        preferred alignment should use __alignof__ instead.
   6720      * New command-line options have been added for the C++ compiler to
   6721        control warnings:
   6722           + [23]-Wclass-memaccess warns when objects of non-trivial class
   6723             types are manipulated in potentially unsafe ways by raw memory
   6724             functions such as memcpy, or realloc. The warning helps detect
   6725             calls that bypass user-defined constructors or copy-assignment
   6726             operators, corrupt virtual table pointers, data members of
   6727             const-qualified types or references, or member pointers. The
   6728             warning also detects calls that would bypass access controls
   6729             to data members. For example, a call such as:
   6730         memcpy (&std::cout, &std::cerr, sizeof std::cout);
   6731             results in
   6732         warning: 'void* memcpy(void*, const void*, long unsigned int)' writing t
   6733 o an object of type 'std::ostream' {aka 'class std::basic_ostream<char>'} with n
   6734 o trivial copy-assignment [-Wclass-memaccess]
   6735             The -Wclass-memaccess option is included in -Wall.
   6736      * The C++ front end has experimental support for some of the upcoming
   6737        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   6738        including designated initializers, default member initializers for
   6739        bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
   6740        lambda [=, this] captures, etc. For a full list of new features,
   6741        see [24]the C++ status page.
   6742      * When reporting on attempts to access private fields of a class or
   6743        struct, the C++ compiler will now offer fix-it hints showing how to
   6744        use an accessor function to get at the field in question, if one
   6745        exists.
   6746 $ gcc accessor.cc
   6747 accessor.cc: In function 'void test(foo*)':
   6748 accessor.cc:12:12: error: 'double foo::m_ratio' is private within this context
   6749    if (ptr->m_ratio >= 0.5)
   6750             ^~~~~~~
   6751 accessor.cc:7:10: note: declared private here
   6752    double m_ratio;
   6753           ^~~~~~~
   6754 accessor.cc:12:12: note: field 'double foo::m_ratio' can be accessed via 'double
   6755  foo::get_ratio() const'
   6756    if (ptr->m_ratio >= 0.5)
   6757             ^~~~~~~
   6758             get_ratio()
   6759 
   6760      * The C++ compiler can now give you a hint if you use a macro before
   6761        it was defined (e.g. if you mess up the order of your #include
   6762        directives):
   6763 $ gcc ordering.cc
   6764 ordering.cc:2:24: error: expected ';' at end of member declaration
   6765    virtual void clone() const OVERRIDE { }
   6766                         ^~~~~
   6767                              ;
   6768 ordering.cc:2:30: error: 'OVERRIDE' does not name a type
   6769    virtual void clone() const OVERRIDE { }
   6770                               ^~~~~~~~
   6771 ordering.cc:2:30: note: the macro 'OVERRIDE' had not yet been defined
   6772 In file included from ordering.cc:5:
   6773 c++11-compat.h:2: note: it was later defined here
   6774  #define OVERRIDE override
   6775 
   6776 
   6777      * The -Wold-style-cast diagnostic can now emit fix-it hints telling
   6778        you when you can use a static_cast, const_cast, or
   6779        reinterpret_cast.
   6780 $ gcc -c old-style-cast-fixits.cc -Wold-style-cast
   6781 old-style-cast-fixits.cc: In function 'void test(void*)':
   6782 old-style-cast-fixits.cc:5:19: warning: use of old-style cast to 'struct foo*' [
   6783 -Wold-style-cast]
   6784    foo *f = (foo *)ptr;
   6785                    ^~~
   6786             ----------
   6787             static_cast<foo *> (ptr)
   6788 
   6789      * When reporting on problems within extern "C" linkage
   6790        specifications, the C++ compiler will now display the location of
   6791        the start of the extern "C".
   6792 $ gcc -c extern-c.cc
   6793 extern-c.cc:3:1: error: template with C linkage
   6794  template <typename T> void test (void);
   6795  ^~~~~~~~
   6796 In file included from extern-c.cc:1:
   6797 unclosed.h:1:1: note: 'extern "C"' linkage started here
   6798  extern "C" {
   6799  ^~~~~~~~~~
   6800 extern-c.cc:3:39: error: expected '}' at end of input
   6801  template <typename T> void test (void);
   6802                                        ^
   6803 In file included from extern-c.cc:1:
   6804 unclosed.h:1:12: note: to match this '{'
   6805  extern "C" {
   6806             ^
   6807 
   6808      * When reporting on mismatching template types, the C++ compiler will
   6809        now use color to highlight the mismatching parts of the template,
   6810        and will elide the parameters that are common between two
   6811        mismatching templates, printing [...] instead:
   6812 $ gcc templates.cc
   6813 templates.cc: In function 'void test()':
   6814 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   6815 e>' to 'vector<int>'
   6816    fn_1(vector<double> ());
   6817         ^~~~~~~~~~~~~~~~~
   6818 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<[...]
   6819 ,double>' to 'map<[...],int>'
   6820    fn_2(map<int, double>());
   6821         ^~~~~~~~~~~~~~~~~~
   6822 
   6823        Those [...] elided parameters can be seen using -fno-elide-type:
   6824 $ gcc templates.cc -fno-elide-type
   6825 templates.cc: In function 'void test()':
   6826 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   6827 e>' to 'vector<int>'
   6828    fn_1(vector<double> ());
   6829         ^~~~~~~~~~~~~~~~~
   6830 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<int,d
   6831 ouble>' to 'map<int,int>'
   6832    fn_2(map<int, double>());
   6833         ^~~~~~~~~~~~~~~~~~
   6834 
   6835        The C++ compiler has also gained an option
   6836        -fdiagnostics-show-template-tree which visualizes such mismatching
   6837        templates in a hierarchical form:
   6838 $ gcc templates-2.cc -fdiagnostics-show-template-tree
   6839 templates-2.cc: In function 'void test()':
   6840 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   6841 ble>' to 'vector<int>'
   6842   vector<
   6843     [double != int]>
   6844    fn_1(vector<double> ());
   6845         ^~~~~~~~~~~~~~~~~
   6846 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   6847 ctor<double> >()' from 'map<map<[...],vector<double>>,vector<double>>' to 'map<m
   6848 ap<[...],vector<float>>,vector<float>>'
   6849   map<
   6850     map<
   6851       [...],
   6852       vector<
   6853         [double != float]>>,
   6854     vector<
   6855       [double != float]>>
   6856    fn_2(map<map<int, vector<double>>, vector<double>> ());
   6857         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   6858 
   6859        which again works with -fno-elide-type:
   6860 $ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
   6861 templates-2.cc: In function 'void test()':
   6862 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   6863 ble>' to 'vector<int>'
   6864   vector<
   6865     [double != int]>
   6866    fn_1(vector<double> ());
   6867         ^~~~~~~~~~~~~~~~~
   6868 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   6869 ctor<double> >()' from 'map<map<int,vector<double>>,vector<double>>' to 'map<map
   6870 <int,vector<float>>,vector<float>>'
   6871   map<
   6872     map<
   6873       int,
   6874       vector<
   6875         [double != float]>>,
   6876     vector<
   6877       [double != float]>>
   6878    fn_2(map<map<int, vector<double>>, vector<double>> ());
   6879         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   6880 
   6881      * Flowing off the end of a non-void function is considered
   6882        unreachable and may be subject to optimization on that basis. As a
   6883        result of this change, -Wreturn-type warnings are enabled by
   6884        default for C++.
   6885 
   6886     [25]Runtime Library (libstdc++)
   6887 
   6888      * Improved experimental support for C++17, including the following
   6889        features:
   6890           + Deduction guides to support class template argument deduction.
   6891           + std::filesystem implementation.
   6892           + std::char_traits<char> and std::char_traits<wchar_t> are
   6893             usable in constant expressions.
   6894           + std::to_chars and std::from_chars (for integers only, not for
   6895             floating point types).
   6896      * Experimental support for C++2a: std::to_address (thanks to Glen
   6897        Fernandes) and std::endian.
   6898      * On GNU/Linux, std::random_device::entropy() accesses the kernel's
   6899        entropy count for the random device, if known (thanks to Xi
   6900        Ruoyao).
   6901      * Support for std::experimental::source_location.
   6902      * AddressSanitizer integration for std::vector, detecting
   6903        out-of-range accesses to the unused capacity of a vector.
   6904      * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
   6905        Mathematical Special Functions.
   6906 
   6907   [26]Fortran
   6908 
   6909      * The main version of libfortran has been changed to 5.
   6910      * Parameterized derived types, a major feature of Fortran 2003, have
   6911        been implemented.
   6912      * Partial support is provided for Fortran 2018 teams, which are
   6913        hierarchical subsets of images that execute independently of other
   6914        image subsets.
   6915      * The maximum rank for arrays has been increased to 15, conforming to
   6916        the Fortran 2008 standard.
   6917      * Transformational intrinsics are now fully supported in
   6918        initialization expressions.
   6919      * New flag -fc-prototypes to write C prototypes for BIND(C)
   6920        procedures and variables.
   6921      * If -fmax-stack-var-size is honored if given together with -Ofast,
   6922        -fstack-arrays is no longer set in that case.
   6923      * New options -fdefault-real-16 and -fdefault-real-10 to control the
   6924        default kind of REAL variables.
   6925      * A warning is now issued if an array subscript inside a DO loop
   6926        could lead to an out-of-bounds-access. The new option
   6927        -Wdo-subscript, enabled by -Wextra, warns about this even if the
   6928        compiler can not prove that the code will be executed.
   6929      * The Fortran front end now attempts to interchange loops if it is
   6930        deemed profitable. So far, this is restricted to FORALL and DO
   6931        CONCURRENT statements with multiple indices. This behavior be
   6932        controlled with the new flag -ffrontend-loop-interchange, which is
   6933        enabled with optimization by default. The
   6934        -Wfrontend-loop-interchange option warns about such occurrences.
   6935      * When an actual argument contains too few elements for a dummy
   6936        argument, an error is now issued. The -std=legacy option can be
   6937        used to still compile such code.
   6938      * The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
   6939        integers, making records larger than 2GiB possible.
   6940      * The GFORTRAN_DEFAULT_RECL environment variable no longer has any
   6941        effect. The record length for preconnected units is now larger than
   6942        any practical limit, same as for sequential access units opened
   6943        without an explicit RECL= specifier.
   6944      * Character variables longer than HUGE(0) elements are now possible
   6945        on 64-bit targets. Note that this changes the procedure call ABI
   6946        for all procedures with character arguments on 64-bit targets, as
   6947        the type of the hidden character length argument has changed. The
   6948        hidden character length argument is now of type INTEGER(C_SIZE_T).
   6949      * Partial support is provided for Fortran 2018 teams, which are
   6950        hierarchical subsets of images that execute independently of other
   6951        image subsets.
   6952 
   6953   [27]Go
   6954 
   6955      * GCC 8 provides a complete implementation of the Go 1.10.1 user
   6956        packages.
   6957      * The garbage collector is now fully concurrent. As before, values
   6958        stored on the stack are scanned conservatively, but value stored in
   6959        the heap are scanned precisely.
   6960      * Escape analysis is fully implemented and enabled by default in the
   6961        Go front end. This significantly reduces the number of heap
   6962        allocations by allocating values on the stack instead.
   6963 
   6964 [28]libgccjit
   6965 
   6966    The libgccjit API gained four new entry points:
   6967      * [29]gcc_jit_type_get_vector and
   6968      * [30]gcc_jit_context_new_rvalue_from_vector for working with
   6969        vectors,
   6970      * [31]gcc_jit_type_get_aligned
   6971      * [32]gcc_jit_function_get_address
   6972 
   6973    The C code generated by [33]gcc_jit_context_dump_reproducer_to_file is
   6974    now easier-to-read.
   6975 
   6976 [34]New Targets and Target Specific Improvements
   6977 
   6978   [35]AArch64
   6979 
   6980      * The Armv8.4-A architecture is now supported. It can be used by
   6981        specifying the -march=armv8.4-a option.
   6982      * The Dot Product instructions are now supported as an optional
   6983        extension to the Armv8.2-A architecture and newer and are mandatory
   6984        on Armv8.4-A. The extension can be used by specifying the +dotprod
   6985        architecture extension. E.g. -march=armv8.2-a+dotprod.
   6986      * The Armv8-A +crypto extension has now been split into two
   6987        extensions for finer grained control:
   6988           + +aes which contains the Armv8-A AES crytographic instructions.
   6989           + +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
   6990             instructions.
   6991        Using +crypto will now enable these two extensions.
   6992      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   6993        instructions have been added. These instructions are mandatory in
   6994        Armv8.4-A but available as an optional extension to Armv8.2-A and
   6995        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   6996        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   6997        the instructions can be enabled by specifying +fp16.
   6998      * New cryptographic instructions have been added as optional
   6999        extensions to Armv8.2-A and newer. These instructions can be
   7000        enabled with:
   7001           + +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This
   7002             implies +sha2.
   7003           + +sm4 New SM3 and SM4 instructions from Armv8.4-A.
   7004      * The Scalable Vector Extension (SVE) is now supported as an optional
   7005        extension to the Armv8.2-A architecture and newer. This support
   7006        includes automatic vectorization with SVE instructions, but it does
   7007        not yet include the SVE Arm C Language Extensions (ACLE). It can be
   7008        enabled by specifying the +sve architecture extension (for example,
   7009        -march=armv8.2-a+sve). By default, the generated code works with
   7010        all vector lengths, but it can be made specific to N-bit vectors
   7011        using -msve-vector-bits=N.
   7012      * Support has been added for the following processors (GCC
   7013        identifiers in parentheses):
   7014           + Arm Cortex-A75 (cortex-a75).
   7015           + Arm Cortex-A55 (cortex-a55).
   7016           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   7017             (cortex-a75.cortex-a55).
   7018        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7019        options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
   7020        arguments to the equivalent target attributes and pragmas.
   7021 
   7022   [36]ARC
   7023 
   7024      * Added support for:
   7025           + Fast interrupts.
   7026           + Naked functions.
   7027           + aux variable attributes.
   7028           + uncached type qualifier.
   7029           + Secure functions via sjli instruction.
   7030      * New exception handling implementation.
   7031      * Revamped trampoline implementation.
   7032      * Refactored small data feature implementation, controlled via the -G
   7033        command-line option.
   7034      * New support for reduced register set ARC architecture
   7035        configurations, controlled via the -mrf16 command-line option.
   7036      * Refurbished and improved support for zero overhead loops.
   7037        Introduced -mlpc-width command-line option to control the width of
   7038        the lp_count register.
   7039 
   7040   [37]ARM
   7041 
   7042      * The -mfpu option now takes a new option setting of -mfpu=auto. When
   7043        set to this the floating-point and SIMD settings are derived from
   7044        the settings of the -mcpu or -march options. The internal CPU
   7045        configurations have been updated with information about the
   7046        permitted floating-point configurations supported. See the user
   7047        guide for further information about the extended option syntax for
   7048        controlling architectural extensions via the -march option.
   7049        -mfpu=auto is now the default setting unless the compiler has been
   7050        configured with an explicit --with-fpu option.
   7051      * The -march and -mcpu options now accept optional extensions to the
   7052        architecture or CPU option, allowing the user to enable or disable
   7053        any such extensions supported by that architecture or CPU such as
   7054        (but not limited to) floating-point and AdvancedSIMD. For example:
   7055        the option -mcpu=cortex-a53+nofp will generate code for the
   7056        Cortex-A53 processor with no floating-point support. This, in
   7057        combination with the new -mfpu=auto option, provides a
   7058        straightforward way of specifying a valid build target through a
   7059        single -mcpu or -march option. The -mtune option accepts the same
   7060        arguments as -mcpu but only the CPU name has an effect on tuning.
   7061        The architecture extensions do not have any effect. For details of
   7062        what extensions a particular architecture or CPU option supports
   7063        please refer to the [38]documentation.
   7064      * The -mstructure-size-boundary option has been deprecated and will
   7065        be removed in a future release.
   7066      * The default link behavior for Armv6 and Armv7-R targets has been
   7067        changed to produce BE8 format when generating big-endian images. A
   7068        new flag -mbe32 can be used to force the linker to produce legacy
   7069        BE32 format images. There is no change of behavior for Armv6-M and
   7070        other Armv7 or later targets: these already defaulted to BE8
   7071        format. This change brings GCC into alignment with other compilers
   7072        for the ARM architecture.
   7073      * The Armv8-R architecture is now supported. It can be used by
   7074        specifying the -march=armv8-r option.
   7075      * The Armv8.3-A architecture is now supported. It can be used by
   7076        specifying the -march=armv8.3-a option.
   7077      * The Armv8.4-A architecture is now supported. It can be used by
   7078        specifying the -march=armv8.4-a option.
   7079      * The Dot Product instructions are now supported as an optional
   7080        extension to the Armv8.2-A architecture and newer and are mandatory
   7081        on Armv8.4-A. The extension can be used by specifying the +dotprod
   7082        architecture extension. E.g. -march=armv8.2-a+dotprod.
   7083      * Support for setting extensions and architectures using the GCC
   7084        target pragma and attribute has been added. It can be used by
   7085        specifying #pragma GCC target ("arch=..."), #pragma GCC target
   7086        ("+extension"), __attribute__((target("arch=..."))) or
   7087        __attribute__((target("+extension"))).
   7088      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   7089        instructions have been added. These instructions are mandatory in
   7090        Armv8.4-A but available as an optional extension to Armv8.2-A and
   7091        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   7092        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   7093        the instructions can be enabled by specifying +fp16.
   7094      * Support has been added for the following processors (GCC
   7095        identifiers in parentheses):
   7096           + Arm Cortex-A75 (cortex-a75).
   7097           + Arm Cortex-A55 (cortex-a55).
   7098           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   7099             (cortex-a75.cortex-a55).
   7100           + Arm Cortex-R52 for Armv8-R (cortex-r52).
   7101        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7102        options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
   7103        arguments to the equivalent target attributes and pragmas.
   7104 
   7105   [39]AVR
   7106 
   7107      * The AVR port now supports the following XMEGA-like devices:
   7108 
   7109      ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
   7110      ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
   7111      ATtiny3214, ATtiny3216, ATtiny3217
   7112        The new devices are listed under [40]-mmcu=avrxmega3.
   7113           + These devices see flash memory in the RAM address space, so
   7114             that features like PROGMEM and __flash are not needed any more
   7115             (as opposed to other AVR families for which read-only data
   7116             will be located in RAM except special, non-standard features
   7117             are used to locate and access such data). This requires that
   7118             the compiler is used with Binutils 2.29 or newer so that
   7119             [41]read-only data will be located in flash memory.
   7120           + A new command-line option -mshort-calls is supported. This
   7121             option is used internally for multilib selection of the
   7122             avrxmega3 variants. It is not an optimization option. Do not
   7123             set it by hand.
   7124      * The compiler now generates [42]efficient interrupt service routine
   7125        (ISR) prologues and epilogues. This is achieved by using the new
   7126        [43]AVR pseudo instruction __gcc_isr which is supported and
   7127        resolved by the GNU assembler.
   7128           + As the __gcc_isr pseudo-instruction will be resolved by the
   7129             assembler, inline assembly is transparent to the process. This
   7130             means that when inline assembly uses an instruction like INC
   7131             that clobbers the condition code, then the assembler will
   7132             detect this and generate an appropriate ISR prologue /
   7133             epilogue chunk to save / restore SREG as needed.
   7134           + A new command-line option -mno-gas-isr-prologues disables the
   7135             generation of the __gcc_isr pseudo instruction. Any non-naked
   7136             ISR will save and restore SREG, tmp_reg and zero_reg, no
   7137             matter whether the respective register is clobbered or used.
   7138           + The feature is turned on per default for all optimization
   7139             levels except for -O0 and -Og. It is explicitly enabled by
   7140             means of option -mgas-isr-prologues.
   7141           + Support has been added for a new [44]AVR function attribute
   7142             no_gccisr. It can be used to disable __gcc_isr pseudo
   7143             instruction generation for individual ISRs.
   7144           + This optimization is only available if GCC is configured with
   7145             GNU Binutils 2.29 or newer; or at least with a version of
   7146             Binutils that implements feature [45]PR21683.
   7147      * The compiler no more saves / restores registers in main; the effect
   7148        is the same as if attribute OS_task was specified for main. This
   7149        optimization can be switched off by the new command-line option
   7150        -mno-main-is-OS_task.
   7151 
   7152   [46]IA-32/x86-64
   7153 
   7154      * The x86 port now supports the naked function attribute.
   7155      * Better tuning for znver1 and Intel Core based CPUs.
   7156      * Vectorization cost metrics has been reworked leading to significant
   7157        improvements on some benchmarks.
   7158      * GCC now supports the Intel CPU named Cannonlake through
   7159        -march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA
   7160        and SHA ISA extensions.
   7161      * GCC now supports the Intel CPU named Icelake through
   7162        -march=icelake. The switch enables the AVX512VNNI, GFNI, VAES,
   7163        AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ
   7164        ISA extensions.
   7165      * GCC now supports the Intel Control-flow Enforcement Technology
   7166        (CET) extension through -fcf-protection option.
   7167 
   7168   [47]NDS32
   7169 
   7170      * New command-line options -mext-perf, -mext-perf2, and -mext-string
   7171        have been added for performance extension instructions.
   7172 
   7173   [48]Nios II
   7174 
   7175      * The Nios II back end has been improved to generate better-optimized
   7176        code. Changes include switching to LRA, more accurate cost models,
   7177        and more compact code for addressing static variables.
   7178      * New command-line options -mgprel-sec= and -mr0rel-sec= have been
   7179        added.
   7180      * The stack-smashing protection options are now enabled on Nios II.
   7181 
   7182   [49]PA-RISC
   7183 
   7184      * The default call ABI on 32-bit linux has been changed from callee
   7185        copies to caller copies. This affects objects larger than eight
   7186        bytes passed by value. The goal is to improve compatibility with
   7187        x86 and resolve issues with OpenMP.
   7188      * Other PA-RISC targets are unchanged.
   7189 
   7190   [50]PowerPC / PowerPC64 / RS6000
   7191 
   7192      * The PowerPC SPE support is split off to a separate powerpcspe port.
   7193        The separate port is deprecated and might be removed in a future
   7194        release.
   7195      * The Paired Single support (as used on some PPC750 CPUs, -mpaired,
   7196        powerpc*-*-linux*paired*) is deprecated and will be removed in a
   7197        future release.
   7198      * The Xilinx floating point support (-mxilinx-fpu,
   7199        powerpc-xilinx-eabi*) is deprecated and will be removed in a future
   7200        release.
   7201      * Support for using big-endian AltiVec intrinsics on a little-endian
   7202        target (-maltivec=be) is deprecated and will be removed in a future
   7203        release.
   7204 
   7205   [51]Tile
   7206 
   7207      * The TILE-Gx port is deprecated and will be removed in a future
   7208        release.
   7209 
   7210 [52]Operating Systems
   7211 
   7212   [53]Windows
   7213 
   7214      * GCC on Microsoft Windows can now be configured via
   7215        --enable-mingw-wildcard or --disable-mingw-wildcard to force a
   7216        specific behavior for GCC itself with regards to supporting the
   7217        wildcard character. Prior versions of GCC would follow the
   7218        configuration of the MinGW runtime. This behavior can still be
   7219        obtained by not using the above options or by using
   7220        --enable-mingw-wildcard=platform.
   7221 
   7222 [54]Improvements for plugin authors
   7223 
   7224      * Plugins can now register a callback hook for when comments are
   7225        encountered by the C and C++ compilers, e.g. allowing for plugins
   7226        to handle documentation markup in code comments.
   7227      * The gdbinit support script for debugging GCC now has a
   7228        break-on-diagnostic command, providing an easy way to trigger a
   7229        breakpoint whenever a diagnostic is emitted.
   7230      * The API for creating fix-it hints now supports newlines, and for
   7231        emitting mutually incompatible fix-it hints for one diagnostic.
   7232 
   7233 [55]GCC 8.1
   7234 
   7235    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   7236    system that are known to be fixed in the 8.1 release. This list might
   7237    not be complete (that is, it is possible that some PRs that have been
   7238    fixed are not listed here).
   7239 
   7240 [57]GCC 8.2
   7241 
   7242    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   7243    system that are known to be fixed in the 8.2 release. This list might
   7244    not be complete (that is, it is possible that some PRs that have been
   7245    fixed are not listed here).
   7246 
   7247   General Improvements
   7248 
   7249      * Fixed LTO link-time performance problems caused by an overflow in
   7250        the partitioning algorithm while building large binaries.
   7251 
   7252   Language Specific Changes
   7253 
   7254     C++
   7255 
   7256    GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
   7257    returning of classes with a deleted copy constructor and defaulted
   7258    trivial move constructor (bug [59]c++/86094). GCC 8.2 introduces
   7259    -fabi-version=13 and makes it the default, ABI incompatibilities
   7260    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [60]C++
   7261    changes for more details.
   7262 
   7263   Target Specific Changes
   7264 
   7265     IA-32/x86-64
   7266 
   7267      * -mtune=native performance regression [61]PR84413 on Intel Skylake
   7268        processors has been fixed.
   7269 
   7270 [62]GCC 8.3
   7271 
   7272    This is the [63]list of problem reports (PRs) from GCC's bug tracking
   7273    system that are known to be fixed in the 8.3 release. This list might
   7274    not be complete (that is, it is possible that some PRs that have been
   7275    fixed are not listed here).
   7276 
   7277   Windows
   7278 
   7279      * A C++ Microsoft ABI bitfield layout bug, [64]PR87137 has been
   7280        fixed. A non-field declaration could cause the current bitfield
   7281        allocation unit to be completed, incorrectly placing a following
   7282        bitfield into a new allocation unit. The Microsoft ABI is selected
   7283        for:
   7284           + Mingw targets
   7285           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   7286             option is specified, or __attribute__((ms_struct)) is used
   7287           + SuperH targets when the -mhitachi option is specified, or
   7288             __attribute__((renesas)) is used
   7289        GCC 8 introduced additional cases of this defect, but rather than
   7290        resolve only those regressions, we decided to resolve all the cases
   7291        of this defect in single change.
   7292 
   7293 [65]GCC 8.4
   7294 
   7295    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   7296    system that are known to be fixed in the 8.4 release. This list might
   7297    not be complete (that is, it is possible that some PRs that have been
   7298    fixed are not listed here).
   7299 
   7300 [67]GCC 8.5
   7301 
   7302    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   7303    system that are known to be fixed in the 8.5 release. This list might
   7304    not be complete (that is, it is possible that some PRs that have been
   7305    fixed are not listed here).
   7306 
   7307   Target Specific Changes
   7308 
   7309     AArch64
   7310 
   7311      * The option -moutline-atomics has been added to aid deployment of
   7312        the Large System Extensions (LSE) on GNU/Linux systems built with a
   7313        baseline architecture targeting Armv8-A. When the option is
   7314        specified code is emitted to detect the presence of LSE
   7315        instructions at run time and use them for standard atomic
   7316        operations. For more information please refer to the documentation.
   7317 
   7318 
   7319     For questions related to the use of GCC, please consult these web
   7320     pages and the [69]GCC manuals. If that fails, the
   7321     [70]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7322     web pages and the development of GCC are welcome on our developer
   7323     list at [71]gcc (a] gcc.gnu.org. All of [72]our lists have public
   7324     archives.
   7325 
   7326    Copyright (C) [73]Free Software Foundation, Inc. Verbatim copying and
   7327    distribution of this entire article is permitted in any medium,
   7328    provided this notice is preserved.
   7329 
   7330    These pages are [74]maintained by the GCC team. Last modified
   7331    2025-01-31.
   7332 
   7333 References
   7334 
   7335    1. https://gcc.gnu.org/gcc-8/porting_to.html
   7336    2. https://gcc.gnu.org/onlinedocs/index.html#current
   7337    3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
   7338    4. https://gcc.gnu.org/gcc-8/changes.html#general
   7339    5. https://gcc.gnu.org/gcc-8/changes.html#languages
   7340    6. https://gcc.gnu.org/gcc-8/changes.html#ada
   7341    7. https://gcc.gnu.org/gcc-8/changes.html#brig
   7342    8. https://gcc.gnu.org/gcc-8/changes.html#c-family
   7343    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
   7344   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   7345   11. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
   7346   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
   7347   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
   7348   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   7349   15. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
   7350   16. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
   7351   17. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
   7352   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   7353   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   7354   20. https://gcc.gnu.org/gcc-8/changes.html#c
   7355   21. https://gcc.gnu.org/gcc-8/changes.html#cxx
   7356   22. https://gcc.gnu.org/PR86094
   7357   23. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
   7358   24. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   7359   25. https://gcc.gnu.org/gcc-8/changes.html#libstdcxx
   7360   26. https://gcc.gnu.org/gcc-8/changes.html#fortran
   7361   27. https://gcc.gnu.org/gcc-8/changes.html#go
   7362   28. https://gcc.gnu.org/gcc-8/changes.html#jit
   7363   29. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
   7364   30. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
   7365   31. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
   7366   32. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
   7367   33. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
   7368   34. https://gcc.gnu.org/gcc-8/changes.html#targets
   7369   35. https://gcc.gnu.org/gcc-8/changes.html#aarch64
   7370   36. https://gcc.gnu.org/gcc-8/changes.html#arc
   7371   37. https://gcc.gnu.org/gcc-8/changes.html#arm
   7372   38. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
   7373   39. https://gcc.gnu.org/gcc-8/changes.html#avr
   7374   40. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
   7375   41. https://sourceware.org/PR21472
   7376   42. https://gcc.gnu.org/PR20296
   7377   43. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
   7378   44. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
   7379   45. https://sourceware.org/PR21683
   7380   46. https://gcc.gnu.org/gcc-8/changes.html#x86
   7381   47. https://gcc.gnu.org/gcc-8/changes.html#nds32
   7382   48. https://gcc.gnu.org/gcc-8/changes.html#nios2
   7383   49. https://gcc.gnu.org/gcc-8/changes.html#hppa
   7384   50. https://gcc.gnu.org/gcc-8/changes.html#powerpc
   7385   51. https://gcc.gnu.org/gcc-8/changes.html#Tile
   7386   52. https://gcc.gnu.org/gcc-8/changes.html#os
   7387   53. https://gcc.gnu.org/gcc-8/changes.html#windows
   7388   54. https://gcc.gnu.org/gcc-8/changes.html#plugins
   7389   55. https://gcc.gnu.org/gcc-8/changes.html#GCC8.1
   7390   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
   7391   57. https://gcc.gnu.org/gcc-8/changes.html#GCC8.2
   7392   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
   7393   59. https://gcc.gnu.org/PR86094
   7394   60. https://gcc.gnu.org/gcc-8/changes.html#cxx
   7395   61. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
   7396   62. https://gcc.gnu.org/gcc-8/changes.html#GCC8.3
   7397   63. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
   7398   64. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   7399   65. https://gcc.gnu.org/gcc-8/changes.html#GCC8.4
   7400   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
   7401   67. https://gcc.gnu.org/gcc-8/changes.html#GCC8.5
   7402   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
   7403   69. https://gcc.gnu.org/onlinedocs/
   7404   70. mailto:gcc-help (a] gcc.gnu.org
   7405   71. mailto:gcc (a] gcc.gnu.org
   7406   72. https://gcc.gnu.org/lists.html
   7407   73. https://www.fsf.org/
   7408   74. https://gcc.gnu.org/about.html
   7409 ======================================================================
   7410 http://gcc.gnu.org/gcc-7/index.html
   7411                               GCC 7 Release Series
   7412 
   7413    (This release series is no longer supported.)
   7414 
   7415    Nov 14, 2019
   7416 
   7417    The [1]GNU project and the GCC developers are pleased to announce the
   7418    release of GCC 7.5.
   7419 
   7420    This release is a bug-fix release, containing fixes for regressions in
   7421    GCC 7.4 relative to previous releases of GCC.
   7422 
   7423 Release History
   7424 
   7425    GCC 7.5
   7426           Nov 14, 2019 ([2]changes, [3]documentation)
   7427 
   7428    GCC 7.4
   7429           Dec 6, 2018 ([4]changes, [5]documentation)
   7430 
   7431    GCC 7.3
   7432           Jan 25, 2018 ([6]changes, [7]documentation)
   7433 
   7434    GCC 7.2
   7435           Aug 14, 2017 ([8]changes, [9]documentation)
   7436 
   7437    GCC 7.1
   7438           May 2, 2017 ([10]changes, [11]documentation)
   7439 
   7440 References and Acknowledgements
   7441 
   7442    GCC used to stand for the GNU C Compiler, but since the compiler
   7443    supports several other languages aside from C, it now stands for the
   7444    GNU Compiler Collection.
   7445 
   7446    A list of [12]successful builds is updated as new information becomes
   7447    available.
   7448 
   7449    The GCC developers would like to thank the numerous people that have
   7450    contributed new features, improvements, bug fixes, and other changes as
   7451    well as test results to GCC. This [13]amazing group of volunteers is
   7452    what makes GCC successful.
   7453 
   7454    For additional information about GCC please refer to the [14]GCC
   7455    project web site or contact the [15]GCC development mailing list.
   7456 
   7457    To obtain GCC please use [16]our mirror sites or [17]our version
   7458    control system.
   7459 
   7460 
   7461     For questions related to the use of GCC, please consult these web
   7462     pages and the [18]GCC manuals. If that fails, the
   7463     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7464     web pages and the development of GCC are welcome on our developer
   7465     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   7466     archives.
   7467 
   7468    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   7469    distribution of this entire article is permitted in any medium,
   7470    provided this notice is preserved.
   7471 
   7472    These pages are [23]maintained by the GCC team. Last modified
   7473    2024-05-30.
   7474 
   7475 References
   7476 
   7477    1. http://www.gnu.org/
   7478    2. https://gcc.gnu.org/gcc-7/changes.html
   7479    3. https://gcc.gnu.org/onlinedocs/7.5.0/
   7480    4. https://gcc.gnu.org/gcc-7/changes.html
   7481    5. https://gcc.gnu.org/onlinedocs/7.4.0/
   7482    6. https://gcc.gnu.org/gcc-7/changes.html
   7483    7. https://gcc.gnu.org/onlinedocs/7.3.0/
   7484    8. https://gcc.gnu.org/gcc-7/changes.html
   7485    9. https://gcc.gnu.org/onlinedocs/7.2.0/
   7486   10. https://gcc.gnu.org/gcc-7/changes.html
   7487   11. https://gcc.gnu.org/onlinedocs/7.1.0/
   7488   12. https://gcc.gnu.org/gcc-7/buildstat.html
   7489   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   7490   14. https://gcc.gnu.org/index.html
   7491   15. mailto:gcc (a] gcc.gnu.org
   7492   16. https://gcc.gnu.org/mirrors.html
   7493   17. https://gcc.gnu.org/git.html
   7494   18. https://gcc.gnu.org/onlinedocs/
   7495   19. mailto:gcc-help (a] gcc.gnu.org
   7496   20. mailto:gcc (a] gcc.gnu.org
   7497   21. https://gcc.gnu.org/lists.html
   7498   22. https://www.fsf.org/
   7499   23. https://gcc.gnu.org/about.html
   7500 ======================================================================
   7501 http://gcc.gnu.org/gcc-7/changes.html
   7502                               GCC 7 Release Series
   7503                         Changes, New Features, and Fixes
   7504 
   7505    This page is a brief summary of some of the huge number of improvements
   7506    in GCC 7. For more information, see the [1]Porting to GCC 7 page and
   7507    the [2]full GCC documentation.
   7508 
   7509 Caveats
   7510 
   7511      * GCC now uses [3]LRA (a new local register allocator) by default for
   7512        new targets.
   7513      * The non-standard C++0x type traits has_trivial_default_constructor,
   7514        has_trivial_copy_constructor and has_trivial_copy_assign have been
   7515        removed.
   7516      * The libstdc++ [4]Profile Mode has been deprecated and will be
   7517        removed in a future version.
   7518      * The Cilk+ extensions to the C and C++ languages have been
   7519        deprecated.
   7520      * On ARM targets (arm*-*-*), [5]a bug introduced in GCC 5 that
   7521        affects conformance to the procedure call standard (AAPCS) has been
   7522        fixed. The bug affects some C++ code where class objects are passed
   7523        by value to functions and could result in incorrect or inconsistent
   7524        code being generated. This is an ABI change. If the option -Wpsabi
   7525        is enabled (on by default) the compiler will emit a diagnostic note
   7526        for code that might be affected.
   7527 
   7528 [6]General Optimizer Improvements
   7529 
   7530      * GCC 7 can determine the return value or range of return values of
   7531        some calls to the sprintf family of functions and make it available
   7532        to other optimization passes. Some calls to the snprintf function
   7533        with a zero size argument can be folded into constants. This
   7534        optimization is included in -O1 and can be selectively controlled
   7535        by the -fprintf-return-value option.
   7536      * A new store merging pass has been added. It merges constant stores
   7537        to adjacent memory locations into fewer, wider, stores. It is
   7538        enabled by the -fstore-merging option and at the -O2 optimization
   7539        level or higher (and -Os).
   7540      * A new code hoisting optimization has been added to the partial
   7541        redundancy elimination pass. It attempts to move evaluation of
   7542        expressions executed on all paths to the function exit as early as
   7543        possible. This primarily helps improve code size, but can improve
   7544        the speed of the generated code as well. It is enabled by the
   7545        -fcode-hoisting option and at the -O2 optimization level or higher
   7546        (and -Os).
   7547      * A new interprocedural bitwise constant propagation optimization has
   7548        been added, which propagates knowledge about which bits of
   7549        variables are known to be zero (including pointer alignment
   7550        information) across the call graph. It is enabled by the
   7551        -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled
   7552        at the -O2 optimization level and higher (and -Os). This
   7553        optimization supersedes interprocedural alignment propagation of
   7554        GCC 6, and therefore the option -fipa-cp-alignment is now
   7555        deprecated and ignored.
   7556      * A new interprocedural value range propagation optimization has been
   7557        added, which propagates integral range information across the call
   7558        graph when variable values can be proven to be within those ranges.
   7559        It is enabled by the -fipa-vrp option and at the -O2 optimization
   7560        level and higher (and -Os).
   7561      * A new loop splitting optimization pass has been added. Certain
   7562        loops which contain a condition that is always true on one side of
   7563        the iteration space and always false on the other are split into
   7564        two loops, such that each of the two new loops iterates on just one
   7565        side of the iteration space and the condition does not need to be
   7566        checked inside of the loop. It is enabled by the -fsplit-loops
   7567        option and at the -O3 optimization level or higher.
   7568      * The shrink-wrapping optimization can now separate portions of
   7569        prologues and epilogues to improve performance if some of the work
   7570        done traditionally by prologues and epilogues is not needed on
   7571        certain paths. This is controlled by the -fshrink-wrap-separate
   7572        option, enabled by default. It requires target support, which is
   7573        currently only implemented in the PowerPC and AArch64 ports.
   7574      * AddressSanitizer gained a new sanitization option,
   7575        -fsanitize-address-use-after-scope, which enables sanitization of
   7576        variables whose address is taken and used after a scope where the
   7577        variable is defined:
   7578 
   7579 int
   7580 main (int argc, char **argv)
   7581 {
   7582   char *ptr;
   7583     {
   7584       char my_char;
   7585       ptr = &my_char;
   7586     }
   7587 
   7588   *ptr = 123;
   7589   return *ptr;
   7590 }
   7591 
   7592 ==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba99
   7593 0 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
   7594 WRITE of size 1 at 0x7fffb8dba990 thread T0
   7595     #0 0x4006d4 in main /tmp/use-after-scope-1.c:10
   7596     #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
   7597     #2 0x400739 in _start (/tmp/a.out+0x400739)
   7598 
   7599 Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
   7600     #0 0x40067f in main /tmp/use-after-scope-1.c:3
   7601 
   7602   This frame has 1 object(s):
   7603     [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
   7604 
   7605        The option is enabled by default with -fsanitize=address and
   7606        disabled by default with -fsanitize=kernel-address. Compared to the
   7607        LLVM compiler, where the option already exists, the implementation
   7608        in the GCC compiler has some improvements and advantages:
   7609           + Complex uses of gotos and case labels are properly handled and
   7610             should not report any false positive or false negatives.
   7611           + C++ temporaries are sanitized.
   7612           + Sanitization can handle invalid memory stores that are
   7613             optimized out by the LLVM compiler when optimization is
   7614             enabled.
   7615      * The -fsanitize=signed-integer-overflow suboption of the
   7616        UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even
   7617        on arithmetic operations with generic vectors.
   7618      * Version 5 of the DWARF debugging information standard is supported
   7619        through the -gdwarf-5 option. The DWARF version 4 debugging
   7620        information remains the default until consumers of debugging
   7621        information are adjusted.
   7622 
   7623 [7]New Languages and Language specific improvements
   7624 
   7625    OpenACC support in C, C++, and Fortran continues to be maintained and
   7626    improved. See the [8]OpenACC and [9]Offloading wiki pages for further
   7627    information.
   7628 
   7629   [10]Ada
   7630 
   7631      * On mainstream native platforms, Ada programs no longer require the
   7632        stack to be made executable in order to run properly.
   7633 
   7634   [11]BRIG (HSAIL)
   7635 
   7636    Support for processing BRIG 1.0 files was added in this release. BRIG
   7637    is a binary format for HSAIL (Heterogeneous System Architecture
   7638    Intermediate Language). The BRIG front end can be used for implementing
   7639    HSAIL "finalizers" (compilation of HSAIL to a native ISA) for
   7640    GCC-supported targets. An implementation of an HSAIL runtime library,
   7641    libhsail-rt is also included.
   7642 
   7643   [12]C family
   7644 
   7645      * New command-line options have been added for the C and C++
   7646        compilers:
   7647           + -Wimplicit-fallthrough warns when a switch case falls through.
   7648             This warning has five different levels. The compiler is able
   7649             to parse a wide range of fallthrough comments, depending on
   7650             the level. It also handles control-flow statements, such as
   7651             ifs. It's possible to suppress the warning by either adding a
   7652             fallthrough comment, or by using a null statement:
   7653             __attribute__ ((fallthrough)); (C, C++), or [[fallthrough]];
   7654             (C++17), or [[gnu::fallthrough]]; (C++11/C++14). This warning
   7655             is enabled by -Wextra.
   7656           + -Wpointer-compare warns when a pointer is compared with a zero
   7657             character constant. Such code is now invalid in C++11 and GCC
   7658             rejects it. This warning is enabled by default.
   7659           + -Wduplicated-branches warns when an if-else has identical
   7660             branches.
   7661           + -Wrestrict warns when an argument passed to a
   7662             restrict-qualified parameter aliases with another argument.
   7663           + -Wmemset-elt-size warns for memset calls, when the first
   7664             argument references an array, and the third argument is a
   7665             number equal to the number of elements of the array, but not
   7666             the size of the array. This warning is enabled by -Wall.
   7667           + -Wint-in-bool-context warns about suspicious uses of integer
   7668             values where boolean values are expected. This warning is
   7669             enabled by -Wall.
   7670           + -Wswitch-unreachable warns when a switch statement has
   7671             statements between the controlling expression and the first
   7672             case label which will never be executed. This warning is
   7673             enabled by default.
   7674           + -Wexpansion-to-defined warns when defined is used outside #if.
   7675             This warning is enabled by -Wextra or -Wpedantic.
   7676           + -Wregister warns about uses of the register storage specifier.
   7677             In C++17 this keyword has been removed and for C++17 this is a
   7678             pedantic warning enabled by default. The warning is not
   7679             emitted for the GNU Explicit Register Variables extension.
   7680           + -Wvla-larger-than=N warns about unbounded uses of
   7681             variable-length arrays, and about bounded uses of
   7682             variable-length arrays whose bound can be larger than N bytes.
   7683           + -Wduplicate-decl-specifier warns when a declaration has
   7684             duplicate const, volatile, restrict or _Atomic specifier. This
   7685             warning is enabled by -Wall.
   7686      * GCC 6's C and C++ front ends were able to offer suggestions for
   7687        misspelled field names:
   7688 
   7689 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   7690 you mean 'color'?
   7691    return ptr->colour;
   7692                ^~~~~~
   7693 
   7694        GCC 7 greatly expands the scope of these suggestions. Firstly, it
   7695        adds fix-it hints to such suggestions:
   7696 
   7697 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   7698 you mean 'color'?
   7699    return ptr->colour;
   7700                ^~~~~~
   7701                color
   7702 
   7703        The suggestions now cover many other things, such as misspelled
   7704        function names:
   7705 
   7706 spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_wi
   7707 dget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declarat
   7708 ion]
   7709    gtk_widget_showall (w);
   7710    ^~~~~~~~~~~~~~~~~~
   7711    gtk_widget_show_all
   7712 
   7713        misspelled macro names and enum values:
   7714 
   7715 spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a fun
   7716 ction); did you mean 'MAX_ITEMS'?
   7717  int array[MAX_ITEM];
   7718            ^~~~~~~~
   7719            MAX_ITEMS
   7720 
   7721        misspelled type names:
   7722 
   7723 spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'si
   7724 gned'?
   7725  void test (singed char e);
   7726             ^~~~~~
   7727             signed
   7728 
   7729        and, in the C front end, named initializers:
   7730 
   7731 test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color
   7732 '?
   7733  struct s test = { .colour = 3 };
   7734                     ^~~~~~
   7735                     color
   7736 
   7737      * The preprocessor can now offer suggestions for misspelled
   7738        directives, e.g.:
   7739 
   7740 test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
   7741  #endfi
   7742   ^~~~~
   7743   endif
   7744 
   7745      * Warnings about format strings now underline the pertinent part of
   7746        the string, and can offer suggested fixes. In some cases, the
   7747        pertinent argument is underlined.
   7748 
   7749 test.c:51:29: warning: format '%s' expects argument of type 'char *', but argume
   7750 nt 3 has type 'int' [-Wformat=]
   7751    printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
   7752                           ~^                ~~~~~
   7753                           %d
   7754 
   7755      * The new -Wdangling-else command-line option has been split out of
   7756        -Wparentheses and warns about dangling else.
   7757      * The -Wshadow warning has been split into three variants.
   7758        -Wshadow=global warns for any shadowing. This is the default when
   7759        using -Wshadow without any argument. -Wshadow=local only warns for
   7760        a local variable shadowing another local variable or parameter.
   7761        -Wshadow=compatible-local only warns for a local variable shadowing
   7762        another local variable or parameter whose type is compatible (in
   7763        C++ compatible means that the type of the shadowing variable can be
   7764        converted to that of the shadowed variable).
   7765        The following example shows the different kinds of shadow warnings:
   7766 
   7767 enum operation { add, count };
   7768 struct container { int nr; };
   7769 
   7770 int
   7771 container_count (struct container c, int count)
   7772 {
   7773   int r = 0;
   7774   for (int count = 0; count > 0; count--)
   7775     {
   7776       struct container count = c;
   7777       r += count.nr;
   7778     }
   7779   return r;
   7780 }
   7781 
   7782        -Wshadow=compatible-local will warn for the parameter being
   7783        shadowed with the same type:
   7784 
   7785 warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=
   7786 compatible-local]
   7787    for (int count = 0; count > 0; count--)
   7788             ^~~~~
   7789 warn-test.c:5:42: note: shadowed declaration is here
   7790  container_count (struct container c, int count)
   7791                                           ^~~~~
   7792 
   7793        -Wshadow=local will warn for the above and for the shadowed
   7794        declaration with incompatible type:
   7795 
   7796 warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Ws
   7797 hadow=local]
   7798        struct container count = c;
   7799                         ^~~~~
   7800 warn-test.c:8:12: note: shadowed declaration is here
   7801    for (int count = 0; count > 0; count--)
   7802             ^~~~~
   7803 
   7804        -Wshadow=global will warn for all of the above and the shadowing of
   7805        the global declaration:
   7806 
   7807 warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [
   7808 -Wshadow]
   7809  container_count (struct container c, int count)
   7810                                           ^~~~~
   7811 warn-test.c:1:23: note: shadowed declaration is here
   7812  enum operation { add, count };
   7813                        ^~~~~
   7814 
   7815      * GCC 7 contains a number of enhancements that help detect buffer
   7816        overflow and other forms of invalid memory accesses.
   7817           + The -Walloc-size-larger-than=size option detects calls to
   7818             standard and user-defined memory allocation functions
   7819             decorated with attribute alloc_size whose argument exceeds the
   7820             specified size (PTRDIFF_MAX by default). The option also
   7821             detects arithmetic overflow in the computation of the size in
   7822             two-argument allocation functions like calloc where the total
   7823             size is the product of the two arguments. Since calls with an
   7824             excessive size cannot succeed they are typically the result of
   7825             programming errors. Such bugs have been known to be the source
   7826             of security vulnerabilities and a target of exploits.
   7827             -Walloc-size-larger-than=PTRDIFF_MAX is included in -Wall.
   7828             For example, the following call to malloc incorrectly tries to
   7829             avoid passing a negative argument to the function and instead
   7830             ends up unconditionally invoking it with an argument less than
   7831             or equal to zero. Since after conversion to the type of the
   7832             argument of the function (size_t) a negative argument results
   7833             in a value in excess of the maximum PTRDIFF_MAX the call is
   7834             diagnosed.
   7835 
   7836 void* f (int n)
   7837 {
   7838   return malloc (n > 0 ? 0 : n);
   7839 }
   7840 
   7841 warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2
   7842 147483647 [-Walloc-size-larger-than=]
   7843 
   7844           + The -Walloc-zero option detects calls to standard and
   7845             user-defined memory allocation functions decorated with
   7846             attribute alloc_size with a zero argument. -Walloc-zero is not
   7847             included in either -Wall or -Wextra and must be explicitly
   7848             enabled.
   7849           + The -Walloca option detects all calls to the alloca function
   7850             in the program. -Walloca is not included in either -Wall or
   7851             -Wextra and must be explicitly enabled.
   7852           + The -Walloca-larger-than=size option detects calls to the
   7853             alloca function whose argument either may exceed the specified
   7854             size, or that is not known to be sufficiently constrained to
   7855             avoid exceeding it. -Walloca-larger-than is not included in
   7856             either -Wall or -Wextra and must be explicitly enabled.
   7857             For example, compiling the following snippet with
   7858             -Walloca-larger-than=1024 results in a warning because even
   7859             though the code appears to call alloca only with sizes of 1kb
   7860             and less, since n is signed, a negative value would result in
   7861             a call to the function well in excess of the limit.
   7862 
   7863 void f (int n)
   7864 {
   7865   char *d;
   7866   if (n < 1025)
   7867     d = alloca (n);
   7868   else
   7869     d = malloc (n);
   7870   
   7871 }
   7872 
   7873 warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
   7874 ong unsigned int' [-Walloca-larger-than=]
   7875 
   7876             In contrast, a call to alloca that isn't bounded at all such
   7877             as in the following function will elicit the warning below
   7878             regardless of the size argument to the option.
   7879 
   7880 void f (size_t n)
   7881 {
   7882   char *d = alloca (n);
   7883   
   7884 }
   7885 
   7886 warning: unbounded use of 'alloca' [-Walloca-larger-than=]
   7887 
   7888           + The -Wformat-overflow=level option detects certain and likely
   7889             buffer overflow in calls to the sprintf family of formatted
   7890             output functions. Although the option is enabled even without
   7891             optimization it works best with -O2 and higher.
   7892             For example, in the following snippet the call to sprintf is
   7893             diagnosed because even though its output has been constrained
   7894             using the modulo operation it could result in as many as three
   7895             bytes if mday were negative. The solution is to either
   7896             allocate a larger buffer or make sure the argument is not
   7897             negative, for example by changing mday's type to unsigned or
   7898             by making the type of the second operand of the modulo
   7899             expression unsigned: 100U.
   7900 
   7901 void* f (int mday)
   7902 {
   7903   char *buf = malloc (3);
   7904   sprintf (buf, "%02i", mday % 100);
   7905   return buf;
   7906 }
   7907 
   7908 warning: 'sprintf may write a terminating nul past the end of the destination [-
   7909 Wformat-overflow=]
   7910 note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
   7911 
   7912           + The -Wformat-truncation=level option detects certain and
   7913             likely output truncation in calls to the snprintf family of
   7914             formatted output functions. -Wformat-truncation=1 is included
   7915             in -Wall and enabled without optimization but works best with
   7916             -O2 and higher.
   7917             For example, the following function attempts to format an
   7918             integer between 0 and 255 in hexadecimal, including the 0x
   7919             prefix, into a buffer of four characters. But since the
   7920             function must always terminate output by the null character
   7921             ('\0') such a buffer is only big enough to fit just one digit
   7922             plus the prefix. Therefore the snprintf call is diagnosed. To
   7923             avoid the warning either use a bigger buffer or handle the
   7924             function's return value which indicates whether or not its
   7925             output has been truncated.
   7926 
   7927 void f (unsigned x)
   7928 {
   7929   char d[4];
   7930   snprintf (d, sizeof d, "%#02x", x & 0xff);
   7931   
   7932 }
   7933 
   7934 warning: 'snprintf' output may be truncated before the last format character [-W
   7935 format-truncation=]
   7936 note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
   7937 
   7938           + The -Wnonnull option has been enhanced to detect a broader set
   7939             of cases of passing null pointers to functions that expect a
   7940             non-null argument (those decorated with attribute nonnull). By
   7941             taking advantage of optimizations the option can detect many
   7942             more cases of the problem than in prior GCC versions.
   7943           + The -Wstringop-overflow=type option detects buffer overflow in
   7944             calls to string handling functions like memcpy and strcpy. The
   7945             option relies on [13]Object Size Checking and has an effect
   7946             similar to defining the _FORTIFY_SOURCE macro.
   7947             -Wstringop-overflow=2 is enabled by default.
   7948             For example, in the following snippet, because the call to
   7949             strncat specifies a maximum that allows the function to write
   7950             past the end of the destination, it is diagnosed. To correct
   7951             the problem and avoid the overflow the function should be
   7952             called with a size of at most sizeof d - strlen(d) - 1.
   7953 
   7954 void f (const char *fname)
   7955 {
   7956   char d[8];
   7957   strncpy (d, "/tmp/", sizeof d);
   7958   strncat (d, fname, sizeof d);
   7959   
   7960 }
   7961 
   7962 warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
   7963 ow=]
   7964 
   7965      * The <limits.h> header provided by GCC defines macros such as
   7966        INT_WIDTH for the width in bits of integer types, if
   7967        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   7968        included. The <stdint.h> header defines such macros as SIZE_WIDTH
   7969        and INTMAX_WIDTH for the width of some standard typedef names for
   7970        integer types, again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined
   7971        before the header is included; note that GCC's implementation of
   7972        this header is only used for freestanding compilations, not hosted
   7973        compilations, on most systems. These macros come from ISO/IEC TS
   7974        18661-1:2014.
   7975      * The <float.h> header provided by GCC defines the macro
   7976        CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, if
   7977        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   7978        included. This represents the number of decimal digits for which
   7979        conversions between decimal character strings and binary formats,
   7980        in both directions, are correctly rounded, and currently has the
   7981        value of UINTMAX_MAX on all systems, reflecting that GCC's
   7982        compile-time conversions are correctly rounded for any number of
   7983        digits.
   7984      * New __builtin_add_overflow_p, __builtin_sub_overflow_p,
   7985        __builtin_mul_overflow_p built-in functions have been added. These
   7986        work similarly to their siblings without the _p suffix, but do not
   7987        actually store the result of the arithmetics anywhere, just return
   7988        whether the operation would overflow. Calls to these built-ins with
   7989        integer constant arguments evaluate to integer constants
   7990        expressions.
   7991        For example, in the following, c is assigned the result of a * b
   7992        only if the multiplication does not overflow, otherwise it is
   7993        assigned the value zero. The multiplication is performed at
   7994        compile-time and without triggering a -Woverflow warning.
   7995 
   7996 enum {
   7997   a = 12345678,
   7998   b = 87654321,
   7999   c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
   8000 };
   8001 
   8002   [14]C
   8003 
   8004      * The C front end now supports type names _FloatN for floating-point
   8005        types with IEEE interchange formats and _FloatNx for floating-point
   8006        types with IEEE extended formats. These type names come from
   8007        ISO/IEC TS 18661-3:2015.
   8008        The set of types supported depends on the target for which GCC is
   8009        configured. Most targets support _Float32, _Float32x and _Float64.
   8010        _Float128 is supported on targets where IEEE binary128 encoding was
   8011        already supported as long double or __float128. _Float64x is
   8012        supported on targets where a type with either binary128 or Intel
   8013        extended precision format is available.
   8014        Constants with these types are supported using suffixes fN, FN, fNx
   8015        and FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are
   8016        defined in <float.h> if __STDC_WANT_IEC_60559_TYPES_EXT__ is
   8017        defined before it is included.
   8018        These new types are always distinct from each other and from float,
   8019        double and long double, even if they have the same encoding.
   8020        Complex types such as _Complex _Float128 are also supported.
   8021        Type-generic built-in functions such as __builtin_isinf support the
   8022        new types, and the following type-specific built-in functions have
   8023        versions (suffixed fN or fNx) for the new types:
   8024        __builtin_copysign, __builtin_fabs, __builtin_huge_val,
   8025        __builtin_inf, __builtin_nan, __builtin_nans.
   8026      * Compilation with -fopenmp is now compatible with the C11 _Atomic
   8027        keyword.
   8028 
   8029   [15]C++
   8030 
   8031      * The C++ front end has experimental support for all of the current
   8032        C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
   8033        constexpr, class template argument deduction, auto template
   8034        parameters, and structured bindings. For a full list of new
   8035        features, see [16]the C++ status page.
   8036      * C++17 support for new of over-aligned types can be enabled in other
   8037        modes with the -faligned-new flag.
   8038      * The C++17 evaluation order requirements can be selected in other
   8039        modes with the -fstrong-eval-order flag, or disabled in C++17 mode
   8040        with -fno-strong-eval-order.
   8041      * The default semantics of inherited constructors has changed in all
   8042        modes, following [17]P0136. Essentially, overload resolution
   8043        happens as if calling the inherited constructor directly, and the
   8044        compiler fills in construction of the other bases and members as
   8045        needed. Most uses should not need any changes. The old behavior can
   8046        be restored with -fno-new-inheriting-ctors, or -fabi-version less
   8047        than 11.
   8048      * The resolution of DR 150 on matching of template template
   8049        parameters, allowing default template arguments to make a template
   8050        match a parameter, is currently enabled by default in C++17 mode
   8051        only. The default can be overridden with -f{no-,}new-ttp-matching.
   8052      * The C++ front end will now provide fix-it hints for some missing
   8053        semicolons, allowing for automatic fixes by IDEs:
   8054 
   8055 test.cc:4:11: error: expected ';' after class definition
   8056  class a {}
   8057            ^
   8058            ;
   8059 
   8060      * -Waligned-new has been added to the C++ front end. It warns about
   8061        new of type with extended alignment without -faligned-new.
   8062 
   8063     [18]Runtime Library (libstdc++)
   8064 
   8065      * The type of exception thrown by iostreams, std::ios_base::failure,
   8066        now uses the [19]cxx11 ABI.
   8067      * Experimental support for C++17, including the following new
   8068        features:
   8069           + std::string_view;
   8070           + std::any, std::optional, and std::variant;
   8071           + std::invoke, std::is_invocable, std::is_nothrow_invocable, and
   8072             invoke_result;
   8073           + std::is_swappable, and std::is_nothrow_swappable;
   8074           + std::apply, and std::make_from_tuple;
   8075           + std::void_t, std::bool_constant, std::conjunction,
   8076             std::disjunction, and std::negation;
   8077           + Variable templates for type traits;
   8078           + Mathematical Special Functions;
   8079           + std::chrono::floor, std::chrono::ceil, std::chrono::round, and
   8080             std::chrono::abs;
   8081           + std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot;
   8082           + std::scoped_lock, std::shared_mutex,
   8083             std::atomic<T>::is_always_lock_free;
   8084           + std::sample, std::default_searcher, std::boyer_moore_searcher
   8085             and std::boyer_moore_horspool_searcher;
   8086           + Extraction and re-insertion of map and set nodes, try_emplace
   8087             members for maps, and functions for accessing containers
   8088             std::size, std::empty, and std::data;
   8089           + std::shared_ptr support for arrays,
   8090             std::shared_ptr<T>::weak_type,
   8091             std::enable_shared_from_this<T>::weak_from_this(), and
   8092             std::owner_less<void>;
   8093           + std::byte;
   8094           + std::as_const, std::not_fn,
   8095             std::has_unique_object_representations, constexpr
   8096             std::addressof.
   8097        Thanks to Daniel Krgler, Tim Shen, Edward Smith-Rowland, and Ville
   8098        Voutilainen for work on the C++17 support.
   8099      * A new power-of-two rehashing policy for use with the _Hashtable
   8100        internals, thanks to Franois Dumont.
   8101 
   8102   [20]Fortran
   8103 
   8104      * Support for a number of extensions for compatibility with legacy
   8105        code with new flags:
   8106           + -fdec-structure Support for DEC STRUCTURE and UNION
   8107           + -fdec-intrinsic-ints Support for new integer intrinsics with
   8108             B/I/J/K prefixes such as BABS, JIAND...
   8109           + -fdec-math Support for additional math intrinsics, including
   8110             COTAN and degree-valued trigonometric functions such as TAND,
   8111             ASIND...
   8112           + -fdec Enable the -fdec-* family of extensions.
   8113      * New flag -finit-derived to allow default initialization of
   8114        derived-type variables.
   8115      * Improved DO loops with step equal to 1 or -1, generates faster code
   8116        without a loop preheader. A new warning, -Wundefined-do-loop, warns
   8117        when a loop iterates either to HUGE(i) (with step equal to 1), or
   8118        to -HUGE(i) (with step equal to -1). Invalid behavior can be caught
   8119        at run time with -fcheck=do enabled:
   8120 
   8121 program test
   8122   implicit none
   8123   integer(1) :: i
   8124   do i = -HUGE(i)+10, -HUGE(i)-1, -1
   8125     print *, i
   8126   end do
   8127 end program test
   8128 
   8129 At line 8 of file do_check_12.f90
   8130 Fortran runtime error: Loop iterates infinitely
   8131 
   8132      * Version 4.5 of the [21]OpenMP specification is now partially
   8133        supported in the Fortran compiler; the largest missing item is
   8134        structure element mapping.
   8135      * User-defined derived-type input/output (UDTIO) is added.
   8136      * Derived type coarrays with allocatable and pointer components are
   8137        partially supported.
   8138      * Non-constant stop codes and error stop codes (Fortran 2015
   8139        feature).
   8140      * Derived types with allocatable components of recursive type.
   8141      * Intrinsic assignment to polymorphic variables.
   8142      * Improved submodule support.
   8143      * Improved diagnostics (polymorphic results in pure functions).
   8144      * Coarray: Support for failed images (Fortan 2015 feature).
   8145 
   8146   [22]Go
   8147 
   8148      * GCC 7 provides a complete implementation of the Go 1.8.1 user
   8149        packages.
   8150      * Compared to the Go 1.8.1 toolchain, the garbage collector is more
   8151        conservative and less concurrent.
   8152      * Escape analysis is available for experimental use via the
   8153        -fgo-optimize-allocs option. The -fgo-debug-escape prints
   8154        information useful for debugging escape analysis choices.
   8155 
   8156   [23]Java (GCJ)
   8157 
   8158    The GCC Java front end and associated libjava runtime library have been
   8159    removed from GCC.
   8160 
   8161 [24]libgccjit
   8162 
   8163    The libgccjit API gained support for marking calls as requiring
   8164    tail-call optimization via a new entry point:
   8165    [25]gcc_jit_rvalue_set_bool_require_tail_call.
   8166 
   8167    libgccjit performs numerous checks at the API boundary, but if these
   8168    succeed, it previously ignored errors and other diagnostics emitted
   8169    within the core of GCC, and treated the compile of a gcc_jit_context as
   8170    having succeeded. As of GCC 7 it now ensures that if any diagnostics
   8171    are emitted, they are visible from the libgccjit API, and that the the
   8172    context is flagged as having failed.
   8173 
   8174 [26]New Targets and Target Specific Improvements
   8175 
   8176   [27]AArch64
   8177 
   8178      * GCC has been updated to the latest revision of the procedure call
   8179        standard (AAPCS64) to provide support for parameter passing when
   8180        data types have been over-aligned.
   8181      * The ARMv8.3-A architecture is now supported. It can be used by
   8182        specifying the -march=armv8.3-a option.
   8183      * The option -msign-return-address= is supported to enable return
   8184        address protection using ARMv8.3-A Pointer Authentication
   8185        Extensions. For more information on the arguments accepted by this
   8186        option, please refer to [28]AArch64-Options.
   8187      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   8188        Extensions are now supported. They can be used by specifying the
   8189        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   8190        Floating-Point Extensions introduce new half-precision data
   8191        processing floating-point instructions.
   8192      * Support has been added for the following processors (GCC
   8193        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), Broadcom
   8194        Vulcan (vulcan), Cavium ThunderX CN81xx (thunderxt81), Cavium
   8195        ThunderX CN83xx (thunderxt83), Cavium ThunderX CN88xx
   8196        (thunderxt88), Cavium ThunderX CN88xx pass 1.x (thunderxt88p1),
   8197        Cavium ThunderX 2 CN99xx (thunderx2t99), Qualcomm Falkor (falkor).
   8198        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   8199        options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
   8200        arguments to the equivalent target attributes and pragmas.
   8201 
   8202   [29]ARC
   8203 
   8204      * Added support for ARC HS and ARC EM processors.
   8205      * Added support for ARC EM variation found in Intel QuarkSE SoCs.
   8206      * Added support for NPS400 ARC700 based CPUs.
   8207      * Thread Local Storage is now supported by ARC CPUs.
   8208      * Fixed errors for ARC600 when using 32x16 multiplier option.
   8209      * Fixed PIE for ARC CPUs.
   8210      * New CPU templates are supported via multilib.
   8211 
   8212   [30]ARM
   8213 
   8214      * Support for the ARMv5 and ARMv5E architectures has been deprecated
   8215        (which have no known implementations) and will be removed in a
   8216        future GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ
   8217        architectures remain supported. The values armv5 and armv5e of
   8218        -march are thus deprecated.
   8219      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   8220        Extensions are now supported. They can be used by specifying the
   8221        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   8222        Floating-Point Extensions introduce new half-precision data
   8223        processing floating-point instructions.
   8224      * The ARMv8-M architecture is now supported in its two architecture
   8225        profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and
   8226        Floating-Point Extensions. They can be used by specifying the
   8227        -march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options.
   8228      * Support has been added for the following processors (GCC
   8229        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), ARM
   8230        Cortex-M23 (cortex-m23) and ARM Cortex-M33 (cortex-m33). The GCC
   8231        identifiers can be used as arguments to the -mcpu or -mtune
   8232        options, for example: -mcpu=cortex-a73 or -mtune=cortex-m33.
   8233      * A new command-line option -mpure-code has been added. It does not
   8234        allow constant data to be placed in code sections. This option is
   8235        only available when generating non-PIC code for ARMv7-M targets.
   8236      * Support for the ACLE Coprocessor Intrinsics has been added. This
   8237        enables the generation of coprocessor instructions through the use
   8238        of intrinsics such as cdp, ldc, and others.
   8239      * The configure option --with-multilib-list now accepts the value
   8240        rmprofile to build multilib libraries for a range of embedded
   8241        targets. See our [31]installation instructions for details.
   8242 
   8243   [32]AVR
   8244 
   8245      * On the reduced Tiny cores, the progmem [33]variable attribute is
   8246        now properly supported. Respective read-only variables are located
   8247        in flash memory in section .progmem.data. No special code is needed
   8248        to access such variables; the compiler automatically adds an offset
   8249        of 0x4000 to all addresses, which is needed to access variables in
   8250        flash memory. As opposed to ordinary cores where it is sufficient
   8251        to specify the progmem attribute with definitions, on the reduced
   8252        Tiny cores the attribute also has to be specified with (external)
   8253        declarations:
   8254 
   8255 extern const int array[] __attribute__((__progmem__));
   8256 
   8257 int get_value2 (void)
   8258 {
   8259   /* Access via addresses array + 0x4004 and array + 0x4005. */
   8260   return array[2];
   8261 }
   8262 
   8263 const int* get_address (unsigned idx)
   8264 {
   8265   /* Returns array + 0x4000 + 2 * idx. */
   8266   return &array[idx];
   8267 }
   8268 
   8269      * A new command-line option -Wmisspelled-isr has been added. It turns
   8270        off  or turns into errors  warnings that are reported for
   8271        interrupt service routines (ISRs) which don't follow AVR-LibC's
   8272        naming convention of prefixing ISR names with __vector.
   8273      * __builtin_avr_nops(n) is a new [34]built-in function that inserts n
   8274        NOP instructions into the instruction stream. n must be a value
   8275        known at compile time.
   8276 
   8277   [35]IA-32/x86-64
   8278 
   8279      * Support for the AVX-512 Fused Multiply Accumulation Packed Single
   8280        precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
   8281        variable precision (4VNNIW), AVX-512 Vector Population Count
   8282        (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
   8283        been added.
   8284 
   8285   [36]NVPTX
   8286 
   8287      * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
   8288        See the [37]Offloading Wiki on how to configure it.
   8289 
   8290   [38]PowerPC / PowerPC64 / RS6000
   8291 
   8292      * The PowerPC port now uses LRA by default.
   8293      * GCC now diagnoses inline assembly that clobbers register r2. This
   8294        has always been invalid code, and is no longer quietly tolerated.
   8295      * The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been
   8296        enhanced to generate more of the new instructions by default, and
   8297        to provide more built-in functions to generate code for other new
   8298        instructions.
   8299      * The configuration option --enable-gnu-indirect-function is now
   8300        enabled by default on PowerPC GNU/Linux builds.
   8301      * The PowerPC port will now allow 64-bit and 32-bit integer types to
   8302        be allocated to the VSX vector registers (ISA 2.06 and above). In
   8303        addition, on ISA 3.0, 16-bit and 8-bit integer types can be
   8304        allocated in the vector registers. Previously, only 64-bit integer
   8305        types were allowed in the traditional floating point registers.
   8306      * New options -mstack-protector-guard=global,
   8307        -mstack-protector-guard=tls, -mstack-protector-guard-reg=, and
   8308        -mstack-protector-guard-offset= change how the stack protector gets
   8309        the value to use as canary.
   8310 
   8311   [39]S/390, System z, IBM z Systems, IBM Z
   8312 
   8313      * Support for the IBM z14 processor has been added. When using the
   8314        -march=z14 option, the compiler will generate code making use of
   8315        the new instructions introduced with the vector enhancement
   8316        facility and the miscellaneous instruction extension facility 2.
   8317        The -mtune=z14 option enables z14 specific instruction scheduling
   8318        without making use of new instructions.
   8319      * Builtins for the new vector instructions have been added and can be
   8320        enabled using the -mzvector option.
   8321 
   8322   [40]RISC-V
   8323 
   8324      * Support for the RISC-V instruction set has been added.
   8325 
   8326   [41]RX
   8327 
   8328    Basic support for atomic built-in function has been added. It is
   8329    currently implemented by flipping interrupts off and on as needed.
   8330 
   8331   [42]SH
   8332 
   8333      * Support for SH5/SH64 has been removed.
   8334      * Improved utilization of delay slots on SH2A.
   8335      * Improved utilization of zero-displacement conditional branches.
   8336      * The following deprecated options have been removed
   8337           + -mcbranchdi
   8338           + -mcmpeqdi
   8339           + -minvalid-symbols
   8340           + -msoft-atomic
   8341           + -mspace
   8342           + -madjust-unroll
   8343      * Support for the following SH2A instructions has been added
   8344           + mov.b @-Rm,R0
   8345           + mov.w @-Rm,R0
   8346           + mov.l @-Rm,R0
   8347           + mov.b R0,@Rn+
   8348           + mov.w R0,@Rn+
   8349           + mov.l R0,@Rn+
   8350 
   8351   [43]SPARC
   8352 
   8353      * The SPARC port now uses LRA by default.
   8354      * Support for the new Subtract-Extended-with-Carry instruction
   8355        available in SPARC M7 (Niagara 7) has been added.
   8356 
   8357 [44]Operating Systems
   8358 
   8359   [45]AIX
   8360 
   8361      * Visibility support has been enabled for AIX 7.1 and above.
   8362 
   8363   [46]Fuchsia
   8364 
   8365      * Support has been added for the [47]Fuchsia OS.
   8366 
   8367   [48]RTEMS
   8368 
   8369      * The ABI changes on ARM so that no short enums are used by default.
   8370 
   8371 Other significant improvements
   8372 
   8373      * -fverbose-asm previously emitted information on the meanings of
   8374        assembly expressions. This has been extended so that it now also
   8375        prints comments showing the source lines that correspond to the
   8376        assembly, making it easier to read the generated assembly
   8377        (especially with larger functions). For example, given this C
   8378        source file:
   8379 
   8380 int test (int n)
   8381 {
   8382   int i;
   8383   int total = 0;
   8384 
   8385   for (i = 0; i < n; i++)
   8386     total += i * i;
   8387   return total;
   8388 }
   8389 
   8390        -fverbose-asm now gives output similar to this for the function
   8391        body (when compiling for x86_64, with -Os):
   8392 
   8393        .text
   8394        .globl  test
   8395        .type   test, @@function
   8396 test:
   8397 .LFB0:
   8398        .cfi_startproc
   8399 # example.c:4:   int total = 0;
   8400        xorl    %eax, %eax      # <retval>
   8401 # example.c:6:   for (i = 0; i < n; i++)
   8402        xorl    %edx, %edx      # i
   8403 .L2:
   8404 # example.c:6:   for (i = 0; i < n; i++)
   8405        cmpl    %edi, %edx      # n, i
   8406        jge     .L5     #,
   8407 # example.c:7:     total += i * i;
   8408        movl    %edx, %ecx      # i, tmp92
   8409        imull   %edx, %ecx      # i, tmp92
   8410 # example.c:6:   for (i = 0; i < n; i++)
   8411        incl    %edx    # i
   8412 # example.c:7:     total += i * i;
   8413        addl    %ecx, %eax      # tmp92, <retval>
   8414        jmp     .L2     #
   8415 .L5:
   8416 # example.c:10: }
   8417        ret
   8418        .cfi_endproc
   8419 
   8420      * Two new options have been added for printing fix-it hints:
   8421           + -fdiagnostics-parseable-fixits allows for fix-it hints to be
   8422             emitted in a machine-readable form, suitable for consumption
   8423             by IDEs. For example, given:
   8424 
   8425 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   8426 you mean 'color'?
   8427    return ptr->colour;
   8428                ^~~~~~
   8429                color
   8430 
   8431             it will emit:
   8432 
   8433 fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
   8434 
   8435           + -fdiagnostics-generate-patch will print a patch in "unified"
   8436             format after any diagnostics are printed, showing the result
   8437             of applying all fix-it hints. For the above example it would
   8438             emit:
   8439 
   8440 --- spellcheck-fields.cc
   8441 +++ spellcheck-fields.cc
   8442 @@ -49,5 +49,5 @@
   8443 
   8444  color get_color(struct s *ptr)
   8445  {
   8446 -  return ptr->colour;
   8447 +  return ptr->color;
   8448  }
   8449 
   8450      * The gcc and g++ driver programs will now provide suggestions for
   8451        misspelled arguments to command-line options.
   8452 
   8453 $ gcc -c test.c -ftls-model=global-dinamic
   8454 gcc: error: unknown TLS model 'global-dinamic'
   8455 gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec lo
   8456 cal-dynamic local-exec; did you mean 'global-dynamic'?
   8457 
   8458      * The compiler will now provide suggestions for misspelled
   8459        parameters.
   8460 
   8461 $ gcc -c test.c --param max-early-inliner-iteration=3
   8462 cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'ma
   8463 x-early-inliner-iterations'?
   8464 
   8465      * Profile-guided optimization (PGO) instrumentation, as well as test
   8466        coverage (GCOV), can newly instrument constructors (functions marks
   8467        with __attribute__((constructor))), destructors and C++
   8468        constructors (and destructors) of classes that are used as the type
   8469        of a global variable.
   8470      * A new option -fprofile-update=atomic prevents creation of corrupted
   8471        profiles created during an instrumentation run (-fprofile=generate)
   8472        of an application. The downside of the option is a speed penalty.
   8473        Providing -pthread on the command line selects atomic profile
   8474        updating (when supported by the target).
   8475      * GCC's already extensive testsuite has gained some new capabilities,
   8476        to further improve the reliability of the compiler:
   8477           + GCC now has an internal unit-testing API and a suite of tests
   8478             for programmatic self-testing of subsystems.
   8479           + GCC's C front end has been extended so that it can parse dumps
   8480             of GCC's internal representations, allowing for DejaGnu tests
   8481             that more directly exercise specific optimization passes. This
   8482             covers both the [49]GIMPLE representation (for testing
   8483             higher-level optimizations) and the [50]RTL representation,
   8484             allowing for more direct testing of lower-level details, such
   8485             as register allocation and instruction selection.
   8486 
   8487 [51]GCC 7.1
   8488 
   8489    This is the [52]list of problem reports (PRs) from GCC's bug tracking
   8490    system that are known to be fixed in the 7.1 release. This list might
   8491    not be complete (that is, it is possible that some PRs that have been
   8492    fixed are not listed here).
   8493 
   8494 [53]GCC 7.2
   8495 
   8496    This is the [54]list of problem reports (PRs) from GCC's bug tracking
   8497    system that are known to be fixed in the 7.2 release. This list might
   8498    not be complete (that is, it is possible that some PRs that have been
   8499    fixed are not listed here).
   8500 
   8501   Target Specific Changes
   8502 
   8503     SPARC
   8504 
   8505      * Support for the SPARC M8 processor has been added.
   8506      * The switches -mfix-ut700 and -mfix-gr712rc have been added to work
   8507        around an erratum in LEON3FT processors.
   8508      * Use of the Floating-point Multiply Single to Double (FsMULd)
   8509        instruction can now be controlled by the -mfsmuld and -fno-fsmuld
   8510        options.
   8511 
   8512   Operating Systems
   8513 
   8514     RTEMS
   8515 
   8516      * The Ada run-time support uses now thread-local storage (TLS).
   8517      * Support for RISC-V has been added.
   8518      * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
   8519        double has been added.
   8520 
   8521 [55]GCC 7.3
   8522 
   8523    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   8524    system that are known to be fixed in the 7.3 release. This list might
   8525    not be complete (that is, it is possible that some PRs that have been
   8526    fixed are not listed here).
   8527 
   8528   Target Specific Changes
   8529 
   8530     SPARC
   8531 
   8532      * Workarounds for the four [57]LEON3FT errata GRLIB-TN-0010..0013
   8533        have been added. Relevant errata are activated by the target
   8534        specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
   8535 
   8536   Operating Systems
   8537 
   8538     RTEMS
   8539 
   8540      * Support has been added for Epiphany target.
   8541 
   8542 [58]GCC 7.4
   8543 
   8544    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   8545    system that are known to be fixed in the 7.4 release. This list might
   8546    not be complete (that is, it is possible that some PRs that have been
   8547    fixed are not listed here).
   8548 
   8549 [60]GCC 7.5
   8550 
   8551    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   8552    system that are known to be fixed in the 7.5 release. This list might
   8553    not be complete (that is, it is possible that some PRs that have been
   8554    fixed are not listed here).
   8555 
   8556 
   8557     For questions related to the use of GCC, please consult these web
   8558     pages and the [62]GCC manuals. If that fails, the
   8559     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8560     web pages and the development of GCC are welcome on our developer
   8561     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   8562     archives.
   8563 
   8564    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   8565    distribution of this entire article is permitted in any medium,
   8566    provided this notice is preserved.
   8567 
   8568    These pages are [67]maintained by the GCC team. Last modified
   8569    2026-06-13.
   8570 
   8571 References
   8572 
   8573    1. https://gcc.gnu.org/gcc-7/porting_to.html
   8574    2. https://gcc.gnu.org/onlinedocs/index.html#current
   8575    3. https://gcc.gnu.org/wiki/LRAIsDefault
   8576    4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
   8577    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
   8578    6. https://gcc.gnu.org/gcc-7/changes.html#general
   8579    7. https://gcc.gnu.org/gcc-7/changes.html#languages
   8580    8. https://gcc.gnu.org/wiki/OpenACC
   8581    9. https://gcc.gnu.org/wiki/Offloading
   8582   10. https://gcc.gnu.org/gcc-7/changes.html#ada
   8583   11. https://gcc.gnu.org/gcc-7/changes.html#brig
   8584   12. https://gcc.gnu.org/gcc-7/changes.html#c-family
   8585   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
   8586   14. https://gcc.gnu.org/gcc-7/changes.html#c
   8587   15. https://gcc.gnu.org/gcc-7/changes.html#cxx
   8588   16. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   8589   17. https://wg21.link/p0136
   8590   18. https://gcc.gnu.org/gcc-7/changes.html#libstdcxx
   8591   19. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
   8592   20. https://gcc.gnu.org/gcc-7/changes.html#fortran
   8593   21. https://www.openmp.org/specifications/
   8594   22. https://gcc.gnu.org/gcc-7/changes.html#go
   8595   23. https://gcc.gnu.org/gcc-7/changes.html#java
   8596   24. https://gcc.gnu.org/gcc-7/changes.html#jit
   8597   25. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
   8598   26. https://gcc.gnu.org/gcc-7/changes.html#targets
   8599   27. https://gcc.gnu.org/gcc-7/changes.html#aarch64
   8600   28. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
   8601   29. https://gcc.gnu.org/gcc-7/changes.html#arc
   8602   30. https://gcc.gnu.org/gcc-7/changes.html#arm
   8603   31. https://gcc.gnu.org/install/configure.html
   8604   32. https://gcc.gnu.org/gcc-7/changes.html#avr
   8605   33. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
   8606   34. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
   8607   35. https://gcc.gnu.org/gcc-7/changes.html#x86
   8608   36. https://gcc.gnu.org/gcc-7/changes.html#nvptx
   8609   37. https://gcc.gnu.org/wiki/Offloading
   8610   38. https://gcc.gnu.org/gcc-7/changes.html#powerpc
   8611   39. https://gcc.gnu.org/gcc-7/changes.html#s390
   8612   40. https://gcc.gnu.org/gcc-7/changes.html#riscv
   8613   41. https://gcc.gnu.org/gcc-7/changes.html#rx
   8614   42. https://gcc.gnu.org/gcc-7/changes.html#sh
   8615   43. https://gcc.gnu.org/gcc-7/changes.html#sparc
   8616   44. https://gcc.gnu.org/gcc-7/changes.html#os
   8617   45. https://gcc.gnu.org/gcc-7/changes.html#aix
   8618   46. https://gcc.gnu.org/gcc-7/changes.html#fuchsia
   8619   47. https://fuchsia.googlesource.com/
   8620   48. https://gcc.gnu.org/gcc-7/changes.html#rtems
   8621   49. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
   8622   50. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
   8623   51. https://gcc.gnu.org/gcc-7/changes.html#GCC7.1
   8624   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
   8625   53. https://gcc.gnu.org/gcc-7/changes.html#GCC7.2
   8626   54. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
   8627   55. https://gcc.gnu.org/gcc-7/changes.html#GCC7.3
   8628   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
   8629   57. https://www.gaisler.com/app-notes-tech-notes-and-white-papers
   8630   58. https://gcc.gnu.org/gcc-7/changes.html#GCC7.4
   8631   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
   8632   60. https://gcc.gnu.org/gcc-7/changes.html#GCC7.5
   8633   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
   8634   62. https://gcc.gnu.org/onlinedocs/
   8635   63. mailto:gcc-help (a] gcc.gnu.org
   8636   64. mailto:gcc (a] gcc.gnu.org
   8637   65. https://gcc.gnu.org/lists.html
   8638   66. https://www.fsf.org/
   8639   67. https://gcc.gnu.org/about.html
   8640 ======================================================================
   8641 http://gcc.gnu.org/gcc-6/index.html
   8642                               GCC 6 Release Series
   8643 
   8644    (This release series is no longer supported.)
   8645 
   8646    October 26, 2018
   8647 
   8648    The [1]GNU project and the GCC developers are pleased to announce the
   8649    release of GCC 6.5.
   8650 
   8651    This release is a bug-fix release, containing fixes for regressions in
   8652    GCC 6.4 relative to previous releases of GCC.
   8653 
   8654 Release History
   8655 
   8656    GCC 6.5
   8657           October 26, 2018 ([2]changes, [3]documentation)
   8658 
   8659    GCC 6.4
   8660           July 4, 2017 ([4]changes, [5]documentation)
   8661 
   8662    GCC 6.3
   8663           December 21, 2016 ([6]changes, [7]documentation)
   8664 
   8665    GCC 6.2
   8666           August 22, 2016 ([8]changes, [9]documentation)
   8667 
   8668    GCC 6.1
   8669           April 27, 2016 ([10]changes, [11]documentation)
   8670 
   8671 References and Acknowledgements
   8672 
   8673    GCC used to stand for the GNU C Compiler, but since the compiler
   8674    supports several other languages aside from C, it now stands for the
   8675    GNU Compiler Collection.
   8676 
   8677    A list of [12]successful builds is updated as new information becomes
   8678    available.
   8679 
   8680    The GCC developers would like to thank the numerous people that have
   8681    contributed new features, improvements, bug fixes, and other changes as
   8682    well as test results to GCC. This [13]amazing group of volunteers is
   8683    what makes GCC successful.
   8684 
   8685    For additional information about GCC please refer to the [14]GCC
   8686    project web site or contact the [15]GCC development mailing list.
   8687 
   8688    To obtain GCC please use [16]our mirror sites or [17]our version
   8689    control system.
   8690 
   8691 
   8692     For questions related to the use of GCC, please consult these web
   8693     pages and the [18]GCC manuals. If that fails, the
   8694     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8695     web pages and the development of GCC are welcome on our developer
   8696     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   8697     archives.
   8698 
   8699    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   8700    distribution of this entire article is permitted in any medium,
   8701    provided this notice is preserved.
   8702 
   8703    These pages are [23]maintained by the GCC team. Last modified
   8704    2024-05-30.
   8705 
   8706 References
   8707 
   8708    1. http://www.gnu.org/
   8709    2. https://gcc.gnu.org/gcc-6/changes.html
   8710    3. https://gcc.gnu.org/onlinedocs/6.5.0/
   8711    4. https://gcc.gnu.org/gcc-6/changes.html
   8712    5. https://gcc.gnu.org/onlinedocs/6.4.0/
   8713    6. https://gcc.gnu.org/gcc-6/changes.html
   8714    7. https://gcc.gnu.org/onlinedocs/6.3.0/
   8715    8. https://gcc.gnu.org/gcc-6/changes.html
   8716    9. https://gcc.gnu.org/onlinedocs/6.2.0/
   8717   10. https://gcc.gnu.org/gcc-6/changes.html
   8718   11. https://gcc.gnu.org/onlinedocs/6.1.0/
   8719   12. https://gcc.gnu.org/gcc-6/buildstat.html
   8720   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   8721   14. https://gcc.gnu.org/index.html
   8722   15. mailto:gcc (a] gcc.gnu.org
   8723   16. https://gcc.gnu.org/mirrors.html
   8724   17. https://gcc.gnu.org/git.html
   8725   18. https://gcc.gnu.org/onlinedocs/
   8726   19. mailto:gcc-help (a] gcc.gnu.org
   8727   20. mailto:gcc (a] gcc.gnu.org
   8728   21. https://gcc.gnu.org/lists.html
   8729   22. https://www.fsf.org/
   8730   23. https://gcc.gnu.org/about.html
   8731 ======================================================================
   8732 http://gcc.gnu.org/gcc-6/changes.html
   8733                               GCC 6 Release Series
   8734                         Changes, New Features, and Fixes
   8735 
   8736    This page is a brief summary of some of the huge number of improvements
   8737    in GCC 6. For more information, see the [1]Porting to GCC 6 page and
   8738    the [2]full GCC documentation.
   8739 
   8740 Caveats
   8741 
   8742      * The default mode for C++ is now -std=gnu++14 instead of
   8743        -std=gnu++98.
   8744      * Support for a number of older systems and recently unmaintained or
   8745        untested target ports of GCC has been declared obsolete in GCC 6.
   8746        Unless there is activity to revive them, the next release of GCC
   8747        will have their sources permanently removed.
   8748        The following ports for individual systems on particular
   8749        architectures have been obsoleted:
   8750           + SH5 / SH64 (sh64-*-*) as announced [3]here.
   8751      * The AVR port requires binutils version 2.26.1 or later for the fix
   8752        for [4]PR71151 to work.
   8753      * The GCC 6.5 release has an accidental ABI incompatibility for
   8754        nested std::pair objects, for more details see [5]PR 87822. The bug
   8755        causes a layout change for pairs where the first member is also a
   8756        pair, e.g. std::pair<std::pair<X, Y>, Z>. The GCC 6 release series
   8757        is closed so the bug in GCC 6.5 will not be fixed upstream, but
   8758        there is a patch in the bug report to allow it to be fixed by
   8759        anybody packaging GCC 6.5 or installing it themselves.
   8760 
   8761 [6]General Optimizer Improvements
   8762 
   8763      * UndefinedBehaviorSanitizer gained a new sanitization option,
   8764        -fsanitize=bounds-strict, which enables strict checking of array
   8765        bounds. In particular, it enables -fsanitize=bounds as well as
   8766        instrumentation of flexible array member-like arrays.
   8767      * Type-based alias analysis now disambiguates accesses to different
   8768        pointers. This improves precision of the alias oracle by about
   8769        20-30% on higher-level C++ programs. Programs doing invalid type
   8770        punning of pointer types may now need -fno-strict-aliasing to work
   8771        correctly.
   8772      * Alias analysis now correctly supports the weakref and alias
   8773        attributes. This allows accessing both a variable and its alias in
   8774        one translation unit which is common with link-time optimization.
   8775      * Value range propagation now assumes that the this pointer in C++
   8776        member functions is non-null. This eliminates common null pointer
   8777        checks but also breaks some non-conforming code-bases (such as
   8778        Qt-5, Chromium, KDevelop). As a temporary work-around
   8779        -fno-delete-null-pointer-checks can be used. Wrong code can be
   8780        identified by using -fsanitize=undefined.
   8781      * Link-time optimization improvements:
   8782           + warning and error attributes are now correctly preserved by
   8783             declaration linking and thus -D_FORTIFY_SOURCE=2 is now
   8784             supported with -flto.
   8785           + Type merging was fixed to handle C and Fortran
   8786             interoperability rules as defined by the Fortran 2008 language
   8787             standard.
   8788             As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
   8789             with char in all cases because it is an array while char is
   8790             scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
   8791             general, this inter-operability cannot be implemented, for
   8792             example on targets where the argument passing convention for
   8793             arrays differs from scalars.
   8794           + More type information is now preserved at link time, reducing
   8795             the loss of accuracy of the type-based alias analysis compared
   8796             to builds without link-time optimization.
   8797           + Invalid type punning on global variables and declarations is
   8798             now reported with -Wodr-type-mismatch.
   8799           + The size of LTO object files was reduced by about 11%
   8800             (measured by compiling Firefox 46.0).
   8801           + Link-time parallelization (enabled using -flto=n) was
   8802             significantly improved by decreasing the size of streamed data
   8803             when partitioning programs. The size of streamed IL while
   8804             compiling Firefox 46.0 was reduced by 66%.
   8805           + The linker plugin was extended to pass information about the
   8806             type of binary produced to the GCC back end. (That can also be
   8807             controlled manually by -flinker-output.) This makes it
   8808             possible to properly configure the code generator and support
   8809             incremental linking. Incremental linking of LTO objects by gcc
   8810             -r is now supported for plugin-enabled setups.
   8811             There are two ways to perform incremental linking:
   8812               1. Linking by ld -r will result in an object file with all
   8813                  sections from individual object files mechanically
   8814                  merged. This delays the actual link-time optimization to
   8815                  the final linking step and thus permits whole program
   8816                  optimization. Linking the final binary with such object
   8817                  files is however slower.
   8818               2. Linking by gcc -r will lead to link-time optimization and
   8819                  emit the final binary into the object file. Linking such
   8820                  an object file is fast but avoids any benefits from whole
   8821                  program optimization.
   8822             GCC 7 will support incremental link-time optimization with gcc
   8823             -r.
   8824      * Inter-procedural optimization improvements:
   8825           + Basic jump threading is now performed before profile
   8826             construction and inline analysis, resulting in more realistic
   8827             size and time estimates that drive the heuristics of the
   8828             inliner and function cloning passes.
   8829           + Function cloning now more aggressively eliminates unused
   8830             function parameters.
   8831 
   8832 [7]New Languages and Language specific improvements
   8833 
   8834    Compared to GCC 5, the GCC 6 release series includes a much improved
   8835    implementation of the [8]OpenACC 2.0a specification. Highlights are:
   8836      * In addition to single-threaded host-fallback execution, offloading
   8837        is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
   8838        little-endian GNU/Linux host systems. For nvptx offloading, with
   8839        the OpenACC parallel construct, the execution model allows for an
   8840        arbitrary number of gangs, up to 32 workers, and 32 vectors.
   8841      * Initial support for parallelized execution of OpenACC kernels
   8842        constructs:
   8843           + Parallelization of a kernels region is switched on by
   8844             -fopenacc combined with -O2 or higher.
   8845           + Code is offloaded onto multiple gangs, but executes with just
   8846             one worker, and a vector length of 1.
   8847           + Directives inside a kernels region are not supported.
   8848           + Loops with reductions can be parallelized.
   8849           + Only kernels regions with one loop nest are parallelized.
   8850           + Only the outer-most loop of a loop nest can be parallelized.
   8851           + Loop nests containing sibling loops are not parallelized.
   8852        Typically, using the OpenACC parallel construct gives much better
   8853        performance, compared to the initial support of the OpenACC kernels
   8854        construct.
   8855      * The device_type clause is not supported. The bind and nohost
   8856        clauses are not supported. The host_data directive is not supported
   8857        in Fortran.
   8858      * Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
   8859      * Usage of OpenACC constructs inside multithreaded contexts (such as
   8860        created by OpenMP, or pthread programming) is not supported.
   8861      * If a call to the acc_on_device function has a compile-time constant
   8862        argument, the function call evaluates to a compile-time constant
   8863        value only for C and C++ but not for Fortran.
   8864 
   8865    See the [9]OpenACC and [10]Offloading wiki pages for further
   8866    information.
   8867 
   8868   [11]C family
   8869 
   8870      * Version 4.5 of the [12]OpenMP specification is now supported in the
   8871        C and C++ compilers.
   8872      * The C and C++ compilers now support attributes on enumerators. For
   8873        instance, it is now possible to mark enumerators as deprecated:
   8874 
   8875 enum {
   8876   newval,
   8877   oldval __attribute__ ((deprecated ("too old")))
   8878 };
   8879 
   8880      * Source locations for the C and C++ compilers are now tracked as
   8881        ranges, rather than just points, making it easier to identify the
   8882        subexpression of interest within a complicated expression. For
   8883        example:
   8884 
   8885 test.cc: In function 'int test(int, int, foo, int, int)':
   8886 test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
   8887 )
   8888    return p + q * r * s + t;
   8889               ~~^~~
   8890 
   8891        In addition, there is now initial support for precise diagnostic
   8892        locations within strings:
   8893 
   8894 format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
   8895 t' argument [-Wformat=]
   8896    printf("%*d");
   8897             ^
   8898 
   8899      * Diagnostics can now contain "fix-it hints", which are displayed in
   8900        context underneath the relevant source code. For example:
   8901 
   8902 fixits.c: In function 'bad_deref':
   8903 fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
   8904    return ptr.x;
   8905              ^
   8906              ->
   8907 
   8908      * The C and C++ compilers now offer suggestions for misspelled field
   8909        names:
   8910 
   8911 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   8912 you mean 'color'?
   8913    return ptr->colour;
   8914                ^~~~~~
   8915 
   8916      * New command-line options have been added for the C and C++
   8917        compilers:
   8918           + -Wshift-negative-value warns about left shifting a negative
   8919             value.
   8920           + -Wshift-overflow warns about left shift overflows. This
   8921             warning is enabled by default. -Wshift-overflow=2 also warns
   8922             about left-shifting 1 into the sign bit.
   8923           + -Wtautological-compare warns if a self-comparison always
   8924             evaluates to true or false. This warning is enabled by -Wall.
   8925           + -Wnull-dereference warns if the compiler detects paths that
   8926             trigger erroneous or undefined behavior due to dereferencing a
   8927             null pointer. This option is only active when
   8928             -fdelete-null-pointer-checks is active, which is enabled by
   8929             optimizations in most targets. The precision of the warnings
   8930             depends on the optimization options used.
   8931           + -Wduplicated-cond warns about duplicated conditions in an
   8932             if-else-if chain.
   8933           + -Wmisleading-indentation warns about places where the
   8934             indentation of the code gives a misleading idea of the block
   8935             structure of the code to a human reader. For example, given
   8936             [13]CVE-2014-1266:
   8937 
   8938 sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
   8939 sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
   8940 g-indentation]
   8941     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
   8942     ^~
   8943 sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
   8944 indented as if it is guarded by the 'if'
   8945         goto fail;
   8946         ^~~~
   8947 
   8948             This warning is enabled by -Wall.
   8949      * The C and C++ compilers now emit saner error messages if
   8950        merge-conflict markers are present in a source file.
   8951 
   8952 test.c:3:1: error: version control conflict marker in file
   8953  <<<<<<< HEAD
   8954  ^~~~~~~
   8955 
   8956   [14]C
   8957 
   8958      * It is possible to disable warnings when an initialized field of a
   8959        structure or a union with side effects is being overridden when
   8960        using designated initializers via a new warning option
   8961        -Woverride-init-side-effects.
   8962      * A new type attribute scalar_storage_order applying to structures
   8963        and unions has been introduced. It specifies the storage order (aka
   8964        endianness) in memory of scalar fields in structures or unions.
   8965 
   8966   [15]C++
   8967 
   8968      * The default mode has been changed to -std=gnu++14.
   8969      * [16]C++ Concepts are now supported when compiling with -fconcepts.
   8970      * -flifetime-dse is more aggressive in dead-store elimination in
   8971        situations where a memory store to a location precedes a
   8972        constructor to that memory location.
   8973      * G++ now supports [17]C++17 fold expressions, u8 character literals,
   8974        extended static_assert, and nested namespace definitions.
   8975      * G++ now allows constant evaluation for all non-type template
   8976        arguments.
   8977      * G++ now supports C++ Transactional Memory when compiling with
   8978        -fgnu-tm.
   8979 
   8980     [18]Runtime Library (libstdc++)
   8981 
   8982      * Extensions to the C++ Library to support mathematical special
   8983        functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
   8984      * Experimental support for C++17, including the following new
   8985        features:
   8986           + std::uncaught_exceptions function (this is also available for
   8987             -std=gnu++NN modes);
   8988           + new member functions try_emplace and insert_or_assign for
   8989             unique_key maps;
   8990           + non-member functions std::size, std::empty, and std::data for
   8991             accessing containers and arrays;
   8992           + std::invoke;
   8993           + std::shared_mutex;
   8994           + std::void_t and std::bool_constant metaprogramming utilities.
   8995        Thanks to Ville Voutilainen for contributing many of the C++17
   8996        features.
   8997      * An experimental implementation of the File System TS.
   8998      * Experimental support for most features of the second version of the
   8999        Library Fundamentals TS. This includes polymorphic memory resources
   9000        and array support in shared_ptr, thanks to Fan You.
   9001      * Some assertions checked by Debug Mode can now also be enabled by
   9002        _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
   9003        have less run-time overhead than the full _GLIBCXX_DEBUG checks and
   9004        don't affect the library ABI, so can be enabled per-translation
   9005        unit.
   9006      * Timed mutex types are supported on more targets, including Darwin.
   9007      * Improved std::locale support for DragonFly and FreeBSD, thanks to
   9008        John Marino and Andreas Tobler.
   9009 
   9010   [19]Fortran
   9011 
   9012      * Fortran 2008 SUBMODULE support.
   9013      * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
   9014        support.
   9015      * Improved support for Fortran 2003 deferred-length character
   9016        variables.
   9017      * Improved support for OpenMP and OpenACC.
   9018      * The MATMUL intrinsic is now inlined for straightforward cases if
   9019        front-end optimization is active. The maximum size for inlining can
   9020        be set to n with the -finline-matmul-limit=n option and turned off
   9021        with -finline-matmul-limit=0.
   9022      * The -Wconversion-extra option will warn about REAL constants which
   9023        have excess precision for their kind.
   9024      * The -Winteger-division option has been added, which warns about
   9025        divisions of integer constants which are truncated. This option is
   9026        included in -Wall by default.
   9027 
   9028 [20]libgccjit
   9029 
   9030      * The driver code is now run in-process within libgccjit, providing a
   9031        small speed-up of the compilation process.
   9032      * The API has gained entrypoints for
   9033           + [21]timing how long was spent in different parts of code,
   9034           + [22]creating switch statements,
   9035           + [23]allowing unreachable basic blocks in a function, and
   9036           + [24]adding arbitrary command-line options to a compilation.
   9037 
   9038 [25]New Targets and Target Specific Improvements
   9039 
   9040   [26]AArch64
   9041 
   9042      * A number of AArch64-specific options have been added. The most
   9043        important ones are summarised in this section; for more detailed
   9044        information please refer to the documentation.
   9045      * The command-line options -march=native, -mcpu=native and
   9046        -mtune=native are now available on native AArch64 GNU/Linux
   9047        systems. Specifying these options causes GCC to auto-detect the
   9048        host CPU and choose the optimal setting for that system.
   9049      * -fpic is now supported when generating code for the small code
   9050        model (-mcmodel=small). The size of the global offset table (GOT)
   9051        is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
   9052        ILP32 SysV ABI.
   9053      * The AArch64 port now supports target attributes and pragmas. Please
   9054        refer to the [27]documentation for details of available attributes
   9055        and pragmas as well as usage instructions.
   9056      * Link-time optimization across translation units with different
   9057        target-specific options is now supported.
   9058      * The option -mtls-size= is now supported. It can be used to specify
   9059        the bit size of TLS offsets, allowing GCC to generate better TLS
   9060        instruction sequences.
   9061      * The option -fno-plt is now fully functional.
   9062      * The ARMv8.1-A architecture and the Large System Extensions are now
   9063        supported. They can be used by specifying the -march=armv8.1-a
   9064        option. Additionally, the +lse option extension can be used in a
   9065        similar fashion to other option extensions. The Large System
   9066        Extensions introduce new instructions that are used in the
   9067        implementation of atomic operations.
   9068      * The ACLE half-precision floating-point type __fp16 is now supported
   9069        in the C and C++ languages.
   9070      * The ARM Cortex-A35 processor is now supported via the
   9071        -mcpu=cortex-a35 and -mtune=cortex-a35 options as well as the
   9072        equivalent target attributes and pragmas.
   9073      * The Qualcomm QDF24xx processor is now supported via the
   9074        -mcpu=qdf24xx and -mtune=qdf24xx options as well as the equivalent
   9075        target attributes and pragmas.
   9076      * Code generation for the ARM Cortex-A57 processor is improved. Among
   9077        general code generation improvements, a better algorithm is added
   9078        for allocating registers to floating-point multiply-accumulate
   9079        instructions offering increased performance when compiling with
   9080        -mcpu=cortex-a57 or -mtune=cortex-a57.
   9081      * Code generation for the ARM Cortex-A53 processor is improved. A
   9082        more accurate instruction scheduling model for the processor is now
   9083        used, and a number of compiler tuning parameters have been set to
   9084        offer increased performance when compiling with -mcpu=cortex-a53 or
   9085        -mtune=cortex-a53.
   9086      * Code generation for the Samsung Exynos M1 processor is improved. A
   9087        more accurate instruction scheduling model for the processor is now
   9088        used, and a number of compiler tuning parameters have been set to
   9089        offer increased performance when compiling with -mcpu=exynos-m1 or
   9090        -mtune=exynos-m1.
   9091      * Improvements in the generation of conditional branches and literal
   9092        pools allow the compiler to compile functions of a large size.
   9093        Constant pools are now placed into separate rodata sections. The
   9094        new option -mpc-relative-literal-loads generates per-function
   9095        literal pools, limiting the maximum size of functions to 1MiB.
   9096      * Several correctness issues generating Advanced SIMD instructions
   9097        for big-endian targets have been fixed resulting in improved code
   9098        generation for ACLE intrinsics with -mbig-endian.
   9099 
   9100   [28]ARM
   9101 
   9102      * Support for revisions of the ARM architecture prior to ARMv4t has
   9103        been deprecated and will be removed in a future GCC release. The
   9104        -mcpu and -mtune values that are deprecated are: arm2, arm250,
   9105        arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
   9106        arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
   9107        arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
   9108        strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
   9109        arm7tdmi is still supported. The values of -march that are
   9110        deprecated are: armv2,armv2a,armv3,armv3m,armv4.
   9111      * The ARM port now supports target attributes and pragmas. Please
   9112        refer to the [29]documentation for details of available attributes
   9113        and pragmas as well as usage instructions.
   9114      * Support has been added for the following processors (GCC
   9115        identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
   9116        Cortex-A35 (cortex-a35) and ARM Cortex-R8 (cortex-r8). The GCC
   9117        identifiers can be used as arguments to the -mcpu or -mtune
   9118        options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
   9119 
   9120   [30]Heterogeneous Systems Architecture
   9121 
   9122      * GCC can now generate HSAIL (Heterogeneous System Architecture
   9123        Intermediate Language) for simple OpenMP device constructs if
   9124        configured with --enable-offload-targets=hsa. A new libgomp plugin
   9125        then runs the HSA GPU kernels implementing these constructs on HSA
   9126        capable GPUs via a standard HSA run time.
   9127        If the HSA compilation back end determines it cannot output HSAIL
   9128        for a particular input, it gives a warning by default. These
   9129        warnings can be suppressed with -Wno-hsa. To give a few examples,
   9130        the HSA back end does not implement compilation of code using
   9131        function pointers, automatic allocation of variable sized arrays,
   9132        functions with variadic arguments as well as a number of other less
   9133        common programming constructs.
   9134        When compilation for HSA is enabled, the compiler attempts to
   9135        compile composite OpenMP constructs
   9136 
   9137 #pragma omp target teams distribute parallel for
   9138 
   9139        into parallel HSA GPU kernels.
   9140 
   9141   [31]IA-32/x86-64
   9142 
   9143      * GCC now supports the Intel CPU named Skylake with AVX-512
   9144        extensions through -march=skylake-avx512. The switch enables the
   9145        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   9146        AVX-512DQ.
   9147      * Support for new AMD instructions monitorx and mwaitx has been
   9148        added. This includes new intrinsic and built-in support. It is
   9149        enabled through option -mmwaitx. The instructions monitorx and
   9150        mwaitx implement the same functionality as the old monitor and
   9151        mwait instructions. In addition, mwaitx adds a configurable timer.
   9152        The timer value is received as third argument and stored in
   9153        register %ebx.
   9154      * x86-64 targets now allow stack realignment from a word-aligned
   9155        stack pointer using the command-line option -mstackrealign or
   9156        __attribute__ ((force_align_arg_pointer)). This allows functions
   9157        compiled with a vector-aligned stack to be invoked from objects
   9158        that keep only word-alignment.
   9159      * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
   9160        can be used to access data via the %fs and %gs segments without
   9161        having to resort to inline assembly. Please refer to the
   9162        [32]documentation for usage instructions.
   9163      * Support for AMD Zen (family 17h) processors is now available
   9164        through the -march=znver1 and -mtune=znver1 options.
   9165 
   9166   [33]MeP
   9167 
   9168      * Support for the MeP (mep-elf) architecture has been deprecated and
   9169        will be removed in a future GCC release.
   9170 
   9171   [34]MSP430
   9172 
   9173      * The MSP430 compiler now has the ability to automatically distribute
   9174        code and data between low memory (addresses below 64K) and high
   9175        memory. This only applies to parts that actually have both memory
   9176        regions and only if the linker script for the part has been
   9177        specifically set up to support this feature.
   9178        A new attribute of either can be applied to both functions and
   9179        data, and this tells the compiler to place the object into low
   9180        memory if there is room and into high memory otherwise. Two other
   9181        new attributes - lower and upper - can be used to explicitly state
   9182        that an object should be placed in the specified memory region. If
   9183        there is not enough left in that region the compilation will fail.
   9184        Two new command-line options - -mcode-region=[lower|upper|either]
   9185        and -mdata-region=[lower|upper|either] - can be used to tell the
   9186        compiler what to do with objects that do not have one of these new
   9187        attributes.
   9188 
   9189   [35]PowerPC / PowerPC64 / RS6000
   9190 
   9191      * PowerPC64 now supports IEEE 128-bit floating-point using the
   9192        __float128 data type. In GCC 6, this is not enabled by default, but
   9193        you can enable it with -mfloat128. The IEEE 128-bit floating-point
   9194        support requires the use of the VSX instruction set. IEEE 128-bit
   9195        floating-point values are passed and returned as a single vector
   9196        value. The software emulator for IEEE 128-bit floating-point
   9197        support is only built on PowerPC GNU/Linux systems where the
   9198        default CPU is at least power7. On future ISA 3.0 systems (POWER 9
   9199        and later), you will be able to use the -mfloat128-hardware option
   9200        to use the ISA 3.0 instructions that support IEEE 128-bit
   9201        floating-point. An additional type (__ibm128) has been added to
   9202        refer to the IBM extended double type that normally implements long
   9203        double. This will allow for a future transition to implementing
   9204        long double with IEEE 128-bit floating-point.
   9205      * Basic support has been added for POWER9 hardware that will use the
   9206        recently published OpenPOWER ISA 3.0 instructions. The following
   9207        new switches are available:
   9208           + -mcpu=power9: Implement all of the ISA 3.0 instructions
   9209             supported by the compiler.
   9210           + -mtune=power9: In the future, apply tuning for POWER9 systems.
   9211             Currently, POWER8 tunings are used.
   9212           + -mmodulo: Generate code using the ISA 3.0 integer instructions
   9213             (modulus, count trailing zeros, array index support, integer
   9214             multiply/add).
   9215           + -mpower9-fusion: Generate code to suitably fuse instruction
   9216             sequences for a POWER9 system.
   9217           + -mpower9-dform: Generate code to use the new D-form
   9218             (register+offset) memory instructions for the vector
   9219             registers.
   9220           + -mpower9-vector: Generate code using the new ISA 3.0 vector
   9221             (VSX or Altivec) instructions.
   9222           + -mpower9-minmax: Reserved for future development.
   9223           + -mtoc-fusion: Keep TOC entries together to provide more fusion
   9224             opportunities.
   9225      * New constraints have been added to support IEEE 128-bit
   9226        floating-point and ISA 3.0 instructions:
   9227           + wb: Altivec register if -mpower9-dform is enabled.
   9228           + we: VSX register if -mpower9-vector is enabled for 64-bit code
   9229             generation.
   9230           + wo: VSX register if -mpower9-vector is enabled.
   9231           + wp: Reserved for future use if long double is implemented with
   9232             IEEE 128-bit floating-point instead of IBM extended double.
   9233           + wq: VSX register if -mfloat128 is enabled.
   9234           + wF: Memory operand suitable for POWER9 fusion load/store.
   9235           + wG: Memory operand suitable for TOC fusion memory references.
   9236           + wL: Integer constant identifying the element number mfvsrld
   9237             accesses within a vector.
   9238      * Support has been added for __builtin_cpu_is() and
   9239        __builtin_cpu_supports(), allowing for very fast access to
   9240        AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
   9241        glibc 2.23 or later.
   9242      * All hardware transactional memory builtins now correctly behave as
   9243        memory barriers. Programmers can use #ifdef __TM_FENCE__ to
   9244        determine whether their "old" compiler treats the builtins as
   9245        barriers.
   9246      * Split-stack support has been added for gccgo on PowerPC64 for both
   9247        big- and little-endian (but not for 32-bit). The gold linker from
   9248        at least binutils 2.25.1 must be available in the PATH when
   9249        configuring and building gccgo to enable split stack. (The
   9250        requirement for binutils 2.25.1 applies to PowerPC64 only.) The
   9251        split-stack feature allows a small initial stack size to be
   9252        allocated for each goroutine, which increases as needed.
   9253      * GCC on PowerPC now supports the standard lround function.
   9254      * A new configuration option ---with-advance-toolchain=at was added
   9255        for PowerPC 64-bit GNU/Linux systems to use the header files,
   9256        library files, and the dynamic linker from a specific Advance
   9257        Toolchain release instead of the default versions that are provided
   9258        by the GNU/Linux distribution. In general, this option is intended
   9259        for the developers of GCC, and it is not intended for general use.
   9260      * The "q", "S", "T", and "t" asm-constraints have been removed.
   9261      * The "b", "B", "m", "M", and "W" format modifiers have been removed.
   9262 
   9263   [36]S/390, System z, IBM z Systems
   9264 
   9265      * Support for the IBM z13 processor has been added. When using the
   9266        -march=z13 option, the compiler will generate code making use of
   9267        the new instructions and registers introduced with the vector
   9268        extension facility. The -mtune=z13 option enables z13 specific
   9269        instruction scheduling without making use of new instructions.
   9270        Compiling code with -march=z13 reduces the default alignment of
   9271        vector types bigger than 8 bytes to 8. This is an ABI change and
   9272        care must be taken when linking modules compiled with different
   9273        arch levels which interchange variables containing vector type
   9274        values. For newly compiled code the GNU linker will emit a warning.
   9275      * The -mzvector option enables a C/C++ language extension. This
   9276        extension provides a new keyword vector which can be used to define
   9277        vector type variables. (Note: This is not available when enforcing
   9278        strict standard compliance e.g. with -std=c99. Either enable GNU
   9279        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   9280        Additionally a set of overloaded builtins is provided which is
   9281        partially compatible to the PowerPC Altivec builtins. In order to
   9282        make use of these builtins the vecintrin.h header file needs to be
   9283        included.
   9284      * The new command-line options -march=native, and -mtune=native are
   9285        now available on native IBM z Systems. Specifying these options
   9286        causes GCC to auto-detect the host CPU and choose the optimal
   9287        setting for that system. If GCC is unable to detect the host CPU
   9288        these options have no effect.
   9289      * The IBM z Systems port now supports target attributes and pragmas.
   9290        Please refer to the [37]documentation for details of available
   9291        attributes and pragmas as well as usage instructions.
   9292      * -fsplit-stack is now supported as part of the IBM z Systems port.
   9293        This feature requires a recent gold linker to be used.
   9294      * Support for the g5 and g6 -march=/-mtune= CPU level switches has
   9295        been deprecated and will be removed in a future GCC release. -m31
   9296        from now on defaults to -march=z900 if not specified otherwise.
   9297        -march=native on a g5/g6 machine will default to -march=z900.
   9298 
   9299   [38]SH
   9300 
   9301      * Support for SH5 / SH64 has been declared obsolete and will be
   9302        removed in future releases.
   9303      * Support for the FDPIC ABI has been added. It can be enabled using
   9304        the new -mfdpic target option and --enable-fdpic configure option.
   9305 
   9306   [39]SPARC
   9307 
   9308      * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
   9309        change will break binary compatibility with earlier releases for
   9310        code it affects, but this should be pretty rare in practice. The
   9311        conditions are: a 16-byte structure containing a double or a 8-byte
   9312        vector in the second half is passed to a subprogram in slot #15,
   9313        for example as 16th parameter if the first 15 ones have at most 8
   9314        bytes. The double or vector was wrongly passed in floating-point
   9315        register %d32 in lieu of on the stack as per the SPARC calling
   9316        conventions.
   9317 
   9318 [40]Operating Systems
   9319 
   9320   [41]AIX
   9321 
   9322      * DWARF debugging support for AIX 7.1 has been enabled as an optional
   9323        debugging format. A more recent Technology Level (TL) and GCC built
   9324        with that level are required for full exploitation of DWARF
   9325        debugging capabilities.
   9326 
   9327   [42]Linux
   9328 
   9329      * Support for the [43]musl C library was added for the AArch64, ARM,
   9330        MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
   9331        x86_64 targets. It can be selected using the new -mmusl option in
   9332        case musl is not the default libc. GCC defaults to musl libc if it
   9333        is built with a target triplet matching the *-linux-musl* pattern.
   9334 
   9335   [44]RTEMS
   9336 
   9337      * The RTEMS thread model implementation changed. Mutexes now use
   9338        self-contained objects defined in newlib <sys/lock.h> instead of
   9339        Classic API semaphores. The keys for thread specific data and the
   9340        once function are directly defined via <pthread.h>. Self-contained
   9341        condition variables are provided via newlib <sys/lock.h>. The RTEMS
   9342        thread model also supports C++11 threads.
   9343      * OpenMP support now uses self-contained objects provided by newlib
   9344        <sys/lock.h> and offers a significantly better performance compared
   9345        to the POSIX configuration of libgomp. It is possible to configure
   9346        thread pools for each scheduler instance via the environment
   9347        variable GOMP_RTEMS_THREAD_POOLS.
   9348 
   9349   [45]Solaris
   9350 
   9351      * Solaris 12 is now fully supported. Minimal support had already been
   9352        present in GCC 5.3.
   9353      * Solaris 12 provides a full set of startup files (crt1.o, crti.o,
   9354        crtn.o), which GCC now prefers over its own ones.
   9355      * Position independent executables (PIE) are now supported on Solaris
   9356        12.
   9357      * Constructor priority is now supported on Solaris 12 with the system
   9358        linker.
   9359      * libvtv has been ported to Solaris 11 and up.
   9360 
   9361   [46]Windows
   9362 
   9363      * The option -mstackrealign is now automatically activated in 32-bit
   9364        mode whenever the use of SSE instructions is requested.
   9365 
   9366 Other significant improvements
   9367 
   9368      * The gcc and g++ driver programs will now provide suggestions for
   9369        misspelled command-line options.
   9370 
   9371 $ gcc -static-libfortran test.f95
   9372 gcc: error: unrecognized command line option '-static-libfortran'; did you mean
   9373 '-static-libgfortran'?
   9374 
   9375      * The --enable-default-pie configure option enables generation of PIE
   9376        by default.
   9377 
   9378                                   [47]GCC 6.2
   9379 
   9380    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   9381    system that are known to be fixed in the 6.2 release. This list might
   9382    not be complete (that is, it is possible that some PRs that have been
   9383    fixed are not listed here).
   9384 
   9385 Target Specific Changes
   9386 
   9387   SPARC
   9388 
   9389      * Support for --with-cpu-32 and --with-cpu-64 configure options has
   9390        been added on bi-architecture platforms.
   9391      * Support for the SPARC M7 (Niagara 7) processor has been added.
   9392      * Support for the VIS 4.0 instruction set has been added.
   9393 
   9394                                   [49]GCC 6.3
   9395 
   9396    This is the [50]list of problem reports (PRs) from GCC's bug tracking
   9397    system that are known to be fixed in the 6.3 release. This list might
   9398    not be complete (that is, it is possible that some PRs that have been
   9399    fixed are not listed here).
   9400 
   9401 Target Specific Changes
   9402 
   9403   IA-32/x86-64
   9404 
   9405      * Support for the deprecated pcommit instruction has been removed.
   9406 
   9407                                   [51]GCC 6.4
   9408 
   9409    This is the [52]list of problem reports (PRs) from GCC's bug tracking
   9410    system that are known to be fixed in the 6.4 release. This list might
   9411    not be complete (that is, it is possible that some PRs that have been
   9412    fixed are not listed here).
   9413 
   9414 [53]Operating Systems
   9415 
   9416   [54]RTEMS
   9417 
   9418      * The ABI changes on ARM so that no short enums are used by default.
   9419 
   9420                                   [55]GCC 6.5
   9421 
   9422    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   9423    system that are known to be fixed in the 6.5 release. This list might
   9424    not be complete (that is, it is possible that some PRs that have been
   9425    fixed are not listed here).
   9426 
   9427 
   9428     For questions related to the use of GCC, please consult these web
   9429     pages and the [57]GCC manuals. If that fails, the
   9430     [58]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9431     web pages and the development of GCC are welcome on our developer
   9432     list at [59]gcc (a] gcc.gnu.org. All of [60]our lists have public
   9433     archives.
   9434 
   9435    Copyright (C) [61]Free Software Foundation, Inc. Verbatim copying and
   9436    distribution of this entire article is permitted in any medium,
   9437    provided this notice is preserved.
   9438 
   9439    These pages are [62]maintained by the GCC team. Last modified
   9440    2026-06-20.
   9441 
   9442 References
   9443 
   9444    1. https://gcc.gnu.org/gcc-6/porting_to.html
   9445    2. https://gcc.gnu.org/onlinedocs/index.html#current
   9446    3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
   9447    4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
   9448    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
   9449    6. https://gcc.gnu.org/gcc-6/changes.html#general
   9450    7. https://gcc.gnu.org/gcc-6/changes.html#languages
   9451    8. https://www.openacc.org/
   9452    9. https://gcc.gnu.org/wiki/OpenACC
   9453   10. https://gcc.gnu.org/wiki/Offloading
   9454   11. https://gcc.gnu.org/gcc-6/changes.html#c-family
   9455   12. https://www.openmp.org/specifications/
   9456   13. https://www.cve.org/CVERecord?id=CVE-2014-1266
   9457   14. https://gcc.gnu.org/gcc-6/changes.html#c
   9458   15. https://gcc.gnu.org/gcc-6/changes.html#cxx
   9459   16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
   9460   17. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   9461   18. https://gcc.gnu.org/gcc-6/changes.html#libstdcxx
   9462   19. https://gcc.gnu.org/gcc-6/changes.html#fortran
   9463   20. https://gcc.gnu.org/gcc-6/changes.html#jit
   9464   21. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
   9465   22. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
   9466   23. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
   9467   24. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
   9468   25. https://gcc.gnu.org/gcc-6/changes.html#targets
   9469   26. https://gcc.gnu.org/gcc-6/changes.html#aarch64
   9470   27. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
   9471   28. https://gcc.gnu.org/gcc-6/changes.html#arm
   9472   29. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
   9473   30. https://gcc.gnu.org/gcc-6/changes.html#hsa
   9474   31. https://gcc.gnu.org/gcc-6/changes.html#x86
   9475   32. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
   9476   33. https://gcc.gnu.org/gcc-6/changes.html#mep
   9477   34. https://gcc.gnu.org/gcc-6/changes.html#msp430
   9478   35. https://gcc.gnu.org/gcc-6/changes.html#powerpc
   9479   36. https://gcc.gnu.org/gcc-6/changes.html#s390
   9480   37. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
   9481   38. https://gcc.gnu.org/gcc-6/changes.html#sh
   9482   39. https://gcc.gnu.org/gcc-6/changes.html#sparc
   9483   40. https://gcc.gnu.org/gcc-6/changes.html#os
   9484   41. https://gcc.gnu.org/gcc-6/changes.html#aix
   9485   42. https://gcc.gnu.org/gcc-6/changes.html#linux
   9486   43. https://musl.libc.org/
   9487   44. https://gcc.gnu.org/gcc-6/changes.html#rtems
   9488   45. https://gcc.gnu.org/gcc-6/changes.html#solaris
   9489   46. https://gcc.gnu.org/gcc-6/changes.html#windows
   9490   47. https://gcc.gnu.org/gcc-6/changes.html#GCC6.2
   9491   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
   9492   49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
   9493   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
   9494   51. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
   9495   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
   9496   53. https://gcc.gnu.org/gcc-6/changes.html#os64
   9497   54. https://gcc.gnu.org/gcc-6/changes.html#rtems64
   9498   55. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
   9499   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
   9500   57. https://gcc.gnu.org/onlinedocs/
   9501   58. mailto:gcc-help (a] gcc.gnu.org
   9502   59. mailto:gcc (a] gcc.gnu.org
   9503   60. https://gcc.gnu.org/lists.html
   9504   61. https://www.fsf.org/
   9505   62. https://gcc.gnu.org/about.html
   9506 ======================================================================
   9507 http://gcc.gnu.org/gcc-5/index.html
   9508                               GCC 5 Release Series
   9509 
   9510    (This release series is no longer supported.)
   9511 
   9512    October 10, 2017
   9513 
   9514    The [1]GNU project and the GCC developers are pleased to announce the
   9515    release of GCC 5.5.
   9516 
   9517    This release is a bug-fix release, containing fixes for regressions in
   9518    GCC 5.4 relative to previous releases of GCC.
   9519 
   9520 Release History
   9521 
   9522    GCC 5.5
   9523           October 10, 2017 ([2]changes, [3]documentation)
   9524 
   9525    GCC 5.4
   9526           June 3, 2016 ([4]changes, [5]documentation)
   9527 
   9528    GCC 5.3
   9529           December 4, 2015 ([6]changes, [7]documentation)
   9530 
   9531    GCC 5.2
   9532           July 16, 2015 ([8]changes, [9]documentation)
   9533 
   9534    GCC 5.1
   9535           April 22, 2015 ([10]changes, [11]documentation)
   9536 
   9537 References and Acknowledgements
   9538 
   9539    GCC used to stand for the GNU C Compiler, but since the compiler
   9540    supports several other languages aside from C, it now stands for the
   9541    GNU Compiler Collection.
   9542 
   9543    A list of [12]successful builds is updated as new information becomes
   9544    available.
   9545 
   9546    The GCC developers would like to thank the numerous people that have
   9547    contributed new features, improvements, bug fixes, and other changes as
   9548    well as test results to GCC. This [13]amazing group of volunteers is
   9549    what makes GCC successful.
   9550 
   9551    For additional information about GCC please refer to the [14]GCC
   9552    project web site or contact the [15]GCC development mailing list.
   9553 
   9554    To obtain GCC please use [16]our mirror sites or [17]our version
   9555    control system.
   9556 
   9557 
   9558     For questions related to the use of GCC, please consult these web
   9559     pages and the [18]GCC manuals. If that fails, the
   9560     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9561     web pages and the development of GCC are welcome on our developer
   9562     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   9563     archives.
   9564 
   9565    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   9566    distribution of this entire article is permitted in any medium,
   9567    provided this notice is preserved.
   9568 
   9569    These pages are [23]maintained by the GCC team. Last modified
   9570    2024-05-30.
   9571 
   9572 References
   9573 
   9574    1. http://www.gnu.org/
   9575    2. https://gcc.gnu.org/gcc-5/changes.html
   9576    3. https://gcc.gnu.org/onlinedocs/5.5.0/
   9577    4. https://gcc.gnu.org/gcc-5/changes.html
   9578    5. https://gcc.gnu.org/onlinedocs/5.4.0/
   9579    6. https://gcc.gnu.org/gcc-5/changes.html
   9580    7. https://gcc.gnu.org/onlinedocs/5.3.0/
   9581    8. https://gcc.gnu.org/gcc-5/changes.html
   9582    9. https://gcc.gnu.org/onlinedocs/5.2.0/
   9583   10. https://gcc.gnu.org/gcc-5/changes.html
   9584   11. https://gcc.gnu.org/onlinedocs/5.1.0/
   9585   12. https://gcc.gnu.org/gcc-5/buildstat.html
   9586   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   9587   14. https://gcc.gnu.org/index.html
   9588   15. mailto:gcc (a] gcc.gnu.org
   9589   16. https://gcc.gnu.org/mirrors.html
   9590   17. https://gcc.gnu.org/git.html
   9591   18. https://gcc.gnu.org/onlinedocs/
   9592   19. mailto:gcc-help (a] gcc.gnu.org
   9593   20. mailto:gcc (a] gcc.gnu.org
   9594   21. https://gcc.gnu.org/lists.html
   9595   22. https://www.fsf.org/
   9596   23. https://gcc.gnu.org/about.html
   9597 ======================================================================
   9598 http://gcc.gnu.org/gcc-5/changes.html
   9599                               GCC 5 Release Series
   9600                         Changes, New Features, and Fixes
   9601 
   9602 Caveats
   9603 
   9604      * The default mode for C is now -std=gnu11 instead of -std=gnu89.
   9605      * The C++ runtime library (libstdc++) uses a new ABI by default (see
   9606        [1]below).
   9607      * The Graphite framework for loop optimizations no longer requires
   9608        the CLooG library, only ISL version 0.14 (recommended) or 0.12.2.
   9609        The installation manual contains more information about
   9610        requirements to build GCC.
   9611      * The non-standard C++0x type traits has_trivial_default_constructor,
   9612        has_trivial_copy_constructor and has_trivial_copy_assign have been
   9613        deprecated and will be removed in a future version. The standard
   9614        C++11 traits is_trivially_default_constructible,
   9615        is_trivially_copy_constructible and is_trivially_copy_assignable
   9616        should be used instead.
   9617 
   9618 [2]General Optimizer Improvements
   9619 
   9620      * Inter-procedural optimization improvements:
   9621           + An Identical Code Folding (ICF) pass (controlled via
   9622             -fipa-icf) has been added. Compared to the identical code
   9623             folding performed by the Gold linker this pass does not
   9624             require function sections. It also performs merging before
   9625             inlining, so inter-procedural optimizations are aware of the
   9626             code re-use. On the other hand not all unifications performed
   9627             by a linker are doable by GCC which must honor aliasing
   9628             information. During link-time optimization of Firefox, this
   9629             pass unifies about 31000 functions, that is 14% overall.
   9630           + The devirtualization pass was significantly improved by adding
   9631             better support for speculative devirtualization and dynamic
   9632             type detection. About 50% of virtual calls in Firefox are now
   9633             speculatively devirtualized during link-time optimization.
   9634           + A new comdat localization pass allows the linker to eliminate
   9635             more dead code in presence of C++ inline functions.
   9636           + Virtual tables are now optimized. Local aliases are used to
   9637             reduce dynamic linking time of C++ virtual tables on ELF
   9638             targets and data alignment has been reduced to limit data
   9639             segment bloat.
   9640           + A new -fno-semantic-interposition option can be used to
   9641             improve code quality of shared libraries where interposition
   9642             of exported symbols is not allowed.
   9643           + Write-only variables are now detected and optimized out.
   9644           + With profile feedback the function inliner can now bypass
   9645             --param inline-insns-auto and --param inline-insns-single
   9646             limits for hot calls.
   9647           + The IPA reference pass was significantly sped up making it
   9648             feasible to enable -fipa-reference with -fprofile-generate.
   9649             This also solves a bottleneck seen when building Chromium with
   9650             link-time optimization.
   9651           + The symbol table and call-graph API was reworked to C++ and
   9652             simplified.
   9653           + The interprocedural propagation of constants now also
   9654             propagates alignments of pointer parameters. This for example
   9655             means that the vectorizer often does not need to generate loop
   9656             prologues and epilogues to make up for potential
   9657             misalignments.
   9658      * Link-time optimization improvements:
   9659           + One Definition Rule based merging of C++ types has been
   9660             implemented. Type merging enables better devirtualization and
   9661             alias analysis. Streaming extra information needed to merge
   9662             types adds about 2-6% of memory size and object size increase.
   9663             This can be controlled by -flto-odr-type-merging.
   9664           + Command-line optimization and target options are now streamed
   9665             on a per-function basis and honored by the link-time
   9666             optimizer. This change makes link-time optimization a more
   9667             transparent replacement of per-file optimizations. It is now
   9668             possible to build projects that require different optimization
   9669             settings for different translation units (such as -ffast-math,
   9670             -mavx, or -finline). Contrary to earlier GCC releases, the
   9671             optimization and target options passed on the link command
   9672             line are ignored.
   9673             Note that this applies only to those command-line options that
   9674             can be passed to optimize and target attributes. Command-line
   9675             options affecting global code generation (such as -fpic),
   9676             warnings (such as -Wodr), optimizations affecting the way
   9677             static variables are optimized (such as -fcommon), debug
   9678             output (such as -g), and --param parameters can be applied
   9679             only to the whole link-time optimization unit. In these cases,
   9680             it is recommended to consistently use the same options at both
   9681             compile time and link time.
   9682           + GCC bootstrap now uses slim LTO object files.
   9683           + Memory usage and link times were improved. Tree merging was
   9684             sped up, memory usage of GIMPLE declarations and types was
   9685             reduced, and, support for on-demand streaming of variable
   9686             constructors was added.
   9687      * Feedback directed optimization improvements:
   9688           + A new auto-FDO mode uses profiles collected by low overhead
   9689             profiling tools (perf) instead of more expensive program
   9690             instrumentation (via -fprofile-generate). SPEC2006 benchmarks
   9691             on x86-64 improve by 4.7% with auto-FDO and by 7.3% with
   9692             traditional feedback directed optimization.
   9693           + Profile precision was improved in presence of C++ inline and
   9694             extern inline functions.
   9695           + The new gcov-tool utility allows manipulating profiles.
   9696           + Profiles are now more tolerant to source file changes (this
   9697             can be controlled by --param profile-func-internal-id).
   9698      * Register allocation improvements:
   9699           + A new local register allocator (LRA) sub-pass, controlled by
   9700             -flra-remat, implements control-flow sensitive global register
   9701             rematerialization. Instead of spilling and restoring a
   9702             register value, it is recalculated if it is profitable. The
   9703             sub-pass improved SPEC2000 generated code by 1% and 0.5%
   9704             correspondingly on ARM and x86-64.
   9705           + Reuse of the PIC hard register, instead of using a fixed
   9706             register, was implemented on x86/x86-64 targets. This improves
   9707             generated PIC code performance as more hard registers can be
   9708             used. Shared libraries can significantly benefit from this
   9709             optimization. Currently it is switched on only for x86/x86-64
   9710             targets. As RA infrastructure is already implemented for PIC
   9711             register reuse, other targets might follow this in the future.
   9712           + A simple form of inter-procedural RA was implemented. When it
   9713             is known that a called function does not use caller-saved
   9714             registers, save/restore code is not generated around the call
   9715             for such registers. This optimization can be controlled by
   9716             -fipa-ra
   9717           + LRA is now much more effective at generating spills of general
   9718             registers into vector registers instead of memory on
   9719             architectures (e.g., modern Intel processors) where this is
   9720             profitable.
   9721      * UndefinedBehaviorSanitizer gained a few new sanitization options:
   9722           + -fsanitize=float-divide-by-zero: detect floating-point
   9723             division by zero;
   9724           + -fsanitize=float-cast-overflow: check that the result of
   9725             floating-point type to integer conversions do not overflow;
   9726           + -fsanitize=bounds: enable instrumentation of array bounds and
   9727             detect out-of-bounds accesses;
   9728           + -fsanitize=alignment: enable alignment checking, detect
   9729             various misaligned objects;
   9730           + -fsanitize=object-size: enable object size checking, detect
   9731             various out-of-bounds accesses.
   9732           + -fsanitize=vptr: enable checking of C++ member function calls,
   9733             member accesses and some conversions between pointers to base
   9734             and derived classes, detect if the referenced object does not
   9735             have the correct dynamic type.
   9736      * Pointer Bounds Checker, a bounds violation detector, has been added
   9737        and can be enabled via -fcheck-pointer-bounds. Memory accesses are
   9738        instrumented with run-time checks of used pointers against their
   9739        bounds to detect pointer bounds violations (overflows). The Pointer
   9740        Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
   9741        new ISA extension Intel MPX support. See the Pointer Bounds Checker
   9742        [3]Wiki page for more details.
   9743 
   9744 [4]New Languages and Language specific improvements
   9745 
   9746      * [5]OpenMP 4.0 specification offloading features are now supported
   9747        by the C, C++, and Fortran compilers. Generic changes:
   9748           + Infrastructure (suitable for any vendor).
   9749           + Testsuite which covers offloading from the [6]OpenMP 4.0
   9750             Examples document.
   9751        Specific for upcoming Intel Xeon Phi products:
   9752           + Run-time library.
   9753           + Card emulator.
   9754      * GCC 5 includes a preliminary implementation of the OpenACC 2.0a
   9755        specification. OpenACC is intended for programming accelerator
   9756        devices such as GPUs. See [7]the OpenACC wiki page for more
   9757        information.
   9758 
   9759   [8]C family
   9760 
   9761      * The default setting of the -fdiagnostics-color= command-line option
   9762        is now [9]configurable when building GCC using configuration option
   9763        --with-diagnostics-color=. The possible values are: never, always,
   9764        auto and auto-if-env. The new default auto uses color only when the
   9765        standard error is a terminal. The default in GCC 4.9 was
   9766        auto-if-env, which is equivalent to auto if there is a non-empty
   9767        GCC_COLORS environment variable, and never otherwise. As in GCC
   9768        4.9, an empty GCC_COLORS variable in the environment will always
   9769        disable colors, no matter what the default is or what command-line
   9770        options are used.
   9771      * A new command-line option -Wswitch-bool has been added for the C
   9772        and C++ compilers, which warns whenever a switch statement has an
   9773        index of boolean type.
   9774      * A new command-line option -Wlogical-not-parentheses has been added
   9775        for the C and C++ compilers, which warns about "logical not" used
   9776        on the left hand side operand of a comparison.
   9777      * A new command-line option -Wsizeof-array-argument has been added
   9778        for the C and C++ compilers, which warns when the sizeof operator
   9779        is applied to a parameter that has been declared as an array in a
   9780        function definition.
   9781      * A new command-line option -Wbool-compare has been added for the C
   9782        and C++ compilers, which warns about boolean expressions compared
   9783        with an integer value different from true/false.
   9784      * Full support for Cilk Plus has been added to the GCC compiler. Cilk
   9785        Plus is an extension to the C and C++ languages to support data and
   9786        task parallelism.
   9787      * A new attribute no_reorder prevents reordering of selected symbols
   9788        against other such symbols or inline assembler. This enables to
   9789        link-time optimize the Linux kernel without having to resort to
   9790        -fno-toplevel-reorder that disables several optimizations.
   9791      * New preprocessor constructs, __has_include and __has_include_next,
   9792        to test the availability of headers have been added.
   9793        This demonstrates a way to include the header <optional> only if it
   9794        is available:
   9795 
   9796 #ifdef __has_include
   9797 #  if __has_include(<optional>)
   9798 #    include <optional>
   9799 #    define have_optional 1
   9800 #  elif __has_include(<experimental/optional>)
   9801 #    include <experimental/optional>
   9802 #    define have_optional 1
   9803 #    define experimental_optional
   9804 #  else
   9805 #    define have_optional 0
   9806 #  endif
   9807 #endif
   9808 
   9809        The header search paths for __has_include and __has_include_next
   9810        are equivalent to those of the standard directive #include and the
   9811        extension #include_next respectively.
   9812      * A new built-in function-like macro to determine the existence of an
   9813        attribute, __has_attribute, has been added. The equivalent built-in
   9814        macro __has_cpp_attribute was added to C++ to support
   9815        [10]Feature-testing recommendations for C++. The macro
   9816        __has_attribute is added to all C-like languages as an extension:
   9817 
   9818 int
   9819 #ifdef __has_attribute
   9820 #  if __has_attribute(__noinline__)
   9821   __attribute__((__noinline__))
   9822 #  endif
   9823 #endif
   9824 foo(int x);
   9825 
   9826        If an attribute exists, a nonzero constant integer is returned. For
   9827        standardized C++ attributes a date is returned, otherwise the
   9828        constant returned is 1. Both __has_attribute and
   9829        __has_cpp_attribute will add underscores to an attribute name if
   9830        necessary to resolve the name. For C++11 and onwards the attribute
   9831        may be scoped.
   9832      * A new set of built-in functions for arithmetics with overflow
   9833        checking has been added: __builtin_add_overflow,
   9834        __builtin_sub_overflow and __builtin_mul_overflow and for
   9835        compatibility with clang also other variants. These builtins have
   9836        two integral arguments (which don't need to have the same type),
   9837        the arguments are extended to infinite precision signed type, +, -
   9838        or * is performed on those, and the result is stored in an integer
   9839        variable pointed to by the last argument. If the stored value is
   9840        equal to the infinite precision result, the built-in functions
   9841        return false, otherwise true. The type of the integer variable that
   9842        will hold the result can be different from the types of the first
   9843        two arguments. The following snippet demonstrates how this can be
   9844        used in computing the size for the calloc function:
   9845 
   9846 void *
   9847 calloc (size_t x, size_t y)
   9848 {
   9849   size_t sz;
   9850   if (__builtin_mul_overflow (x, y, &sz))
   9851     return NULL;
   9852   void *ret = malloc (sz);
   9853   if (ret) memset (res, 0, sz);
   9854   return ret;
   9855 }
   9856 
   9857        On e.g. i?86 or x86-64 the above will result in a mul instruction
   9858        followed by a jump on overflow.
   9859      * The option -fextended-identifiers is now enabled by default for
   9860        C++, and for C99 and later C versions. Various bugs in the
   9861        implementation of extended identifiers have been fixed.
   9862 
   9863   [11]C
   9864 
   9865      * The default mode has been changed to -std=gnu11.
   9866      * A new command-line option -Wc90-c99-compat has been added to warn
   9867        about features not present in ISO C90, but present in ISO C99.
   9868      * A new command-line option -Wc99-c11-compat has been added to warn
   9869        about features not present in ISO C99, but present in ISO C11.
   9870      * It is possible to disable warnings about conversions between
   9871        pointers that have incompatible types via a new warning option
   9872        -Wno-incompatible-pointer-types; warnings about implicit
   9873        incompatible integer to pointer and pointer to integer conversions
   9874        via a new warning option -Wno-int-conversion; and warnings about
   9875        qualifiers on pointers being discarded via a new warning option
   9876        -Wno-discarded-qualifiers.
   9877      * To allow proper use of const qualifiers with multidimensional
   9878        arrays, GCC will not warn about incompatible pointer types anymore
   9879        for conversions between pointers to arrays with and without const
   9880        qualifier (except when using -pedantic). Instead, a new warning is
   9881        emitted only if the const qualifier is lost. This can be controlled
   9882        with a new warning option -Wno-discarded-array-qualifiers.
   9883      * The C front end now generates more precise caret diagnostics.
   9884      * The -pg command-line option now only affects the current file in an
   9885        LTO build.
   9886 
   9887   [12]C++
   9888 
   9889      * G++ now supports [13]C++14 variable templates.
   9890      * -Wnon-virtual-dtor doesn't warn anymore for final classes.
   9891      * Excessive template instantiation depth is now a fatal error. This
   9892        prevents excessive diagnostics that usually do not help to identify
   9893        the problem.
   9894      * G++ and libstdc++ now implement the feature-testing macros from
   9895        [14]Feature-testing recommendations for C++.
   9896      * G++ now allows typename in a template template parameter.
   9897 
   9898 template<template<typename> typename X> struct D; // OK
   9899 
   9900      * G++ now supports [15]C++14 aggregates with non-static data member
   9901        initializers.
   9902 
   9903 struct A { int i, j = i; };
   9904 A a = { 42 }; // a.j is also 42
   9905 
   9906      * G++ now supports [16]C++14 extended constexpr.
   9907 
   9908 constexpr int f (int i)
   9909 {
   9910   int j = 0;
   9911   for (; i > 0; --i)
   9912     ++j;
   9913   return j;
   9914 }
   9915 
   9916 constexpr int i = f(42); // i is 42
   9917 
   9918      * G++ now supports the [17]C++14 sized deallocation functions.
   9919 
   9920 void operator delete (void *, std::size_t) noexcept;
   9921 void operator delete[] (void *, std::size_t) noexcept;
   9922 
   9923      * A new One Definition Rule violation warning (controlled by -Wodr)
   9924        detects mismatches in type definitions and virtual table contents
   9925        during link-time optimization.
   9926      * New warnings -Wsuggest-final-types and -Wsuggest-final-methods help
   9927        developers to annotate programs with final specifiers (or anonymous
   9928        namespaces) to improve code generation. These warnings can be used
   9929        at compile time, but they are more useful in combination with
   9930        link-time optimization.
   9931      * G++ no longer supports [18]N3639 variable length arrays, as they
   9932        were removed from the C++14 working paper prior to ratification.
   9933        GNU VLAs are still supported, so VLA support is now the same in
   9934        C++14 mode as in C++98 and C++11 modes.
   9935      * G++ now allows passing a non-trivially-copyable class via C
   9936        varargs, which is conditionally-supported with
   9937        implementation-defined semantics in the standard. This uses the
   9938        same calling convention as a normal value parameter.
   9939      * G++ now defaults to -fabi-version=9 and -fabi-compat-version=2. So
   9940        various mangling bugs are fixed, but G++ will still emit aliases
   9941        with the old, wrong mangling where feasible. -Wabi=2 will warn
   9942        about differences between ABI version 2 and the current setting.
   9943      * G++ 5.2 fixes the alignment of std::nullptr_t. Most code is likely
   9944        to be unaffected, but -Wabi=8 will warn about a non-static data
   9945        member with type std::nullptr_t which changes position due to this
   9946        change.
   9947 
   9948     [19]Runtime Library (libstdc++)
   9949 
   9950      * A [20]Dual ABI is provided by the library. A new ABI is enabled by
   9951        default. The old ABI is still supported and can be used by defining
   9952        the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
   9953        standard library headers.
   9954      * A new implementation of std::string is enabled by default, using
   9955        the small string optimization instead of copy-on-write reference
   9956        counting.
   9957      * A new implementation of std::list is enabled by default, with an
   9958        O(1) size() function;
   9959      * [21]Full support for C++11, including the following new features:
   9960           + std::deque and std::vector<bool> meet the allocator-aware
   9961             container requirements;
   9962           + movable and swappable iostream classes;
   9963           + support for std::align and std::aligned_union;
   9964           + type traits std::is_trivially_copyable,
   9965             std::is_trivially_constructible, std::is_trivially_assignable
   9966             etc.;
   9967           + I/O manipulators std::put_time, std::get_time, std::hexfloat
   9968             and std::defaultfloat;
   9969           + generic locale-aware std::isblank;
   9970           + locale facets for Unicode conversion;
   9971           + atomic operations for std::shared_ptr;
   9972           + std::notify_all_at_thread_exit() and functions for making
   9973             futures ready at thread exit.
   9974      * Support for the C++11 hexfloat manipulator changes how the num_put
   9975        facet formats floating point types when
   9976        ios_base::fixed|ios_base::scientific is set in a stream's fmtflags.
   9977        This change affects all language modes, even though the C++98
   9978        standard gave no special meaning to that combination of flags. To
   9979        prevent the use of hexadecimal notation for floating point types
   9980        use str.unsetf(std::ios_base::floatfield) to clear the relevant
   9981        bits in str.flags().
   9982      * [22]Full experimental support for C++14, including the following
   9983        new features:
   9984           + std::is_final type trait;
   9985           + heterogeneous comparison lookup in associative containers.
   9986           + global functions cbegin, cend, rbegin, rend, crbegin, and
   9987             crend for range access to containers, arrays and initializer
   9988             lists.
   9989      * [23]Improved experimental support for the Library Fundamentals TS,
   9990        including:
   9991           + class std::experimental::any;
   9992           + function template std::experimental::apply;
   9993           + function template std::experimental::sample;
   9994           + function template std::experimental::search and related
   9995             searcher types;
   9996           + variable templates for type traits;
   9997           + function template std::experimental::not_fn.
   9998      * New random number distributions logistic_distribution and
   9999        uniform_on_sphere_distribution as extensions.
   10000      * [24]GDB Xmethods for containers and std::unique_ptr.
   10001 
   10002   [25]Fortran
   10003 
   10004      * Compatibility notice:
   10005           + The version of the module files (.mod) has been incremented.
   10006           + For free-form source files [26]-Werror=line-truncation is now
   10007             enabled by default. Note that comments exceeding the line
   10008             length are not diagnosed. (For fixed-form source code, the
   10009             same warning is available but turned off by default, such that
   10010             excess characters are ignored. -ffree-line-length-n and
   10011             -ffixed-line-length-n can be used to modify the default line
   10012             lengths of 132 and 72 columns, respectively.)
   10013           + The -Wtabs option is now more sensible: with -Wtabs the
   10014             compiler warns if it encounters tabs and with -Wno-tabs this
   10015             warning is turned off. Before, -Wno-tabs warned and -Wtabs
   10016             disabled the warning. As before, this warning is also enabled
   10017             by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
   10018             options of -std=.
   10019      * Incomplete support for colorizing diagnostics emitted by gfortran
   10020        has been added. The option [27]-fdiagnostics-color controls when
   10021        color is used in diagnostics. The default value of this option can
   10022        be [28]configured when building GCC. The GCC_COLORS environment
   10023        variable can be used to customize the colors or disable coloring
   10024        completely. Sample diagnostics output:
   10025       $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
   10026       test.f90:6:1:
   10027 
   10028        0 continue
   10029        1
   10030       Error: Zero is not a valid statement label at (1)
   10031       test.f90:9:6:
   10032 
   10033          USE foo
   10034             1
   10035       Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
   10036 
   10037      * The -Wuse-without-only option has been added to warn when a USE
   10038        statement has no ONLY qualifier and thus implicitly imports all
   10039        public entities of the used module.
   10040      * Formatted READ and WRITE statements now work correctly in
   10041        locale-aware programs. For more information and potential caveats,
   10042        see [29]Section 5.3 Thread-safety of the runtime library in the
   10043        manual.
   10044      * [30]Fortran 2003:
   10045           + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
   10046             IEEE_ARITHMETIC) are now supported.
   10047      * [31]Fortran 2008:
   10048           + [32]Coarrays: Full experimental support of Fortran 2008's
   10049             coarrays with -fcoarray=lib except for allocatable/pointer
   10050             components of derived-type coarrays. GCC currently only ships
   10051             with a single-image library (libcaf_single), but multi-image
   10052             support based on MPI and GASNet is provided by the libraries
   10053             of the [33]OpenCoarrays project.
   10054      * TS18508 Additional Parallel Features in Fortran:
   10055           + Support for the collective intrinsic subroutines CO_MAX,
   10056             CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
   10057             including -fcoarray=lib support.
   10058           + Support for the new atomic intrinsics has been added,
   10059             including -fcoarray=lib support.
   10060      * Fortran 2015:
   10061           + Support for IMPLICIT NONE (external, type).
   10062           + ERROR STOP is now permitted in pure procedures.
   10063 
   10064   [34]Go
   10065 
   10066      * GCC 5 provides a complete implementation of the Go 1.4.2 release.
   10067      * Building GCC 5 with Go enabled will install two new programs:
   10068        [35]go and [36]gofmt.
   10069 
   10070 [37]libgccjit
   10071 
   10072    New in GCC 5 is the ability to build GCC as a shared library for
   10073    embedding in other processes (such as interpreters), suitable for
   10074    Just-In-Time compilation to machine code.
   10075 
   10076    The shared library has a [38]C API and a [39]C++ wrapper API providing
   10077    some "syntactic sugar". There are also bindings available from 3rd
   10078    parties for [40]Python and for [41]D.
   10079 
   10080    For example, this library can be used by interpreters for [42]compiling
   10081    functions from bytecode to machine code.
   10082 
   10083    The library can also be used for ahead-of-time compilation, enabling
   10084    GCC to be plugged into a pre-existing front end. An example of using
   10085    this to build a compiler for an esoteric language we'll refer to as
   10086    "brainf" can be seen [43]here.
   10087 
   10088    libgccjit is licensed under the GPLv3 (or at your option, any later
   10089    version)
   10090 
   10091    It should be regarded as experimental at this time.
   10092 
   10093 [44]New Targets and Target Specific Improvements
   10094 
   10095   [45]Reporting stack usage
   10096 
   10097      * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
   10098        -fstack-usage option.
   10099 
   10100   [46]AArch64
   10101 
   10102      * Code generation for the ARM Cortex-A57 processor has been improved.
   10103        A more accurate instruction scheduling model for the processor is
   10104        now used, and a number of compiler tuning parameters have been set
   10105        to offer increased performance when compiling with -mcpu=cortex-a57
   10106        or -mtune=cortex-a57.
   10107      * A workaround for the ARM Cortex-A53 erratum 835769 has been added
   10108        and can be enabled by giving the -mfix-cortex-a53-835769 option.
   10109        Alternatively it can be enabled by default by configuring GCC with
   10110        the --enable-fix-cortex-a53-835769 option.
   10111      * The optional cryptographic extensions to the ARMv8-A architecture
   10112        are no longer enabled by default when specifying the
   10113        -mcpu=cortex-a53, -mcpu=cortex-a57 or -mcpu=cortex-a57.cortex-a53
   10114        options. To enable these extensions add +crypto to the value of
   10115        -mcpu or -march e.g. -mcpu=cortex-a53+crypto.
   10116      * Support has been added for the following processors (GCC
   10117        identifiers in parentheses): ARM Cortex-A72 (cortex-a72) and
   10118        initial support for its big.LITTLE combination with the ARM
   10119        Cortex-A53 (cortex-a72.cortex-a53), Cavium ThunderX (thunderx),
   10120        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   10121        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   10122        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   10123        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   10124        support for the Cortex-A72.
   10125      * The transitional options -mlra and -mno-lra have been removed. The
   10126        AArch64 back end now uses the local register allocator (LRA) only.
   10127 
   10128   [47]ARM
   10129 
   10130      * Thumb-1 assembly code is now generated in unified syntax. The new
   10131        option -masm-syntax-unified specifies whether inline assembly code
   10132        is using unified syntax. By default the option is off which means
   10133        non-unified syntax is used. However this is subject to change in
   10134        future releases. Eventually the non-unified syntax will be
   10135        deprecated.
   10136      * It is now a configure-time error to use the --with-cpu configure
   10137        option with either of --with-tune or --with-arch.
   10138      * Code generation for the ARM Cortex-A57 processor has been improved.
   10139        A more accurate instruction scheduling model for the processor is
   10140        now used, and a number of compiler tuning parameters have been set
   10141        to offer increased performance when compiling with -mcpu=cortex-a57
   10142        or -mtune=cortex-a57.
   10143      * Support has been added for the following processors (GCC
   10144        identifiers in parentheses): ARM Cortex-A17 (cortex-a17) and
   10145        initial support for its big.LITTLE combination with the ARM
   10146        Cortex-A7 (cortex-a17.cortex-a7), ARM Cortex-A72 (cortex-a72) and
   10147        initial support for its big.LITTLE combination with the ARM
   10148        Cortex-A53 (cortex-a72.cortex-a53), ARM Cortex-M7 (cortex-m7),
   10149        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   10150        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   10151        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   10152        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   10153        support for the Cortex-A72.
   10154      * The deprecated option -mwords-little-endian has been removed.
   10155      * The options -mapcs, -mapcs-frame, -mtpcs-frame and
   10156        -mtpcs-leaf-frame which are only applicable to the old ABI have
   10157        been deprecated.
   10158      * The transitional options -mlra and -mno-lra have been removed. The
   10159        ARM back end now uses the local register allocator (LRA) only.
   10160 
   10161   [48]AVR
   10162 
   10163      * Support has been added for the devices ATtiny4/5/9/10/20/40. This
   10164        requires Binutils 2.25 or newer.
   10165      * The port uses a new scheme to describe supported devices: For each
   10166        supported device, the compiler provides a device-specific [49]spec
   10167        file. If the compiler is used together with AVR-LibC, this requires
   10168        at least GCC 5.2 and a version of AVR-LibC which implements
   10169        [50]feature #44574.
   10170        As a consequence, the compiler no more supports individual devices
   10171        like ATmega8. Specifying, say, -mmcu=atmega8 triggers the usage of
   10172        the device-specific [51]spec file specs-atmega8 which is part of
   10173        the installation and describes options for the sub-processes like
   10174        compiler proper, assembler and linker. You can add support for a
   10175        new device -mmcu=mydevice as follows:
   10176          1. In an empty directory /someplace, create a new directory
   10177             device-specs.
   10178          2. Copy a device spec file from the installed device-specs
   10179             folder, follow the comments in that file and then save it as
   10180             /someplace/device-specs/specs-mydevice.
   10181          3. Add -B /someplace -mmcu=mydevice to the compiler's
   10182             command-line options. Notice that /someplace must specify an
   10183             absolute path and that mydevice must not start with "avr".
   10184          4. Provided you have a device-specific library libmydevice.a
   10185             available, you can put it at /someplace, dito for a
   10186             device-specific startup file crtmydevice.o.
   10187        The contents of the device spec files depend on the compiler's
   10188        configuration, in particular on --with-avrlibc=no and whether or
   10189        not it is configured for RTEMS.
   10190      * A new command-line option -nodevicelib has been added. It prevents
   10191        the compiler from linking against AVR-LibC's device-specific
   10192        library libdevice.a.
   10193      * The following three command-line options have been added:
   10194 
   10195         -mrmw
   10196                 Set if the device supports the read-modify-write
   10197                 instructions LAC, LAS, LAT and XCH.
   10198 
   10199         -mn-flash=size
   10200                 Specify the flash size of the device in units of 64 KiB,
   10201                 rounded up to the next integer as needed. This option
   10202                 affects the availability of the [52]AVR address-spaces.
   10203 
   10204         -mskip-bug
   10205                 Set if the device is affected by the respective silicon
   10206                 bug.
   10207 
   10208        These options are used internally in order to communicate between
   10209        the compiler and the device-spces file. They are set in the
   10210        device-specs file as needed. Don't set them by hand.
   10211 
   10212   [53]IA-32/x86-64
   10213 
   10214      * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
   10215        CPU codenamed Skylake Server was added to GCC. That includes inline
   10216        assembly support, new intrinsics, and basic autovectorization.
   10217        These new AVX-512 extensions are available via the following GCC
   10218        switches: AVX-512 Vector Length EVEX feature: -mavx512vl, AVX-512
   10219        Byte and Word instructions: -mavx512bw, AVX-512 Dword and Qword
   10220        instructions: -mavx512dq, AVX-512 FMA-52 instructions: -mavx512ifma
   10221        and for AVX-512 Vector Bit Manipulation Instructions: -mavx512vbmi.
   10222      * New ISA extensions support Intel MPX was added to GCC. This new
   10223        extension is available via the -mmpx compiler switch. Intel MPX is
   10224        a set of processor features which, with compiler, run-time library
   10225        and OS support, brings increased robustness to software by run-time
   10226        checking pointer references against their bounds. In GCC Intel MPX
   10227        is supported by Pointer Bounds Checker and libmpx run-time
   10228        libraries.
   10229      * The new -mrecord-mcount option for -pg generates a Linux kernel
   10230        style table of pointers to mcount or __fentry__ calls at the
   10231        beginning of functions. The new -mnop-mcount option in addition
   10232        also generates nops in place of the __fentry__ or mcount call, so
   10233        that a call per function can be later patched in. This can be used
   10234        for low overhead tracing or hot code patching.
   10235      * The new -malign-data option controls how GCC aligns variables.
   10236        -malign-data=compat uses increased alignment compatible with GCC
   10237        4.8 and earlier, -malign-data=abi uses alignment as specified by
   10238        the psABI, and -malign-data=cacheline uses increased alignment to
   10239        match the cache line size. -malign-data=compat is the default.
   10240      * The new -mskip-rax-setup option skips setting up the RAX register
   10241        when SSE is disabled and there are no variable arguments passed in
   10242        vector registers. This can be used to optimize the Linux kernel.
   10243 
   10244   [54]MIPS
   10245 
   10246      * MIPS Releases 3 and 5 are now directly supported. Use the
   10247        command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
   10248        to enable code-generation for these processors.
   10249      * The Imagination P5600 processor is now supported using the
   10250        -march=p5600 command-line option.
   10251      * The Cavium Octeon3 processor is now supported using the
   10252        -march=octeon3 command-line option.
   10253      * MIPS Release 6 is now supported using the -mips32r6 and -mips64r6
   10254        command-line options.
   10255      * The o32 ABI has been modified and extended. The o32 64-bit
   10256        floating-point register support is now obsolete and has been
   10257        removed. It has been replaced by three ABI extensions FPXX, FP64A,
   10258        and FP64. The meaning of the -mfp64 command-line option has
   10259        changed. It is now used to enable the FP64A and FP64 ABI
   10260        extensions.
   10261           + The FPXX extension requires that code generated to access
   10262             double-precision values use even-numbered registers. Code that
   10263             adheres to this extension is link-compatible with all other
   10264             o32 double-precision ABI variants and will execute correctly
   10265             in all hardware FPU modes. The command-line options -mabi=32
   10266             -mfpxx can be used to enable this extension. MIPS II is the
   10267             minimum processor required.
   10268           + The o32 FP64A extension requires that floating-point registers
   10269             be 64-bit and odd-numbered single-precision registers are not
   10270             allowed. Code that adheres to the o32 FP64A variant is
   10271             link-compatible with all other o32 double-precision ABI
   10272             variants. The command-line options -mabi=32 -mfp64
   10273             -mno-odd-spreg can be used to enable this extension. MIPS32R2
   10274             is the minimum processor required.
   10275           + The o32 FP64 extension also requires that floating-point
   10276             registers be 64-bit, but permits the use of single-precision
   10277             registers. Code that adheres to the o32 FP64 variant is
   10278             link-compatible with o32 FPXX and o32 FP64A variants only,
   10279             i.e. it is not compatible with the original o32
   10280             double-precision ABI. The command-line options -mabi=32 -mfp64
   10281             -modd-spreg can be used to enable this extension. MIPS32R2 is
   10282             the minimum processor required.
   10283        The new ABI variants can be enabled by default using the configure
   10284        time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32.
   10285        It is strongly recommended that all vendors begin to set o32 FPXX
   10286        as the default ABI. This will be required to run the generated code
   10287        on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and
   10288        MIPSR6 cores.
   10289      * GCC will now pass all floating-point options to the assembler if
   10290        GNU binutils 2.25 is used. As a result, any inline assembly code
   10291        that uses hard-float instructions should be amended to include a
   10292        .set directive to override the global assembler options when
   10293        compiling for soft-float targets.
   10294 
   10295   [55]NDS32
   10296 
   10297      * The variadic function ABI implementation is now compatible with
   10298        past Andes toolchains where the caller uses registers to pass
   10299        arguments and the callee is in charge of pushing them on stack.
   10300      * The options -mforce-fp-as-gp, -mforbid-fp-as-gp, and -mex9 have
   10301        been removed since they are not yet available in the nds32 port of
   10302        GNU binutils.
   10303      * A new option -mcmodel=[small|medium|large] supports varied code
   10304        models on code generation. The -mgp-direct option became
   10305        meaningless and can be discarded.
   10306 
   10307   [56]RX
   10308 
   10309      * A new command-line option -mno-allow-string-insns can be used to
   10310        disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
   10311        SWHILE and RMPA instructions. An erratum released by Renesas shows
   10312        that it is unsafe to use these instructions on addresses within the
   10313        I/O space of the processor. The new option can be used when the
   10314        programmer is concerned that the I/O space might be accessed. The
   10315        default is still to enable these instructions.
   10316 
   10317   [57]SH
   10318 
   10319      * The compiler will now pass the appropriate --isa= option to the
   10320        assembler.
   10321      * The default handling for the GBR has been changed from call
   10322        clobbered to call preserved. The old behavior can be reinstated by
   10323        specifying the option -fcall-used-gbr.
   10324      * Support for the SH4A fpchg instruction has been added which will be
   10325        utilized when switching between single and double precision FPU
   10326        modes.
   10327      * The compiler no longer uses the __fpscr_values array for switching
   10328        between single and double FPU precision modes on non-SH4A targets.
   10329        Instead mode switching will now be performed by storing, modifying
   10330        and reloading the FPSCR, so that other FPSCR bits are preserved
   10331        across mode switches. The __fpscr_values array that is defined in
   10332        libgcc is still present for backwards compatibility, but it will
   10333        not be referenced by compiler generated code anymore.
   10334      * New builtin functions __builtin_sh_get_fpscr and
   10335        __builtin_sh_set_fpscr have been added. The __builtin_sh_set_fpscr
   10336        function will mask the specified bits in such a way that the SZ, PR
   10337        and FR mode bits will be preserved, while changing the other bits.
   10338        These new functions do not reference the __fpscr_values array. The
   10339        old functions __set_fpscr and __get_fpscr in libgcc which access
   10340        the __fpscr_values array are still present for backwards
   10341        compatibility, but their usage is highly discouraged.
   10342      * Some improvements to code generated for __atomic built-in
   10343        functions.
   10344      * When compiling for SH2E the compiler will no longer force the usage
   10345        of delay slots for conditional branch instructions bt and bf. The
   10346        old behavior can be reinstated (e.g. to work around a hardware bug
   10347        in the original SH7055) by specifying the new option
   10348        -mcbranch-force-delay-slot.
   10349 
   10350 [58]Operating Systems
   10351 
   10352   [59]AIX
   10353 
   10354      * GCC now supports stabs debugging continuation lines to allow long
   10355        stabs debug information without overflow that generates AIX linker
   10356        errors.
   10357 
   10358   [60]DragonFly BSD
   10359 
   10360      * GCC now supports the DragonFly BSD operating system.
   10361 
   10362   [61]FreeBSD
   10363 
   10364      * GCC now supports the FreeBSD operating system for the arm port
   10365        through the arm*-*-freebsd* target triplets.
   10366 
   10367   [62]VxWorks MILS
   10368 
   10369      * GCC now supports the MILS (Multiple Independent Levels of Security)
   10370        variant of WindRiver's VxWorks operating system for PowerPC
   10371        targets.
   10372 
   10373 Other significant improvements
   10374 
   10375      * The gcc-ar, gcc-nm, gcc-ranlib wrappers now understand a -B option
   10376        to set the compiler to use.
   10377 
   10378      * When the new command-line option -freport-bug is used, GCC
   10379        automatically generates a developer-friendly reproducer whenever an
   10380        internal compiler error is encountered.
   10381 
   10382                                   [63]GCC 5.2
   10383 
   10384    This is the [64]list of problem reports (PRs) from GCC's bug tracking
   10385    system that are known to be fixed in the 5.2 release. This list might
   10386    not be complete (that is, it is possible that some PRs that have been
   10387    fixed are not listed here).
   10388 
   10389 Target Specific Changes
   10390 
   10391   IA-32/x86-64
   10392 
   10393      * Support for new AMD instructions monitorx and mwaitx has been
   10394        added. This includes new intrinsic and built-in support. It is
   10395        enabled through option -mmwaitx. The instructions monitorx and
   10396        mwaitx implement the same functionality as the old monitor and
   10397        mwait instructions. In addition, mwaitx adds a configurable timer.
   10398        The timer value is received as third argument and stored in
   10399        register %ebx.
   10400 
   10401   S/390, System z, IBM z Systems
   10402 
   10403      * Support for the IBM z13 processor has been added. When using the
   10404        -march=z13 option, the compiler will generate code making use of
   10405        the new instructions and registers introduced with the vector
   10406        extension facility. The -mtune=z13 option enables z13 specific
   10407        instruction scheduling without making use of new instructions.
   10408        Compiling code with -march=z13 reduces the default alignment of
   10409        vector types bigger than 8 bytes to 8. This is an ABI change and
   10410        care must be taken when linking modules compiled with different
   10411        arch levels which interchange variables containing vector type
   10412        values. For newly compiled code the GNU linker will emit a warning.
   10413      * The -mzvector option enables a C/C++ language extension. This
   10414        extension provides a new keyword vector which can be used to define
   10415        vector type variables. (Note: This is not available when enforcing
   10416        strict standard compliance e.g. with -std=c99. Either enable GNU
   10417        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   10418        Additionally a set of overloaded builtins is provided which is
   10419        partially compatible to the PowerPC Altivec builtins. In order to
   10420        make use of these builtins the vecintrin.h header file needs to be
   10421        included.
   10422 
   10423                                   [65]GCC 5.3
   10424 
   10425    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   10426    system that are known to be fixed in the 5.3 release. This list might
   10427    not be complete (that is, it is possible that some PRs that have been
   10428    fixed are not listed here).
   10429 
   10430 Target Specific Changes
   10431 
   10432   IA-32/x86-64
   10433 
   10434      * GCC now supports the Intel CPU named Skylake with AVX-512
   10435        extensions through -march=skylake-avx512. The switch enables the
   10436        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   10437        AVX-512DQ.
   10438 
   10439   S/390, System z, IBM z Systems
   10440 
   10441      * With this version of GCC IBM z Systems support has been added to
   10442        the GO runtime environment. GCC 5.3 has proven to be able to
   10443        compile larger GO applications on IBM z Systems.
   10444 
   10445                                   [67]GCC 5.4
   10446 
   10447    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   10448    system that are known to be fixed in the 5.4 release. This list might
   10449    not be complete (that is, it is possible that some PRs that have been
   10450    fixed are not listed here).
   10451 
   10452                                   [69]GCC 5.5
   10453 
   10454    This is the [70]list of problem reports (PRs) from GCC's bug tracking
   10455    system that are known to be fixed in the 5.5 release. This list might
   10456    not be complete (that is, it is possible that some PRs that have been
   10457    fixed are not listed here).
   10458 
   10459 Target Specific Changes
   10460 
   10461   IA-32/x86-64
   10462 
   10463      * Support for the pcommit instruction has been removed.
   10464 
   10465 
   10466     For questions related to the use of GCC, please consult these web
   10467     pages and the [71]GCC manuals. If that fails, the
   10468     [72]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10469     web pages and the development of GCC are welcome on our developer
   10470     list at [73]gcc (a] gcc.gnu.org. All of [74]our lists have public
   10471     archives.
   10472 
   10473    Copyright (C) [75]Free Software Foundation, Inc. Verbatim copying and
   10474    distribution of this entire article is permitted in any medium,
   10475    provided this notice is preserved.
   10476 
   10477    These pages are [76]maintained by the GCC team. Last modified
   10478    2026-06-03.
   10479 
   10480 References
   10481 
   10482    1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   10483    2. https://gcc.gnu.org/gcc-5/changes.html#general
   10484    3. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
   10485    4. https://gcc.gnu.org/gcc-5/changes.html#languages
   10486    5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
   10487    6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
   10488    7. https://gcc.gnu.org/wiki/OpenACC
   10489    8. https://gcc.gnu.org/gcc-5/changes.html#c-family
   10490    9. https://gcc.gnu.org/install/configure.html
   10491   10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   10492   11. https://gcc.gnu.org/gcc-5/changes.html#c
   10493   12. https://gcc.gnu.org/gcc-5/changes.html#cxx
   10494   13. https://gcc.gnu.org/projects/cxx1y.html
   10495   14. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   10496   15. https://gcc.gnu.org/projects/cxx1y.html
   10497   16. https://gcc.gnu.org/projects/cxx1y.html
   10498   17. https://gcc.gnu.org/projects/cxx1y.html
   10499   18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
   10500   19. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   10501   20. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
   10502   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
   10503   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   10504   23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   10505   24. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
   10506   25. https://gcc.gnu.org/gcc-5/changes.html#fortran
   10507   26. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
   10508   27. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
   10509   28. https://gcc.gnu.org/install/configure.html
   10510   29. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
   10511   30. https://gcc.gnu.org/wiki/Fortran2003Status
   10512   31. https://gcc.gnu.org/wiki/Fortran2008Status
   10513   32. https://gcc.gnu.org/wiki/Coarray
   10514   33. http://www.opencoarrays.org/
   10515   34. https://gcc.gnu.org/gcc-5/changes.html#go
   10516   35. https://pkg.go.dev/cmd/go
   10517   36. https://pkg.go.dev/cmd/gofmt
   10518   37. https://gcc.gnu.org/gcc-5/changes.html#jit
   10519   38. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
   10520   39. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
   10521   40. https://github.com/davidmalcolm/pygccjit
   10522   41. https://github.com/ibuclaw/gccjitd
   10523   42. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
   10524   43. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
   10525   44. https://gcc.gnu.org/gcc-5/changes.html#targets
   10526   45. https://gcc.gnu.org/gcc-5/changes.html#stack-usage
   10527   46. https://gcc.gnu.org/gcc-5/changes.html#aarch64
   10528   47. https://gcc.gnu.org/gcc-5/changes.html#arm
   10529   48. https://gcc.gnu.org/gcc-5/changes.html#avr
   10530   49. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   10531   50. https://savannah.nongnu.org/bugs/?44574
   10532   51. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   10533   52. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
   10534   53. https://gcc.gnu.org/gcc-5/changes.html#x86
   10535   54. https://gcc.gnu.org/gcc-5/changes.html#mips
   10536   55. https://gcc.gnu.org/gcc-5/changes.html#nds32
   10537   56. https://gcc.gnu.org/gcc-5/changes.html#rx
   10538   57. https://gcc.gnu.org/gcc-5/changes.html#sh
   10539   58. https://gcc.gnu.org/gcc-5/changes.html#os
   10540   59. https://gcc.gnu.org/gcc-5/changes.html#aix
   10541   60. https://gcc.gnu.org/gcc-5/changes.html#dragonfly
   10542   61. https://gcc.gnu.org/gcc-5/changes.html#freebsd
   10543   62. https://gcc.gnu.org/gcc-5/changes.html#vxmils
   10544   63. https://gcc.gnu.org/gcc-5/changes.html#GCC5.2
   10545   64. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
   10546   65. https://gcc.gnu.org/gcc-5/changes.html#GCC5.3
   10547   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
   10548   67. https://gcc.gnu.org/gcc-5/changes.html#GCC5.4
   10549   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
   10550   69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
   10551   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
   10552   71. https://gcc.gnu.org/onlinedocs/
   10553   72. mailto:gcc-help (a] gcc.gnu.org
   10554   73. mailto:gcc (a] gcc.gnu.org
   10555   74. https://gcc.gnu.org/lists.html
   10556   75. https://www.fsf.org/
   10557   76. https://gcc.gnu.org/about.html
   10558 ======================================================================
   10559 http://gcc.gnu.org/gcc-4.9/index.html
   10560                              GCC 4.9 Release Series
   10561 
   10562    (This release series is no longer supported.)
   10563 
   10564    Aug 3, 2016
   10565 
   10566    The [1]GNU project and the GCC developers are pleased to announce the
   10567    release of GCC 4.9.4.
   10568 
   10569    This release is a bug-fix release, containing fixes for regressions in
   10570    GCC 4.9.3 relative to previous releases of GCC.
   10571 
   10572 Release History
   10573 
   10574    GCC 4.9.4
   10575           Aug 3, 2016 ([2]changes, [3]documentation)
   10576 
   10577    GCC 4.9.3
   10578           June 26, 2015 ([4]changes, [5]documentation)
   10579 
   10580    GCC 4.9.2
   10581           October 30, 2014 ([6]changes, [7]documentation)
   10582 
   10583    GCC 4.9.1
   10584           July 16, 2014 ([8]changes, [9]documentation)
   10585 
   10586    GCC 4.9.0
   10587           April 22, 2014 ([10]changes, [11]documentation)
   10588 
   10589 References and Acknowledgements
   10590 
   10591    GCC used to stand for the GNU C Compiler, but since the compiler
   10592    supports several other languages aside from C, it now stands for the
   10593    GNU Compiler Collection.
   10594 
   10595    A list of [12]successful builds is updated as new information becomes
   10596    available.
   10597 
   10598    The GCC developers would like to thank the numerous people that have
   10599    contributed new features, improvements, bug fixes, and other changes as
   10600    well as test results to GCC. This [13]amazing group of volunteers is
   10601    what makes GCC successful.
   10602 
   10603    For additional information about GCC please refer to the [14]GCC
   10604    project web site or contact the [15]GCC development mailing list.
   10605 
   10606    To obtain GCC please use [16]our mirror sites or [17]our version
   10607    control system.
   10608 
   10609 
   10610     For questions related to the use of GCC, please consult these web
   10611     pages and the [18]GCC manuals. If that fails, the
   10612     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10613     web pages and the development of GCC are welcome on our developer
   10614     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   10615     archives.
   10616 
   10617    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   10618    distribution of this entire article is permitted in any medium,
   10619    provided this notice is preserved.
   10620 
   10621    These pages are [23]maintained by the GCC team. Last modified
   10622    2024-05-30.
   10623 
   10624 References
   10625 
   10626    1. http://www.gnu.org/
   10627    2. https://gcc.gnu.org/gcc-4.9/changes.html
   10628    3. https://gcc.gnu.org/onlinedocs/4.9.4/
   10629    4. https://gcc.gnu.org/gcc-4.9/changes.html
   10630    5. https://gcc.gnu.org/onlinedocs/4.9.3/
   10631    6. https://gcc.gnu.org/gcc-4.9/changes.html
   10632    7. https://gcc.gnu.org/onlinedocs/4.9.2/
   10633    8. https://gcc.gnu.org/gcc-4.9/changes.html
   10634    9. https://gcc.gnu.org/onlinedocs/4.9.1/
   10635   10. https://gcc.gnu.org/gcc-4.9/changes.html
   10636   11. https://gcc.gnu.org/onlinedocs/4.9.0/
   10637   12. https://gcc.gnu.org/gcc-4.9/buildstat.html
   10638   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   10639   14. https://gcc.gnu.org/index.html
   10640   15. mailto:gcc (a] gcc.gnu.org
   10641   16. https://gcc.gnu.org/mirrors.html
   10642   17. https://gcc.gnu.org/git.html
   10643   18. https://gcc.gnu.org/onlinedocs/
   10644   19. mailto:gcc-help (a] gcc.gnu.org
   10645   20. mailto:gcc (a] gcc.gnu.org
   10646   21. https://gcc.gnu.org/lists.html
   10647   22. https://www.fsf.org/
   10648   23. https://gcc.gnu.org/about.html
   10649 ======================================================================
   10650 http://gcc.gnu.org/gcc-4.9/changes.html
   10651                              GCC 4.9 Release Series
   10652                         Changes, New Features, and Fixes
   10653 
   10654 Caveats
   10655 
   10656      * The mudflap run time checker has been removed. The mudflap options
   10657        remain, but do nothing.
   10658      * Support for a number of older systems and recently unmaintained or
   10659        untested target ports of GCC has been declared obsolete in GCC 4.9.
   10660        Unless there is activity to revive them, the next release of GCC
   10661        will have their sources permanently removed.
   10662        The following ports for individual systems on particular
   10663        architectures have been obsoleted:
   10664           + Solaris 9 (*-*-solaris2.9). Details can be found in the
   10665             [1]announcement.
   10666      * On AArch64, the singleton vector types int64x1_t, uint64x1_t and
   10667        float64x1_t exported by arm_neon.h are defined to be the same as
   10668        their base types. This results in incorrect application of
   10669        parameter passing rules to arguments of types int64x1_t and
   10670        uint64x1_t, with respect to the AAPCS64 ABI specification. In
   10671        addition, names of C++ functions with parameters of these types
   10672        (including float64x1_t) are not mangled correctly. The current
   10673        typedef declarations also unintentionally allow implicit casting
   10674        between singleton vector types and their base types. These issues
   10675        will be resolved in a near future release. See [2]PR60825 for more
   10676        information.
   10677 
   10678    More information on porting to GCC 4.9 from previous versions of GCC
   10679    can be found in the [3]porting guide for this release.
   10680 
   10681 General Optimizer Improvements
   10682 
   10683      * AddressSanitizer, a fast memory error detector, is now available on
   10684        ARM.
   10685      * UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior
   10686        detector, has been added and can be enabled via
   10687        -fsanitize=undefined. Various computations will be instrumented to
   10688        detect undefined behavior at runtime. UndefinedBehaviorSanitizer is
   10689        currently available for the C and C++ languages.
   10690      * Link-time optimization (LTO) improvements:
   10691           + Type merging was rewritten. The new implementation is
   10692             significantly faster and uses less memory.
   10693           + Better partitioning algorithm resulting in less streaming
   10694             during link time.
   10695           + Early removal of virtual methods reduces the size of object
   10696             files and improves link-time memory usage and compile time.
   10697           + Function bodies are now loaded on-demand and released early
   10698             improving overall memory usage at link time.
   10699           + C++ hidden keyed methods can now be optimized out.
   10700           + When using a linker plugin, compiling with the -flto option
   10701             now generates slim object files (.o) which only contain
   10702             intermediate language representation for LTO. Use
   10703             -ffat-lto-objects to create files which contain additionally
   10704             the object code. To generate static libraries suitable for LTO
   10705             processing, use gcc-ar and gcc-ranlib; to list symbols from a
   10706             slim object file use gcc-nm. (This requires that ar, ranlib
   10707             and nm have been compiled with plugin support.)
   10708        Memory usage building Firefox with debug enabled was reduced from
   10709        15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
   10710      * Inter-procedural optimization improvements:
   10711           + New type inheritance analysis module improving
   10712             devirtualization. Devirtualization now takes into account
   10713             anonymous name-spaces and the C++11 final keyword.
   10714           + New speculative devirtualization pass (controlled by
   10715             -fdevirtualize-speculatively.
   10716           + Calls that were speculatively made direct are turned back to
   10717             indirect where direct call is not cheaper.
   10718           + Local aliases are introduced for symbols that are known to be
   10719             semantically equivalent across shared libraries improving
   10720             dynamic linking times.
   10721      * Feedback directed optimization improvements:
   10722           + Profiling of programs using C++ inline functions is now more
   10723             reliable.
   10724           + New time profiling determines typical order in which functions
   10725             are executed.
   10726           + A new function reordering pass (controlled by
   10727             -freorder-functions) significantly reduces startup time of
   10728             large applications. Until binutils support is completed, it is
   10729             effective only with link-time optimization.
   10730           + Feedback driven indirect call removal and devirtualization now
   10731             handle cross-module calls when link-time optimization is
   10732             enabled.
   10733 
   10734 [4]New Languages and Language specific improvements
   10735 
   10736      * Version 4.0 of the [5]OpenMP specification is now supported in the
   10737        C and C++ compilers and starting with the 4.9.1 release also in the
   10738        Fortran compiler. The new -fopenmp-simd option can be used to
   10739        enable OpenMP's SIMD directives while ignoring other OpenMP
   10740        directives. The new [6]-fsimd-cost-model= option permits to tune
   10741        the vectorization cost model for loops annotated with OpenMP and
   10742        Cilk Plus simd directives. -Wopenmp-simd warns when the current
   10743        cost model overrides simd directives set by the user.
   10744      * The -Wdate-time option has been added for the C, C++ and Fortran
   10745        compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__
   10746        macros are used. Those macros might prevent bit-wise-identical
   10747        reproducible compilations.
   10748 
   10749   [7]Ada
   10750 
   10751      * GNAT switched to Ada 2012 instead of Ada 2005 by default.
   10752 
   10753   [8]C family
   10754 
   10755      * Support for colorizing diagnostics emitted by GCC has been added.
   10756        The [9]-fdiagnostics-color=auto will enable it when outputting to
   10757        terminals, -fdiagnostics-color=always unconditionally. The
   10758        GCC_COLORS environment variable can be used to customize the colors
   10759        or disable coloring. If GCC_COLORS variable is present in the
   10760        environment, the default is -fdiagnostics-color=auto, otherwise
   10761        -fdiagnostics-color=never.
   10762        Sample diagnostics output:
   10763     $ g++ -fdiagnostics-color=always -S -Wall test.C
   10764     test.C: In function int foo():
   10765     test.C:1:14: warning: no return statement in function returning non-void [-W
   10766 return-type]
   10767      int foo () { }
   10768                   ^
   10769     test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
   10770  -ftemplate-depth= to increase the maximum) instantiating struct X<100>
   10771      template <int N> struct X { static const int value = X<N-1>::value; }; temp
   10772 late struct X<1000>;
   10773                                                   ^
   10774     test.C:2:46:   recursively required from const int X<999>::value
   10775     test.C:2:46:   required from const int X<1000>::value
   10776     test.C:2:88:   required from here
   10777 
   10778     test.C:2:46: error: incomplete type X<100> used in nested name specifier
   10779 
   10780      * With the new [10]#pragma GCC ivdep, the user can assert that there
   10781        are no loop-carried dependencies which would prevent concurrent
   10782        execution of consecutive iterations using SIMD (single instruction
   10783        multiple data) instructions.
   10784      * Support for Cilk Plus has been added and can be enabled with the
   10785        -fcilkplus option. Cilk Plus is an extension to the C and C++
   10786        languages to support data and task parallelism. The present
   10787        implementation follows ABI version 1.2; all features but _Cilk_for
   10788        have been implemented.
   10789 
   10790   [11]C
   10791 
   10792      * ISO C11 atomics (the _Atomic type specifier and qualifier and the
   10793        <stdatomic.h> header) are now supported.
   10794      * ISO C11 generic selections (_Generic keyword) are now supported.
   10795      * ISO C11 thread-local storage (_Thread_local, similar to GNU C
   10796        __thread) is now supported.
   10797      * ISO C11 support is now at a similar level of completeness to ISO
   10798        C99 support: substantially complete modulo bugs, extended
   10799        identifiers (supported except for corner cases when
   10800        -fextended-identifiers is used), floating-point issues (mainly but
   10801        not entirely relating to optional C99 features from Annexes F and
   10802        G) and the optional Annexes K (Bounds-checking interfaces) and L
   10803        (Analyzability).
   10804      * A new C extension __auto_type provides a subset of the
   10805        functionality of C++11 auto in GNU C.
   10806 
   10807   [12]C++
   10808 
   10809      * The G++ implementation of [13]C++1y return type deduction for
   10810        normal functions has been updated to conform to [14]N3638, the
   10811        proposal accepted into the working paper. Most notably, it adds
   10812        decltype(auto) for getting decltype semantics rather than the
   10813        template argument deduction semantics of plain auto:
   10814 
   10815 int& f();
   10816          auto  i1 = f(); // int
   10817 decltype(auto) i2 = f(); // int&
   10818 
   10819      * G++ supports [15]C++1y lambda capture initializers:
   10820 
   10821 [x = 42]{ ... };
   10822 
   10823        Actually, they have been accepted since GCC 4.5, but now the
   10824        compiler doesn't warn about them with -std=c++1y, and supports
   10825        parenthesized and brace-enclosed initializers as well.
   10826      * G++ supports [16]C++1y variable length arrays. G++ has supported
   10827        GNU/C99-style VLAs for a long time, but now additionally supports
   10828        initializers and lambda capture by reference. In C++1y mode G++
   10829        will complain about VLA uses that are not permitted by the draft
   10830        standard, such as forming a pointer to VLA type or applying sizeof
   10831        to a VLA variable. Note that it now appears that VLAs will not be
   10832        part of C++14, but will be part of a separate document and then
   10833        perhaps C++17.
   10834 
   10835 void f(int n) {
   10836   int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
   10837   [&a]{ for (int i : a) { cout << i << endl; } }();
   10838   &a; // error, taking address of VLA
   10839 }
   10840 
   10841      * G++ supports the [17]C++1y [[deprecated]] attribute modulo bugs in
   10842        the underlying [[gnu::deprecated]] attribute. Classes and functions
   10843        can be marked deprecated and a diagnostic message added:
   10844 
   10845 class A;
   10846 int bar(int n);
   10847 #if __cplusplus > 201103
   10848 class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
   10849 [[deprecated("bar is unsafe; use foo() instead")]]
   10850 int bar(int n);
   10851 
   10852 int foo(int n);
   10853 class B;
   10854 #endif
   10855 A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
   10856 int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
   10857 o() instead
   10858 
   10859      * G++ supports [18]C++1y digit separators. Long numeric literals can
   10860        be subdivided with a single quote ' to enhance readability:
   10861 
   10862 int i = 1048576;
   10863 int j = 1'048'576;
   10864 int k = 0x10'0000;
   10865 int m = 0'004'000'000;
   10866 int n = 0b0001'0000'0000'0000'0000'0000;
   10867 
   10868 double x = 1.602'176'565e-19;
   10869 double y = 1.602'176'565e-1'9;
   10870 
   10871      * G++ supports [19]C++1y generic (polymorphic) lambdas.
   10872 
   10873 // a functional object that will increment any type
   10874 auto incr = [](auto x) { return x++; };
   10875 
   10876      * As a GNU extension, G++ supports explicit template parameter syntax
   10877        for generic lambdas. This can be combined in the expected way with
   10878        the standard auto syntax.
   10879 
   10880 // a functional object that will add two like-type objects
   10881 auto add = [] <typename T> (T a, T b) { return a + b; };
   10882 
   10883      * G++ supports unconstrained generic functions as specified by 4.1.2
   10884        and 5.1.1 of [20]N3889: Concepts Lite Specification. Briefly, auto
   10885        may be used as a type-specifier in a parameter declaration of any
   10886        function declarator in order to introduce an implicit function
   10887        template parameter, akin to generic lambdas.
   10888 
   10889 // the following two function declarations are equivalent
   10890 auto incr(auto x) { return x++; }
   10891 template <typename T>
   10892 auto incr(T x) { return x++; }
   10893 
   10894     Runtime Library (libstdc++)
   10895 
   10896      * [21]Improved support for C++11, including:
   10897           + support for <regex>;
   10898           + The associative containers in <map> and <set> and the
   10899             unordered associative containers in <unordered_map> and
   10900             <unordered_set> meet the allocator-aware container
   10901             requirements;
   10902      * [22]Improved experimental support for the upcoming ISO C++
   10903        standard, C++14, including:
   10904           + fixing constexpr member functions without const;
   10905           + implementation of the std::exchange() utility function;
   10906           + addressing tuples by type;
   10907           + implemention of std::make_unique;
   10908           + implemention of std::shared_lock;
   10909           + making std::result_of SFINAE-friendly;
   10910           + adding operator() to std::integral_constant;
   10911           + adding user-defined literals for standard library types
   10912             std::basic_string, std::chrono::duration, and std::complex;
   10913           + adding two range overloads to non-modifying sequence oprations
   10914             std::equal and std::mismatch;
   10915           + adding IO manipulators for quoted strings;
   10916           + adding constexpr members to <utility>, <complex>, <chrono>,
   10917             and some containers;
   10918           + adding compile-time std::integer_sequence;
   10919           + adding cleaner transformation traits;
   10920           + making <functional>s operator functors easier to use and more
   10921             generic;
   10922      * An implementation of std::experimental::optional.
   10923      * An implementation of std::experimental::string_view.
   10924      * The non-standard function std::copy_exception has been deprecated
   10925        and will be removed in a future version. std::make_exception_ptr
   10926        should be used instead.
   10927 
   10928   [23]Fortran
   10929 
   10930      * Compatibility notice:
   10931           + Module files: The version of the module files (.mod) has been
   10932             incremented; additionally, module files are now compressed.
   10933             Fortran MODULEs compiled by earlier GCC versions have to be
   10934             recompiled, when they are USEd by files compiled with GCC 4.9.
   10935             GCC 4.9 is not able to read .mod files of earlier GCC
   10936             versions; attempting to do so gives an error message. Note:
   10937             The ABI of the produced assembler data itself has not changed:
   10938             object files and libraries are fully compatible with older
   10939             versions (except as stated below).
   10940           + ABI changes:
   10941                o The [24]argument passing ABI has changed for scalar dummy
   10942                  arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
   10943                  which have both the VALUE and the OPTIONAL attributes.
   10944                o To support finalization the virtual table associated with
   10945                  polymorphic variables has changed. Code containing CLASS
   10946                  should be recompiled, including all files which define
   10947                  derived types involved in the type definition used by
   10948                  polymorphic variables. (Note: Due to the incremented
   10949                  module version, trying to mix old code with new code will
   10950                  usually give an error message.)
   10951           + GNU Fortran no longer deallocates allocatable variables or
   10952             allocatable components of variables declared in the main
   10953             program. Since Fortran 2008, the standard explicitly states
   10954             that variables declared in the Fortran main program
   10955             automatically have the SAVE attribute.
   10956           + When opening files, the close-on-exec flag is set if the
   10957             system supports such a feature. This is generally considered
   10958             good practice these days, but if there is a need to pass file
   10959             descriptors to child processes the parent process must now
   10960             remember to clear the close-on-exec flag by calling fcntl(),
   10961             e.g. via ISO_C_BINDING, before executing the child process.
   10962      * The deprecated command-line option -fno-whole-file has been
   10963        removed. (-fwhole-file is the default since GCC 4.6.)
   10964        -fwhole-file/-fno-whole-file continue to be accepted but do not
   10965        influence the code generation.
   10966      * The compiler no longer unconditionally warns about DO loops with
   10967        zero iterations. This warning is now controlled by the -Wzerotrip
   10968        option, which is implied by -Wall.
   10969      * The new NO_ARG_CHECK attribute of the [25]!GCC$ directive can be
   10970        used to disable the type-kind-rank (TKR) argument check for a dummy
   10971        argument. The feature is similar to ISO/IEC TS 29133:2012's
   10972        TYPE(*), except that it additionally also disables the rank check.
   10973        Variables with NO_ARG_CHECK have to be dummy arguments and may only
   10974        be used as argument to ISO_C_BINDING's C_LOC and as actual argument
   10975        to another NO_ARG_CHECK dummy argument; also the other constraints
   10976        of TYPE(*) apply. The dummy arguments should be declared as scalar
   10977        or assumed-size variable of type type(*) (recommended)  or of type
   10978        integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
   10979        the data without further type or shape information is passed,
   10980        similar to C's void*. Note that also TS 29113's
   10981        type(*),dimension(..) accepts arguments of any type and rank;
   10982        contrary to NO_ARG_CHECK assumed-rank arguments pass an array
   10983        descriptor which contains the array shape and stride of the
   10984        argument.
   10985      * [26]Fortran 2003:
   10986           + Finalization is now supported. It is currently only done for a
   10987             subset of those situations in which it should occur.
   10988           + Experimental support for scalar character components with
   10989             deferred length (i.e. allocatable string length) in derived
   10990             types has been added. (Deferred-length character variables are
   10991             supported since GCC 4.6.)
   10992      * [27]Fortran 2008:
   10993           + When STOP or ERROR STOP are used to terminate the execution
   10994             and any exception (but inexact) is signaling, a warning is
   10995             printed to ERROR_UNIT, indicating which exceptions are
   10996             signaling. The [28]-ffpe-summary= command-line option can be
   10997             used to fine-tune for which exceptions the warning should be
   10998             shown.
   10999           + Rounding on input (READ) is now handled on systems where
   11000             strtod honours the rounding mode. (For output, rounding is
   11001             supported since GCC 4.5.) Note that for input, the compatible
   11002             rounding mode is handled as nearest (i.e., rounding to an even
   11003             least significant [cf. IEC 60559:1989] for a tie, while
   11004             compatible rounds away from zero in that case).
   11005 
   11006   [29]Go
   11007 
   11008      * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
   11009 
   11010 [30]New Targets and Target Specific Improvements
   11011 
   11012   [31]AArch64
   11013 
   11014      * The ARMv8-A crypto and CRC instructions are now supported through
   11015        intrinsics. These are enabled when the architecture supports these
   11016        and are available through the -march=armv8-a+crc and
   11017        -march=armv8-a+crypto options.
   11018      * Initial support for ILP32 has now been added to the compiler. This
   11019        is now available through the command-line option -mabi=ilp32.
   11020        Support for ILP32 is considered experimental as the ABI
   11021        specification is still beta.
   11022      * Coverage of more of the ISA including the SIMD extensions has been
   11023        added. The Advanced SIMD intrinsics have also been improved.
   11024      * The new local register allocator (LRA) is now on by default for the
   11025        AArch64 back end.
   11026      * The REE (Redundant extension elimination) pass has now been enabled
   11027        by default for the AArch64 back end.
   11028      * Tuning for the Cortex-A53 and Cortex-A57 has been improved.
   11029      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   11030        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   11031        option.
   11032      * A number of structural changes have been made to both the ARM and
   11033        AArch64 back ends to facilitate improved code-generation.
   11034      * As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
   11035        has been added and can be enabled by giving the
   11036        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   11037        default by configuring GCC with the --enable-fix-cortex-a53-835769
   11038        option.
   11039 
   11040   [32]ARC
   11041 
   11042      * A port for Synopsys Designware ARC has been contributed by Embecosm
   11043        and Synopsys Inc.
   11044 
   11045   [33]ARM
   11046 
   11047      * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
   11048        disabled by default. This was found to generate better code in only
   11049        a small number of cases. It can be turned back on with the
   11050        -mneon-for-64bits option.
   11051      * Further support for the ARMv8-A architecture, notably implementing
   11052        the restriction around IT blocks in the Thumb32 instruction set has
   11053        been added. The -mrestrict-it option can be used with
   11054        -march=armv7-a or the -march=armv7ve options to make code
   11055        generation fully compatible with the deprecated instructions in
   11056        ARMv8-A.
   11057      * Support has now been added for the ARMv7ve variant of the
   11058        architecture. This can be used by the -march=armv7ve option.
   11059      * The ARMv8-A crypto and CRC instructions are now supported through
   11060        intrinsics and are available through the -march=armv8-a+crc and
   11061        mfpu=crypto-neon-fp-armv8 options.
   11062      * LRA is now on by default for the ARM target. This can be turned off
   11063        using the -mno-lra option. This option is a purely transitionary
   11064        command-line option and will be removed in a future release. We are
   11065        interested in any bug reports regarding functional and performance
   11066        regressions with LRA.
   11067      * A new option -mslow-flash-data to improve performance of programs
   11068        fetching data on slow flash memory has now been introduced for the
   11069        ARMv7-M profile cores.
   11070      * A new option -mpic-data-is-text-relative for targets that allows
   11071        data segments to be relative to text segments has been added. This
   11072        is on by default for all targets except VxWorks RTP.
   11073      * A number of infrastructural changes have been made to both the ARM
   11074        and AArch64 back ends to facilitate improved code-generation.
   11075      * GCC now supports Cortex-A12 and the Cortex-R7 through the
   11076        -mcpu=cortex-a12 and -mcpu=cortex-r7 options.
   11077      * GCC now has tuning for the Cortex-A57 and Cortex-A53 through the
   11078        -mcpu=cortex-a57 and -mcpu=cortex-a53 options.
   11079      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   11080        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   11081        option. Similar support was added for the combination of Cortex-A15
   11082        and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7 option.
   11083      * Further performance optimizations for the Cortex-A15 and the
   11084        Cortex-M4 have been added.
   11085      * A number of code generation improvements for Thumb2 to reduce code
   11086        size when compiling for the M-profile processors.
   11087 
   11088   [34]AVR
   11089 
   11090      * A new command-line option -mfract-convert-truncate has been added.
   11091        It allows compiler to use truncation instead of rounding towards
   11092        zero for fractional fixed-point types.
   11093 
   11094   [35]IA-32/x86-64
   11095 
   11096      * -mfpmath=sse is now implied by -ffast-math on all targets where
   11097        SSE2 is supported.
   11098      * Intel AVX-512 support was added to GCC. That includes inline
   11099        assembly support, new registers and extending existing ones, new
   11100        intrinsics (covered by corresponding testsuite), and basic
   11101        autovectorization. AVX-512 instructions are available via the
   11102        following GCC switches: AVX-512 foundation instructions: -mavx512f,
   11103        AVX-512 prefetch instructions: -mavx512pf, AVX-512 exponential and
   11104        reciprocal instructions: -mavx512er, AVX-512 conflict detection
   11105        instructions: -mavx512cd.
   11106      * It is now possible to call x86 intrinsics from select functions in
   11107        a file that are tagged with the corresponding target attribute
   11108        without having to compile the entire file with the -mxxx option.
   11109        This improves the usability of x86 intrinsics and is particularly
   11110        useful when doing [36]Function Multiversioning.
   11111      * GCC now supports the new Intel microarchitecture named Silvermont
   11112        through -march=silvermont.
   11113      * GCC now supports the new Intel microarchitecture named Broadwell
   11114        through -march=broadwell.
   11115      * Optimizing for other Intel microarchitectures have been renamed to
   11116        -march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
   11117      * -march=generic has been retuned for better support of Intel core
   11118        and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel
   11119        Pentium-M, and Pentium4 based CPUs is no longer considered
   11120        important for generic.
   11121      * -mtune=intel can now be used to generate code running well on the
   11122        most current Intel processors, which are Haswell and Silvermont for
   11123        GCC 4.9.
   11124      * Support to encode 32-bit assembly instructions in 16-bit format is
   11125        now available through the -m16 command-line option.
   11126      * Better inlining of memcpy and memset that is aware of value ranges
   11127        and produces shorter alignment prologues.
   11128      * -mno-accumulate-outgoing-args is now honored when unwind
   11129        information is output. Argument accumulation is also now turned off
   11130        for portions of programs optimized for size.
   11131      * Support for new AMD family 15h processors (Excavator core) is now
   11132        available through the -march=bdver4 and -mtune=bdver4 options.
   11133 
   11134   [37]MSP430
   11135 
   11136      * A new command-line option -mcpu= has been added to the MSP430 back
   11137        end. This option is used to specify the ISA to be used. Accepted
   11138        values are msp430 (the default), msp430x and msp430xv2. The ISA is
   11139        no longer deduced from the -mmcu= option as there are far too many
   11140        different MCU names. The -mmcu= option is still supported, and this
   11141        is still used to select linker scripts and generate a C
   11142        preprocessor symbol that will be recognised by the msp430.h header
   11143        file.
   11144 
   11145   [38]NDS32
   11146 
   11147      * A new nds32 port supports the 32-bit architecture from Andes
   11148        Technology Corporation.
   11149      * The port provides initial support for the V2, V3, V3m instruction
   11150        set architectures.
   11151 
   11152   [39]Nios II
   11153 
   11154      * A port for the Altera Nios II has been contributed by Mentor
   11155        Graphics.
   11156 
   11157   [40]PowerPC / PowerPC64 / RS6000
   11158 
   11159      * GCC now supports Power ISA 2.07, which includes support for
   11160        Hardware Transactional Memory (HTM), Quadword atomics and several
   11161        VMX and VSX additions, including Crypto, 64-bit integer, 128-bit
   11162        integer and decimal integer operations.
   11163      * Support for the POWER8 processor is now available through the
   11164        -mcpu=power8 and -mtune=power8 options.
   11165      * The libitm library has been modified to add a HTM fastpath that
   11166        automatically uses POWER's HTM hardware instructions when it is
   11167        executing on a HTM enabled processor.
   11168      * Support for the new powerpc64le-linux platform has been added. It
   11169        defaults to generating code that conforms to the ELFV2 ABI.
   11170 
   11171   S/390, System z
   11172 
   11173      * Support for the Transactional Execution Facility included with the
   11174        IBM zEnterprise zEC12 processor has been added. A set of GCC style
   11175        builtins as well as XLC style builtins are provided. The builtins
   11176        are enabled by default when using the -march=zEC12 option but can
   11177        explicitly be disabled with -mno-htm. Using the GCC builtins also
   11178        libitm supports hardware transactions on S/390.
   11179      * The hotpatch features allows to prepare functions for hotpatching.
   11180        A certain amount of bytes is reserved before the function entry
   11181        label plus a NOP is inserted at its very beginning to implement a
   11182        backward jump when applying a patch. The feature can either be
   11183        enabled per compilation unit via the command-line option -mhotpatch
   11184        or per function using the hotpatch attribute.
   11185      * The shrink wrap optimization is now supported on S/390 and enabled
   11186        by default.
   11187      * A major rework of the routines to determine which registers need to
   11188        be saved and restored in function prologue/epilogue now allow to
   11189        use floating point registers as save slots. This will happen for
   11190        certain leaf function with -march=z10 or higher.
   11191      * The LRA rtl pass replaces reload by default on S/390.
   11192 
   11193   [41]RX
   11194 
   11195      * The port now allows to specify the RX100, RX200, and RX600
   11196        processors with the command-line options -mcpu=rx100, -mcpu=rx200
   11197        and -mcpu=rx600.
   11198 
   11199   [42]SH
   11200 
   11201      * Minor improvements to code generated for integer arithmetic and
   11202        code that involves the T bit.
   11203      * Added support for the SH2A clips and clipu instructions. The
   11204        compiler will now try to utilize them for min/max expressions such
   11205        as max (-128, min (127, x)).
   11206      * Added support for the cmp/str instruction through built-in
   11207        functions such as __builtin_strlen. When not optimizing for size,
   11208        the compiler will now expand calls to e.g. strlen as an inlined
   11209        sequences which utilize the cmp/str instruction.
   11210      * Improved code generated around volatile memory loads and stores.
   11211      * The option -mcbranchdi has been deprecated. Specifying it will
   11212        result in a warning and will not influence code generation.
   11213      * The option -mcmpeqdi has been deprecated. Specifying it will result
   11214        in a warning and will not influence code generation.
   11215 
   11216 [43]GCC 4.9.1
   11217 
   11218    This is the [44]list of problem reports (PRs) from GCC's bug tracking
   11219    system that are known to be fixed in the 4.9.1 release. This list might
   11220    not be complete (that is, it is possible that some PRs that have been
   11221    fixed are not listed here).
   11222 
   11223    Version 4.0 of the OpenMP specification is supported even in Fortran,
   11224    not just C and C++.
   11225 
   11226 [45]GCC 4.9.2
   11227 
   11228    This is the [46]list of problem reports (PRs) from GCC's bug tracking
   11229    system that are known to be fixed in the 4.9.2 release. This list might
   11230    not be complete (that is, it is possible that some PRs that have been
   11231    fixed are not listed here).
   11232 
   11233 [47]GCC 4.9.3
   11234 
   11235    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   11236    system that are known to be fixed in the 4.9.3 release. This list might
   11237    not be complete (that is, it is possible that some PRs that have been
   11238    fixed are not listed here).
   11239 
   11240 [49]GCC 4.9.4
   11241 
   11242    This is the [50]list of problem reports (PRs) from GCC's bug tracking
   11243    system that are known to be fixed in the 4.9.4 release. This list might
   11244    not be complete (that is, it is possible that some PRs that have been
   11245    fixed are not listed here).
   11246 
   11247 
   11248     For questions related to the use of GCC, please consult these web
   11249     pages and the [51]GCC manuals. If that fails, the
   11250     [52]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11251     web pages and the development of GCC are welcome on our developer
   11252     list at [53]gcc (a] gcc.gnu.org. All of [54]our lists have public
   11253     archives.
   11254 
   11255    Copyright (C) [55]Free Software Foundation, Inc. Verbatim copying and
   11256    distribution of this entire article is permitted in any medium,
   11257    provided this notice is preserved.
   11258 
   11259    These pages are [56]maintained by the GCC team. Last modified
   11260    2026-06-01.
   11261 
   11262 References
   11263 
   11264    1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
   11265    2. https://gcc.gnu.org/PR60825
   11266    3. https://gcc.gnu.org/gcc-4.9/porting_to.html
   11267    4. https://gcc.gnu.org/gcc-4.9/changes.html#languages
   11268    5. https://www.openmp.org/specifications/
   11269    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
   11270    7. https://gcc.gnu.org/gcc-4.9/changes.html#ada
   11271    8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
   11272    9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
   11273   10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
   11274   11. https://gcc.gnu.org/gcc-4.9/changes.html#c
   11275   12. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
   11276   13. https://gcc.gnu.org/projects/cxx1y.html
   11277   14. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
   11278   15. https://gcc.gnu.org/projects/cxx1y.html
   11279   16. https://gcc.gnu.org/projects/cxx1y.html
   11280   17. https://gcc.gnu.org/projects/cxx1y.html
   11281   18. https://gcc.gnu.org/projects/cxx1y.html
   11282   19. https://gcc.gnu.org/projects/cxx1y.html
   11283   20. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
   11284   21. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
   11285   22. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
   11286   23. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
   11287   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
   11288   25. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
   11289   26. https://gcc.gnu.org/wiki/Fortran2003Status
   11290   27. https://gcc.gnu.org/wiki/Fortran2008Status
   11291   28. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
   11292   29. https://gcc.gnu.org/gcc-4.9/changes.html#go
   11293   30. https://gcc.gnu.org/gcc-4.9/changes.html#targets
   11294   31. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
   11295   32. https://gcc.gnu.org/gcc-4.9/changes.html#arc
   11296   33. https://gcc.gnu.org/gcc-4.9/changes.html#arm
   11297   34. https://gcc.gnu.org/gcc-4.9/changes.html#avr
   11298   35. https://gcc.gnu.org/gcc-4.9/changes.html#x86
   11299   36. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
   11300   37. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
   11301   38. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
   11302   39. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
   11303   40. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
   11304   41. https://gcc.gnu.org/gcc-4.9/changes.html#rx
   11305   42. https://gcc.gnu.org/gcc-4.9/changes.html#sh
   11306   43. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
   11307   44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
   11308   45. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
   11309   46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
   11310   47. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
   11311   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
   11312   49. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
   11313   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
   11314   51. https://gcc.gnu.org/onlinedocs/
   11315   52. mailto:gcc-help (a] gcc.gnu.org
   11316   53. mailto:gcc (a] gcc.gnu.org
   11317   54. https://gcc.gnu.org/lists.html
   11318   55. https://www.fsf.org/
   11319   56. https://gcc.gnu.org/about.html
   11320 ======================================================================
   11321 http://gcc.gnu.org/gcc-4.8/index.html
   11322                              GCC 4.8 Release Series
   11323 
   11324    (This release series is no longer supported.)
   11325 
   11326    June 23, 2015
   11327 
   11328    The [1]GNU project and the GCC developers are pleased to announce the
   11329    release of GCC 4.8.5.
   11330 
   11331    This release is a bug-fix release, containing fixes for regressions in
   11332    GCC 4.8.4 relative to previous releases of GCC.
   11333 
   11334 Release History
   11335 
   11336    GCC 4.8.5
   11337           June 23, 2015 ([2]changes, [3]documentation)
   11338 
   11339    GCC 4.8.4
   11340           December 19, 2014 ([4]changes, [5]documentation)
   11341 
   11342    GCC 4.8.3
   11343           May 22, 2014 ([6]changes, [7]documentation)
   11344 
   11345    GCC 4.8.2
   11346           October 16, 2013 ([8]changes, [9]documentation)
   11347 
   11348    GCC 4.8.1
   11349           May 31, 2013 ([10]changes, [11]documentation)
   11350 
   11351    GCC 4.8.0
   11352           March 22, 2013 ([12]changes, [13]documentation)
   11353 
   11354 References and Acknowledgements
   11355 
   11356    GCC used to stand for the GNU C Compiler, but since the compiler
   11357    supports several other languages aside from C, it now stands for the
   11358    GNU Compiler Collection.
   11359 
   11360    A list of [14]successful builds is updated as new information becomes
   11361    available.
   11362 
   11363    The GCC developers would like to thank the numerous people that have
   11364    contributed new features, improvements, bug fixes, and other changes as
   11365    well as test results to GCC. This [15]amazing group of volunteers is
   11366    what makes GCC successful.
   11367 
   11368    For additional information about GCC please refer to the [16]GCC
   11369    project web site or contact the [17]GCC development mailing list.
   11370 
   11371    To obtain GCC please use [18]our mirror sites or [19]our version
   11372    control system.
   11373 
   11374 
   11375     For questions related to the use of GCC, please consult these web
   11376     pages and the [20]GCC manuals. If that fails, the
   11377     [21]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11378     web pages and the development of GCC are welcome on our developer
   11379     list at [22]gcc (a] gcc.gnu.org. All of [23]our lists have public
   11380     archives.
   11381 
   11382    Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
   11383    distribution of this entire article is permitted in any medium,
   11384    provided this notice is preserved.
   11385 
   11386    These pages are [25]maintained by the GCC team. Last modified
   11387    2022-10-26.
   11388 
   11389 References
   11390 
   11391    1. http://www.gnu.org/
   11392    2. https://gcc.gnu.org/gcc-4.8/changes.html
   11393    3. https://gcc.gnu.org/onlinedocs/4.8.5/
   11394    4. https://gcc.gnu.org/gcc-4.8/changes.html
   11395    5. https://gcc.gnu.org/onlinedocs/4.8.4/
   11396    6. https://gcc.gnu.org/gcc-4.8/changes.html
   11397    7. https://gcc.gnu.org/onlinedocs/4.8.3/
   11398    8. https://gcc.gnu.org/gcc-4.8/changes.html
   11399    9. https://gcc.gnu.org/onlinedocs/4.8.2/
   11400   10. https://gcc.gnu.org/gcc-4.8/changes.html
   11401   11. https://gcc.gnu.org/onlinedocs/4.8.1/
   11402   12. https://gcc.gnu.org/gcc-4.8/changes.html
   11403   13. https://gcc.gnu.org/onlinedocs/4.8.0/
   11404   14. https://gcc.gnu.org/gcc-4.8/buildstat.html
   11405   15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   11406   16. https://gcc.gnu.org/index.html
   11407   17. mailto:gcc (a] gcc.gnu.org
   11408   18. https://gcc.gnu.org/mirrors.html
   11409   19. https://gcc.gnu.org/git.html
   11410   20. https://gcc.gnu.org/onlinedocs/
   11411   21. mailto:gcc-help (a] gcc.gnu.org
   11412   22. mailto:gcc (a] gcc.gnu.org
   11413   23. https://gcc.gnu.org/lists.html
   11414   24. https://www.fsf.org/
   11415   25. https://gcc.gnu.org/about.html
   11416 ======================================================================
   11417 http://gcc.gnu.org/gcc-4.8/changes.html
   11418                              GCC 4.8 Release Series
   11419                         Changes, New Features, and Fixes
   11420 
   11421 Caveats
   11422 
   11423    GCC now uses C++ as its implementation language. This means that to
   11424    build GCC from sources, you will need a C++ compiler that understands
   11425    C++ 2003. For more details on the rationale and specific changes,
   11426    please refer to the [1]C++ conversion page.
   11427 
   11428    To enable the Graphite framework for loop optimizations you now need
   11429    CLooG version 0.18.0 and ISL version 0.11.1. Both can be obtained from
   11430    the [2]GCC infrastructure directory. The installation manual contains
   11431    more information about requirements to build GCC.
   11432 
   11433    GCC now uses a more aggressive analysis to derive an upper bound for
   11434    the number of iterations of loops using constraints imposed by language
   11435    standards. This may cause non-conforming programs to no longer work as
   11436    expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new
   11437    option, -fno-aggressive-loop-optimizations, was added to disable this
   11438    aggressive analysis. In some loops that have known constant number of
   11439    iterations, but undefined behavior is known to occur in the loop before
   11440    reaching or during the last iteration, GCC will warn about the
   11441    undefined behavior in the loop instead of deriving lower upper bound of
   11442    the number of iterations for the loop. The warning can be disabled with
   11443    -Wno-aggressive-loop-optimizations.
   11444 
   11445    On ARM, a bug has been fixed in GCC's implementation of the AAPCS rules
   11446    for the layout of vectors that could lead to wrong code being
   11447    generated. Vectors larger than 8 bytes in size are now by default
   11448    aligned to an 8-byte boundary. This is an ABI change: code that makes
   11449    explicit use of vector types may be incompatible with binary objects
   11450    built with older versions of GCC. Auto-vectorized code is not affected
   11451    by this change.
   11452 
   11453    More information on porting to GCC 4.8 from previous versions of GCC
   11454    can be found in the [3]porting guide for this release.
   11455 
   11456 General Optimizer Improvements (and Changes)
   11457 
   11458      * DWARF4 is now the default when generating DWARF debug information.
   11459        When -g is used on a platform that uses DWARF debugging
   11460        information, GCC will now default to -gdwarf-4
   11461        -fno-debug-types-section.
   11462        GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information
   11463        consumers support DWARF4 by default. Before GCC 4.8 the default
   11464        version used was DWARF2. To make GCC 4.8 generate an older DWARF
   11465        version use -g together with -gdwarf-2 or -gdwarf-3. The default
   11466        for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.
   11467      * A new general optimization level, -Og, has been introduced. It
   11468        addresses the need for fast compilation and a superior debugging
   11469        experience while providing a reasonable level of run-time
   11470        performance. Overall experience for development should be better
   11471        than the default optimization level -O0.
   11472      * A new option -ftree-partial-pre was added to control the partial
   11473        redundancy elimination (PRE) optimization. This option is enabled
   11474        by default at the -O3 optimization level, and it makes PRE more
   11475        aggressive.
   11476      * The option -fconserve-space has been removed; it was no longer
   11477        useful on most targets since GCC supports putting variables into
   11478        BSS without making them common.
   11479      * The struct reorg and matrix reorg optimizations (command-line
   11480        options -fipa-struct-reorg and -fipa-matrix-reorg) have been
   11481        removed. They did not always work correctly, nor did they work with
   11482        link-time optimization (LTO), hence were only applicable to
   11483        programs consisting of a single translation unit.
   11484      * Several scalability bottle-necks have been removed from GCC's
   11485        optimization passes. Compilation of extremely large functions, e.g.
   11486        due to the use of the flatten attribute in the "Eigen" C++ linear
   11487        algebra templates library, is significantly faster than previous
   11488        releases of GCC.
   11489      * Link-time optimization (LTO) improvements:
   11490           + LTO partitioning has been rewritten for better reliability and
   11491             maintanibility. Several important bugs leading to link
   11492             failures have been fixed.
   11493      * Interprocedural optimization improvements:
   11494           + A new symbol table has been implemented. It builds on existing
   11495             callgraph and varpool modules and provide a new API. Unusual
   11496             symbol visibilities and aliases are handled more consistently
   11497             leading to, for example, more aggressive unreachable code
   11498             removal with LTO.
   11499           + The inline heuristic can now bypass limits on the size of of
   11500             inlined functions when the inlining is particularly
   11501             profitable. This happens, for example, when loop bounds or
   11502             array strides get propagated.
   11503           + Values passed through aggregates (either by value or
   11504             reference) are now propagated at the inter-procedural level
   11505             leading to better inlining decisions (for example in the case
   11506             of Fortran array descriptors) and devirtualization.
   11507      * [4]AddressSanitizer , a fast memory error detector, has been added
   11508        and can be enabled via -fsanitize=address. Memory access
   11509        instructions will be instrumented to detect heap-, stack-, and
   11510        global-buffer overflow as well as use-after-free bugs. To get nicer
   11511        stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
   11512        available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
   11513        x86-64 Darwin.
   11514      * [5]ThreadSanitizer has been added and can be enabled via
   11515        -fsanitize=thread. Instructions will be instrumented to detect data
   11516        races. The ThreadSanitizer is available on x86-64 GNU/Linux.
   11517      * A new local register allocator (LRA) has been implemented, which
   11518        replaces the 26 year old reload pass and improves generated code
   11519        quality. For now it is active on the IA-32 and x86-64 targets.
   11520      * Support for transactional memory has been implemented on the
   11521        following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
   11522        Alpha.
   11523 
   11524 New Languages and Language specific improvements
   11525 
   11526   C family
   11527 
   11528      * Each diagnostic emitted now includes the original source line and a
   11529        caret '^' indicating the column. The option
   11530        -fno-diagnostics-show-caret suppresses this information.
   11531      * The option -ftrack-macro-expansion=2 is now enabled by default.
   11532        This allows the compiler to display the macro expansion stack in
   11533        diagnostics. Combined with the caret information, an example
   11534        diagnostic showing these two features is:
   11535 
   11536 t.c:1:94: error: invalid operands to binary < (have struct mystruct and float
   11537 )
   11538  #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
   11539 _b = (B); __a < __b ? __b : __a; })
   11540 
   11541               ^
   11542 t.c:7:7: note: in expansion of macro 'MYMAX'
   11543    X = MYMAX(P, F);
   11544        ^
   11545 
   11546      * A new -Wsizeof-pointer-memaccess warning has been added (also
   11547        enabled by -Wall) to warn about suspicious length parameters to
   11548        certain string and memory built-in functions if the argument uses
   11549        sizeof. This warning warns e.g. about memset (ptr, 0, sizeof
   11550        (ptr)); if ptr is not an array, but a pointer, and suggests a
   11551        possible fix, or about memcpy (&foo, ptr, sizeof (&foo));.
   11552      * The new option -Wpedantic is an alias for -pedantic, which is now
   11553        deprecated. The forms -Wno-pedantic, -Werror=pedantic, and
   11554        -Wno-error=pedantic work in the same way as for any other -W
   11555        option. One caveat is that -Werror=pedantic is not equivalent to
   11556        -pedantic-errors, since the latter makes into errors some warnings
   11557        that are not controlled by -Wpedantic, and the former only affects
   11558        diagnostics that are disabled when using -Wno-pedantic.
   11559      * The option -Wshadow no longer warns if a declaration shadows a
   11560        function declaration, unless the former declares a function or
   11561        pointer to function, because this is [6]a common and valid case in
   11562        real-world code.
   11563 
   11564   [7]C++
   11565 
   11566      * G++ now implements the [8]C++11 thread_local keyword; this differs
   11567        from the GNU __thread keyword primarily in that it allows dynamic
   11568        initialization and destruction semantics. Unfortunately, this
   11569        support requires a run-time penalty for references to
   11570        non-function-local thread_local variables defined in a different
   11571        translation unit even if they don't need dynamic initialization, so
   11572        users may want to continue to use __thread for TLS variables with
   11573        static initialization semantics.
   11574        If the programmer can be sure that no use of the variable in a
   11575        non-defining TU needs to trigger dynamic initialization (either
   11576        because the variable is statically initialized, or a use of the
   11577        variable in the defining TU will be executed before any uses in
   11578        another TU), they can avoid this overhead with the
   11579        -fno-extern-tls-init option.
   11580        OpenMP threadprivate variables now also support dynamic
   11581        initialization and destruction by the same mechanism.
   11582      * G++ now implements the [9]C++11 attribute syntax, e.g.
   11583 
   11584 [[noreturn]] void f();
   11585 
   11586        and also the alignment specifier, e.g.
   11587 
   11588 alignas(double) int i;
   11589 
   11590      * G++ now implements [10]C++11 inheriting constructors, e.g.
   11591 
   11592 struct A { A(int); };
   11593 struct B: A { using A::A; }; // defines B::B(int)
   11594 B b(42); // OK
   11595 
   11596      * As of GCC 4.8.1, G++ implements the change to decltype semantics
   11597        from [11]N3276.
   11598 
   11599 struct A f();
   11600 decltype(f()) g();    // OK, return type of f() is not required to be complete.
   11601 
   11602      * As of GCC 4.8.1, G++ implements [12]C++11 ref-qualifiers, e.g.
   11603 
   11604 struct A { int f() &; };
   11605 int i = A().f();  // error, f() requires an lvalue object
   11606 
   11607      * G++ now supports a -std=c++1y option for experimentation with
   11608        features proposed for the next revision of the standard, expected
   11609        around 2014. Currently the only difference from -std=c++11 is
   11610        support for return type deduction in normal functions, as proposed
   11611        in [13]N3386. Status of C++1y features in GCC 4.8 can be found
   11612        [14]here.
   11613      * The G++ namespace association extension, __attribute ((strong)),
   11614        has been deprecated. Inline namespaces should be used instead.
   11615      * G++ now supports a -fext-numeric-literal option to control whether
   11616        GNU numeric literal suffixes are accepted as extensions or
   11617        processed as C++11 user-defined numeric literal suffixes. The flag
   11618        is on (use suffixes for GNU literals) by default for -std=gnu++*,
   11619        and -std=c++98. The flag is off (use suffixes for user-defined
   11620        literals) by default for -std=c++11 and later.
   11621 
   11622     Runtime Library (libstdc++)
   11623 
   11624      * [15]Improved experimental support for the new ISO C++ standard,
   11625        C++11, including:
   11626           + forward_list meets the allocator-aware container requirements;
   11627           + this_thread::sleep_for(), this_thread::sleep_until() and
   11628             this_thread::yield() are defined without requiring the
   11629             configure option --enable-libstdcxx-time;
   11630      * Improvements to <random>:
   11631           + SSE optimized normal_distribution.
   11632           + Use of hardware RNG instruction for random_device on new x86
   11633             processors (requires the assembler to support the
   11634             instruction.)
   11635        and <ext/random>:
   11636           + New random number engine simd_fast_mersenne_twister_engine
   11637             with an optimized SSE implementation.
   11638           + New random number distributions beta_distribution,
   11639             normal_mv_distribution, rice_distribution,
   11640             nakagami_distribution, pareto_distribution, k_distribution,
   11641             arcsine_distribution, hoyt_distribution.
   11642      * Added --disable-libstdcxx-verbose configure option to disable
   11643        diagnostic messages issued when a process terminates abnormally.
   11644        This may be useful for embedded systems to reduce the size of
   11645        executables that link statically to the library.
   11646 
   11647   [16]Fortran
   11648 
   11649      * Compatibility notice:
   11650           + Module files: The version of module files (.mod) has been
   11651             incremented. Fortran MODULEs compiled by earlier GCC versions
   11652             have to be recompiled, when they are USEd by files compiled
   11653             with GCC 4.8. GCC 4.8 is not able to read .mod files created
   11654             by earlier versions; attempting to do so gives an error
   11655             message.
   11656             Note: The ABI of the produced assembler data itself has not
   11657             changed; object files and libraries are fully compatible with
   11658             older versions except as noted below.
   11659           + ABI: Some internal names (used in the assembler/object file)
   11660             have changed for symbols declared in the specification part of
   11661             a module. If an affected module  or a file using it via use
   11662             association  is recompiled, the module and all files which
   11663             directly use such symbols have to be recompiled as well. This
   11664             change only affects the following kind of module symbols:
   11665                o Procedure pointers. Note: C-interoperable function
   11666                  pointers (type(c_funptr)) are not affected nor are
   11667                  procedure-pointer components.
   11668                o Deferred-length character strings.
   11669      * The [17]BACKTRACE intrinsic subroutine has been added. It shows a
   11670        backtrace at an arbitrary place in user code; program execution
   11671        continues normally afterwards.
   11672      * The [18]-Wc-binding-type warning option has been added (disabled by
   11673        default). It warns if the a variable might not be C interoperable;
   11674        in particular, if the variable has been declared using an intrinsic
   11675        type with default kind instead of using a kind parameter defined
   11676        for C interoperability in the intrinsic ISO_C_Binding module.
   11677        Before, this warning was always printed. The -Wc-binding-type
   11678        option is enabled by -Wall.
   11679      * The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
   11680        options have been added, which diagnose when code is inserted for
   11681        automatic (re)allocation of a variable during assignment. This
   11682        option can be used to decide whether it is safe to use
   11683        [20]-fno-realloc-lhs. Additionally, it can be used to find
   11684        automatic (re)allocation in hot loops. (For arrays, replacing
   11685        "var=" by "var(:)=" disables the automatic reallocation.)
   11686      * The [21]-Wcompare-reals command-line option has been added. When
   11687        this is set, warnings are issued when comparing REAL or COMPLEX
   11688        types for equality and inequality; consider replacing a == b by
   11689        abs(ab) < eps with a suitable eps. -Wcompare-reals is enabled by
   11690        -Wextra.
   11691      * The [22]-Wtarget-lifetime command-line option has been added
   11692        (enabled with -Wall), which warns if the pointer in a pointer
   11693        assignment might outlive its target.
   11694      * Reading floating point numbers which use "q" for the exponential
   11695        (such as 4.0q0) is now supported as vendor extension for better
   11696        compatibility with old data files. It is strongly recommended to
   11697        use for I/O the equivalent but standard conforming "e" (such as
   11698        4.0e0).
   11699        (For Fortran source code, consider replacing the "q" in
   11700        floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
   11701        suitable qp). Note that  in Fortran source code  replacing "q" by
   11702        a simple "e" is not equivalent.)
   11703      * The GFORTRAN_TMPDIR environment variable for specifying a
   11704        non-default directory for files opened with STATUS="SCRATCH", is
   11705        not used anymore. Instead gfortran checks the POSIX/GNU standard
   11706        TMPDIR environment variable. If TMPDIR is not defined, gfortran
   11707        falls back to other methods to determine the directory for
   11708        temporary files as documented in the [23]user manual.
   11709      * [24]Fortran 2003:
   11710           + Support for unlimited polymorphic variables (CLASS(*)) has
   11711             been added. Nonconstant character lengths are not yet
   11712             supported.
   11713      * [25]TS 29113:
   11714           + Assumed types (TYPE(*)) are now supported.
   11715           + Experimental support for assumed-rank arrays (dimension(..))
   11716             has been added. Note that currently gfortran's own array
   11717             descriptor is used, which is different from the one defined in
   11718             TS29113, see [26]gfortran's header file or use the [27]Chasm
   11719             Language Interoperability Tools.
   11720 
   11721   [28]Go
   11722 
   11723      * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
   11724        release.
   11725      * GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
   11726        release. The library support is not quite complete.
   11727      * Go has been tested on GNU/Linux and Solaris platforms for various
   11728        processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
   11729        work on other platforms as well.
   11730 
   11731 [29]New Targets and Target Specific Improvements
   11732 
   11733   [30]AArch64
   11734 
   11735      * A new port has been added to support AArch64, the new 64-bit
   11736        architecture from ARM. Note that this is a separate port from the
   11737        existing 32-bit ARM port.
   11738      * The port provides initial support for the Cortex-A53 and the
   11739        Cortex-A57 processors with the command-line options
   11740        -mcpu=cortex-a53 and -mcpu=cortex-a57.
   11741      * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
   11742        has been added and can be enabled by giving the
   11743        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   11744        default by configuring GCC with the --enable-fix-cortex-a53-835769
   11745        option.
   11746 
   11747   [31]ARM
   11748 
   11749      * Initial support has been added for the AArch32 extensions defined
   11750        in the ARMv8 architecture.
   11751      * Code generation improvements for the Cortex-A7 and Cortex-A15 CPUs.
   11752      * A new option, -mcpu=marvell-pj4, has been added to generate code
   11753        for the Marvell PJ4 processor.
   11754      * The compiler can now automatically generate the VFMA, VFMS, REVSH
   11755        and REV16 instructions.
   11756      * A new vectorizer cost model for Advanced SIMD configurations to
   11757        improve the auto-vectorization strategies used.
   11758      * The scheduler now takes into account the number of live registers
   11759        to reduce the amount of spilling that can occur. This should
   11760        improve code performance in large functions. The limit can be
   11761        removed by using the option -fno-sched-pressure.
   11762      * Improvements have been made to the Marvell iWMMX code generation
   11763        and support for the iWMMX2 SIMD unit has been added. The option
   11764        -mcpu=iwmmxt2 can be used to enable code generation for the latter.
   11765      * A number of code generation improvements for Thumb2 to reduce code
   11766        size when compiling for the M-profile processors.
   11767      * The RTEMS (arm-rtems) port has been updated to use the EABI.
   11768      * Code generation support for the old FPA and Maverick floating-point
   11769        architectures has been removed. Ports that previously relied on
   11770        these features have also been removed. This includes the targets:
   11771           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   11772           + arm*-*-elf (use arm*-*-eabi)
   11773           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   11774           + arm*-*-ecos-elf (no alternative)
   11775           + arm*-*-freebsd (no alternative)
   11776           + arm*-wince-pe* (no alternative).
   11777 
   11778   [32]AVR
   11779 
   11780      * Support for the command-line option -mshort-calls has been removed.
   11781        It was deprecated in GCC 4.7.
   11782      * The configure option --with-avrlibc supported since GCC 4.7.2 is
   11783        turned on per default for all non-RTEMS configurations. This option
   11784        arranges for a better integration of [33]AVR-LibC with avr-gcc. For
   11785        technical details, see [34]PR54461. To turn off the option in
   11786        non-AVR-LibC configurations, use --with-avrlibc=no. If the compiler
   11787        is configured for RTEMS, the option is always turned off.
   11788      * Support for the "Embedded C" fixed-point has been added. For
   11789        details, see the [35]GCC wiki and the [36]user manual. The support
   11790        is not complete.
   11791      * A new print modifier %r for register operands in inline assembler
   11792        is supported. It will print the raw register number without the
   11793        register prefix 'r':
   11794     /* Return the most significant byte of 'val', a 64-bit value.  */
   11795 
   11796     unsigned char msb (long long val)
   11797     {
   11798       unsigned char c;
   11799       __asm__ ("mov %0, %r1+7" : "=r" (c) : "r" (val));
   11800       return c;
   11801     }
   11802        The inline assembler in this example will generate code like
   11803     mov r24, 8+7
   11804        provided c is allocated to R24 and val is allocated to R8R15. This
   11805        works because the GNU assembler accepts plain register numbers
   11806        without register prefix.
   11807      * Static initializers with 3-byte symbols are supported now:
   11808     extern const __memx char foo;
   11809     const __memx void *pfoo = &foo;
   11810        This requires at least Binutils 2.23.
   11811 
   11812   IA-32/x86-64
   11813 
   11814      * Allow -mpreferred-stack-boundary=3 for the x86-64 architecture with
   11815        SSE extensions disabled. Since the x86-64 ABI requires 16 byte
   11816        stack alignment, this is ABI incompatible and intended to be used
   11817        in controlled environments where stack space is an important
   11818        limitation. This option will lead to wrong code when functions
   11819        compiled with 16 byte stack alignment (such as functions from a
   11820        standard library) are called with misaligned stack. In this case,
   11821        SSE instructions may lead to misaligned memory access traps. In
   11822        addition, variable arguments will be handled incorrectly for 16
   11823        byte aligned objects (including x87 long double and __int128),
   11824        leading to wrong results. You must build all modules with
   11825        -mpreferred-stack-boundary=3, including any libraries. This
   11826        includes the system libraries and startup modules.
   11827      * Support for the new Intel processor codename Broadwell with RDSEED,
   11828        ADCX, ADOX, PREFETCHW is available through -madx, -mprfchw,
   11829        -mrdseed command-line options.
   11830      * Support for the Intel RTM and HLE intrinsics, built-in functions
   11831        and code generation is available via -mrtm and -mhle.
   11832      * Support for the Intel FXSR, XSAVE and XSAVEOPT instruction sets.
   11833        Intrinsics and built-in functions are available via -mfxsr, -mxsave
   11834        and -mxsaveopt respectively.
   11835      * New -maddress-mode=[short|long] options for x32.
   11836        -maddress-mode=short overrides default 64-bit addresses to 32-bit
   11837        by emitting the 0x67 address-size override prefix. This is the
   11838        default address mode for x32.
   11839      * New built-in functions to detect run-time CPU type and ISA:
   11840           + A built-in function __builtin_cpu_is has been added to detect
   11841             if the run-time CPU is of a particular type. It returns a
   11842             positive integer on a match and zero otherwise. It accepts one
   11843             string literal argument, the CPU name. For example,
   11844             __builtin_cpu_is("westmere") returns a positive integer if the
   11845             run-time CPU is an Intel Core i7 Westmere processor. Please
   11846             refer to the [37]user manual for the list of valid CPU names
   11847             recognized.
   11848           + A built-in function __builtin_cpu_supports has been added to
   11849             detect if the run-time CPU supports a particular ISA feature.
   11850             It returns a positive integer on a match and zero otherwise.
   11851             It accepts one string literal argument, the ISA feature. For
   11852             example, __builtin_cpu_supports("ssse3") returns a positive
   11853             integer if the run-time CPU supports SSSE3 instructions.
   11854             Please refer to the [38]user manual for the list of valid ISA
   11855             names recognized.
   11856        Caveat: If these built-in functions are called before any static
   11857        constructors are invoked, like during IFUNC initialization, then
   11858        the CPU detection initialization must be explicitly run using this
   11859        newly provided built-in function, __builtin_cpu_init. The
   11860        initialization needs to be done only once. For example, this is how
   11861        the invocation would look like inside an IFUNC initializer:
   11862     static void (*some_ifunc_resolver(void))(void)
   11863     {
   11864       __builtin_cpu_init();
   11865       if (__builtin_cpu_is("amdfam10h") ...
   11866       if (__builtin_cpu_supports("popcnt") ...
   11867     }
   11868 
   11869      * Function Multiversioning Support with G++:
   11870        It is now possible to create multiple function versions each
   11871        targeting a specific processor and/or ISA. Function versions have
   11872        the same signature but different target attributes. For example,
   11873        here is a program with function versions:
   11874     __attribute__ ((target ("default")))
   11875     int foo(void)
   11876     {
   11877       return 1;
   11878     }
   11879 
   11880     __attribute__ ((target ("sse4.2")))
   11881     int foo(void)
   11882     {
   11883       return 2;
   11884     }
   11885 
   11886     int main (void)
   11887     {
   11888       int (*p) = &foo;
   11889       assert ((*p)() == foo());
   11890       return 0;
   11891     }
   11892 
   11893        Please refer to this [39]wiki for more information.
   11894      * The x86 back end has been improved to allow option -fschedule-insns
   11895        to work reliably. This option can be used to schedule instructions
   11896        better and leads to improved performace in certain cases.
   11897      * Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
   11898        from the Mingw-w64 trunk.
   11899      * Support for new AMD family 15h processors (Steamroller core) is now
   11900        available through the -march=bdver3 and -mtune=bdver3 options.
   11901      * Support for new AMD family 16h processors (Jaguar core) is now
   11902        available through the -march=btver2 and -mtune=btver2 options.
   11903 
   11904   [40]FRV
   11905 
   11906      * This target now supports the -fstack-usage command-line option.
   11907 
   11908   [41]MIPS
   11909 
   11910      * GCC can now generate code specifically for the R4700, Broadcom XLP
   11911        and MIPS 34kn processors. The associated -march options are
   11912        -march=r4700, -march=xlp and -march=34kn respectively.
   11913      * GCC now generates better DSP code for MIPS 74k cores thanks to
   11914        further scheduling optimizations.
   11915      * The MIPS port now supports the -fstack-check option.
   11916      * GCC now passes the -mmcu and -mno-mcu options to the assembler.
   11917      * Previous versions of GCC would silently accept -fpic and -fPIC for
   11918        -mno-abicalls targets like mips*-elf. This combination was not
   11919        intended or supported, and did not generate position-independent
   11920        code. GCC 4.8 now reports an error when this combination is used.
   11921 
   11922   [42]PowerPC / PowerPC64 / RS6000
   11923 
   11924      * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
   11925        restore or update the VRSAVE register by default. The respective
   11926        operating systems manage the VRSAVE register directly.
   11927      * Large TOC support has been added for AIX through the command line
   11928        option -mcmodel=large.
   11929      * Native Thread-Local Storage support has been added for AIX.
   11930      * VMX (Altivec) and VSX instruction sets now are enabled implicitly
   11931        when targetting processors that support those hardware features on
   11932        AIX 6.1 and above.
   11933 
   11934   [43]RX
   11935 
   11936      * This target will now issue a warning message whenever multiple fast
   11937        interrupt handlers are found in the same compilation unit. This
   11938        feature can be turned off by the new
   11939        -mno-warn-multiple-fast-interrupts command-line option.
   11940 
   11941   S/390, System z
   11942 
   11943      * Support for the IBM zEnterprise zEC12 processor has been added.
   11944        When using the -march=zEC12 option, the compiler will generate code
   11945        making use of the following new instructions:
   11946           + load and trap instructions
   11947           + 2 new compare and trap instructions
   11948           + rotate and insert selected bits - without CC clobber
   11949        The -mtune=zEC12 option enables zEC12 specific instruction
   11950        scheduling without making use of new instructions.
   11951      * Register pressure sensitive instruction scheduling is enabled by
   11952        default.
   11953      * The ifunc function attribute is enabled by default.
   11954      * memcpy and memcmp invokations on big memory chunks or with run time
   11955        lengths are not generated inline anymore when tuning for z10 or
   11956        higher. The purpose is to make use of the IFUNC optimized versions
   11957        in Glibc.
   11958 
   11959   [44]SH
   11960 
   11961      * The default alignment settings have been reduced to be less
   11962        aggressive. This results in more compact code for optimization
   11963        levels other than -Os.
   11964      * Improved support for the __atomic built-in functions:
   11965           + A new option -matomic-model=model selects the model for the
   11966             generated atomic sequences. The following models are
   11967             supported:
   11968 
   11969               soft-gusa
   11970                       Software gUSA sequences (SH3* and SH4* only). On
   11971                       SH4A targets this will now also partially utilize
   11972                       the movco.l and movli.l instructions. This is the
   11973                       default when the target is sh3*-*-linux* or
   11974                       sh4*-*-linux*.
   11975 
   11976               hard-llcs
   11977                       Hardware movco.l / movli.l sequences (SH4A only).
   11978 
   11979               soft-tcb
   11980                       Software thread control block sequences.
   11981 
   11982               soft-imask
   11983                       Software interrupt flipping sequences (privileged
   11984                       mode only). This is the default when the target is
   11985                       sh1*-*-linux* or sh2*-*-linux*.
   11986 
   11987               none
   11988                       Generates function calls to the respective __atomic
   11989                       built-in functions. This is the default for SH64
   11990                       targets or when the target is not sh*-*-linux*.
   11991 
   11992           + The option -msoft-atomic has been deprecated. It is now an
   11993             alias for -matomic-model=soft-gusa.
   11994           + A new option -mtas makes the compiler generate the tas.b
   11995             instruction for the __atomic_test_and_set built-in function
   11996             regardless of the selected atomic model.
   11997           + The __sync functions in libgcc now reflect the selected atomic
   11998             model when building the toolchain.
   11999      * Added support for the mov.b and mov.w instructions with
   12000        displacement addressing.
   12001      * Added support for the SH2A instructions movu.b and movu.w.
   12002      * Various improvements to code generated for integer arithmetic.
   12003      * Improvements to conditional branches and code that involves the T
   12004        bit. A new option -mzdcbranch tells the compiler to favor
   12005        zero-displacement branches. This is enabled by default for SH4*
   12006        targets.
   12007      * The pref instruction will now be emitted by the __builtin_prefetch
   12008        built-in function for SH3* targets.
   12009      * The fmac instruction will now be emitted by the fmaf standard
   12010        function and the __builtin_fmaf built-in function.
   12011      * The -mfused-madd option has been deprecated in favor of the
   12012        machine-independent -ffp-contract option. Notice that the fmac
   12013        instruction will now be generated by default for expressions like a
   12014        * b + c. This is due to the compiler default setting
   12015        -ffp-contract=fast.
   12016      * Added new options -mfsrra and -mfsca to allow the compiler using
   12017        the fsrra and fsca instructions on targets other than SH4A (where
   12018        they are already enabled by default).
   12019      * Added support for the __builtin_bswap32 built-in function. It is
   12020        now expanded as a sequence of swap.b and swap.w instructions
   12021        instead of a library function call.
   12022      * The behavior of the -mieee option has been fixed and the negative
   12023        form -mno-ieee has been added to control the IEEE conformance of
   12024        floating point comparisons. By default -mieee is now enabled and
   12025        the option -ffinite-math-only implicitly sets -mno-ieee.
   12026      * Added support for the built-in functions __builtin_thread_pointer
   12027        and __builtin_set_thread_pointer. This assumes that GBR is used to
   12028        hold the thread pointer of the current thread. Memory loads and
   12029        stores relative to the address returned by __builtin_thread_pointer
   12030        will now also utilize GBR based displacement address modes.
   12031      * The -mdiv= option for targets other than SHmedia has been fixed and
   12032        documented.
   12033 
   12034   [45]SPARC
   12035 
   12036      * Added optimized instruction scheduling for Niagara4.
   12037 
   12038   [46]TILE-Gx
   12039 
   12040      * Added support for the -mcmodel=MODEL command-line option. The
   12041        models supported are small and large.
   12042 
   12043   [47]V850
   12044 
   12045      * This target now supports the E3V5 architecture via the use of the
   12046        new -mv850e3v5 command-line option. It also has experimental
   12047        support for the e3v5 LOOP instruction which can be enabled via the
   12048        new -mloop command-line option.
   12049 
   12050   [48]XStormy16
   12051 
   12052      * This target now supports the -fstack-usage command-line option.
   12053 
   12054 [49]Operating Systems
   12055 
   12056   [50]OpenBSD
   12057 
   12058      * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
   12059        support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
   12060 
   12061   [51]Windows (Cygwin)
   12062 
   12063      * Executables are now linked against shared libgcc by default. The
   12064        previous default was to link statically, which can still be done by
   12065        explicitly specifying -static or static-libgcc on the command line.
   12066        However it is strongly advised against, as it will cause problems
   12067        for any application that makes use of DLLs compiled by GCC. It
   12068        should be alright for a monolithic stand-alone application that
   12069        only links against the Windows DLLs, but offers little or no
   12070        benefit.
   12071 
   12072 [52]GCC 4.8.1
   12073 
   12074    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   12075    system that are known to be fixed in the 4.8.1 release. This list might
   12076    not be complete (that is, it is possible that some PRs that have been
   12077    fixed are not listed here).
   12078 
   12079    The C++11 <chrono> std::chrono::system_clock and
   12080    std::chrono::steady_clock classes have changed ABI in GCC 4.8.1, they
   12081    both are now separate (never typedefs of each other), both use
   12082    std::chrono::nanoseconds resolution, on most GNU/Linux configurations
   12083    std::chrono::steady_clock is now finally monotonic, and both classes
   12084    are mangled differently than in the previous GCC releases.
   12085    std::chrono::system_clock::now() with std::chrono::microseconds resp.
   12086    std::chrono::seconds resolution is still exported for backwards
   12087    compatibility with default configured libstdc++. Note that libstdc++
   12088    configured with --enable-libstdcxx-time= used to be ABI incompatible
   12089    with default configured libstdc++ for those two classes and no ABI
   12090    compatibility can be offered for those configurations, so any C++11
   12091    code that uses those classes and has been compiled and linked against
   12092    libstdc++ configured with the non-default --enable-libstdcxx-time=
   12093    configuration option needs to be recompiled.
   12094 
   12095 [54]GCC 4.8.2
   12096 
   12097    This is the [55]list of problem reports (PRs) from GCC's bug tracking
   12098    system that are known to be fixed in the 4.8.2 release. This list might
   12099    not be complete (that is, it is possible that some PRs that have been
   12100    fixed are not listed here).
   12101 
   12102 [56]GCC 4.8.3
   12103 
   12104    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   12105    system that are known to be fixed in the 4.8.3 release. This list might
   12106    not be complete (that is, it is possible that some PRs that have been
   12107    fixed are not listed here).
   12108 
   12109    Support for the new powerpc64le-linux platform has been added. It
   12110    defaults to generating code that conforms to the ELFV2 ABI.
   12111 
   12112 [58]GCC 4.8.4
   12113 
   12114    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   12115    system that are known to be fixed in the 4.8.4 release. This list might
   12116    not be complete (that is, it is possible that some PRs that have been
   12117    fixed are not listed here).
   12118 
   12119 [60]GCC 4.8.5
   12120 
   12121    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   12122    system that are known to be fixed in the 4.8.5 release. This list might
   12123    not be complete (that is, it is possible that some PRs that have been
   12124    fixed are not listed here).
   12125 
   12126 
   12127     For questions related to the use of GCC, please consult these web
   12128     pages and the [62]GCC manuals. If that fails, the
   12129     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12130     web pages and the development of GCC are welcome on our developer
   12131     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   12132     archives.
   12133 
   12134    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   12135    distribution of this entire article is permitted in any medium,
   12136    provided this notice is preserved.
   12137 
   12138    These pages are [67]maintained by the GCC team. Last modified
   12139    2026-06-08.
   12140 
   12141 References
   12142 
   12143    1. https://gcc.gnu.org/wiki/cxx-conversion
   12144    2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
   12145    3. https://gcc.gnu.org/gcc-4.8/porting_to.html
   12146    4. https://github.com/google/sanitizers
   12147    5. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
   12148    6. https://lkml.org/lkml/2006/11/28/239
   12149    7. https://gcc.gnu.org/gcc-4.8/changes.html#cxx
   12150    8. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12151    9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12152   10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12153   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
   12154   12. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12155   13. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   12156   14. https://gcc.gnu.org/projects/cxx1y.html
   12157   15. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
   12158   16. https://gcc.gnu.org/gcc-4.8/changes.html#fortran
   12159   17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
   12160   18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12161   19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12162   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   12163   21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12164   22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12165   23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
   12166   24. https://gcc.gnu.org/wiki/Fortran2003Status
   12167   25. https://gcc.gnu.org/wiki/TS29113Status
   12168   26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
   12169   27. https://chasm-interop.sourceforge.net/
   12170   28. https://gcc.gnu.org/gcc-4.8/changes.html#go
   12171   29. https://gcc.gnu.org/gcc-4.8/changes.html#targets
   12172   30. https://gcc.gnu.org/gcc-4.8/changes.html#aarch64
   12173   31. https://gcc.gnu.org/gcc-4.8/changes.html#arm
   12174   32. https://gcc.gnu.org/gcc-4.8/changes.html#avr
   12175   33. http://www.nongnu.org/avr-libc/
   12176   34. https://gcc.gnu.org/PR54461
   12177   35. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
   12178   36. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
   12179   37. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   12180   38. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   12181   39. https://gcc.gnu.org/wiki/FunctionMultiVersioning
   12182   40. https://gcc.gnu.org/gcc-4.8/changes.html#frv
   12183   41. https://gcc.gnu.org/gcc-4.8/changes.html#mips
   12184   42. https://gcc.gnu.org/gcc-4.8/changes.html#powerpc
   12185   43. https://gcc.gnu.org/gcc-4.8/changes.html#rx
   12186   44. https://gcc.gnu.org/gcc-4.8/changes.html#sh
   12187   45. https://gcc.gnu.org/gcc-4.8/changes.html#sparc
   12188   46. https://gcc.gnu.org/gcc-4.8/changes.html#tilegx
   12189   47. https://gcc.gnu.org/gcc-4.8/changes.html#v850
   12190   48. https://gcc.gnu.org/gcc-4.8/changes.html#xstormy16
   12191   49. https://gcc.gnu.org/gcc-4.8/changes.html#os
   12192   50. https://gcc.gnu.org/gcc-4.8/changes.html#openbsd
   12193   51. https://gcc.gnu.org/gcc-4.8/changes.html#windows
   12194   52. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.1
   12195   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
   12196   54. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.2
   12197   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
   12198   56. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.3
   12199   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
   12200   58. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.4
   12201   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
   12202   60. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.5
   12203   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
   12204   62. https://gcc.gnu.org/onlinedocs/
   12205   63. mailto:gcc-help (a] gcc.gnu.org
   12206   64. mailto:gcc (a] gcc.gnu.org
   12207   65. https://gcc.gnu.org/lists.html
   12208   66. https://www.fsf.org/
   12209   67. https://gcc.gnu.org/about.html
   12210 ======================================================================
   12211 http://gcc.gnu.org/gcc-4.7/index.html
   12212                              GCC 4.7 Release Series
   12213 
   12214    (This release series is no longer supported.)
   12215 
   12216    June 12, 2014
   12217 
   12218    The [1]GNU project and the GCC developers are pleased to announce the
   12219    release of GCC 4.7.4.
   12220 
   12221    This release is a bug-fix release, containing fixes for regressions in
   12222    GCC 4.7.3 relative to previous releases of GCC.
   12223 
   12224 Release History
   12225 
   12226    GCC 4.7.4
   12227           June 12, 2014 ([2]changes, [3]documentation)
   12228 
   12229    GCC 4.7.3
   12230           April 11, 2013 ([4]changes, [5]documentation)
   12231 
   12232    GCC 4.7.2
   12233           September 20, 2012 ([6]changes, [7]documentation)
   12234 
   12235    GCC 4.7.1
   12236           June 14, 2012 ([8]changes, [9]documentation)
   12237 
   12238    GCC 4.7.0
   12239           March 22, 2012 ([10]changes, [11]documentation)
   12240 
   12241 References and Acknowledgements
   12242 
   12243    GCC used to stand for the GNU C Compiler, but since the compiler
   12244    supports several other languages aside from C, it now stands for the
   12245    GNU Compiler Collection.
   12246 
   12247    A list of [12]successful builds is updated as new information becomes
   12248    available.
   12249 
   12250    The GCC developers would like to thank the numerous people that have
   12251    contributed new features, improvements, bug fixes, and other changes as
   12252    well as test results to GCC. This [13]amazing group of volunteers is
   12253    what makes GCC successful.
   12254 
   12255    For additional information about GCC please refer to the [14]GCC
   12256    project web site or contact the [15]GCC development mailing list.
   12257 
   12258    To obtain GCC please use [16]our mirror sites or [17]our version
   12259    control system.
   12260 
   12261 
   12262     For questions related to the use of GCC, please consult these web
   12263     pages and the [18]GCC manuals. If that fails, the
   12264     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12265     web pages and the development of GCC are welcome on our developer
   12266     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   12267     archives.
   12268 
   12269    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   12270    distribution of this entire article is permitted in any medium,
   12271    provided this notice is preserved.
   12272 
   12273    These pages are [23]maintained by the GCC team. Last modified
   12274    2022-10-26.
   12275 
   12276 References
   12277 
   12278    1. http://www.gnu.org/
   12279    2. https://gcc.gnu.org/gcc-4.7/changes.html
   12280    3. https://gcc.gnu.org/onlinedocs/4.7.4/
   12281    4. https://gcc.gnu.org/gcc-4.7/changes.html
   12282    5. https://gcc.gnu.org/onlinedocs/4.7.3/
   12283    6. https://gcc.gnu.org/gcc-4.7/changes.html
   12284    7. https://gcc.gnu.org/onlinedocs/4.7.2/
   12285    8. https://gcc.gnu.org/gcc-4.7/changes.html
   12286    9. https://gcc.gnu.org/onlinedocs/4.7.1/
   12287   10. https://gcc.gnu.org/gcc-4.7/changes.html
   12288   11. https://gcc.gnu.org/onlinedocs/4.7.0/
   12289   12. https://gcc.gnu.org/gcc-4.7/buildstat.html
   12290   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12291   14. https://gcc.gnu.org/index.html
   12292   15. mailto:gcc (a] gcc.gnu.org
   12293   16. https://gcc.gnu.org/mirrors.html
   12294   17. https://gcc.gnu.org/git.html
   12295   18. https://gcc.gnu.org/onlinedocs/
   12296   19. mailto:gcc-help (a] gcc.gnu.org
   12297   20. mailto:gcc (a] gcc.gnu.org
   12298   21. https://gcc.gnu.org/lists.html
   12299   22. https://www.fsf.org/
   12300   23. https://gcc.gnu.org/about.html
   12301 ======================================================================
   12302 http://gcc.gnu.org/gcc-4.7/changes.html
   12303                              GCC 4.7 Release Series
   12304                         Changes, New Features, and Fixes
   12305 
   12306 Caveats
   12307 
   12308      * The -fconserve-space flag has been deprecated. The flag had no
   12309        effect for most targets: only targets without a global .bss section
   12310        and without support for switchable sections. Furthermore, the flag
   12311        only had an effect for G++, where it could result in wrong
   12312        semantics (please refer to the GCC manual for further details). The
   12313        flag will be removed in GCC 4.8
   12314      * Support for a number of older systems and recently unmaintained or
   12315        untested target ports of GCC has been declared obsolete in GCC 4.7.
   12316        Unless there is activity to revive them, the next release of GCC
   12317        will have their sources permanently removed.
   12318        All GCC ports for the following processor architectures have been
   12319        declared obsolete:
   12320           + picoChip (picochip-*)
   12321        The following ports for individual systems on particular
   12322        architectures have been obsoleted:
   12323           + IRIX 6.5 (mips-sgi-irix6.5)
   12324           + MIPS OpenBSD (mips*-*-openbsd*)
   12325           + Solaris 8 (*-*-solaris2.8). Details can be found in the
   12326             [1]announcement.
   12327           + Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
   12328      * On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
   12329        ARMv7-R, or ARMv7-M, the new option -munaligned-access is active by
   12330        default, which for some sources generates code that accesses memory
   12331        on unaligned addresses. This requires the kernel of those systems
   12332        to enable such accesses (controlled by CP15 register c1, refer to
   12333        ARM documentation). Alternatively, or for compatibility with
   12334        kernels where unaligned accesses are not supported, all code has to
   12335        be compiled with -mno-unaligned-access. Upstream Linux kernel
   12336        releases have automatically and unconditionally supported unaligned
   12337        accesses as emitted by GCC due to this option being active since
   12338        version 2.6.28.
   12339      * Support on ARM for the legacy floating-point accelerator (FPA) and
   12340        the mixed-endian floating-point format that it used has been
   12341        obsoleted. The ports that still use this format have been obsoleted
   12342        as well. Many legacy ARM ports already provide an alternative that
   12343        uses the VFP floating-point format. The obsolete ports will be
   12344        deleted in the next release.
   12345        The obsolete ports with alternatives are:
   12346           + arm*-*-rtems (use arm*-*-rtemseabi)
   12347           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   12348           + arm*-*-elf (use arm*-*-eabi)
   12349           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   12350        Note, however, that these alternatives are not binary compatible
   12351        with their legacy counterparts (although some can support running
   12352        legacy applications).
   12353        The obsolete ports that currently lack a modern alternative are:
   12354           + arm*-*-ecos-elf
   12355           + arm*-*-freebsd
   12356           + arm*-wince-pe*
   12357        New ports that support more recent versions of the architecture are
   12358        welcome.
   12359      * Support for the Maverick co-processor on ARM has been obsoleted.
   12360        Code to support it will be deleted in the next release.
   12361      * Support has been removed for Unix International threads on Solaris
   12362        2, so the --enable-threads=solaris configure option and the
   12363        -threads compiler option don't work any longer.
   12364      * Support has been removed for the Solaris BSD Compatibility Package,
   12365        which lives in /usr/ucbinclude and /usr/ucblib. It has been removed
   12366        from Solaris 11, and was only intended as a migration aid from
   12367        SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
   12368        recognized any longer.
   12369      * The ARM port's -mwords-little-endian option has been deprecated. It
   12370        will be removed in a future release.
   12371      * Support has been removed for the NetWare x86 configuration
   12372        obsoleted in GCC 4.6.
   12373      * It is no longer possible to use the "l" constraint in MIPS16 asm
   12374        statements.
   12375      * GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard
   12376        library which affected the ABI in C++11 mode: a data member was
   12377        added to std::list changing its size and altering the definitions
   12378        of some member functions, and std::pair's move constructor was
   12379        non-trivial which altered the calling convention for functions with
   12380        std::pair arguments or return types. The ABI incompatibilities have
   12381        been fixed for GCC version 4.7.2 but as a result C++11 code
   12382        compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11
   12383        code compiled with different GCC versions and with C++98/C++03 code
   12384        compiled with any version.
   12385      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   12386        rules for the layout of vectors that could lead to wrong code being
   12387        generated. Vectors larger than 8 bytes in size are now by default
   12388        aligned to an 8-byte boundary. This is an ABI change: code that
   12389        makes explicit use of vector types may be incompatible with binary
   12390        objects built with older versions of GCC. Auto-vectorized code is
   12391        not affected by this change. (This change affects GCC versions
   12392        4.7.2 and later.)
   12393      * More information on porting to GCC 4.7 from previous versions of
   12394        GCC can be found in the [2]porting guide for this release.
   12395 
   12396 General Optimizer Improvements
   12397 
   12398      * Support for a new parameter --param case-values-threshold=n was
   12399        added to allow users to control the cutoff between doing switch
   12400        statements as a series of if statements and using a jump table.
   12401      * Link-time optimization (LTO) improvements:
   12402           + Improved scalability and reduced memory usage. Link time
   12403             optimization of Firefox now requires 3GB of RAM on a 64-bit
   12404             system, while over 8GB was needed previously. Linking time has
   12405             been improved, too. The serial stage of linking Firefox has
   12406             been sped up by about a factor of 10.
   12407           + Reduced size of object files and temporary storage used during
   12408             linking.
   12409           + Streaming performance (both outbound and inbound) has been
   12410             improved.
   12411           + ld -r is now supported with LTO.
   12412           + Several bug fixes, especially in symbol table handling and
   12413             merging.
   12414      * Interprocedural optimization improvements:
   12415           + Heuristics now take into account that after inlining code will
   12416             be optimized out because of known values (or properties) of
   12417             function parameters. For example:
   12418 void foo(int a)
   12419 {
   12420   if (a > 10)
   12421     ... huge code ...
   12422 }
   12423 void bar (void)
   12424 {
   12425   foo (0);
   12426 }
   12427 
   12428             The call of foo will be inlined into bar even when optimizing
   12429             for code size. Constructs based on __builtin_constant_p are
   12430             now understood by the inliner and code size estimates are
   12431             evaluated a lot more realistically.
   12432           + The representation of C++ virtual thunks and aliases (both
   12433             implicit and defined via the alias attribute) has been
   12434             re-engineered. Aliases no longer pose optimization barriers
   12435             and calls to an alias can be inlined and otherwise optimized.
   12436           + The inter-procedural constant propagation pass has been
   12437             rewritten. It now performs generic function specialization.
   12438             For example when compiling the following:
   12439 void foo(bool flag)
   12440 {
   12441   if (flag)
   12442     ... do something ...
   12443   else
   12444     ... do something else ...
   12445 }
   12446 void bar (void)
   12447 {
   12448   foo (false);
   12449   foo (true);
   12450   foo (false);
   12451   foo (true);
   12452   foo (false);
   12453   foo (true);
   12454 }
   12455 
   12456             GCC will now produce two copies of foo. One with flag being
   12457             true, while other with flag being false. This leads to
   12458             performance improvements previously possible only by inlining
   12459             all calls. Cloning causes a lot less code size growth.
   12460      * A string length optimization pass has been added. It attempts to
   12461        track string lengths and optimize various standard C string
   12462        functions like strlen, strchr, strcpy, strcat, stpcpy and their
   12463        _FORTIFY_SOURCE counterparts into faster alternatives. This pass is
   12464        enabled by default at -O2 or above, unless optimizing for size, and
   12465        can be disabled by the -fno-optimize-strlen option. The pass can
   12466        e.g. optimize
   12467 char *bar (const char *a)
   12468 {
   12469   size_t l = strlen (a) + 2;
   12470   char *p = malloc (l); if (p == NULL) return p;
   12471   strcpy (p, a); strcat (p, "/"); return p;
   12472 }
   12473 
   12474        into:
   12475 char *bar (const char *a)
   12476 {
   12477   size_t tmp = strlen (a);
   12478   char *p = malloc (tmp + 2); if (p == NULL) return p;
   12479   memcpy (p, a, tmp); memcpy (p + tmp, "/", 2); return p;
   12480 }
   12481 
   12482        or for hosted compilations where stpcpy is available in the runtime
   12483        and headers provide its prototype, e.g.
   12484 void foo (char *a, const char *b, const char *c, const char *d)
   12485 {
   12486   strcpy (a, b); strcat (a, c); strcat (a, d);
   12487 }
   12488 
   12489        can be optimized into:
   12490 void foo (char *a, const char *b, const char *c, const char *d)
   12491 {
   12492   strcpy (stpcpy (stpcpy (a, b), c), d);
   12493 }
   12494 
   12495 New Languages and Language specific improvements
   12496 
   12497      * Version 3.1 of the OpenMP specification is now supported for the C,
   12498        C++, and Fortran compilers.
   12499 
   12500   Ada
   12501 
   12502      * The command-line option -feliminate-unused-debug-types has been
   12503        re-enabled by default, as it is for the other languages, leading to
   12504        a reduction in debug info size of 12.5% and more for relevant
   12505        cases, as well as to a small compilation speedup.
   12506 
   12507   C family
   12508 
   12509      * A new built-in, __builtin_assume_aligned, has been added, through
   12510        which the compiler can be hinted about pointer alignment and can
   12511        use it to improve generated code.
   12512      * A new warning option -Wunused-local-typedefs was added for C, C++,
   12513        Objective-C and Objective-C++. This warning diagnoses typedefs
   12514        locally defined in a function, and otherwise not used.
   12515      * A new experimental command-line option -ftrack-macro-expansion was
   12516        added for C, C++, Objective-C, Objective-C++ and Fortran. It allows
   12517        the compiler to emit diagnostic about the current macro expansion
   12518        stack when a compilation error occurs in a macro expansion.
   12519      * Experimental support for transactional memory has been added. It
   12520        includes support in the compiler, as well as a supporting runtime
   12521        library called libitm. To compile code with transactional memory
   12522        constructs, use the -fgnu-tm option.
   12523        Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
   12524        and 32-bit/64-bit x86 platforms.
   12525        For more details on transactional memory see [3]the GCC WiKi.
   12526      * Support for atomic operations specifying the C++11/C11 memory model
   12527        has been added. These new __atomic routines replace the existing
   12528        __sync built-in routines.
   12529        Atomic support is also available for memory blocks. Lock-free
   12530        instructions will be used if a memory block is the same size and
   12531        alignment as a supported integer type. Atomic operations which do
   12532        not have lock-free support are left as function calls. A set of
   12533        library functions is available on the GCC atomic wiki in the
   12534        "External Atomics Library" section.
   12535        For more details on the memory models and features, see the
   12536        [4]atomic wiki.
   12537      * When a binary operation is performed on vector types and one of the
   12538        operands is a uniform vector, it is possible to replace the vector
   12539        with the generating element. For example:
   12540 typedef int v4si __attribute__ ((vector_size (16)));
   12541 v4si res, a = {1,2,3,4};
   12542 int x;
   12543 
   12544 res = 2 + a;  /* means {2,2,2,2} + a  */
   12545 res = a - x;  /* means a - {x,x,x,x}  */
   12546 
   12547   [5]C
   12548 
   12549      * There is support for some more features from the C11 revision of
   12550        the ISO C standard. GCC now accepts the options -std=c11 and
   12551        -std=gnu11, in addition to the previous -std=c1x and -std=gnu1x.
   12552           + Unicode strings (previously supported only with options such
   12553             as -std=gnu11, now supported with -std=c11), and the
   12554             predefined macros __STDC_UTF_16__ and __STDC_UTF_32__.
   12555           + Nonreturning functions (_Noreturn and <stdnoreturn.h>).
   12556           + Alignment support (_Alignas, _Alignof, max_align_t,
   12557             <stdalign.h>).
   12558           + A built-in function __builtin_complex is provided to support C
   12559             library implementation of the CMPLX family of macros.
   12560 
   12561   [6]C++
   12562 
   12563      * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
   12564        options, which are equivalent to -std=c++0x, -std=gnu++0x, and
   12565        -Wc++0x-compat, respectively.
   12566      * G++ now implements [7]C++11 extended friend syntax:
   12567 
   12568 template<class W>
   12569 class Q
   12570 {
   12571   static const int I = 2;
   12572 public:
   12573   friend W;
   12574 };
   12575 
   12576 struct B
   12577 {
   12578   int ar[Q<B>::I];
   12579 };
   12580 
   12581      * Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
   12582        override control.
   12583 
   12584 struct B {
   12585   virtual void f() const final;
   12586   virtual void f(int);
   12587 };
   12588 
   12589 struct D : B {
   12590   void f() const;            // error: D::f attempts to override final B::f
   12591   void f(long) override;     // error: doesn't override anything
   12592   void f(int) override;      // ok
   12593 };
   12594 
   12595 struct E final { };
   12596 struct F: E { }; // error: deriving from final class
   12597 
   12598      * G++ now implements [9]C++11 non-static data member initializers.
   12599 
   12600 struct A {
   12601   int i = 42;
   12602 } a; // initializes a.i to 42
   12603 
   12604      * Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
   12605        user-defined literals.
   12606 
   12607 // Not actually a good approximation.  :)
   12608 constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
   12609 long double pi = 180.0_degrees;
   12610 
   12611      * G++ now implements [11]C++11 alias-declarations.
   12612 
   12613 template <class T> using Ptr = T*;
   12614 Ptr<int> ip;  // decltype(ip) is int*
   12615 
   12616      * Thanks to Ville Voutilainen and Pedro Lamaro, G++ now implements
   12617        [12]C++11 delegating constructors.
   12618 
   12619 struct A {
   12620   A(int);
   12621   A(): A(42) { } // delegate to the A(int) constructor
   12622 };
   12623 
   12624      * G++ now fully implements C++11 atomic classes rather than just
   12625        integer derived classes.
   12626 
   12627 class POD {
   12628   int a;
   12629   int b;
   12630 };
   12631 std::atomic<POD> my_atomic_POD;
   12632 
   12633      * G++ now sets the predefined macro __cplusplus to the correct value,
   12634        199711L for C++98/03, and 201103L for C++11.
   12635      * G++ now correctly implements the two-phase lookup rules such that
   12636        an unqualified name used in a template must have an appropriate
   12637        declaration found either in scope at the point of definition of the
   12638        template or by argument-dependent lookup at the point of
   12639        instantiation. As a result, code that relies on a second
   12640        unqualified lookup at the point of instantiation to find functions
   12641        declared after the template or in dependent bases will be rejected.
   12642        The compiler will suggest ways to fix affected code, and using the
   12643        -fpermissive compiler flag will allow the code to compile with a
   12644        warning.
   12645 
   12646 template <class T>
   12647 void f() { g(T()); } // error, g(int) not found by argument-dependent lookup
   12648 void g(int) { } // fix by moving this declaration before the declaration of f
   12649 
   12650 template <class T>
   12651 struct A: T {
   12652   // error, B::g(B) not found by argument-dependent lookup
   12653   void f() { g(T()); } // fix by using this->g or A::g
   12654 };
   12655 
   12656 struct B { void g(B); };
   12657 
   12658 int main()
   12659 {
   12660   f<int>();
   12661   A<B>().f();
   12662 }
   12663 
   12664      * G++ now properly re-uses stack space allocated for temporary
   12665        objects when their lifetime ends, which can significantly lower
   12666        stack consumption for some C++ functions. As a result of this, some
   12667        code with undefined behavior will now break:
   12668 
   12669 const int &f(const int &i) { return i; }
   12670 ....
   12671 const int &x = f(1);
   12672 const int &y = f(2);
   12673 
   12674        Here, x refers to the temporary allocated to hold the 1 argument,
   12675        which only lives until the end of the initialization; it
   12676        immediately becomes a dangling reference. So the next statement
   12677        re-uses the stack slot to hold the 2 argument, and users of x get
   12678        that value instead.
   12679        Note that this should not cause any change of behavior for
   12680        temporaries of types with non-trivial destructors, as they are
   12681        already destroyed at end of full-expression; the change is that now
   12682        the storage is released as well.
   12683      * A new command-line option -Wdelete-non-virtual-dtor has been added
   12684        to warn when delete is used to destroy an instance of a class which
   12685        has virtual functions and non-virtual destructor. It is unsafe to
   12686        delete an instance of a derived class through a pointer to a base
   12687        class if the base class does not have a virtual destructor. This
   12688        warning is enabled by -Wall.
   12689      * A new command-line option -Wzero-as-null-pointer-constant has been
   12690        added to warn when a literal '0' is used as null pointer constant.
   12691        It can be useful to facilitate the conversion to nullptr in C++11.
   12692      * As per C++98, access-declarations are now deprecated by G++.
   12693        Using-declarations are to be used instead. Furthermore, some
   12694        efforts have been made to improve the support of class scope
   12695        using-declarations. In particular, using-declarations referring to
   12696        a dependent type now work as expected ([13]bug c++/14258).
   12697      * The ELF symbol visibility of a template instantiation is now
   12698        properly constrained by the visibility of its template arguments
   12699        ([14]bug c++/35688).
   12700 
   12701     Runtime Library (libstdc++)
   12702 
   12703      * [15]Improved experimental support for the new ISO C++ standard,
   12704        C++11, including:
   12705           + using noexcept in most of the library;
   12706           + implementations of pointer_traits, allocator_traits and
   12707             scoped_allocator_adaptor;
   12708           + uses-allocator construction for tuple;
   12709           + vector meets the allocator-aware container requirements;
   12710           + replacing monotonic_clock with steady_clock;
   12711           + enabling the thread support library on most POSIX targets;
   12712           + many small improvements to conform to the FDIS.
   12713      * Added --enable-clocale=newlib configure option.
   12714      * Debug Mode iterators for unordered associative containers.
   12715      * Avoid polluting the global namespace and do not include <unistd.h>.
   12716 
   12717   [16]Fortran
   12718 
   12719      * The compile flag [17]-fstack-arrays has been added, which causes
   12720        all local arrays to be put on stack memory. For some programs this
   12721        will improve the performance significantly. If your program uses
   12722        very large local arrays, it is possible that you will have to
   12723        extend your runtime limits for stack memory.
   12724      * The [18]-Ofast flag now also implies [19]-fno-protect-parens and
   12725        [20]-fstack-arrays.
   12726      * Front-end optimizations can now be selected by the
   12727        [21]-ffrontend-optimize option and deselected by the
   12728        -fno-frontend-optimize option.
   12729      * When front-end optimization removes a function call,
   12730        [22]-Wfunction-elimination warns about that.
   12731      * When performing front-end-optimization, the
   12732        [23]-faggressive-function-elimination option allows the removal of
   12733        duplicate function calls even for impure functions.
   12734      * The flag [24]-Wreal-q-constant has been added, which warns if
   12735        floating-point literals have been specified using q (such as
   12736        1.0q0); the q marker is now supported as a vendor extension to
   12737        denote quad precision (REAL(16) or, if not available, REAL(10)).
   12738        Consider using a kind parameter (such as in 1.0_qp) instead, which
   12739        can be obtained via [25]SELECTED_REAL_KIND.
   12740      * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
   12741        Fortran now always prints error messages to standard error. If you
   12742        wish to redirect standard error, please consult the manual for your
   12743        OS, shell, batch environment etc. as appropriate.
   12744      * The -fdump-core option and GFORTRAN_ERROR_DUMPCORE environment
   12745        variable have been removed. When encountering a serious error,
   12746        gfortran will now always abort the program. Whether a core dump is
   12747        generated depends on the user environment settings; see the ulimit
   12748        -c setting for POSIX shells, limit coredumpsize for C shells, and
   12749        the [26]WER user-mode dumps settings on Windows.
   12750      * The [27]-fbacktrace option is now enabled by default. When
   12751        encountering a fatal error, gfortran will attempt to print a
   12752        backtrace to standard error before aborting. It can be disabled
   12753        with -fno-backtrace. Note: On POSIX targets with the addr2line
   12754        utility from GNU binutils, GNU Fortran can print a backtrace with
   12755        function name, file name, line number information in addition to
   12756        the addresses; otherwise only the addresses are printed.
   12757      * [28]Fortran 2003:
   12758           + Generic interface names which have the same name as derived
   12759             types are now supported, which allows to write constructor
   12760             functions. Note that Fortran does not support static
   12761             constructor functions; only default initialization or an
   12762             explicit structure-constructor initialization are available.
   12763           + [29]Polymorphic (class) arrays are now supported.
   12764      * [30]Fortran 2008:
   12765           + Support for the DO CONCURRENT construct has been added, which
   12766             allows the user to specify that individual loop iterations
   12767             have no interdependencies.
   12768           + [31]Coarrays: Full single-image support except for polymorphic
   12769             coarrays. Additionally, preliminary support for multiple
   12770             images via an MPI-based [32]coarray communication library has
   12771             been added. Note: The library version is not yet usable as
   12772             remote coarray access is not yet possible.
   12773      * [33]TS 29113:
   12774           + New flag [34]-std=f2008ts permits programs that are expected
   12775             to conform to the Fortran 2008 standard and the draft
   12776             Technical Specification (TS) 29113 on Further Interoperability
   12777             of Fortran with C.
   12778           + The OPTIONAL attribute is now allowed for dummy arguments of
   12779             BIND(C) procedures.
   12780           + The RANK intrinsic has been added.
   12781           + The implementation of the ASYNCHRONOUS attribute in GCC is
   12782             compatible with the candidate draft of TS 29113 (since GCC
   12783             4.6).
   12784 
   12785   [35]Go
   12786 
   12787      * GCC 4.7 implements the [36]Go 1 language standard. The library
   12788        support in 4.7.0 is not quite complete, due to release timing.
   12789        Release 4.7.1 includes complete support for Go 1. The Go library is
   12790        from the Go 1.0.1 release.
   12791      * Go has been tested on GNU/Linux and Solaris platforms. It may work
   12792        on other platforms as well.
   12793 
   12794 [37]New Targets and Target Specific Improvements
   12795 
   12796   [38]ARM
   12797 
   12798      * GCC now supports the Cortex-A7 processor implementing the v7-a
   12799        version of the architecture using the option -mcpu=cortex-a7.
   12800      * The default vector size in auto-vectorization for NEON is now 128
   12801        bits. If vectorization fails thusly, the vectorizer tries again
   12802        with 64-bit vectors.
   12803      * A new option -mvectorize-with-neon-double was added to allow users
   12804        to change the vector size to 64 bits.
   12805 
   12806   [39]AVR
   12807 
   12808      * The AVR port's libgcc has been improved and its multilib structure
   12809        has been enhanced. As a result, all objects contributing to an
   12810        application must either be compiled with GCC versions up to 4.6.x
   12811        or with GCC versions 4.7.1 or later. If the compiler is used with
   12812        AVR-LibC, you need a version that supports the new layout, i.e.
   12813        implements [40]#35407.
   12814      * The -mshort-calls command-line option has been deprecated. It will
   12815        be removed in the GCC 4.8 release. See -mrelax for a replacement.
   12816      * The compiled code only references startup code that clears .bss and
   12817        the common section resp. initializes the .data and .rodata section
   12818        provided respective sections (or subsections thereof) are not
   12819        empty, see [41]PR18145. Applications that put all static storage
   12820        objects into non-standard sections and / or define all static
   12821        storage objects in assembler modules, must reference __do_clear_bss
   12822        resp. __do_copy_data by hand or undefine the symbol(s) by means of
   12823        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
   12824      * GCC now supports the XMEGA architecture. This requires GNU Binutils
   12825        2.22 or later.
   12826      * Support for the [42]named address spaces __flash, __flash1, ,
   12827        __flash5 and __memx has been added. These address spaces locate
   12828        read-only data in flash memory and allow reading from flash memory
   12829        by means of ordinary C code, i.e. without the need of (inline)
   12830        assembler code:
   12831 
   12832 const __flash int values[] = { 42, 31 };
   12833 
   12834 int add_values (const __flash int *p, int i)
   12835 {
   12836     return values[i] + *p;
   12837 }
   12838 
   12839      * Support has been added for the AVR-specific configure option
   12840        --with-avrlibc=yes in order to arrange for better integration of
   12841        [43]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
   12842        and newer and will only take effect in non-RTEMS configurations. If
   12843        avr-gcc is configured for RTEMS, the option will be ignored which
   12844        is the same as specifying --with-avrlibc=no. See [44]PR54461 for
   12845        more technical details.
   12846      * Support for AVR-specific [45]built-in functions has been added.
   12847      * Support has been added for the signed and unsigned 24-bit scalar
   12848        integer types __int24 and __uint24.
   12849      * New command-line options -maccumulate-args, -mbranch-cost=cost and
   12850        -mstrict-X were added to allow better fine-tuning of code
   12851        optimization.
   12852      * The command-line option -fdata-sections now also takes affect on
   12853        the section names of variables with the progmem attribute.
   12854      * A new inline assembler print modifier %i to print a RAM address as
   12855        I/O address has been added:
   12856 
   12857 #include <avr/io.h> /* Port Definitions from AVR-LibC */
   12858 
   12859 void set_portb (uint8_t value)
   12860 {
   12861     asm volatile ("out %i0, %1" :: "n" (&PORTB), "r" (value) : "memory");
   12862 }
   12863 
   12864        The offset between an I/O address and the RAM address for that I/O
   12865        location is device-specific. This offset is taken into account when
   12866        printing a RAM address with the %i modifier so that the address is
   12867        suitable to be used as operand in an I/O command. The address must
   12868        be a constant integer known at compile time.
   12869      * The inline assembler constraint "R" to represent integers in the
   12870        range 6  5 has been removed without replacement.
   12871      * Many optimizations to:
   12872           + 64-bit integer arithmetic
   12873           + Widening multiplication
   12874           + Integer division by a constant
   12875           + Avoid constant reloading in multi-byte instructions.
   12876           + Micro-optimizations for special instruction sequences.
   12877           + Generic built-in functions like __builtin_ffs*,
   12878             __builtin_clz*, etc.
   12879           + If-else decision trees generated by switch instructions
   12880           + Merging of data located in flash memory
   12881           + New libgcc variants for devices with 8-bit wide stack pointer
   12882           + 
   12883      * Better documentation:
   12884           + Handling of EIND and indirect jumps on devices with more than
   12885             128 KiB of program memory.
   12886           + Handling of the RAMPD, RAMPX, RAMPY and RAMPZ special function
   12887             registers.
   12888           + Function attributes OS_main and OS_task.
   12889           + AVR-specific built-in macros.
   12890 
   12891   C6X
   12892 
   12893      * Support has been added for the Texas Instruments C6X family of
   12894        processors.
   12895 
   12896   CR16
   12897 
   12898      * Support has been added for National Semiconductor's CR16
   12899        architecture.
   12900 
   12901   Epiphany
   12902 
   12903      * Support has been added for Adapteva's Epiphany architecture.
   12904 
   12905   IA-32/x86-64
   12906 
   12907      * Support for Intel AVX2 intrinsics, built-in functions and code
   12908        generation is available via -mavx2.
   12909      * Support for Intel BMI2 intrinsics, built-in functions and code
   12910        generation is available via -mbmi2.
   12911      * Implementation and automatic generation of __builtin_clz* using the
   12912        lzcnt instruction is available via -mlzcnt.
   12913      * Support for Intel FMA3 intrinsics and code generation is available
   12914        via -mfma.
   12915      * A new -mfsgsbase command-line option is available that makes GCC
   12916        generate new segment register read/write instructions through
   12917        dedicated built-ins.
   12918      * Support for the new Intel rdrnd instruction is available via
   12919        -mrdrnd.
   12920      * Two additional AVX vector conversion instructions are available via
   12921        -mf16c.
   12922      * Support for new Intel processor codename IvyBridge with RDRND,
   12923        FSGSBASE and F16C is available through -march=core-avx-i.
   12924      * Support for the new Intel processor codename Haswell with AVX2,
   12925        FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
   12926      * Support for new AMD family 15h processors (Piledriver core) is now
   12927        available through -march=bdver2 and -mtune=bdver2 options.
   12928      * Support for [46]the x32 psABI is now available through the -mx32
   12929        option.
   12930      * Windows mingw targets are using the -mms-bitfields option by
   12931        default.
   12932      * Windows x86 targets are using the __thiscall calling convention for
   12933        C++ class-member functions.
   12934      * Support for the configure option --with-threads=posix for Windows
   12935        mingw targets.
   12936 
   12937   [47]MIPS
   12938 
   12939      * GCC now supports thread-local storage (TLS) for MIPS16. This
   12940        requires GNU binutils 2.22 or later.
   12941      * GCC can now generate code specifically for the Cavium Octeon+ and
   12942        Octeon2 processors. The associated command-line options are
   12943        -march=octeon+ and -march=octeon2 respectively. Both options
   12944        require GNU binutils 2.22 or later.
   12945      * GCC can now work around certain 24k errata, under the control of
   12946        the command-line option -mfix-24k. These workarounds require GNU
   12947        binutils 2.20 or later.
   12948      * 32-bit MIPS GNU/Linux targets such as mips-linux-gnu can now build
   12949        n32 and n64 multilibs. The result is effectively a 64-bit GNU/Linux
   12950        toolchain that generates 32-bit code by default. Use the
   12951        configure-time option --enable-targets=all to select these extra
   12952        multilibs.
   12953      * Passing -fno-delayed-branch now also stops the assembler from
   12954        automatically filling delay slots.
   12955 
   12956   PowerPC/PowerPC64
   12957 
   12958      * Vectors of type vector long long or vector long are passed and
   12959        returned using the same method as other vectors with the VSX
   12960        instruction set. Previously GCC did not adhere to the ABI for
   12961        128-bit vectors with 64-bit integer base types (PR 48857). This
   12962        will also be fixed in the GCC 4.6.1 and 4.5.4 releases.
   12963      * A new option -mno-pointers-to-nested-functions was added to allow
   12964        AIX 32-bit/64-bit and GNU/Linux 64-bit PowerPC users to specify
   12965        that the compiler should not load up the chain register (r11)
   12966        before calling a function through a pointer. If you use this
   12967        option, you cannot call nested functions through a pointer, or call
   12968        other languages that might use the static chain.
   12969      * A new option msave-toc-indirect was added to allow AIX
   12970        32-bit/64-bit and GNU/Linux 64-bit PowerPC users control whether we
   12971        save the TOC in the prologue for indirect calls or generate the
   12972        save inline. This can speed up some programs that call through a
   12973        function pointer a lot, but it can slow down other functions that
   12974        only call through a function pointer in exceptional cases.
   12975      * The PowerPC port will now enable machine-specific built-in
   12976        functions when the user switches the target machine using the
   12977        #pragma GCC target or __attribute__ ((__target__ ("target"))) code
   12978        sequences. In addition, the target macros are updated. However, due
   12979        to the way the -save-temps switch is implemented, you won't see the
   12980        effect of these additional macros being defined in preprocessor
   12981        output.
   12982 
   12983   SH
   12984 
   12985      * A new option -msoft-atomic has been added. When it is specified,
   12986        GCC will generate GNU/Linux-compatible gUSA atomic sequences for
   12987        the new __atomic routines.
   12988      * Since it is neither supported by GAS nor officially documented,
   12989        code generation for little endian SH2A has been disabled.
   12990        Specifying -ml with -m2a* will now result in a compiler error.
   12991      * The defunct -mbranch-cost option has been fixed.
   12992      * Some improvements to the generated code of:
   12993           + Utilization of the tst #imm,R0 instruction.
   12994           + Dynamic shift instructions on SH2A.
   12995           + Integer absolute value calculations.
   12996      * The -mdiv= option for targets other than SHmedia has been fixed and
   12997        documented.
   12998 
   12999   SPARC
   13000 
   13001      * The option -mflat has been reinstated. When it is specified, the
   13002        compiler will generate code for a single register window model.
   13003        This is essentially a new implementation and the corresponding
   13004        debugger support has been added to GDB 7.4.
   13005      * Support for the options -mtune=native and -mcpu=native has been
   13006        added on selected native platforms (GNU/Linux and Solaris).
   13007      * Support for the SPARC T3 (Niagara 3) processor has been added.
   13008      * VIS:
   13009           + An intrinsics header visintrin.h has been added.
   13010           + Builtin intrinsics for the VIS 1.0 edge handling and pixel
   13011             compare instructions have been added.
   13012           + The little-endian version of alignaddr is now supported.
   13013           + When possible, VIS builtins are marked const, which should
   13014             increase the compiler's ability to optimize VIS operations.
   13015           + The compiler now properly tracks the %gsr register and how it
   13016             behaves as an input for various VIS instructions.
   13017           + Akin to fzero, the compiler can now generate fone instructions
   13018             in order to set all of the bits of a floating-point register
   13019             to 1.
   13020           + The documentation for the VIS intrinsics in the GCC manual has
   13021             been brought up to date and many inaccuracies were fixed.
   13022           + Intrinsics for the VIS 2.0 bmask, bshuffle, and
   13023             non-condition-code setting edge instructions have been added.
   13024             Their availability is controlled by the new -mvis2 and
   13025             -mno-vis2 options. They are enabled by default on
   13026             UltraSPARC-III and later CPUs.
   13027      * Support for UltraSPARC Fused Multiply-Add floating-point extensions
   13028        has been added. These instructions are enabled by default on SPARC
   13029        T3 (Niagara 3) and later CPUs.
   13030 
   13031   TILE-Gx/TILEPro
   13032 
   13033      * Support has been added for the Tilera TILE-Gx and TILEPro families
   13034        of processors.
   13035 
   13036 Other significant improvements
   13037 
   13038      * A new option (-grecord-gcc-switches) was added that appends
   13039        compiler command-line options that might affect code generation to
   13040        the DW_AT_producer attribute string in the DWARF debugging
   13041        information.
   13042      * GCC now supports various new GNU extensions to the DWARF debugging
   13043        information format, like [48]entry value and [49]call site
   13044        information, [50]typed DWARF stack or [51]a more compact macro
   13045        representation. Support for these extensions has been added to GDB
   13046        7.4. They can be disabled through the -gstrict-dwarf command-line
   13047        option.
   13048 
   13049 [52]GCC 4.7.1
   13050 
   13051    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   13052    system that are known to be fixed in the 4.7.1 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    The Go front end in the 4.7.1 release fully supports the [54]Go 1
   13057    language standard.
   13058 
   13059 [55]GCC 4.7.2
   13060 
   13061    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   13062    system that are known to be fixed in the 4.7.2 release. This list might
   13063    not be complete (that is, it is possible that some PRs that have been
   13064    fixed are not listed here).
   13065 
   13066 [57]GCC 4.7.3
   13067 
   13068    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   13069    system that are known to be fixed in the 4.7.3 release. This list might
   13070    not be complete (that is, it is possible that some PRs that have been
   13071    fixed are not listed here).
   13072 
   13073 [59]GCC 4.7.4
   13074 
   13075    This is the [60]list of problem reports (PRs) from GCC's bug tracking
   13076    system that are known to be fixed in the 4.7.4 release. This list might
   13077    not be complete (that is, it is possible that some PRs that have been
   13078    fixed are not listed here).
   13079 
   13080 
   13081     For questions related to the use of GCC, please consult these web
   13082     pages and the [61]GCC manuals. If that fails, the
   13083     [62]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13084     web pages and the development of GCC are welcome on our developer
   13085     list at [63]gcc (a] gcc.gnu.org. All of [64]our lists have public
   13086     archives.
   13087 
   13088    Copyright (C) [65]Free Software Foundation, Inc. Verbatim copying and
   13089    distribution of this entire article is permitted in any medium,
   13090    provided this notice is preserved.
   13091 
   13092    These pages are [66]maintained by the GCC team. Last modified
   13093    2026-04-30.
   13094 
   13095 References
   13096 
   13097    1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
   13098    2. https://gcc.gnu.org/gcc-4.7/porting_to.html
   13099    3. https://gcc.gnu.org/wiki/TransactionalMemory
   13100    4. https://gcc.gnu.org/wiki/Atomic/GCCMM
   13101    5. https://gcc.gnu.org/gcc-4.7/changes.html#c
   13102    6. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
   13103    7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13104    8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13105    9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13106   10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13107   11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13108   12. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13109   13. https://gcc.gnu.org/PR14258
   13110   14. https://gcc.gnu.org/PR35688
   13111   15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
   13112   16. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
   13113   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   13114   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
   13115   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
   13116   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   13117   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
   13118   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
   13119   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
   13120   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
   13121   25. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
   13122   26. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
   13123   27. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
   13124   28. https://gcc.gnu.org/wiki/Fortran2003Status
   13125   29. https://gcc.gnu.org/wiki/OOP
   13126   30. https://gcc.gnu.org/wiki/Fortran2008Status
   13127   31. https://gcc.gnu.org/wiki/Coarray
   13128   32. https://gcc.gnu.org/wiki/CoarrayLib
   13129   33. https://gcc.gnu.org/wiki/TS29113Status
   13130   34. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
   13131   35. https://gcc.gnu.org/gcc-4.7/changes.html#go
   13132   36. https://go.dev/doc/go1
   13133   37. https://gcc.gnu.org/gcc-4.7/changes.html#targets
   13134   38. https://gcc.gnu.org/gcc-4.7/changes.html#arm
   13135   39. https://gcc.gnu.org/gcc-4.7/changes.html#avr
   13136   40. http://savannah.nongnu.org/bugs/?35407
   13137   41. https://gcc.gnu.org/PR18145
   13138   42. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
   13139   43. http://www.nongnu.org/avr-libc/
   13140   44. https://gcc.gnu.org/PR54461
   13141   45. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
   13142   46. https://sites.google.com/site/x32abi/
   13143   47. https://gcc.gnu.org/gcc-4.7/changes.html#mips
   13144   48. https://dwarfstd.org/issues/100909.1.html
   13145   49. https://dwarfstd.org/issues/100909.2.html
   13146   50. https://dwarfstd.org/issues/140425.1.html
   13147   51. https://dwarfstd.org/issues/110722.1.html
   13148   52. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
   13149   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
   13150   54. https://go.dev/doc/go1
   13151   55. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
   13152   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
   13153   57. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
   13154   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
   13155   59. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
   13156   60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
   13157   61. https://gcc.gnu.org/onlinedocs/
   13158   62. mailto:gcc-help (a] gcc.gnu.org
   13159   63. mailto:gcc (a] gcc.gnu.org
   13160   64. https://gcc.gnu.org/lists.html
   13161   65. https://www.fsf.org/
   13162   66. https://gcc.gnu.org/about.html
   13163 ======================================================================
   13164 http://gcc.gnu.org/gcc-4.6/index.html
   13165                              GCC 4.6 Release Series
   13166 
   13167    (This release series is no longer supported.)
   13168 
   13169    April 12, 2013
   13170 
   13171    The [1]GNU project and the GCC developers are pleased to announce the
   13172    release of GCC 4.6.4.
   13173 
   13174    This release is a bug-fix release, containing fixes for regressions in
   13175    GCC 4.6.3 relative to previous releases of GCC.
   13176 
   13177 Release History
   13178 
   13179    GCC 4.6.4
   13180           April 12, 2013 ([2]changes, [3]documentation)
   13181 
   13182    GCC 4.6.3
   13183           March 1, 2012 ([4]changes, [5]documentation)
   13184 
   13185    GCC 4.6.2
   13186           October 26, 2011 ([6]changes, [7]documentation)
   13187 
   13188    GCC 4.6.1
   13189           June 27, 2011 ([8]changes, [9]documentation)
   13190 
   13191    GCC 4.6.0
   13192           March 25, 2011 ([10]changes, [11]documentation)
   13193 
   13194 References and Acknowledgements
   13195 
   13196    GCC used to stand for the GNU C Compiler, but since the compiler
   13197    supports several other languages aside from C, it now stands for the
   13198    GNU Compiler Collection.
   13199 
   13200    A list of [12]successful builds is updated as new information becomes
   13201    available.
   13202 
   13203    The GCC developers would like to thank the numerous people that have
   13204    contributed new features, improvements, bug fixes, and other changes as
   13205    well as test results to GCC. This [13]amazing group of volunteers is
   13206    what makes GCC successful.
   13207 
   13208    For additional information about GCC please refer to the [14]GCC
   13209    project web site or contact the [15]GCC development mailing list.
   13210 
   13211    To obtain GCC please use [16]our mirror sites or [17]our version
   13212    control system.
   13213 
   13214 
   13215     For questions related to the use of GCC, please consult these web
   13216     pages and the [18]GCC manuals. If that fails, the
   13217     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13218     web pages and the development of GCC are welcome on our developer
   13219     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   13220     archives.
   13221 
   13222    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   13223    distribution of this entire article is permitted in any medium,
   13224    provided this notice is preserved.
   13225 
   13226    These pages are [23]maintained by the GCC team. Last modified
   13227    2022-10-26.
   13228 
   13229 References
   13230 
   13231    1. http://www.gnu.org/
   13232    2. https://gcc.gnu.org/gcc-4.6/changes.html
   13233    3. https://gcc.gnu.org/onlinedocs/4.6.4/
   13234    4. https://gcc.gnu.org/gcc-4.6/changes.html
   13235    5. https://gcc.gnu.org/onlinedocs/4.6.3/
   13236    6. https://gcc.gnu.org/gcc-4.6/changes.html
   13237    7. https://gcc.gnu.org/onlinedocs/4.6.2/
   13238    8. https://gcc.gnu.org/gcc-4.6/changes.html
   13239    9. https://gcc.gnu.org/onlinedocs/4.6.1/
   13240   10. https://gcc.gnu.org/gcc-4.6/changes.html
   13241   11. https://gcc.gnu.org/onlinedocs/4.6.0/
   13242   12. https://gcc.gnu.org/gcc-4.6/buildstat.html
   13243   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13244   14. https://gcc.gnu.org/index.html
   13245   15. mailto:gcc (a] gcc.gnu.org
   13246   16. https://gcc.gnu.org/mirrors.html
   13247   17. https://gcc.gnu.org/git.html
   13248   18. https://gcc.gnu.org/onlinedocs/
   13249   19. mailto:gcc-help (a] gcc.gnu.org
   13250   20. mailto:gcc (a] gcc.gnu.org
   13251   21. https://gcc.gnu.org/lists.html
   13252   22. https://www.fsf.org/
   13253   23. https://gcc.gnu.org/about.html
   13254 ======================================================================
   13255 http://gcc.gnu.org/gcc-4.6/changes.html
   13256                              GCC 4.6 Release Series
   13257                         Changes, New Features, and Fixes
   13258 
   13259 Caveats
   13260 
   13261      * The options -b <machine> and -V <version> have been removed because
   13262        they were unreliable. Instead, users should directly run
   13263        <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to
   13264        run a different version of gcc.
   13265      * GCC now has stricter checks for invalid command-line options. In
   13266        particular, when gcc was called to link object files rather than
   13267        compile source code, it would previously accept and ignore all
   13268        options starting with --, including linker options such as
   13269        --as-needed and --export-dynamic, although such options would
   13270        result in errors if any source code was compiled. Such options, if
   13271        unknown to the compiler, are now rejected in all cases; if the
   13272        intent was to pass them to the linker, options such as
   13273        -Wl,--as-needed should be used.
   13274      * Versions of the GNU C library up to and including 2.11.1 included
   13275        an [1]incorrect implementation of the cproj function. GCC optimizes
   13276        its builtin cproj according to the behavior specified and allowed
   13277        by the ISO C99 standard. If you want to avoid discrepancies between
   13278        the C library and GCC's builtin transformations when using cproj in
   13279        your code, use GLIBC 2.12 or later. If you are using an older GLIBC
   13280        and actually rely on the incorrect behavior of cproj, then you can
   13281        disable GCC's transformations using -fno-builtin-cproj.
   13282      * The C-only intermodule optimization framework (IMA, enabled by
   13283        -combine) has been removed in favor of the new generic link-time
   13284        optimization framework (LTO) introduced in [2]GCC 4.5.0.
   13285      * GCC now ships with the LGPL-licensed libquadmath library, which
   13286        provides quad-precision mathematical functions for targets with a
   13287        __float128 datatype. __float128 is available for targets on 32-bit
   13288        x86, x86-64 and Itanium architectures. The libquadmath library is
   13289        automatically built on such targets when building the Fortran
   13290        compiler.
   13291      * New -Wunused-but-set-variable and -Wunused-but-set-parameter
   13292        warnings were added for C, C++, Objective-C and Objective-C++.
   13293        These warnings diagnose variables respective parameters which are
   13294        only set in the code and never otherwise used. Usually such
   13295        variables are useless and often even the value assigned to them is
   13296        computed needlessly, sometimes expensively. The
   13297        -Wunused-but-set-variable warning is enabled by default by -Wall
   13298        flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
   13299      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   13300        rules for the layout of vectors that could lead to wrong code being
   13301        generated. Vectors larger than 8 bytes in size are now by default
   13302        aligned to an 8-byte boundary. This is an ABI change: code that
   13303        makes explicit use of vector types may be incompatible with binary
   13304        objects built with older versions of GCC. Auto-vectorized code is
   13305        not affected by this change. (This change affects GCC versions
   13306        4.6.4 and later, with the exception of versions 4.7.0 and 4.7.1.)
   13307      * On AVR, variables with the progmem attribute to locate data in
   13308        flash memory must be qualified as const.
   13309      * Support for a number of older systems and recently unmaintained or
   13310        untested target ports of GCC has been declared obsolete in GCC 4.6.
   13311        Unless there is activity to revive them, the next release of GCC
   13312        will have their sources permanently removed.
   13313        All GCC ports for the following processor architectures have been
   13314        declared obsolete:
   13315           + Argonaut ARC (arc-*)
   13316           + National Semiconductor CRX (crx-*)
   13317           + Motorola 68HC11 and 68HC12 (m68hc11-*-*, m6811-*-*,
   13318             m68hc12-*-*, m6812-*-*)
   13319           + Sunplus S+core (score-*)
   13320        The following ports for individual systems on particular
   13321        architectures have been obsoleted:
   13322           + Interix (i[34567]86-*-interix3*)
   13323           + NetWare x86 (i[3456x]86-*-netware*)
   13324           + Generic ARM PE (arm-*-pe* other than arm*-wince-pe*)
   13325           + MCore PE (mcore-*-pe*)
   13326           + SH SymbianOS (sh*-*-symbianelf*)
   13327           + GNU Hurd on Alpha and PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
   13328           + M68K uClinux old ABI (m68k-*-uclinuxoldabi*)
   13329           + a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*,
   13330             vax-*-netbsd*, but not *-*-netbsdelf*)
   13331        The i[34567]86-*-pe alias for Cygwin targets has also been
   13332        obsoleted; users should configure for i[34567]86-*-cygwin* instead.
   13333        Certain configure options to control the set of libraries built
   13334        with GCC on some targets have been obsoleted. On ARM targets, the
   13335        options --disable-fpu, --disable-26bit, --disable-underscore,
   13336        --disable-interwork, --disable-biendian and --disable-nofmult have
   13337        been obsoleted. On MIPS targets, the options
   13338        --disable-single-float, --disable-biendian and --disable-softfloat
   13339        have been obsoleted.
   13340      * Support has been removed for all the [3]configurations obsoleted in
   13341        GCC 4.5.
   13342      * More information on porting to GCC 4.6 from previous versions of
   13343        GCC can be found in the [4]porting guide for this release.
   13344 
   13345 General Optimizer Improvements
   13346 
   13347      * A new general optimization level, -Ofast, has been introduced. It
   13348        combines the existing optimization level -O3 with options that can
   13349        affect standards compliance but result in better optimized code.
   13350        For example, -Ofast enables -ffast-math.
   13351      * Link-time optimization improvements:
   13352           + The [5]Scalable Whole Program Optimizer (WHOPR) project has
   13353             stabilized to the point of being usable. It has become the
   13354             default mode when using the LTO optimization model. Link time
   13355             optimization can now split itself into multiple parallel
   13356             compilations. Parallelism is controlled with -flto=n (where n
   13357             specifies the number of compilations to execute in parallel).
   13358             GCC can also cooperate with a GNU make job server by
   13359             specifying the -flto=jobserver option and adding + to the
   13360             beginning of the Makefile rule executing the linker.
   13361             Classical LTO mode can be enforced by -flto-partition=none.
   13362             This may result in small code quality improvements.
   13363           + A large number of bugs were fixed. GCC itself, Mozilla Firefox
   13364             and other large applications can be built with LTO enabled.
   13365           + The linker plugin support improvements
   13366                o Linker plugin is now enabled by default when the linker
   13367                  is detected to have plugin support. This is the case for
   13368                  GNU ld 2.21.51 or newer (on ELF and Cygwin targets) and
   13369                  the Gold linker on ELF targets. Plugin support of the
   13370                  Apple linker on Darwin is not compatible with GCC. The
   13371                  linker plugin can also be controlled by the
   13372                  -fuse-linker-plugin command-line option.
   13373                o Resolution information from the linker plugin is used to
   13374                  drive whole program assumptions. Use of the linker plugin
   13375                  results in more aggressive optimization on binaries and
   13376                  on shared libraries that use the hidden visibility
   13377                  attribute. Consequently the use of -fwhole-program is not
   13378                  necessary in addition to LTO.
   13379           + Hidden symbols used from non-LTO objects now have to be
   13380             explicitly annotated with externally_visible when the linker
   13381             plugin is not used.
   13382           + C++ inline functions and virtual tables are now privatized
   13383             more aggressively, leading to better inter-procedural
   13384             optimization and faster dynamic linking.
   13385           + Memory usage and intermediate language streaming performance
   13386             have been improved.
   13387           + Static constructors and destructors from individual units are
   13388             inlined into a single function. This can significantly improve
   13389             startup times of large C++ applications where static
   13390             constructors are very common. For example, static constructors
   13391             are used when including the iostream header.
   13392           + Support for the Ada language has been added.
   13393      * Interprocedural optimization improvements
   13394           + The interprocedural framework was re-tuned for link time
   13395             optimization. Several scalability issues were resolved.
   13396           + Improved auto-detection of const and pure functions. Newly,
   13397             noreturn functions are auto-detected.
   13398             The [6]-Wsuggest-attribute=[const|pure|noreturn] flag is
   13399             available that informs users when adding attributes to headers
   13400             might improve code generation.
   13401           + A number of inlining heuristic improvements. In particular:
   13402                o Partial inlining is now supported and enabled by default
   13403                  at -O2 and greater. The feature can be controlled via
   13404                  -fpartial-inlining.
   13405                  Partial inlining splits functions with short hot path to
   13406                  return. This allows more aggressive inlining of the hot
   13407                  path leading to better performance and often to code size
   13408                  reductions (because cold parts of functions are not
   13409                  duplicated).
   13410                o Scalability for large compilation units was improved
   13411                  significantly.
   13412                o Inlining of callbacks is now more aggressive.
   13413                o Virtual methods are considered for inlining when the
   13414                  caller is inlined and devirtualization is then possible.
   13415                o Inlining when optimizing for size (either in cold regions
   13416                  of a program or when compiling with -Os) was improved to
   13417                  better handle C++ programs with larger abstraction
   13418                  penalty, leading to smaller and faster code.
   13419           + The IPA reference optimization pass detecting global variables
   13420             used or modified by functions was strengthened and sped up.
   13421           + Functions whose address was taken are now optimized out when
   13422             all references to them are dead.
   13423           + A new inter-procedural static profile estimation pass detects
   13424             functions that are executed once or unlikely to be executed.
   13425             Unlikely executed functions are optimized for size. Functions
   13426             executed once are optimized for size except for the inner
   13427             loops.
   13428           + On most targets with named section support, functions used
   13429             only at startup (static constructors and main), functions used
   13430             only at exit and functions detected to be cold are placed into
   13431             separate text segment subsections. This extends the
   13432             -freorder-functions feature and is controlled by the same
   13433             switch. The goal is to improve the startup time of large C++
   13434             programs.
   13435             Proper function placement requires linker support. GNU ld
   13436             2.21.51 on ELF targets was updated to place those functions
   13437             together within the text section leading to better code
   13438             locality and faster startup times of large C++ programs. The
   13439             feature is also supported in the Apple linker. Support in the
   13440             gold linker is planned.
   13441      * A new switch -fstack-usage has been added. It makes the compiler
   13442        output stack usage information for the program, on a per-function
   13443        basis, in an auxiliary file.
   13444      * A new switch -fcombine-stack-adjustments has been added. It can be
   13445        used to enable or disable the compiler's stack-slot combining pass
   13446        which before was enabled automatically at -O1 and above, but could
   13447        not be controlled on its own.
   13448      * A new switch -fstrict-volatile-bitfields has been added. Using it
   13449        indicates that accesses to volatile bitfields should use a single
   13450        access of the width of the field's type. This option can be useful
   13451        for precisely defining and accessing memory-mapped peripheral
   13452        registers from C or C++.
   13453 
   13454 Compile time and memory usage improvements
   13455 
   13456      * Datastructures used by the dataflow framework in GCC were
   13457        reorganized for better memory usage and more cache locality.
   13458        Compile time is improved especially on units with large functions
   13459        (possibly resulting from a lot of inlining) not fitting into the
   13460        processor cache. The compile time of the GCC C compiler binary with
   13461        link-time optimization went down by over 10% (benchmarked on x86-64
   13462        target).
   13463 
   13464 New Languages and Language specific improvements
   13465 
   13466   Ada
   13467 
   13468      * Stack checking has been improved on selected architectures (Alpha,
   13469        IA-32/x86-64, RS/6000 and SPARC): it now will detect stack
   13470        overflows in all cases on these architectures.
   13471      * Initial support for Ada 2012 has been added.
   13472 
   13473   C family
   13474 
   13475      * A new warning, enabled by -Wdouble-promotion, has been added that
   13476        warns about cases where a value of type float is implicitly
   13477        promoted to double. This is especially helpful for CPUs that handle
   13478        the former in hardware, but emulate the latter in software.
   13479      * A new function attribute leaf was introduced. This attribute allows
   13480        better inter-procedural optimization across calls to functions that
   13481        return to the current unit only via returning or exception
   13482        handling. This is the case for most library functions that have no
   13483        callbacks.
   13484      * Support for a new data type __int128 for targets having wide enough
   13485        machine-mode support.
   13486      * The new function attribute callee_pop_aggregate allows to specify
   13487        if the caller or callee is responsible for popping the aggregate
   13488        return pointer value from the stack.
   13489      * Support for selectively enabling and disabling warnings via #pragma
   13490        GCC diagnostic has been added. For instance:
   13491 #pragma GCC diagnostic error "-Wuninitialized"
   13492   foo(a);                       /* error is given for this one */
   13493 #pragma GCC diagnostic push
   13494 #pragma GCC diagnostic ignored "-Wuninitialized"
   13495   foo(b);                       /* no diagnostic for this one */
   13496 #pragma GCC diagnostic pop
   13497   foo(c);                       /* error is given for this one */
   13498 #pragma GCC diagnostic pop
   13499   foo(d);                       /* depends on command-line options */
   13500 
   13501      * The -fmax-errors=N option is now supported. Using this option
   13502        causes the compiler to exit after N errors have been issued.
   13503 
   13504   [7]C
   13505 
   13506      * There is now experimental support for some features from the
   13507        upcoming C1X revision of the ISO C standard. This support may be
   13508        selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
   13509        Note that this support is experimental and may change incompatibly
   13510        in future releases for consistency with changes to the C1X standard
   13511        draft. The following features are newly supported as described in
   13512        the N1539 draft of C1X (with changes agreed at the March 2011 WG14
   13513        meeting); some other features were already supported with no
   13514        compiler changes being needed, or have some support but not in full
   13515        accord with N1539 (as amended).
   13516           + Static assertions (_Static_assert keyword)
   13517           + Typedef redefinition
   13518           + New macros in <float.h>
   13519           + Anonymous structures and unions
   13520      * The new -fplan9-extensions option directs the compiler to support
   13521        some extensions for anonymous struct fields which are implemented
   13522        by the Plan 9 compiler. A pointer to a struct may be automatically
   13523        converted to a pointer to an anonymous field when calling a
   13524        function, in order to make the types match. An anonymous struct
   13525        field whose type is a typedef name may be referred to using the
   13526        typedef name.
   13527 
   13528   [8]C++
   13529 
   13530      * Improved [9]experimental support for the upcoming C++0x ISO C++
   13531        standard, including support for constexpr (thanks to Gabriel Dos
   13532        Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
   13533        noexcept, unrestricted unions, range-based for loops (thanks to
   13534        Rodrigo Rivas Costa), opaque enum declarations (thanks also to
   13535        Rodrigo), implicitly deleted functions and implicit move
   13536        constructors.
   13537      * When an extern declaration within a function does not match a
   13538        declaration in the enclosing context, G++ now properly declares the
   13539        name within the namespace of the function rather than the namespace
   13540        which was open just before the function definition ([10]c++/43145).
   13541      * GCC now warns by default when casting integers to larger pointer
   13542        types. These warnings can be disabled with the option
   13543        -Wno-int-to-pointer-cast, which is now also available in C++.
   13544      * G++ no longer optimizes using the assumption that a value of
   13545        enumeration type will fall within the range specified by the
   13546        standard, since that assumption is easily violated with a
   13547        conversion from integer type ([11]c++/43680). The old behavior can
   13548        be restored with -fstrict-enums.
   13549      * The new -fnothrow-opt flag changes the semantics of a throw()
   13550        exception specification to match the proposed semantics of the
   13551        noexcept specification: just call terminate if an exception tries
   13552        to propagate out of a function with such an exception
   13553        specification. This dramatically reduces or eliminates the code
   13554        size overhead from adding the exception specification.
   13555      * The new -Wnoexcept flag will suggest adding a noexcept qualifier to
   13556        a function that the compiler can tell doesn't throw if it would
   13557        change the value of a noexcept expression.
   13558      * The -Wshadow option now warns if a local variable or type
   13559        declaration shadows another type in C++. Note that the compiler
   13560        will not warn if a local variable shadows a struct/class/enum, but
   13561        will warn if it shadows an explicit typedef.
   13562      * When an identifier is not found in the current scope, G++ now
   13563        offers suggestions about which identifier might have been intended.
   13564      * G++ now issues clearer diagnostics for missing semicolons after
   13565        class, struct, and union definitions.
   13566      * G++ now issues clearer diagnostics for missing semicolons after
   13567        class member declarations.
   13568      * G++ now issues clearer diagnostics when a colon is used in a place
   13569        where a double-colon was intended.
   13570      * G++ no longer accepts mutable on reference members ([12]c++/33558).
   13571        Use -fpermissive to allow the old, non-conforming behavior.
   13572      * A few mangling fixes have been made, to attribute const/volatile on
   13573        function pointer types, decltype of a plain decl, and use of a
   13574        function parameter in the declaration of another parameter. By
   13575        default the compiler still uses the old mangling, but emits aliases
   13576        with the new mangling on targets that support strong aliases. Users
   13577        can switch over entirely to the new mangling with -fabi-version=5
   13578        or -fabi-version=0. -Wabi will now warn about code that uses the
   13579        old mangling.
   13580      * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
   13581        type to be default initialized unless the type has a user-declared
   13582        default constructor. In 4.6.2 G++ implements the proposed
   13583        resolution of [13]DR 253, so default initialization is allowed if
   13584        it initializes all subobjects. Code that fails to compile can be
   13585        fixed by providing an initializer e.g.
   13586     struct A { A(); };
   13587     struct B : A { int i; };
   13588     const B b = B();
   13589        Use -fpermissive to allow the old, non-conforming behavior.
   13590 
   13591     Runtime Library (libstdc++)
   13592 
   13593      * [14]Improved experimental support for the upcoming ISO C++
   13594        standard, C++0x, including using constexpr and nullptr.
   13595      * Performance improvements to the [15]Debug Mode, thanks to Franois
   13596        Dumont.
   13597      * Atomic operations used for reference-counting are annotated so that
   13598        they can be understood by race detectors such as Helgrind, see
   13599        [16]Data Race Hunting.
   13600      * Most libstdc++ standard headers have been changed to no longer
   13601        include the cstddef header as an implementation detail. Code that
   13602        relied on that header being included as side-effect of including
   13603        other standard headers will need to include cstddef explicitly.
   13604 
   13605   [17]Fortran
   13606 
   13607      * On systems supporting the libquadmath library, GNU Fortran now also
   13608        supports a quad-precision, kind=16 floating-point data type
   13609        (REAL(16), COMPLEX(16)). As the data type is not fully supported in
   13610        hardware, calculations might be one to two orders of magnitude
   13611        slower than with the 4, 8 or 10 bytes floating-point data types.
   13612        This change does not affect systems which support REAL(16) in
   13613        hardware nor those which do not support libquadmath.
   13614      * Much improved compile time for large array constructors.
   13615      * In order to reduce execution time and memory consumption, use of
   13616        temporary arrays in assignment expressions is avoided for many
   13617        cases. The compiler now reverses loops in order to avoid generating
   13618        a temporary array where possible.
   13619      * Improved diagnostics, especially with -fwhole-file.
   13620      * The -fwhole-file flag is now enabled by default. This improves code
   13621        generation and diagnostics. It can be disabled using the deprecated
   13622        -fno-whole-file flag.
   13623      * Support the generation of Makefile dependencies via the [18]-M...
   13624        flags of GCC; you may need to specify the -cpp option in addition.
   13625        The dependencies take modules, Fortran's include, and CPP's
   13626        #include into account. Note: Using -M for the module path is no
   13627        longer supported, use -J instead.
   13628      * The flag -Wconversion has been modified to only issue warnings
   13629        where a conversion leads to information loss. This drastically
   13630        reduces the number of warnings; -Wconversion is thus now enabled
   13631        with -Wall. The flag -Wconversion-extra has been added and also
   13632        warns about other conversions; -Wconversion-extra typically issues
   13633        a huge number of warnings, most of which can be ignored.
   13634      * A new command-line option -Wunused-dummy-argument warns about
   13635        unused dummy arguments and is included in -Wall. Before,
   13636        -Wunused-variable also warned about unused dummy arguments.
   13637      * Fortran 2003 support has been extended:
   13638           + Improved support for polymorphism between libraries and
   13639             programs and for complicated inheritance patterns (cf.
   13640             [19]object-oriented programming).
   13641           + Experimental support of the ASSOCIATE construct.
   13642           + In pointer assignments it is now possible to specify the lower
   13643             bounds of the pointer and, for a rank-1 or a simply contiguous
   13644             data-target, to remap the bounds.
   13645           + Automatic (re)allocation: In intrinsic assignments to
   13646             allocatable variables the left-hand side will be automatically
   13647             allocated (if unallocated) or reallocated (if the shape or
   13648             type parameter is different). To avoid the small performance
   13649             penalty, you can use a(:) = ... instead of a = ... for arrays
   13650             and character strings  or disable the feature using -std=f95
   13651             or -fno-realloc-lhs.
   13652           + Deferred type parameter: For scalar allocatable and pointer
   13653             variables the character length can be deferred.
   13654           + Namelist variables with allocatable and pointer attribute and
   13655             nonconstant length type parameter are supported.
   13656      * Fortran 2008 support has been extended:
   13657           + Experimental [20]coarray support (for one image only, i.e.
   13658             num_images() == 1); use the [21]-fcoarray=single flag to
   13659             enable it.
   13660           + The STOP and the new ERROR STOP statements now support all
   13661             constant expressions.
   13662           + Support for the CONTIGUOUS attribute.
   13663           + Support for ALLOCATE with MOLD.
   13664           + Support for the STORAGE_SIZE intrinsic inquiry function.
   13665           + Support of the NORM2 and PARITY intrinsic functions.
   13666           + The following bit intrinsics were added: POPCNT and POPPAR for
   13667             counting the number of 1 bits and returning the parity; BGE,
   13668             BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR
   13669             for combined left and right shifts, MASKL and MASKR for simple
   13670             left and right justified masks, MERGE_BITS for a bitwise merge
   13671             using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations,
   13672             and the transformational bit intrinsics IALL, IANY and
   13673             IPARITY.
   13674           + Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
   13675           + Support for the IMPURE attribute for procedures, which allows
   13676             for ELEMENTAL procedures without the restrictions of PURE.
   13677           + Null pointers (including NULL()) and not allocated variables
   13678             can be used as actual argument to optional non-pointer,
   13679             non-allocatable dummy arguments, denoting an absent argument.
   13680           + Non-pointer variables with TARGET attribute can be used as
   13681             actual argument to POINTER dummies with INTENT(IN)
   13682           + Pointers including procedure pointers and those in a derived
   13683             type (pointer components) can now be initialized by a target
   13684             instead of only by NULL.
   13685           + The EXIT statement (with construct-name) can now be used to
   13686             leave not only the DO but also the ASSOCIATE, BLOCK, IF,
   13687             SELECT CASE and SELECT TYPE constructs.
   13688           + Internal procedures can now be used as actual argument.
   13689           + The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS
   13690             and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV
   13691             have been added; these arrays contain the supported kind
   13692             values for the respective types.
   13693           + The module procedures C_SIZEOF of the intrinsic module
   13694             ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
   13695             ISO_FORTRAN_ENV have been implemented.
   13696           + Minor changes: obsolescence diagnostics for ENTRY was added
   13697             for -std=f2008; a line may start with a semicolon; for
   13698             internal and module procedures END can be used instead of END
   13699             SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes
   13700             a RADIX argument; intrinsic types are supported for
   13701             TYPE(intrinsic-type-spec); multiple type-bound procedures can
   13702             be declared in a single PROCEDURE statement; implied-shape
   13703             arrays are supported for named constants (PARAMETER). The
   13704             transformational, three argument versions of BESSEL_JN and
   13705             BESSEL_YN were added  the elemental, two-argument version had
   13706             been added in GCC 4.4; note that the transformational
   13707             functions use a recurrence algorithm.
   13708 
   13709   [22]Go
   13710 
   13711    Support for the Go programming language has been added to GCC. It is
   13712    not enabled by default when you build GCC; use the --enable-languages
   13713    configure option to build it. The driver program for compiling Go code
   13714    is gccgo.
   13715 
   13716    Go is currently known to work on GNU/Linux and RTEMS. Solaris support
   13717    is in progress. It may or may not work on other platforms.
   13718 
   13719   [23]Objective-C and Objective-C++
   13720 
   13721      * The -fobjc-exceptions flag is now required to enable Objective-C
   13722        exception and synchronization syntax (introduced by the keywords
   13723        @try, @catch, @finally and @synchronized).
   13724      * A number of Objective-C 2.0 features and extensions are now
   13725        supported by GCC. These features are enabled by default; you can
   13726        disable them by using the new -fobjc-std=objc1 command-line option.
   13727      * The Objective-C 2.0 dot-syntax is now supported. It is an
   13728        alternative syntax for using getters and setters; object.count is
   13729        automatically converted into [object count] or [object setCount:
   13730        ...] depending on context; for example if (object.count > 0) is
   13731        automatically compiled into the equivalent of if ([object count] >
   13732        0) while object.count = 0; is automatically compiled into the
   13733        equivalent ot [object setCount: 0];. The dot-syntax can be used
   13734        with instance and class objects and with any setters or getters, no
   13735        matter if they are part of a declared property or not.
   13736      * Objective-C 2.0 declared properties are now supported. They are
   13737        declared using the new @property keyword, and are most commonly
   13738        used in conjunction with the new Objective-C 2.0 dot-syntax. The
   13739        nonatomic, readonly, readwrite, assign, retain, copy, setter and
   13740        getter attributes are all supported. Marking declared properties
   13741        with __attribute__ ((deprecated)) is supported too.
   13742      * The Objective-C 2.0 @synthesize and @dynamic keywords are
   13743        supported. @synthesize causes the compiler to automatically
   13744        synthesize a declared property, while @dynamic is used to disable
   13745        all warnings for a declared property for which no implementation is
   13746        provided at compile time. Synthesizing declared properties requires
   13747        runtime support in most useful cases; to be able to use it with the
   13748        GNU runtime, appropriate helper functions have been added to the
   13749        GNU Objective-C runtime ABI, and are implemented by the GNU
   13750        Objective-C runtime library shipped with GCC.
   13751      * The Objective-C 2.0 fast enumeration syntax is supported in
   13752        Objective-C. This is currently not yet available in Objective-C++.
   13753        Fast enumeration requires support in the runtime, and such support
   13754        has been added to the GNU Objective-C runtime library (shipped with
   13755        GCC).
   13756      * The Objective-C 2.0 @optional keyword is supported. It allows you
   13757        to mark methods or properties in a protocol as optional as opposed
   13758        to required.
   13759      * The Objective-C 2.0 @package keyword is supported. It has currently
   13760        the same effect as the @public keyword.
   13761      * Objective-C 2.0 method attributes are supported. Currently the
   13762        supported attributes are deprecated, sentinel, noreturn and format.
   13763      * Objective-C 2.0 method argument attributes are supported. The most
   13764        widely used attribute is unused, to mark an argument as unused in
   13765        the implementation.
   13766      * Objective-C 2.0 class and protocol attributes are supported.
   13767        Currently the only supported attribute is deprecated.
   13768      * Objective-C 2.0 class extensions are supported. A class extension
   13769        has the same syntax as a category declaration with no category
   13770        name, and the methods and properties declared in it are added
   13771        directly to the main class. It is mostly used as an alternative to
   13772        a category to add methods to a class without advertising them in
   13773        the public headers, with the advantage that for class extensions
   13774        the compiler checks that all the privately declared methods are
   13775        actually implemented.
   13776      * As a result of these enhancements, GCC can now be used to build
   13777        Objective-C and Objective-C++ software that uses Foundation and
   13778        other important system frameworks with the NeXT runtime on Darwin 9
   13779        and Darwin 10 (OSX 10.5 and 10.6).
   13780      * Many bugs in the compiler have been fixed in this release; in
   13781        particular, LTO can now be used when compiling Objective-C and
   13782        Objective-C++ and the parser is much more robust in dealing with
   13783        invalid code.
   13784 
   13785     Runtime Library (libobjc)
   13786 
   13787      * The GNU Objective-C runtime library now defines the macro
   13788        __GNU_LIBOBJC__ (with a value that is increased at every release
   13789        where there is any change to the API) in objc/objc.h, making it
   13790        easy to determine if the GNU Objective-C runtime library is being
   13791        used, and if so, which version. Previous versions of the GNU
   13792        Objective-C runtime library (and other Objective-C runtime
   13793        libraries such as the Apple one) do not define this macro.
   13794      * A new Objective-C 2.0 API, almost identical to the one implemented
   13795        by the Apple Objective-C runtime, has been implemented in the GNU
   13796        Objective-C runtime library. The new API hides the internals of
   13797        most runtime structures but provides a more extensive set of
   13798        functions to operate on them. It is much easier, for example, to
   13799        create or modify classes at runtime. The new API also makes it
   13800        easier to port software from Apple to GNU as almost no changes
   13801        should be required. The old API is still supported for backwards
   13802        compatibility; including the old objc/objc-api.h header file
   13803        automatically selects the old API, while including the new
   13804        objc/runtime.h header file automatically selects the new API.
   13805        Support for the old API is being phased out and upgrading the
   13806        software to use the new API is strongly recommended. To check for
   13807        the availability of the new API, the __GNU_LIBOBJC__ macro can be
   13808        used as older versions of the GNU Objective-C runtime library,
   13809        which do not support the new API, do not define such a macro.
   13810      * Runtime support for @synchronized has been added.
   13811      * Runtime support for Objective-C 2.0 synthesized property accessors
   13812        has been added.
   13813      * Runtime support for Objective-C 2.0 fast enumeration has been
   13814        added.
   13815 
   13816 [24]New Targets and Target Specific Improvements
   13817 
   13818   [25]ARM
   13819 
   13820      * GCC now supports the Cortex-M4 processor implementing the v7-em
   13821        version of the architecture using the option -mcpu=cortex-m4.
   13822      * Scheduling descriptions for the Cortex-M4, the Neon and the
   13823        floating point units of the Cortex-A9 and a pipeline description
   13824        for the Cortex-A5 have been added.
   13825      * Synchronization primitives such as __sync_fetch_and_add and friends
   13826        are now inlined for supported architectures rather than calling
   13827        into a kernel helper function.
   13828      * SSA loop prefetching is enabled by default for the Cortex-A9 at
   13829        -O3.
   13830      * Several improvements were committed to improve code generation for
   13831        the ARM architecture including a rewritten implementation for load
   13832        and store multiples.
   13833      * Several enhancements were committed to improve SIMD code generation
   13834        for NEON by adding support for widening instructions, misaligned
   13835        loads and stores, vector conditionals and support for 64-bit
   13836        arithmetic.
   13837      * Support was added for the Faraday cores fa526, fa606te, fa626te,
   13838        fmp626te, fmp626 and fa726te and can be used with the respective
   13839        names as parameters to the -mcpu= option.
   13840      * Basic support was added for Cortex-A15 and is available through
   13841        -mcpu=cortex-a15.
   13842      * GCC for AAPCS configurations now more closely adheres to the AAPCS
   13843        specification by enabling -fstrict-volatile-bitfields by default.
   13844 
   13845   IA-32/x86-64
   13846 
   13847      * The new -fsplit-stack option permits programs to use a
   13848        discontiguous stack. This is useful for threaded programs, in that
   13849        it is no longer necessary to specify the maximum stack size when
   13850        creating a thread. This feature is currently only implemented for
   13851        32-bit and 64-bit x86 GNU/Linux targets.
   13852      * Support for emitting profiler counter calls before function
   13853        prologues. This is enabled via a new command-line option -mfentry.
   13854      * Optimization for the Intel Core 2 processors is now available
   13855        through the -march=core2 and -mtune=core2 options.
   13856      * Support for Intel Core i3/i5/i7 processors is now available through
   13857        the -march=corei7 and -mtune=corei7 options.
   13858      * Support for Intel Core i3/i5/i7 processors with AVX is now
   13859        available through the -march=corei7-avx and -mtune=corei7-avx
   13860        options.
   13861      * Support for AMD Bobcat (family 14) processors is now available
   13862        through the -march=btver1 and -mtune=btver1 options.
   13863      * Support for AMD Bulldozer (family 15) processors is now available
   13864        through the -march=bdver1 and -mtune=bdver1 options.
   13865      * The default setting (when not optimizing for size) for 32-bit
   13866        GNU/Linux and Darwin x86 targets has been changed to
   13867        -fomit-frame-pointer. The default can be reverted to
   13868        -fno-omit-frame-pointer by configuring GCC with the
   13869        --enable-frame-pointer configure option.
   13870      * Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
   13871        __float128 on 32-bit and 64-bit x86 targets.
   13872      * AVX floating-point arithmetic can now be enabled by default at
   13873        configure time with the new --with-fpmath=avx option.
   13874      * The SSA loop prefetching pass is enabled when using -O3 when
   13875        optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
   13876        than K6).
   13877      * Support for TBM (Trailing Bit Manipulation) built-in functions and
   13878        code generation is available via -mtbm.
   13879      * Support for AMD's BMI (Bit Manipulation) built-in functions and
   13880        code generation is available via -mbmi.
   13881 
   13882   [26]MicroBlaze
   13883 
   13884      * Support has been added for the Xilinx MicroBlaze softcore processor
   13885        (microblaze-elf) embedded target. This configurable processor is
   13886        supported on several Xilinx Spartan and Virtex FPGAs.
   13887 
   13888   MIPS
   13889 
   13890      * GCC now supports the Loongson 3A processor. Its canonical -march=
   13891        and -mtune= name is loongson3a.
   13892 
   13893   [27]MN10300 / AM33
   13894 
   13895      * The inline assembly register constraint "A" has been renamed "c".
   13896        This constraint is used to select a floating-point register that
   13897        can be used as the destination of a multiply-accumulate
   13898        instruction.
   13899      * New inline assembly register constraints "A" and "D" have been
   13900        added. These constraint letters resolve to all general registers
   13901        when compiling for AM33, and resolve to address registers only or
   13902        data registers only when compiling for MN10300.
   13903      * The MDR register is represented in the compiler. One can access the
   13904        register via the "z" constraint in inline assembly. It can be
   13905        marked as clobbered or used as a local register variable via the
   13906        "mdr" name. The compiler uses the RETF instruction if the function
   13907        does not modify the MDR register, so it is important that inline
   13908        assembly properly annotate any usage of the register.
   13909 
   13910   PowerPC/PowerPC64
   13911 
   13912      * GCC now supports the Applied Micro Titan processor with
   13913        -mcpu=titan.
   13914      * The -mrecip option has been added, which indicates whether the
   13915        reciprocal and reciprocal square root instructions should be used.
   13916      * The -mveclibabi=mass option can be used to enable the compiler to
   13917        autovectorize mathematical functions using the Mathematical
   13918        Acceleration Subsystem library.
   13919      * The -msingle-pic-base option has been added, which instructs the
   13920        compiler to avoid loading the PIC base register in function
   13921        prologues. The PIC base register must be initialized by the runtime
   13922        system.
   13923      * The -mblock-move-inline-limit option has been added, which enables
   13924        the user to control the maximum size of inlined memcpy calls and
   13925        similar.
   13926      * PowerPC64 GNU/Linux support for applications requiring a large TOC
   13927        section has been improved. A new command-line option,
   13928        -mcmodel=MODEL, controls this feature; valid values for MODEL are
   13929        small, medium, or large.
   13930      * The Altivec builtin functions vec_ld and vec_st have been modified
   13931        to generate the Altivec memory instructions LVX and STVX, even if
   13932        the -mvsx option is used. In the initial GCC 4.5 release, these
   13933        builtin functions were changed to generate VSX memory reference
   13934        instructions instead of Altivec memory instructions, but there are
   13935        differences between the two instructions. If the VSX instruction
   13936        set is available, you can now use the new builtin functions
   13937        vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   13938        instructions.
   13939      * The GCC compiler on AIX now defaults to a process layout with a
   13940        larger data space allowing larger programs to be compiled.
   13941      * The GCC long double type on AIX 6.1 and above has reverted to
   13942        64-bit double precision, matching the AIX XL compiler default,
   13943        because of missing C99 symbols required by the GCC runtime.
   13944      * The default processor scheduling model and tuning for PowerPC64
   13945        GNU/Linux and for AIX 6.1 and above now is POWER7.
   13946      * Starting with GCC 4.6.1, vectors of type vector long long or vector
   13947        long are passed and returned in the same method as other vectors
   13948        with the VSX instruction set. Previously the GCC compiler did not
   13949        adhere to the ABI for 128-bit vectors with 64-bit integer base
   13950        types (PR 48857). This is also fixed in the GCC 4.5.4 release.
   13951 
   13952   S/390, zSeries and System z9/z10, IBM zEnterprise z196
   13953 
   13954      * Support for the zEnterprise z196 processor has been added. When
   13955        using the -march=z196 option, the compiler will generate code
   13956        making use of the following instruction facilities:
   13957           + Conditional load/store
   13958           + Distinct-operands
   13959           + Floating-point-extension
   13960           + Interlocked-access
   13961           + Population-count
   13962        The -mtune=z196 option avoids the compare and branch instructions
   13963        as well as the load address instruction with an index register as
   13964        much as possible and performs instruction scheduling appropriate
   13965        for the new out-of-order pipeline architecture.
   13966      * When using the -m31 -mzarch options the generated code still
   13967        conforms to the 32-bit ABI but uses the general purpose registers
   13968        as 64-bit registers internally. This requires a Linux kernel saving
   13969        the whole 64-bit registers when doing a context switch. Kernels
   13970        providing that feature indicate that by the 'highgprs' string in
   13971        /proc/cpuinfo.
   13972      * The SSA loop prefetching pass is enabled when using -O3.
   13973 
   13974   SPARC
   13975 
   13976      * GCC now supports the LEON series of SPARC V8 processors. The code
   13977        generated by the compiler can either be tuned to it by means of the
   13978        --with-tune=leon configure option and -mtune=leon compilation
   13979        option, or the compiler can be built for the sparc-leon-{elf,linux}
   13980        and sparc-leon3-{elf,linux} targets directly.
   13981      * GCC has stopped sign/zero-extending parameter registers in the
   13982        callee for functions taking parameters with sub-word size in 32-bit
   13983        mode, since this is redundant with the specification of the ABI.
   13984        GCC has never done so in 64-bit mode since this is also redundant.
   13985      * The command-line option -mfix-at697f has been added to enable the
   13986        documented workaround for the single erratum of the Atmel AT697F
   13987        processor.
   13988 
   13989 [28]Operating Systems
   13990 
   13991   [29]Android
   13992 
   13993      * GCC now supports the Bionic C library and provides a convenient way
   13994        of building native libraries and applications for the Android
   13995        platform. Refer to the documentation of the -mandroid and -mbionic
   13996        options for details on building native code. At the moment, Android
   13997        support is enabled only for ARM.
   13998 
   13999   [30]Darwin/Mac OS X
   14000 
   14001      * General
   14002           + Initial support for CFString types has been added.
   14003             This allows GCC to build projects including the system Core
   14004             Foundation frameworks. The GCC Objective-C family supports
   14005             CFString "toll-free bridged" as per the Mac OS X system tools.
   14006             CFString is also recognized in the context of format
   14007             attributes and arguments (see the documentation for format
   14008             attributes for limitations). At present, 8-bit character types
   14009             are supported.
   14010           + Object file size reduction.
   14011             The Darwin zeroed memory allocators have been re-written to
   14012             make more use of .zerofill sections. For non-debug code, this
   14013             can reduce object file size significantly.
   14014           + Objective-C family 64-bit support (NeXT ABI 2).
   14015             Initial support has been added to support 64-bit Objective-C
   14016             code using the Darwin/OS X native (NeXT) runtime. ABI version
   14017             2 will be selected automatically when 64-bit code is built.
   14018           + Objective-C family 32-bit ABI 1.
   14019             For 32-bit code ABI 1 is also now also allowed. At present it
   14020             must be selected manually using -fobjc-abi-version=1 where
   14021             applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).
   14022      * x86 Architecture
   14023           + The -mdynamic-no-pic option has been enabled.
   14024             Code supporting -mdynamic-no-pic optimization has been added
   14025             and is applicable to -m32 builds. The compiler bootstrap uses
   14026             the option where appropriate.
   14027           + The default value for -mtune= has been changed.
   14028             Since Darwin systems are primarily Xeon, Core-2 or similar the
   14029             default tuning has been changed to -mtune=core2.
   14030           + Enable 128-bit long double (__float128) support on Darwin.
   14031      * PPC Architecture
   14032           + Darwin64 ABI.
   14033             Several significant bugs have been fixed, such that GCC now
   14034             produces code compatible with the Darwin64 PowerPC ABI.
   14035           + libffi and boehm-gc.
   14036             The Darwin ports of the libffi and boehm-gc libraries have
   14037             been upgraded to include a Darwin64 implementation. This means
   14038             that powerpc*-*-darwin9 platforms may now, for example, build
   14039             Java applications with -m64 enabled.
   14040           + Plug-in support has been enabled.
   14041           + The -fsection-anchors option is now available although,
   14042             presently, not heavily tested.
   14043 
   14044   [31]Solaris 2
   14045 
   14046     New Features
   14047 
   14048      * Support symbol versioning with the Sun linker.
   14049      * Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
   14050      * Support thread-local storage (TLS) with the Sun assembler on
   14051        Solaris 2/x86.
   14052      * Support TLS on Solaris 8/9 if prerequisites are met.
   14053      * Support COMDAT group with the GNU assembler and recent Sun linker.
   14054      * Support the Sun assembler visibility syntax.
   14055      * Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
   14056        -march=pentiumpro (Solaris 8/9).
   14057      * Don't use SSE on Solaris 8/9 x86 by default.
   14058      * Enable 128-bit long double (__float128) support on Solaris 2/x86.
   14059 
   14060     ABI Change
   14061 
   14062      * Change the ABI for returning 8-byte vectors like __m64 in MMX
   14063        registers on Solaris 10+/x86 to match the Sun Studio 12.1+
   14064        compilers. This is an incompatible change. If you use such types,
   14065        you must either recompile all your code with the new compiler or
   14066        use the new -mvect8-ret-in-mem option to remain compatible with
   14067        previous versions of GCC and Sun Studio.
   14068 
   14069   [32]Windows x86/x86_64
   14070 
   14071      * Initial support for decimal floating point.
   14072      * Support for the __thiscall calling-convention.
   14073      * Support for hot-patchable function prologues via the
   14074        ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
   14075      * Improvements of stack-probing and stack-allocation mechanisms.
   14076      * Support of push/pop-macro pragma as preprocessor command.
   14077        With #pragma push_macro("macro-name") the current definition of
   14078        macro-name is saved and can be restored with #pragma
   14079        pop_macro("macro-name") to its saved definition.
   14080      * Enable 128-bit long double (__float128) support on MinGW and
   14081        Cygwin.
   14082 
   14083 Other significant improvements
   14084 
   14085   Installation changes
   14086 
   14087      * An install-strip make target is provided that installs stripped
   14088        executables, and may install libraries with unneeded or debugging
   14089        sections stripped.
   14090      * On Power7 systems, there is a potential problem if you build the
   14091        GCC compiler with a host compiler using options that enable the VSX
   14092        instruction set generation. If the host compiler has been patched
   14093        so that the vec_ld and vec_st builtin functions generate Altivec
   14094        memory instructions instead of VSX memory instructions, then you
   14095        should be able to build the compiler with VSX instruction
   14096        generation.
   14097 
   14098 Changes for GCC Developers
   14099 
   14100    Note: these changes concern developers that develop GCC itself or
   14101    software that integrates with GCC, such as plugins, and not the general
   14102    GCC users.
   14103      * The gengtype utility, which previously was internal to the GCC
   14104        build process, has been enchanced to provide GC root information
   14105        for plugins as necessary.
   14106      * The old GC allocation interface of ggc_alloc and friends was
   14107        replaced with a type-safe alternative.
   14108 
   14109 [33]GCC 4.6.1
   14110 
   14111    This is the [34]list of problem reports (PRs) from GCC's bug tracking
   14112    system that are known to be fixed in the 4.6.1 release. This list might
   14113    not be complete (that is, it is possible that some PRs that have been
   14114    fixed are not listed here).
   14115 
   14116 [35]GCC 4.6.2
   14117 
   14118    This is the [36]list of problem reports (PRs) from GCC's bug tracking
   14119    system that are known to be fixed in the 4.6.2 release. This list might
   14120    not be complete (that is, it is possible that some PRs that have been
   14121    fixed are not listed here).
   14122 
   14123 [37]GCC 4.6.3
   14124 
   14125    This is the [38]list of problem reports (PRs) from GCC's bug tracking
   14126    system that are known to be fixed in the 4.6.3 release. This list might
   14127    not be complete (that is, it is possible that some PRs that have been
   14128    fixed are not listed here).
   14129 
   14130 [39]GCC 4.6.4
   14131 
   14132    This is the [40]list of problem reports (PRs) from GCC's bug tracking
   14133    system that are known to be fixed in the 4.6.4 release. This list might
   14134    not be complete (that is, it is possible that some PRs that have been
   14135    fixed are not listed here).
   14136 
   14137 
   14138     For questions related to the use of GCC, please consult these web
   14139     pages and the [41]GCC manuals. If that fails, the
   14140     [42]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14141     web pages and the development of GCC are welcome on our developer
   14142     list at [43]gcc (a] gcc.gnu.org. All of [44]our lists have public
   14143     archives.
   14144 
   14145    Copyright (C) [45]Free Software Foundation, Inc. Verbatim copying and
   14146    distribution of this entire article is permitted in any medium,
   14147    provided this notice is preserved.
   14148 
   14149    These pages are [46]maintained by the GCC team. Last modified
   14150    2026-06-07.
   14151 
   14152 References
   14153 
   14154    1. https://sourceware.org/bugzilla/show_bug.cgi?id=10401
   14155    2. https://gcc.gnu.org/gcc-4.5/changes.html
   14156    3. https://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
   14157    4. https://gcc.gnu.org/gcc-4.6/porting_to.html
   14158    5. https://gcc.gnu.org/projects/lto/whopr.pdf
   14159    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   14160    7. https://gcc.gnu.org/gcc-4.6/changes.html#c
   14161    8. https://gcc.gnu.org/gcc-4.6/changes.html#cplusplus
   14162    9. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
   14163   10. https://gcc.gnu.org/PR43145
   14164   11. https://gcc.gnu.org/PR43680
   14165   12. https://gcc.gnu.org/PR33558
   14166   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
   14167   14. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
   14168   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
   14169   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
   14170   17. https://gcc.gnu.org/gcc-4.6/changes.html#fortran
   14171   18. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
   14172   19. https://gcc.gnu.org/wiki/OOP
   14173   20. https://gcc.gnu.org/wiki/Coarray
   14174   21. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
   14175   22. https://gcc.gnu.org/gcc-4.6/changes.html#go
   14176   23. https://gcc.gnu.org/gcc-4.6/changes.html#objective-c
   14177   24. https://gcc.gnu.org/gcc-4.6/changes.html#targets
   14178   25. https://gcc.gnu.org/gcc-4.6/changes.html#arm
   14179   26. https://gcc.gnu.org/gcc-4.6/changes.html#microblaze
   14180   27. https://gcc.gnu.org/gcc-4.6/changes.html#mn10300
   14181   28. https://gcc.gnu.org/gcc-4.6/changes.html#os
   14182   29. https://gcc.gnu.org/gcc-4.6/changes.html#android
   14183   30. https://gcc.gnu.org/gcc-4.6/changes.html#darwin
   14184   31. https://gcc.gnu.org/gcc-4.6/changes.html#solaris
   14185   32. https://gcc.gnu.org/gcc-4.6/changes.html#windows
   14186   33. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.1
   14187   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
   14188   35. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.2
   14189   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
   14190   37. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.3
   14191   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
   14192   39. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.4
   14193   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
   14194   41. https://gcc.gnu.org/onlinedocs/
   14195   42. mailto:gcc-help (a] gcc.gnu.org
   14196   43. mailto:gcc (a] gcc.gnu.org
   14197   44. https://gcc.gnu.org/lists.html
   14198   45. https://www.fsf.org/
   14199   46. https://gcc.gnu.org/about.html
   14200 ======================================================================
   14201 http://gcc.gnu.org/gcc-4.5/index.html
   14202                              GCC 4.5 Release Series
   14203 
   14204    (This release series is no longer supported.)
   14205 
   14206    Jul 2, 2012
   14207 
   14208    The [1]GNU project and the GCC developers are pleased to announce the
   14209    release of GCC 4.5.4.
   14210 
   14211    This release is a bug-fix release, containing fixes for regressions in
   14212    GCC 4.5.3 relative to previous releases of GCC.
   14213 
   14214 Release History
   14215 
   14216    GCC 4.5.4
   14217           Jul 2, 2012 ([2]changes)
   14218 
   14219    GCC 4.5.3
   14220           Apr 28, 2011 ([3]changes)
   14221 
   14222    GCC 4.5.2
   14223           Dec 16, 2010 ([4]changes)
   14224 
   14225    GCC 4.5.1
   14226           Jul 31, 2010 ([5]changes)
   14227 
   14228    GCC 4.5.0
   14229           April 14, 2010 ([6]changes)
   14230 
   14231 References and Acknowledgements
   14232 
   14233    GCC used to stand for the GNU C Compiler, but since the compiler
   14234    supports several other languages aside from C, it now stands for the
   14235    GNU Compiler Collection.
   14236 
   14237    A list of [7]successful builds is updated as new information becomes
   14238    available.
   14239 
   14240    The GCC developers would like to thank the numerous people that have
   14241    contributed new features, improvements, bug fixes, and other changes as
   14242    well as test results to GCC. This [8]amazing group of volunteers is
   14243    what makes GCC successful.
   14244 
   14245    For additional information about GCC please refer to the [9]GCC project
   14246    web site or contact the [10]GCC development mailing list.
   14247 
   14248    To obtain GCC please use [11]our mirror sites or [12]our version
   14249    control system.
   14250 
   14251 
   14252     For questions related to the use of GCC, please consult these web
   14253     pages and the [13]GCC manuals. If that fails, the
   14254     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14255     web pages and the development of GCC are welcome on our developer
   14256     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   14257     archives.
   14258 
   14259    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   14260    distribution of this entire article is permitted in any medium,
   14261    provided this notice is preserved.
   14262 
   14263    These pages are [18]maintained by the GCC team. Last modified
   14264    2022-10-26.
   14265 
   14266 References
   14267 
   14268    1. http://www.gnu.org/
   14269    2. https://gcc.gnu.org/gcc-4.5/changes.html
   14270    3. https://gcc.gnu.org/gcc-4.5/changes.html
   14271    4. https://gcc.gnu.org/gcc-4.5/changes.html
   14272    5. https://gcc.gnu.org/gcc-4.5/changes.html
   14273    6. https://gcc.gnu.org/gcc-4.5/changes.html
   14274    7. https://gcc.gnu.org/gcc-4.5/buildstat.html
   14275    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14276    9. https://gcc.gnu.org/index.html
   14277   10. mailto:gcc (a] gcc.gnu.org
   14278   11. https://gcc.gnu.org/mirrors.html
   14279   12. https://gcc.gnu.org/git.html
   14280   13. https://gcc.gnu.org/onlinedocs/
   14281   14. mailto:gcc-help (a] gcc.gnu.org
   14282   15. mailto:gcc (a] gcc.gnu.org
   14283   16. https://gcc.gnu.org/lists.html
   14284   17. https://www.fsf.org/
   14285   18. https://gcc.gnu.org/about.html
   14286 ======================================================================
   14287 http://gcc.gnu.org/gcc-4.5/changes.html
   14288                              GCC 4.5 Release Series
   14289                         Changes, New Features, and Fixes
   14290 
   14291 Caveats
   14292 
   14293      * GCC now requires the [1]MPC library in order to build. See the
   14294        [2]prerequisites page for version requirements.
   14295      * Support for a number of older systems and recently unmaintained or
   14296        untested target ports of GCC has been declared obsolete in GCC 4.5.
   14297        Unless there is activity to revive them, the next release of GCC
   14298        will have their sources permanently removed.
   14299        The following ports for individual systems on particular
   14300        architectures have been obsoleted:
   14301           + IRIX releases before 6.5 (mips-sgi-irix5*,
   14302             mips-sgi-irix6.[0-4])
   14303           + Solaris 7 (*-*-solaris2.7)
   14304           + Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
   14305             alpha-dec-osf5.0*)
   14306           + Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions
   14307             can be found in the [3]announcement.
   14308        Support for the classic POWER architecture implemented in the
   14309        original RIOS and RIOS2 processors of the old IBM RS/6000 product
   14310        line has been obsoleted in the rs6000 port. This does not affect
   14311        the new generation Power and PowerPC architectures.
   14312      * Support has been removed for all the [4]configurations obsoleted in
   14313        GCC 4.4.
   14314      * Support has been removed for the protoize and unprotoize utilities,
   14315        obsoleted in GCC 4.4.
   14316      * Support has been removed for tuning for Itanium1 (Merced) variants.
   14317        Note that code tuned for Itanium2 should also run correctly on
   14318        Itanium1.
   14319      * GCC now generates unwind info also for epilogues. DWARF debuginfo
   14320        generated by GCC now uses more features of DWARF3 than before, and
   14321        also some DWARF4 features. GDB older than 7.0 is not able to handle
   14322        either of these, so to debug GCC 4.5 generated binaries or
   14323        libraries GDB 7.0 or later is needed. You can disable use of DWARF4
   14324        features with the -gdwarf-3 -gstrict-dwarf options, or use
   14325        -gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but
   14326        epilogue unwind info is emitted unconditionally whenever unwind
   14327        info is emitted.
   14328      * On x86 targets, code containing floating-point calculations may run
   14329        significantly more slowly when compiled with GCC 4.5 in strict C99
   14330        conformance mode than they did with earlier GCC versions. This is
   14331        due to stricter standard conformance of the compiler and can be
   14332        avoided by using the option -fexcess-precision=fast; also see
   14333        [5]below.
   14334      * The function attribute noinline no longer prevents GCC from cloning
   14335        the function. A new attribute noclone has been introduced for this
   14336        purpose. Cloning a function means that it is duplicated and the new
   14337        copy is specialized for certain contexts (for example when a
   14338        parameter is a known constant).
   14339 
   14340 General Optimizer Improvements
   14341 
   14342      * The -save-temps now takes an optional argument. The -save-temps and
   14343        -save-temps=cwd switches write the temporary files in the current
   14344        working directory based on the original source file. The
   14345        -save-temps=obj switch will write files into the directory
   14346        specified with the -o option, and the intermediate filenames are
   14347        based on the output file. This will allow the user to get the
   14348        compiler intermediate files when doing parallel builds without two
   14349        builds of the same filename located in different directories from
   14350        interfering with each other.
   14351      * Debugging dumps are now created in the same directory as the object
   14352        file rather than in the current working directory. This allows the
   14353        user to get debugging dumps when doing parallel builds without two
   14354        builds of the same filename interfering with each other.
   14355      * GCC has been integrated with the MPC library. This allows GCC to
   14356        evaluate complex arithmetic at compile time [6]more accurately. It
   14357        also allows GCC to evaluate calls to complex built-in math
   14358        functions having constant arguments and replace them at compile
   14359        time with their mathematically equivalent results. In doing so, GCC
   14360        can generate correct results regardless of the math library
   14361        implementation or floating point precision of the host platform.
   14362        This also allows GCC to generate identical results regardless of
   14363        whether one compiles in native or cross-compile configurations to a
   14364        particular target. The following built-in functions take advantage
   14365        of this new capability: cacos, cacosh, casin, casinh, catan,
   14366        catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan,
   14367        and ctanh. The float and long double variants of these functions
   14368        (e.g. csinf and csinl) are also handled.
   14369      * A new link-time optimizer has been added ([7]-flto). When this
   14370        option is used, GCC generates a bytecode representation of each
   14371        input file and writes it to specially-named sections in each object
   14372        file. When the object files are linked together, all the function
   14373        bodies are read from these named sections and instantiated as if
   14374        they had been part of the same translation unit. This enables
   14375        interprocedural optimizations to work across different files (and
   14376        even different languages), potentially improving the performance of
   14377        the generated code. To use the link-timer optimizer, -flto needs to
   14378        be specified at compile time and during the final link. If the
   14379        program does not require any symbols to be exported, it is possible
   14380        to combine -flto and the experimental [8]-fwhopr with
   14381        [9]-fwhole-program to allow the interprocedural optimizers to use
   14382        more aggressive assumptions.
   14383      * The automatic parallelization pass was enhanced to support
   14384        parallelization of outer loops.
   14385      * Automatic parallelization can be enabled as part of Graphite. In
   14386        addition to -ftree-parallelize-loops=, specify
   14387        -floop-parallelize-all to enable the Graphite-based optimization.
   14388      * The infrastructure for optimizing based on [10]restrict qualified
   14389        pointers has been rewritten and should result in code generation
   14390        improvements. Optimizations based on restrict qualified pointers
   14391        are now also available when using -fno-strict-aliasing.
   14392      * There is a new optimization pass that attempts to change prototype
   14393        of functions to avoid unused parameters, pass only relevant parts
   14394        of structures and turn arguments passed by reference to arguments
   14395        passed by value when possible. It is enabled by -O2 and above as
   14396        well as -Os and can be manually invoked using the new command-line
   14397        switch -fipa-sra.
   14398      * GCC now optimize exception handling code. In particular cleanup
   14399        regions that are proved to not have any effect are optimized out.
   14400 
   14401 New Languages and Language specific improvements
   14402 
   14403   All languages
   14404 
   14405      * The -fshow-column option is now on by default. This means error
   14406        messages now have a column associated with them.
   14407 
   14408   Ada
   14409 
   14410      * Compilation of programs heavily using discriminated record types
   14411        with variant parts has been sped up and generates more compact
   14412        code.
   14413      * Stack checking now works reasonably well on most plaforms. In some
   14414        specific cases, stack overflows may still fail to be detected, but
   14415        a compile-time warning will be issued for these cases.
   14416 
   14417   C family
   14418 
   14419      * If a header named in a #include directive is not found, the
   14420        compiler exits immediately. This avoids a cascade of errors arising
   14421        from declarations expected to be found in that header being
   14422        missing.
   14423      * A new built-in function __builtin_unreachable() has been added that
   14424        tells the compiler that control will never reach that point. It may
   14425        be used after asm statements that terminate by transferring control
   14426        elsewhere, and in other places that are known to be unreachable.
   14427      * The -Wlogical-op option now warns for logical expressions such as
   14428        (c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be
   14429        mistakes. This option is disabled by default.
   14430      * An asm goto feature has been added to allow asm statements that
   14431        jump to C labels.
   14432      * C++0x raw strings are supported for C++ and for C with -std=gnu99.
   14433      * The deprecated attribute now takes an optional string argument, for
   14434        example, __attribute__((deprecated("text string"))), that will be
   14435        printed together with the deprecation warning.
   14436 
   14437   C
   14438 
   14439      * The -Wenum-compare option, which warns when comparing values of
   14440        different enum types, now works for C. It formerly only worked for
   14441        C++. This warning is enabled by -Wall. It may be avoided by using a
   14442        type cast.
   14443      * The -Wcast-qual option now warns about casts which are unsafe in
   14444        that they permit const-correctness to be violated without further
   14445        warnings. Specifically, it warns about cases where a qualifier is
   14446        added when all the lower types are not const. For example, it warns
   14447        about a cast from char ** to const char **.
   14448      * The -Wc++-compat option is significantly improved. It issues new
   14449        warnings for:
   14450           + Using C++ reserved operator names as identifiers.
   14451           + Conversions to enum types without explicit casts.
   14452           + Using va_arg with an enum type.
   14453           + Using different enum types in the two branches of ?:.
   14454           + Using ++ or -- on a variable of enum type.
   14455           + Using the same name as both a struct, union or enum tag and a
   14456             typedef, unless the typedef refers to the tagged type itself.
   14457           + Using a struct, union, or enum which is defined within another
   14458             struct or union.
   14459           + A struct field defined using a typedef if there is a field in
   14460             the struct, or an enclosing struct, whose name is the typedef
   14461             name.
   14462           + Duplicate definitions at file scope.
   14463           + Uninitialized const variables.
   14464           + A global variable with an anonymous struct, union, or enum
   14465             type.
   14466           + Using a string constant to initialize a char array whose size
   14467             is the length of the string.
   14468      * The new -Wjump-misses-init option warns about cases where a goto or
   14469        switch skips the initialization of a variable. This sort of branch
   14470        is an error in C++ but not in C. This warning is enabled by
   14471        -Wc++-compat.
   14472      * GCC now ensures that a C99-conforming <stdint.h> is present on most
   14473        targets, and uses information about the types in this header to
   14474        implement the Fortran bindings to those types. GCC does not ensure
   14475        the presence of such a header, and does not implement the Fortran
   14476        bindings, on the following targets: NetBSD, VxWorks, VMS,
   14477        SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF.
   14478      * GCC now implements C90- and C99-conforming rules for constant
   14479        expressions. This may cause warnings or errors for some code using
   14480        expressions that can be folded to a constant but are not constant
   14481        expressions as defined by ISO C.
   14482      * All known target-independent C90 and C90 Amendment 1 conformance
   14483        bugs, and all known target-independent C99 conformance bugs not
   14484        related to floating point or extended identifiers, have been fixed.
   14485      * The C decimal floating point support now includes support for the
   14486        FLOAT_CONST_DECIMAL64 pragma.
   14487      * The named address space feature from ISO/IEC TR 18037 is now
   14488        supported. This is currently only implemented for the SPU
   14489        processor.
   14490 
   14491   [11]C++
   14492 
   14493      * Improved [12]experimental support for the upcoming C++0x ISO C++
   14494        standard, including support for raw strings, lambda expressions and
   14495        explicit type conversion operators.
   14496      * When printing the name of a class template specialization, G++ will
   14497        now omit any template arguments which come from default template
   14498        arguments. This behavior (and the pretty-printing of function
   14499        template specializations as template signature and arguments) can
   14500        be disabled with the -fno-pretty-templates option.
   14501      * Access control is now applied to typedef names used in a template,
   14502        which may cause G++ to reject some ill-formed code that was
   14503        accepted by earlier releases. The -fno-access-control option can be
   14504        used as a temporary workaround until the code is corrected.
   14505      * Compilation time for code that uses templates should now scale
   14506        linearly with the number of instantiations rather than
   14507        quadratically, as template instantiations are now looked up using
   14508        hash tables.
   14509      * Declarations of functions that look like builtin declarations of
   14510        library functions are only considered to be redeclarations if they
   14511        are declared with extern "C". This may cause problems with code
   14512        that omits extern "C" on hand-written declarations of C library
   14513        functions such as abort or memcpy. Such code is ill-formed, but was
   14514        accepted by earlier releases.
   14515      * Diagnostics that used to complain about passing non-POD types to
   14516        ... or jumping past the declaration of a non-POD variable now check
   14517        for triviality rather than PODness, as per C++0x.
   14518      * In C++0x mode local and anonymous classes are now allowed as
   14519        template arguments, and in declarations of variables and functions
   14520        with linkage, so long as any such declaration that is used is also
   14521        defined ([13]DR 757).
   14522      * Labels may now have attributes, as has been permitted for a while
   14523        in C. This is only permitted when the label definition and the
   14524        attribute specifier is followed by a semicoloni.e., the label
   14525        applies to an empty statement. The only useful attribute for a
   14526        label is unused.
   14527      * G++ now implements [14]DR 176. Previously G++ did not support using
   14528        the injected-class-name of a template base class as a type name,
   14529        and lookup of the name found the declaration of the template in the
   14530        enclosing scope. Now lookup of the name finds the
   14531        injected-class-name, which can be used either as a type or as a
   14532        template, depending on whether or not the name is followed by a
   14533        template argument list. As a result of this change, some code that
   14534        was previously accepted may be ill-formed because
   14535          1. The injected-class-name is not accessible because it's from a
   14536             private base, or
   14537          2. The injected-class-name cannot be used as an argument for a
   14538             template template parameter.
   14539        In either of these cases, the code can be fixed by adding a
   14540        nested-name-specifier to explicitly name the template. The first
   14541        can be worked around with -fno-access-control; the second is only
   14542        rejected with -pedantic.
   14543      * A new standard mangling for SIMD vector types has been added, to
   14544        avoid name clashes on systems with vectors of varying length. By
   14545        default the compiler still uses the old mangling, but emits aliases
   14546        with the new mangling on targets that support strong aliases. Users
   14547        can switch over entirely to the new mangling with -fabi-version=4
   14548        or -fabi-version=0. -Wabi will now warn about code that uses the
   14549        old mangling.
   14550      * The command-line option -ftemplate-depth-N is now written as
   14551        -ftemplate-depth=N and the old form is deprecated.
   14552      * Conversions between NULL and non-pointer types are now warned by
   14553        default. The new option -Wno-conversion-null disables these
   14554        warnings. Previously these warnings were only available when using
   14555        -Wconversion explicitly.
   14556 
   14557     Runtime Library (libstdc++)
   14558 
   14559      * Improved experimental support for the upcoming ISO C++ standard,
   14560        C++0x, including:
   14561           + Support for <future>, <functional>, and <random>.
   14562           + Existing facilities now exploit explicit operators and the
   14563             newly implemented core C++0x features.
   14564           + The header <cstdatomic> has been renamed to <atomic>.
   14565      * An experimental profile mode has been added. This is an
   14566        implementation of many C++ standard library constructs with an
   14567        additional analysis layer that gives performance improvement advice
   14568        based on recognition of suboptimal usage patterns. For example,
   14569 #include <vector>
   14570 int main()
   14571 {
   14572   std::vector<int> v;
   14573   for (int k = 0; k < 1024; ++k)
   14574     v.insert(v.begin(), k);
   14575 }
   14576 
   14577        When instrumented via the profile mode, can return suggestions
   14578        about the initial size and choice of the container used as follows:
   14579 vector-to-list: improvement = 5: call stack = 0x804842c ...
   14580     : advice = change std::vector to std::list
   14581 vector-size: improvement = 3: call stack = 0x804842c ...
   14582     : advice = change initial container size from 0 to 1024
   14583 
   14584        These constructs can be substituted for the normal libstdc++
   14585        constructs on a piecemeal basis, or all existing components can be
   14586        transformed via the -D_GLIBCXX_PROFILE macro.
   14587      * [15]Support for decimal floating-point arithmetic (aka ISO C++ TR
   14588        24733) has been added. This support is in header file
   14589        <decimal/decimal>, uses namespace std::decimal, and includes
   14590        classes decimal32, decimal64, and decimal128.
   14591      * Sources have been audited for application of function attributes
   14592        nothrow, const, pure, and noreturn.
   14593      * Python pretty-printers have been added for many standard library
   14594        components that simplify the internal representation and present a
   14595        more intuitive view of components when used with
   14596        appropriately-advanced versions of GDB. For more information,
   14597        please consult the more [16]detailed description.
   14598      * The default behavior for comparing typeinfo names has changed, so
   14599        in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
   14600      * The new -static-libstdc++ option directs g++ to link the C++
   14601        library statically, even if the default would normally be to link
   14602        it dynamically.
   14603 
   14604   [17]Fortran
   14605 
   14606      * The COMMON default padding has been changed  instead of adding the
   14607        padding before a variable it is now added afterwards, which
   14608        increases the compatibility with other vendors and helps to obtain
   14609        the correct output in some cases. Cf. also the -falign-commons
   14610        option ([18]added in 4.4).
   14611      * The -finit-real= option now also supports the value snan for
   14612        signaling not-a-number; to be effective, one additionally needs to
   14613        enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
   14614        optimizations can turn a signaling NaN into a quiet one.
   14615      * The new option -fcheck= has been added with the options bounds,
   14616        array-temps, do, pointer, and recursive. The bounds and array-temps
   14617        options are equivalent to -fbounds-check and
   14618        -fcheck-array-temporaries. The do option checks for invalid
   14619        modification of loop iteration variables, and the recursive option
   14620        tests for recursive calls to subroutines/functions which are not
   14621        marked as recursive. With pointer pointer association checks in
   14622        calls are performed; however, neither undefined pointers nor
   14623        pointers in expressions are handled. Using -fcheck=all enables all
   14624        these run-time checks.
   14625      * The run-time checking -fcheck=bounds now warns about invalid string
   14626        lengths of character dummy arguments. Additionally, more
   14627        compile-time checks have been added.
   14628      * The new option [19]-fno-protect-parens has been added; if set, the
   14629        compiler may reorder REAL and COMPLEX expressions without regard to
   14630        parentheses.
   14631      * GNU Fortran no longer links against libgfortranbegin. As before,
   14632        MAIN__ (assembler symbol name) is the actual Fortran main program,
   14633        which is invoked by the main function. However, main is now
   14634        generated and put in the same object file as MAIN__. For the time
   14635        being, libgfortranbegin still exists for backward compatibility.
   14636        For details see the new [20]Mixed-Language Programming chapter in
   14637        the manual.
   14638      * The I/O library was restructured for performance and cleaner code.
   14639      * Array assignments and WHERE are now run in parallel when OpenMP's
   14640        WORKSHARE is used.
   14641      * The experimental option -fwhole-file was added. The option allows
   14642        whole-file checking of procedure arguments and allows for better
   14643        optimizations. It can also be used with -fwhole-program, which is
   14644        now also supported in gfortran.
   14645      * More Fortran 2003 and Fortran 2008 mathematical functions can now
   14646        be used as initialization expressions.
   14647      * Some extended attributes such as STDCALL are now supported via the
   14648        [21]GCC$ compiler directive.
   14649      * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
   14650        intrinsic behaves now as if zero were always positive.
   14651      * For legacy compatibiliy: On Cygwin and MinGW, the special files
   14652        CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now
   14653        supported.
   14654      * Fortran 2003 support has been extended:
   14655           + Procedure-pointer function results and procedure-pointer
   14656             components (including PASS),
   14657           + allocatable scalars (experimental),
   14658           + DEFERRED type-bound procedures,
   14659           + the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements
   14660             have been implemented.
   14661           + The ALLOCATE statement supports type-specs and the SOURCE=
   14662             argument.
   14663           + OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC
   14664             type-bound procedure (i.e. as type-bound operators).
   14665           + Rounding (ROUND=, RZ, ...) for output is now supported.
   14666           + The INT_FAST{8,16,32,64,128}_T kind type parameters of the
   14667             intrinsic module ISO_C_BINDING are now supported, except for
   14668             the targets listed above as ones where GCC does not have
   14669             <stdint.h> type information.
   14670           + Extensible derived types with type-bound procedure or
   14671             procedure pointer with PASS attribute now have to use CLASS in
   14672             line with the Fortran 2003 standard; the workaround to use
   14673             TYPE is no longer supported.
   14674           + [22]Experimental, incomplete support for polymorphism,
   14675             including CLASS, SELECT TYPE and dynamic dispatch of
   14676             type-bound procedure calls. Some features do not work yet such
   14677             as unlimited polymorphism (CLASS(*)).
   14678      * Fortran 2008 support has been extended:
   14679           + The OPEN statement now supports the NEWUNIT= option, which
   14680             returns a unique file unit, thus preventing inadvertent use of
   14681             the same unit in different parts of the program.
   14682           + Support for unlimited format items has been added.
   14683           + The INT{8,16,32} and REAL{32,64,128} kind type parameters of
   14684             the intrinsic module ISO_FORTRAN_ENV are now supported.
   14685           + Using complex arguments with TAN, SINH, COSH, TANH, ASIN,
   14686             ACOS, and ATAN is now possible; the functions ASINH, ACOSH,
   14687             and ATANH have been added (for real and complex arguments) and
   14688             ATAN(Y,X) is now an alias for ATAN2(Y,X).
   14689           + The BLOCK construct has been implemented.
   14690 
   14691 [23]New Targets and Target Specific Improvements
   14692 
   14693   AIX
   14694 
   14695      * Full cross-toolchain support now available with GNU Binutils
   14696 
   14697   ARM
   14698 
   14699      * GCC now supports the Cortex-M0 and Cortex-A5 processors.
   14700      * GCC now supports the ARM v7E-M architecture.
   14701      * GCC now supports VFPv4-based FPUs and FPUs with
   14702        single-precision-only VFP.
   14703      * GCC has many improvements to optimization for other ARM processors,
   14704        including scheduling support for the integer pipeline on Cortex-A9.
   14705      * GCC now supports the IEEE 754-2008 half-precision floating-point
   14706        type, and a variant ARM-specific half-precision type. This type is
   14707        specified using __fp16, with the layout determined by
   14708        -mfp16-format. With appropriate -mfpu options, the Cortex-A9 and
   14709        VFPv4 half-precision instructions will be used.
   14710      * GCC now supports the variant of AAPCS that uses VFP registers for
   14711        parameter passing and return values.
   14712 
   14713   AVR
   14714 
   14715      * The -mno-tablejump option has been removed because it has the same
   14716        effect as the -fno-jump-tables option.
   14717      * Added support for these new AVR devices:
   14718           + ATmega8U2
   14719           + ATmega16U2
   14720           + ATmega32U2
   14721 
   14722   [24]IA-32/x86-64
   14723 
   14724      * GCC now will set the default for -march= based on the configure
   14725        target.
   14726      * GCC now supports handling floating-point excess precision arising
   14727        from use of the x87 floating-point unit in a way that conforms to
   14728        ISO C99. This is enabled with -fexcess-precision=standard and with
   14729        standards conformance options such as -std=c99, and may be disabled
   14730        using -fexcess-precision=fast.
   14731      * Support for the Intel Atom processor is now available through the
   14732        -march=atom and -mtune=atom options.
   14733      * A new -mcrc32 option is now available to enable crc32 intrinsics.
   14734      * A new -mmovbe option is now available to enable GCC to use the
   14735        movbe instruction to implement __builtin_bswap32 and
   14736        __builtin_bswap64.
   14737      * SSE math now can be enabled by default at configure time with the
   14738        new --with-fpmath=sse option.
   14739      * There is a new intrinsic header file, <x86intrin.h>. It should be
   14740        included before using any IA-32/x86-64 intrinsics.
   14741      * Support for the XOP, FMA4, and LWP instruction sets for the AMD
   14742        Orochi processors are now available with the -mxop, -mfma4, and
   14743        -mlwp options.
   14744      * The -mabm option enables GCC to use the popcnt and lzcnt
   14745        instructions on AMD processors.
   14746      * The -mpopcnt option enables GCC to use the popcnt instructions on
   14747        both AMD and Intel processors.
   14748 
   14749   M68K/ColdFire
   14750 
   14751      * GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x
   14752        and 5441x devices.
   14753      * GCC now supports thread-local storage (TLS) on M68K and ColdFire
   14754        processors.
   14755 
   14756   [25]MeP
   14757 
   14758    Support has been added for the Toshiba Media embedded Processor (MeP,
   14759    or mep-elf) embedded target.
   14760 
   14761   MIPS
   14762 
   14763      * GCC now supports MIPS 1004K processors.
   14764      * GCC can now be configured with options --with-arch-32,
   14765        --with-arch-64, --with-tune-32 and --with-tune-64 to control the
   14766        default optimization separately for 32-bit and 64-bit modes.
   14767      * MIPS targets now support an alternative _mcount interface, in which
   14768        register $12 points to the function's save slot for register $31.
   14769        This interface is selected by the -mcount-ra-address option; see
   14770        the documentation for more details.
   14771      * GNU/Linux targets can now generate read-only .eh_frame sections.
   14772        This optimization requires GNU binutils 2.20 or above, and is only
   14773        available if GCC is configured with a suitable version of binutils.
   14774      * GNU/Linux targets can now attach special relocations to indirect
   14775        calls, so that the linker can turn them into direct jumps or
   14776        branches. This optimization requires GNU binutils 2.20 or later,
   14777        and is automatically selected if GCC is configured with an
   14778        appropriate version of binutils. It can be explicitly enabled or
   14779        disabled using the -mrelax-pic-calls command-line option.
   14780      * GCC now generates more heavily-optimized atomic operations on
   14781        Octeon processors.
   14782      * MIPS targets now support the -fstack-protector option.
   14783      * GCC now supports an -msynci option, which specifies that synci is
   14784        enough to flush the instruction cache, without help from the
   14785        operating system. GCC uses this information to optimize
   14786        automatically-generated cache flush operations, such as those used
   14787        for nested functions in C. There is also a --with-synci
   14788        configure-time option, which makes -msynci the default.
   14789      * GCC supports four new function attributes for interrupt handlers:
   14790        interrupt, use_shadow_register_set, keep_interrupts_masked and
   14791        use_debug_exception_return. See the documentation for more details
   14792        about these attributes.
   14793 
   14794   [26]RS/6000 (POWER/PowerPC)
   14795 
   14796      * GCC now supports the Power ISA 2.06, which includes the VSX
   14797        instructions that add vector 64-bit floating point support, new
   14798        population count instructions, and conversions between floating
   14799        point and unsigned types.
   14800      * Support for the power7 processor is now available through the
   14801        -mcpu=power7 and -mtune=power7.
   14802      * GCC will now vectorize loops that contain simple math functions
   14803        like copysign when generating code for altivec or VSX targets.
   14804      * Support for the A2 processor is now available through the -mcpu=a2
   14805        and -mtune=a2 options.
   14806      * Support for the 476 processor is now available through the
   14807        -mcpu={476,476fp} and -mtune={476,476fp} options.
   14808      * Support for the e500mc64 processor is now available through the
   14809        -mcpu=e500mc64 and -mtune=e500mc64 options.
   14810      * GCC can now be configured with options --with-cpu-32,
   14811        --with-cpu-64, --with-tune-32 and --with-tune-64 to control the
   14812        default optimization separately for 32-bit and 64-bit modes.
   14813      * Starting with GCC 4.5.4, vectors of type vector long long or vector
   14814        long are passed and returned in the same method as other vectors
   14815        with the VSX instruction set. Previously the GCC compiler did not
   14816        adhere to the ABI for 128-bit vectors with 64-bit integer base
   14817        types (PR 48857). This is also fixed in the GCC 4.6.1 release.
   14818 
   14819   [27]RX
   14820 
   14821    Support has been added for the Renesas RX Processor (rx-elf) target.
   14822 
   14823 [28]Operating Systems
   14824 
   14825   [29]Windows (Cygwin and MinGW)
   14826 
   14827      * GCC now installs all the major language runtime libraries as DLLs
   14828        when configured with the --enable-shared option.
   14829      * GCC now makes use of the new support for aligned common variables
   14830        in versions of binutils >= 2.20 to fix bugs in the support for SSE
   14831        data types.
   14832      * Improvements to the libffi support library increase the reliability
   14833        of code generated by GCJ on all Windows platforms. Libgcj is
   14834        enabled by default for the first time.
   14835      * Libtool improvements simplify installation by placing the generated
   14836        DLLs in the correct binaries directory.
   14837      * Numerous other minor bugfixes and improvements, and substantial
   14838        enhancements to the Fortran language support library.
   14839 
   14840    >
   14841 
   14842 Other significant improvements
   14843 
   14844   Plugins
   14845 
   14846      * It is now possible to extend the compiler without having to modify
   14847        its source code. A new option -fplugin=file.so tells GCC to load
   14848        the shared object file.so and execute it as part of the compiler.
   14849        The internal documentation describes the details on how plugins can
   14850        interact with the compiler.
   14851 
   14852   Installation changes
   14853 
   14854      * The move to newer autotools changed default installation
   14855        directories and switches to control them: The --with-datarootdir,
   14856        --with-docdir, --with-pdfdir, and --with-htmldir switches are not
   14857        used any more. Instead, you can now use --datarootdir, --docdir,
   14858        --htmldir, and --pdfdir. The default installation directories have
   14859        changed as follows according to the GNU Coding Standards:
   14860 
   14861        datarootdir read-only architecture-independent data root [PREFIX/share]
   14862        localedir   locale-specific message catalogs [DATAROOTDIR/locale]
   14863        docdir      documentation root [DATAROOTDIR/doc/PACKAGE]
   14864        htmldir     html documentation [DOCDIR]
   14865        dvidir      dvi documentation [DOCDIR]
   14866        pdfdir      pdf documentation [DOCDIR]
   14867        psdir       ps documentation [DOCDIR]
   14868        The following variables have new default values:
   14869 
   14870        datadir read-only architecture-independent data [DATAROOTDIR]
   14871        infodir info documentation [DATAROOTDIR/info]
   14872        mandir  man documentation [DATAROOTDIR/man]
   14873 
   14874 [30]GCC 4.5.1
   14875 
   14876    This is the [31]list of problem reports (PRs) from GCC's bug tracking
   14877    system that are known to be fixed in the 4.5.1 release. This list might
   14878    not be complete (that is, it is possible that some PRs that have been
   14879    fixed are not listed here).
   14880 
   14881   All languages
   14882 
   14883      * GCC's new link-time optimizer ([32]-flto) now also works on a few
   14884        non-ELF targets:
   14885           + Cygwin (*-cygwin*)
   14886           + MinGW (*-mingw*)
   14887           + Darwin on x86-64 (x86_64-apple-darwin*)
   14888        LTO is not enabled by default for these targets. To enable LTO, you
   14889        should configure with the --enable-lto option.
   14890 
   14891 [33]GCC 4.5.2
   14892 
   14893    This is the [34]list of problem reports (PRs) from GCC's bug tracking
   14894    system that are known to be fixed in the 4.5.2 release. This list might
   14895    not be complete (that is, it is possible that some PRs that have been
   14896    fixed are not listed here).
   14897 
   14898 [35]GCC 4.5.3
   14899 
   14900    This is the [36]list of problem reports (PRs) from GCC's bug tracking
   14901    system that are known to be fixed in the 4.5.3 release. This list might
   14902    not be complete (that is, it is possible that some PRs that have been
   14903    fixed are not listed here).
   14904 
   14905    On the PowerPC compiler, the Altivec builtin functions vec_ld and
   14906    vec_st have been modified to generate the Altivec memory instructions
   14907    LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5
   14908    release, these builtin functions were changed to generate VSX memory
   14909    reference instructions instead of Altivec memory instructions, but
   14910    there are differences between the two instructions. If the VSX
   14911    instruction set is available, you can now use the new builtin functions
   14912    vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   14913    instructions.
   14914 
   14915 [37]GCC 4.5.4
   14916 
   14917    This is the [38]list of problem reports (PRs) from GCC's bug tracking
   14918    system that are known to be fixed in the 4.5.4 release. This list might
   14919    not be complete (that is, it is possible that some PRs that have been
   14920    fixed are not listed here).
   14921 
   14922 
   14923     For questions related to the use of GCC, please consult these web
   14924     pages and the [39]GCC manuals. If that fails, the
   14925     [40]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14926     web pages and the development of GCC are welcome on our developer
   14927     list at [41]gcc (a] gcc.gnu.org. All of [42]our lists have public
   14928     archives.
   14929 
   14930    Copyright (C) [43]Free Software Foundation, Inc. Verbatim copying and
   14931    distribution of this entire article is permitted in any medium,
   14932    provided this notice is preserved.
   14933 
   14934    These pages are [44]maintained by the GCC team. Last modified
   14935    2025-09-29.
   14936 
   14937 References
   14938 
   14939    1. https://www.multiprecision.org/
   14940    2. https://gcc.gnu.org/install/prerequisites.html
   14941    3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
   14942    4. https://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
   14943    5. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   14944    6. https://gcc.gnu.org/PR30789
   14945    7. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   14946    8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
   14947    9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
   14948   10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
   14949   11. https://gcc.gnu.org/gcc-4.5/changes.html#cplusplus
   14950   12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   14951   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   14952   14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
   14953   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
   14954   16. https://sourceware.org/gdb/wiki/STLSupport
   14955   17. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
   14956   18. https://gcc.gnu.org/gcc-4.4/changes.html
   14957   19. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   14958   20. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
   14959   21. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
   14960   22. https://gcc.gnu.org/wiki/OOP
   14961   23. https://gcc.gnu.org/gcc-4.5/changes.html#targets
   14962   24. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   14963   25. https://gcc.gnu.org/gcc-4.5/changes.html#mep
   14964   26. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
   14965   27. https://gcc.gnu.org/gcc-4.5/changes.html#rx
   14966   28. https://gcc.gnu.org/gcc-4.5/changes.html#os
   14967   29. https://gcc.gnu.org/gcc-4.5/changes.html#windows
   14968   30. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
   14969   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
   14970   32. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   14971   33. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
   14972   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
   14973   35. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
   14974   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
   14975   37. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
   14976   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
   14977   39. https://gcc.gnu.org/onlinedocs/
   14978   40. mailto:gcc-help (a] gcc.gnu.org
   14979   41. mailto:gcc (a] gcc.gnu.org
   14980   42. https://gcc.gnu.org/lists.html
   14981   43. https://www.fsf.org/
   14982   44. https://gcc.gnu.org/about.html
   14983 ======================================================================
   14984 http://gcc.gnu.org/gcc-4.4/index.html
   14985                              GCC 4.4 Release Series
   14986 
   14987    This release series is no longer maintained.
   14988 
   14989    March 13, 2012
   14990 
   14991    The [1]GNU project and the GCC developers are pleased to announce the
   14992    release of GCC 4.4.7.
   14993 
   14994    This release is a bug-fix release, containing fixes for regressions in
   14995    GCC 4.4.6 relative to previous releases of GCC.
   14996 
   14997 Release History
   14998 
   14999    GCC 4.4.7
   15000           March 13, 2012 ([2]changes)
   15001 
   15002    GCC 4.4.6
   15003           April 16, 2011 ([3]changes)
   15004 
   15005    GCC 4.4.5
   15006           October 1, 2010 ([4]changes)
   15007 
   15008    GCC 4.4.4
   15009           April 29, 2010 ([5]changes)
   15010 
   15011    GCC 4.4.3
   15012           January 21, 2010 ([6]changes)
   15013 
   15014    GCC 4.4.2
   15015           October 15, 2009 ([7]changes)
   15016 
   15017    GCC 4.4.1
   15018           July 22, 2009 ([8]changes)
   15019 
   15020    GCC 4.4.0
   15021           April 21, 2009 ([9]changes)
   15022 
   15023 References and Acknowledgements
   15024 
   15025    GCC used to stand for the GNU C Compiler, but since the compiler
   15026    supports several other languages aside from C, it now stands for the
   15027    GNU Compiler Collection.
   15028 
   15029    A list of [10]successful builds is updated as new information becomes
   15030    available.
   15031 
   15032    The GCC developers would like to thank the numerous people that have
   15033    contributed new features, improvements, bug fixes, and other changes as
   15034    well as test results to GCC. This [11]amazing group of volunteers is
   15035    what makes GCC successful.
   15036 
   15037    For additional information about GCC please refer to the [12]GCC
   15038    project web site or contact the [13]GCC development mailing list.
   15039 
   15040    To obtain GCC please use [14]our mirror sites or [15]our version
   15041    control system.
   15042 
   15043 
   15044     For questions related to the use of GCC, please consult these web
   15045     pages and the [16]GCC manuals. If that fails, the
   15046     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15047     web pages and the development of GCC are welcome on our developer
   15048     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   15049     archives.
   15050 
   15051    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   15052    distribution of this entire article is permitted in any medium,
   15053    provided this notice is preserved.
   15054 
   15055    These pages are [21]maintained by the GCC team. Last modified
   15056    2022-10-26.
   15057 
   15058 References
   15059 
   15060    1. http://www.gnu.org/
   15061    2. https://gcc.gnu.org/gcc-4.4/changes.html
   15062    3. https://gcc.gnu.org/gcc-4.4/changes.html
   15063    4. https://gcc.gnu.org/gcc-4.4/changes.html
   15064    5. https://gcc.gnu.org/gcc-4.4/changes.html
   15065    6. https://gcc.gnu.org/gcc-4.4/changes.html
   15066    7. https://gcc.gnu.org/gcc-4.4/changes.html
   15067    8. https://gcc.gnu.org/gcc-4.4/changes.html
   15068    9. https://gcc.gnu.org/gcc-4.4/changes.html
   15069   10. https://gcc.gnu.org/gcc-4.4/buildstat.html
   15070   11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15071   12. https://gcc.gnu.org/index.html
   15072   13. mailto:gcc (a] gcc.gnu.org
   15073   14. https://gcc.gnu.org/mirrors.html
   15074   15. https://gcc.gnu.org/git.html
   15075   16. https://gcc.gnu.org/onlinedocs/
   15076   17. mailto:gcc-help (a] gcc.gnu.org
   15077   18. mailto:gcc (a] gcc.gnu.org
   15078   19. https://gcc.gnu.org/lists.html
   15079   20. https://www.fsf.org/
   15080   21. https://gcc.gnu.org/about.html
   15081 ======================================================================
   15082 http://gcc.gnu.org/gcc-4.4/changes.html
   15083                              GCC 4.4 Release Series
   15084                         Changes, New Features, and Fixes
   15085 
   15086    The latest release in the 4.4 release series is [1]GCC 4.4.7.
   15087 
   15088 Caveats
   15089 
   15090      * __builtin_stdarg_start has been completely removed from GCC.
   15091        Support for <varargs.h> had been deprecated since GCC 4.0. Use
   15092        __builtin_va_start as a replacement.
   15093      * Some of the errors issued by the C++ front end that could be
   15094        downgraded to warnings in previous releases by using -fpermissive
   15095        are now warnings by default. They can be converted into errors by
   15096        using -pedantic-errors.
   15097      * Use of the cpp assertion extension will now emit a warning when
   15098        -Wdeprecated or -pedantic is used. This extension has been
   15099        deprecated for many years, but never warned about.
   15100      * Packed bit-fields of type char were not properly bit-packed on many
   15101        targets prior to GCC 4.4. On these targets, the fix in GCC 4.4
   15102        causes an ABI change. For example there is no longer a 4-bit
   15103        padding between field a and b in this structure:
   15104     struct foo
   15105     {
   15106       char a:4;
   15107       char b:8;
   15108     } __attribute__ ((packed));
   15109        There is a new warning to help identify fields that are affected:
   15110     foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
   15111        The warning can be disabled with -Wno-packed-bitfield-compat.
   15112      * On ARM EABI targets, the C++ mangling of the va_list type has been
   15113        changed to conform to the current revision of the EABI. This does
   15114        not affect the libstdc++ library included with GCC.
   15115      * The SCOUNT and POS bits of the MIPS DSP control register are now
   15116        treated as global. Previous versions of GCC treated these fields as
   15117        call-clobbered instead.
   15118      * The MIPS port no longer recognizes the h asm constraint. It was
   15119        necessary to remove this constraint in order to avoid generating
   15120        unpredictable code sequences.
   15121        One of the main uses of the h constraint was to extract the high
   15122        part of a multiplication on 64-bit targets. For example:
   15123     asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
   15124        You can now achieve the same effect using 128-bit types:
   15125     typedef unsigned int uint128_t __attribute__((mode(TI)));
   15126     result = ((uint128_t) x * y) >> 64;
   15127        The second sequence is better in many ways. For example, if x and y
   15128        are constants, the compiler can perform the multiplication at
   15129        compile time. If x and y are not constants, the compiler can
   15130        schedule the runtime multiplication better than it can schedule an
   15131        asm statement.
   15132      * Support for a number of older systems and recently unmaintained or
   15133        untested target ports of GCC has been declared obsolete in GCC 4.4.
   15134        Unless there is activity to revive them, the next release of GCC
   15135        will have their sources permanently removed.
   15136        The following ports for individual systems on particular
   15137        architectures have been obsoleted:
   15138           + Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
   15139             m68k-*-aout*)
   15140           + Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
   15141             armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
   15142             sh-*-*). This does not affect other more specific targets
   15143             using the COFF object format on those architectures, or the
   15144             more specific H8300 and SH targets (h8300-*-rtems*,
   15145             h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
   15146             sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).
   15147           + 2BSD on PDP-11 (pdp11-*-bsd)
   15148           + AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
   15149             powerpc-ibm-aix4.[12]*)
   15150           + Tuning support for Itanium1 (Merced) variants. Note that code
   15151             tuned for Itanium2 should also run correctly on Itanium1.
   15152      * The protoize and unprotoize utilities have been obsoleted and will
   15153        be removed in GCC 4.5. These utilities have not been installed by
   15154        default since GCC 3.0.
   15155      * Support has been removed for all the [2]configurations obsoleted in
   15156        GCC 4.3.
   15157      * Unknown -Wno-* options are now silently ignored by GCC if no other
   15158        diagnostics are issued. If other diagnostics are issued, then GCC
   15159        warns about the unknown options.
   15160      * More information on porting to GCC 4.4 from previous versions of
   15161        GCC can be found in the [3]porting guide for this release.
   15162 
   15163 General Optimizer Improvements
   15164 
   15165      * A new command-line switch -findirect-inlining has been added. When
   15166        turned on it allows the inliner to also inline indirect calls that
   15167        are discovered to have known targets at compile time thanks to
   15168        previous inlining.
   15169      * A new command-line switch -ftree-switch-conversion has been added.
   15170        This new pass turns simple initializations of scalar variables in
   15171        switch statements into initializations from a static array, given
   15172        that all the values are known at compile time and the ratio between
   15173        the new array size and the original switch branches does not exceed
   15174        the parameter --param switch-conversion-max-branch-ratio (default
   15175        is eight).
   15176      * A new command-line switch -ftree-builtin-call-dce has been added.
   15177        This optimization eliminates unnecessary calls to certain builtin
   15178        functions when the return value is not used, in cases where the
   15179        calls can not be eliminated entirely because the function may set
   15180        errno. This optimization is on by default at -O2 and above.
   15181      * A new command-line switch -fconserve-stack directs the compiler to
   15182        minimize stack usage even if it makes the generated code slower.
   15183        This affects inlining decisions.
   15184      * When the assembler supports it, the compiler will now emit unwind
   15185        information using assembler .cfi directives. This makes it possible
   15186        to use such directives in inline assembler code. The new option
   15187        -fno-dwarf2-cfi-asm directs the compiler to not use .cfi
   15188        directives.
   15189      * The [4]Graphite branch has been merged. This merge has brought in a
   15190        new framework for loop optimizations based on a polyhedral
   15191        intermediate representation. These optimizations apply to all the
   15192        languages supported by GCC. The following new code transformations
   15193        are available in GCC 4.4:
   15194           + -floop-interchange performs loop interchange transformations
   15195             on loops. Interchanging two nested loops switches the inner
   15196             and outer loops. For example, given a loop like:
   15197           DO J = 1, M
   15198             DO I = 1, N
   15199               A(J, I) = A(J, I) * C
   15200             ENDDO
   15201           ENDDO
   15202 
   15203             loop interchange will transform the loop as if the user had
   15204             written:
   15205           DO I = 1, N
   15206             DO J = 1, M
   15207               A(J, I) = A(J, I) * C
   15208             ENDDO
   15209           ENDDO
   15210 
   15211             which can be beneficial when N is larger than the caches,
   15212             because in Fortran, the elements of an array are stored in
   15213             memory contiguously by column, and the original loop iterates
   15214             over rows, potentially creating at each access a cache miss.
   15215           + -floop-strip-mine performs loop strip mining transformations
   15216             on loops. Strip mining splits a loop into two nested loops.
   15217             The outer loop has strides equal to the strip size and the
   15218             inner loop has strides of the original loop within a strip.
   15219             For example, given a loop like:
   15220           DO I = 1, N
   15221             A(I) = A(I) + C
   15222           ENDDO
   15223 
   15224             loop strip mining will transform the loop as if the user had
   15225             written:
   15226           DO II = 1, N, 4
   15227             DO I = II, min (II + 3, N)
   15228               A(I) = A(I) + C
   15229             ENDDO
   15230           ENDDO
   15231 
   15232           + -floop-block performs loop blocking transformations on loops.
   15233             Blocking strip mines each loop in the loop nest such that the
   15234             memory accesses of the element loops fit inside caches. For
   15235             example, given a loop like:
   15236           DO I = 1, N
   15237             DO J = 1, M
   15238               A(J, I) = B(I) + C(J)
   15239             ENDDO
   15240           ENDDO
   15241 
   15242             loop blocking will transform the loop as if the user had
   15243             written:
   15244           DO II = 1, N, 64
   15245             DO JJ = 1, M, 64
   15246               DO I = II, min (II + 63, N)
   15247                 DO J = JJ, min (JJ + 63, M)
   15248                   A(J, I) = B(I) + C(J)
   15249                 ENDDO
   15250               ENDDO
   15251             ENDDO
   15252           ENDDO
   15253 
   15254             which can be beneficial when M is larger than the caches,
   15255             because the innermost loop will iterate over a smaller amount
   15256             of data that can be kept in the caches.
   15257      * A new register allocator has replaced the old one. It is called
   15258        integrated register allocator (IRA) because coalescing, register
   15259        live range splitting, and hard register preferencing are done
   15260        on-the-fly during coloring. It also has better integration with the
   15261        reload pass. IRA is a regional register allocator which uses modern
   15262        Chaitin-Briggs coloring instead of Chow's priority coloring used in
   15263        the old register allocator. More info about IRA internals and
   15264        options can be found in the GCC manuals.
   15265      * A new instruction scheduler and software pipeliner, based on the
   15266        selective scheduling approach, has been added. The new pass
   15267        performs instruction unification, register renaming, substitution
   15268        through register copies, and speculation during scheduling. The
   15269        software pipeliner is able to pipeline non-countable loops. The new
   15270        pass is targeted at scheduling-eager in-order platforms. In GCC 4.4
   15271        it is available for the Intel Itanium platform working by default
   15272        as the second scheduling pass (after register allocation) at the
   15273        -O3 optimization level.
   15274      * When using -fprofile-generate with a multi-threaded program, the
   15275        profile counts may be slightly wrong due to race conditions. The
   15276        new -fprofile-correction option directs the compiler to apply
   15277        heuristics to smooth out the inconsistencies. By default the
   15278        compiler will give an error message when it finds an inconsistent
   15279        profile.
   15280      * The new -fprofile-dir=PATH option permits setting the directory
   15281        where profile data files are stored when using -fprofile-generate
   15282        and friends, and the directory used when reading profile data files
   15283        using -fprofile-use and friends.
   15284 
   15285 New warning options
   15286 
   15287      * The new -Wframe-larger-than=NUMBER option directs GCC to emit a
   15288        warning if any stack frame is larger than NUMBER bytes. This may be
   15289        used to help ensure that code fits within a limited amount of stack
   15290        space.
   15291      * The command-line option -Wlarger-than-N is now written as
   15292        -Wlarger-than=N and the old form is deprecated.
   15293      * The new -Wno-mudflap option disables warnings about constructs
   15294        which can not be instrumented when using -fmudflap.
   15295 
   15296 New Languages and Language specific improvements
   15297 
   15298      * Version 3.0 of the OpenMP specification is now supported for the C,
   15299        C++, and Fortran compilers.
   15300      * New character data types, per [5]TR 19769: New character types in
   15301        C, are now supported for the C compiler in -std=gnu99 mode, as
   15302        __CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in
   15303        -std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too.
   15304 
   15305   C family
   15306 
   15307      * A new optimize attribute was added to allow programmers to change
   15308        the optimization level and particular optimization options for an
   15309        individual function. You can also change the optimization options
   15310        via the GCC optimize pragma for functions defined after the pragma.
   15311        The GCC push_options pragma and the GCC pop_options pragma allow
   15312        you temporarily save and restore the options used. The GCC
   15313        reset_options pragma restores the options to what was specified on
   15314        the command line.
   15315      * Uninitialized warnings do not require enabling optimization
   15316        anymore, that is, -Wuninitialized can be used together with -O0.
   15317        Nonetheless, the warnings given by -Wuninitialized will probably be
   15318        more accurate if optimization is enabled.
   15319      * -Wparentheses now warns about expressions such as (!x | y) and (!x
   15320        & y). Using explicit parentheses, such as in ((!x) | y), silences
   15321        this warning.
   15322      * -Wsequence-point now warns within if, while,do while and for
   15323        conditions, and within for begin/end expressions.
   15324      * A new option -dU is available to dump definitions of preprocessor
   15325        macros that are tested or expanded.
   15326 
   15327   C++
   15328 
   15329      * [6]Improved experimental support for the upcoming ISO C++ standard,
   15330        C++0x. Including support for auto, inline namespaces, generalized
   15331        initializer lists, defaulted and deleted functions, new character
   15332        types, and scoped enums.
   15333      * Those errors that may be downgraded to warnings to build legacy
   15334        code now mention -fpermissive when -fdiagnostics-show-option is
   15335        enabled.
   15336      * -Wconversion now warns if the result of a static_cast to enumeral
   15337        type is unspecified because the value is outside the range of the
   15338        enumeral type.
   15339      * -Wuninitialized now warns if a non-static reference or non-static
   15340        const member appears in a class without constructors.
   15341      * G++ now properly implements value-initialization, so objects with
   15342        an initializer of () and an implicitly defined default constructor
   15343        will be zero-initialized before the default constructor is called.
   15344 
   15345     Runtime Library (libstdc++)
   15346 
   15347      * Improved experimental support for the upcoming ISO C++ standard,
   15348        C++0x, including:
   15349           + Support for <chrono>, <condition_variable>, <cstdatomic>,
   15350             <forward_list>, <initializer_list>, <mutex>, <ratio>,
   15351             <system_error>, and <thread>.
   15352           + unique_ptr, <algorithm> additions, exception propagation, and
   15353             support for the new character types in <string> and <limits>.
   15354           + Existing facilities now exploit initializer lists, defaulted
   15355             and deleted functions, and the newly implemented core C++0x
   15356             features.
   15357           + Some standard containers are more efficient together with
   15358             stateful allocators, i.e., no allocator is constructed on the
   15359             fly at element construction time.
   15360      * Experimental support for non-standard pointer types in containers.
   15361      * The long standing libstdc++/30928 has been fixed for targets
   15362        running glibc 2.10 or later.
   15363      * As usual, many small and larger bug fixes, in particular quite a
   15364        few corner cases in <locale>.
   15365 
   15366   Fortran
   15367 
   15368      * GNU Fortran now employs libcpp directly instead of using cc1 as an
   15369        external preprocessor. The [7]-cpp option was added to allow manual
   15370        invocation of the preprocessor without relying on filename
   15371        extensions.
   15372      * The [8]-Warray-temporaries option warns about array temporaries
   15373        generated by the compiler, as an aid to optimization.
   15374      * The [9]-fcheck-array-temporaries option has been added, printing a
   15375        notification at run time, when an array temporary had to be created
   15376        for an function argument. Contrary to -Warray-temporaries the
   15377        warning is only printed if the array is noncontiguous.
   15378      * Improved generation of DWARF debugging symbols
   15379      * If using an intrinsic not part of the selected standard (via -std=
   15380        and -fall-intrinsics) gfortran will now treat it as if this
   15381        procedure were declared EXTERNAL and try to link to a user-supplied
   15382        procedure. -Wintrinsics-std will warn whenever this happens. The
   15383        now-useless option -Wnonstd-intrinsic was removed.
   15384      * The flag -falign-commons has been added to control the alignment of
   15385        variables in COMMON blocks, which is enabled by default in line
   15386        with previous GCC version. Using -fno-align-commons one can force
   15387        commons to be contiguous in memory as required by the Fortran
   15388        standard, however, this slows down the memory access. The option
   15389        -Walign-commons, which is enabled by default, warns when padding
   15390        bytes were added for alignment. The proper solution is to sort the
   15391        common objects by decreasing storage size, which avoids the
   15392        alignment problems.
   15393      * Fortran 2003 support has been extended:
   15394           + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
   15395             now supported (except internal reads from/writes to wide
   15396             strings). [10]-fbackslash now supports also \unnnn and
   15397             \Unnnnnnnn to enter Unicode characters.
   15398           + Asynchronous I/O (implemented as synchronous I/O) and the
   15399             decimal=, size=, sign=, pad=, blank=, and delim= specifiers
   15400             are now supported in I/O statements.
   15401           + Support for Fortran 2003 structure constructors and for array
   15402             constructor with typespec has been added.
   15403           + Procedure Pointers (but not yet as component in derived types
   15404             and as function results) are now supported.
   15405           + Abstract types, type extension, and type-bound procedures
   15406             (both PROCEDURE and GENERIC but not as operators). Note: As
   15407             CLASS/polymorphyic types are not implemented, type-bound
   15408             procedures with PASS accept as non-standard extension TYPE
   15409             arguments.
   15410      * Fortran 2008 support has been added:
   15411           + The -std=f2008 option and support for the file extensions
   15412             .f2008 and .F2008 has been added.
   15413           + The g0 format descriptor is now supported.
   15414           + The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH,
   15415             ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED
   15416             are now available (some of them existed as GNU extension
   15417             before). Note: The hyperbolic functions are not yet supporting
   15418             complex arguments and the three- argument version of BESSEL_*N
   15419             is not available.
   15420           + The bit intrinsics LEADZ and TRAILZ have been added.
   15421 
   15422   Java (GCJ)
   15423 
   15424   Ada
   15425 
   15426      * The Ada runtime now supports multilibs on many platforms including
   15427        x86_64, SPARC and PowerPC. Their build is enabled by default.
   15428 
   15429 [11]New Targets and Target Specific Improvements
   15430 
   15431   ARM
   15432 
   15433      * GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
   15434        Cortex-R4F processors and has many other improvements to
   15435        optimization for ARM processors.
   15436      * GCC now supports the VFPv3 variant with 16 double-precision
   15437        registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been
   15438        renamed to -mfpu=vfpv3.
   15439      * GCC now supports the -mfix-cortex-m3-ldrd option to work around an
   15440        erratum on Cortex-M3 processors.
   15441      * GCC now supports the __sync_* atomic operations for ARM EABI
   15442        GNU/Linux.
   15443      * The section anchors optimization is now enabled by default when
   15444        optimizing for ARM.
   15445      * GCC now uses a new EABI-compatible profiling interface for EABI
   15446        targets. This requires a function __gnu_mcount_nc, which is
   15447        provided by GNU libc versions 2.8 and later.
   15448 
   15449   AVR
   15450 
   15451      * The -mno-tablejump option has been deprecated because it has the
   15452        same effect as the -fno-jump-tables option.
   15453      * Added support for these new AVR devices:
   15454           + ATA6289
   15455           + ATtiny13A
   15456           + ATtiny87
   15457           + ATtiny167
   15458           + ATtiny327
   15459           + ATmega8C1
   15460           + ATmega16C1
   15461           + ATmega32C1
   15462           + ATmega8M1
   15463           + ATmega16M1
   15464           + ATmega32M1
   15465           + ATmega32U4
   15466           + ATmega16HVB
   15467           + ATmega4HVD
   15468           + ATmega8HVD
   15469           + ATmega64C1
   15470           + ATmega64M1
   15471           + ATmega16U4
   15472           + ATmega32U6
   15473           + ATmega128RFA1
   15474           + AT90PWM81
   15475           + AT90SCR100
   15476           + M3000F
   15477           + M3000S
   15478           + M3001B
   15479 
   15480   IA-32/x86-64
   15481 
   15482      * Support for Intel AES built-in functions and code generation is
   15483        available via -maes.
   15484      * Support for Intel PCLMUL built-in function and code generation is
   15485        available via -mpclmul.
   15486      * Support for Intel AVX built-in functions and code generation is
   15487        available via -mavx.
   15488      * Automatically align the stack for local variables with alignment
   15489        requirement.
   15490      * GCC can now utilize the SVML library for vectorizing calls to a set
   15491        of C99 functions if -mveclibabi=svml is specified and you link to
   15492        an SVML ABI compatible library.
   15493      * On x86-64, the ABI has been changed in the following cases to
   15494        conform to the x86-64 ABI:
   15495           + Passing/returning structures with flexible array member:
   15496   struct foo
   15497     {
   15498       int i;
   15499       int flex[];
   15500     };
   15501           + Passing/returning structures with complex float member:
   15502   struct foo
   15503     {
   15504       int i;
   15505       __complex__ float f;
   15506     };
   15507           + Passing/returning unions with long double member:
   15508   union foo
   15509     {
   15510       int x;
   15511       long double ld;
   15512     };
   15513        Code built with previous versions of GCC that uses any of these is
   15514        not compatible with code built with GCC 4.4.0 or later.
   15515      * A new target attribute was added to allow programmers to change the
   15516        target options like -msse2 or -march=k8 for an individual function.
   15517        You can also change the target options via the GCC target pragma
   15518        for functions defined after the pragma.
   15519      * GCC can now be configured with options --with-arch-32,
   15520        --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
   15521        --with-tune-64 to control the default optimization separately for
   15522        32-bit and 64-bit modes.
   15523 
   15524   IA-32/IA64
   15525 
   15526      * Support for __float128 (TFmode) IEEE quad type and corresponding
   15527        TCmode IEEE complex quad type is available via the soft-fp library
   15528        on IA-32/IA64 targets. This includes basic arithmetic operations
   15529        (addition, subtraction, negation, multiplication and division) on
   15530        __float128 real and TCmode complex values, the full set of IEEE
   15531        comparisons between __float128 values, conversions to and from
   15532        float, double and long double floating point types, as well as
   15533        conversions to and from signed or unsigned integer, signed or
   15534        unsigned long integer and signed or unsigned quad (TImode, IA64
   15535        only) integer types. Additionally, all operations generate the full
   15536        set of IEEE exceptions and support the full set of IEEE rounding
   15537        modes.
   15538 
   15539   M68K/ColdFire
   15540 
   15541      * GCC now supports instruction scheduling for ColdFire V1, V3 and V4
   15542        processors. (Scheduling support for ColdFire V2 processors was
   15543        added in GCC 4.3.)
   15544      * GCC now supports the -mxgot option to support programs requiring
   15545        many GOT entries on ColdFire.
   15546      * The m68k-*-linux-gnu target now builds multilibs by default.
   15547 
   15548   MIPS
   15549 
   15550      * MIPS Technologies have extended the original MIPS SVR4 ABI to
   15551        include support for procedure linkage tables (PLTs) and copy
   15552        relocations. These extensions allow GNU/Linux executables to use a
   15553        significantly more efficient code model than the one defined by the
   15554        original ABI.
   15555        GCC support for this code model is available via a new command-line
   15556        option, -mplt. There is also a new configure-time option,
   15557        --with-mips-plt, to make -mplt the default.
   15558        The new code model requires support from the assembler, the linker,
   15559        and the runtime C library. This support is available in binutils
   15560        2.19 and GLIBC 2.9.
   15561      * GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
   15562        and 32-bit GNU/Linux shared libraries. This feature requires GNU
   15563        binutils 2.19 or above.
   15564      * Support for RMI's XLR processor is now available through the
   15565        -march=xlr and -mtune=xlr options.
   15566      * 64-bit targets can now perform 128-bit multiplications inline,
   15567        instead of relying on a libgcc function.
   15568      * Native GNU/Linux toolchains now support -march=native and
   15569        -mtune=native, which select the host processor.
   15570      * GCC now supports the R10K, R12K, R14K and R16K processors. The
   15571        canonical -march= and -mtune= names for these processors are
   15572        r10000, r12000, r14000 and r16000 respectively.
   15573      * GCC can now work around the side effects of speculative execution
   15574        on R10K processors. Please see the documentation of the
   15575        -mr10k-cache-barrier option for details.
   15576      * Support for the MIPS64 Release 2 instruction set has been added.
   15577        The option -march=mips64r2 enables generation of these
   15578        instructions.
   15579      * GCC now supports Cavium Networks' Octeon processor. This support is
   15580        available through the -march=octeon and -mtune=octeon options.
   15581      * GCC now supports STMicroelectronics' Loongson 2E/2F processors. The
   15582        canonical -march= and -mtune= names for these processors are
   15583        loongson2e and loongson2f.
   15584 
   15585   [12]picochip
   15586 
   15587    Picochip is a 16-bit processor. A typical picoChip contains over 250
   15588    small cores, each with small amounts of memory. There are three
   15589    processor variants (STAN, MEM and CTRL) with different instruction sets
   15590    and memory configurations and they can be chosen using the -mae option.
   15591 
   15592    This port is intended to be a "C" only port.
   15593 
   15594   Power Architecture and PowerPC
   15595 
   15596      * GCC now supports the e300c2, e300c3 and e500mc processors.
   15597      * GCC now supports Xilinx processors with a single-precision FPU.
   15598      * Decimal floating point is now supported for e500 processors.
   15599 
   15600   S/390, zSeries and System z9/z10
   15601 
   15602      * Support for the IBM System z10 EC/BC processor has been added. When
   15603        using the -march=z10 option, the compiler will generate code making
   15604        use of instructions provided by the General-Instruction-Extension
   15605        Facility and the Execute-Extension Facility.
   15606 
   15607   VxWorks
   15608 
   15609      * GCC now supports the thread-local storage mechanism used on
   15610        VxWorks.
   15611 
   15612   Xtensa
   15613 
   15614      * GCC now supports thread-local storage (TLS) for Xtensa processor
   15615        configurations that include the Thread Pointer option. TLS also
   15616        requires support from the assembler and linker; this support is
   15617        provided in the GNU binutils beginning with version 2.19.
   15618 
   15619 Documentation improvements
   15620 
   15621 Other significant improvements
   15622 
   15623 [13]GCC 4.4.1
   15624 
   15625    This is the [14]list of problem reports (PRs) from GCC's bug tracking
   15626    system that are known to be fixed in the 4.4.1 release. This list might
   15627    not be complete (that is, it is possible that some PRs that have been
   15628    fixed are not listed here).
   15629 
   15630 [15]GCC 4.4.2
   15631 
   15632    This is the [16]list of problem reports (PRs) from GCC's bug tracking
   15633    system that are known to be fixed in the 4.4.2 release. This list might
   15634    not be complete (that is, it is possible that some PRs that have been
   15635    fixed are not listed here).
   15636 
   15637 [17]GCC 4.4.3
   15638 
   15639    This is the [18]list of problem reports (PRs) from GCC's bug tracking
   15640    system that are known to be fixed in the 4.4.3 release. This list might
   15641    not be complete (that is, it is possible that some PRs that have been
   15642    fixed are not listed here).
   15643 
   15644 [19]GCC 4.4.4
   15645 
   15646    This is the [20]list of problem reports (PRs) from GCC's bug tracking
   15647    system that are known to be fixed in the 4.4.4 release. This list might
   15648    not be complete (that is, it is possible that some PRs that have been
   15649    fixed are not listed here).
   15650 
   15651 [21]GCC 4.4.5
   15652 
   15653    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   15654    system that are known to be fixed in the 4.4.5 release. This list might
   15655    not be complete (that is, it is possible that some PRs that have been
   15656    fixed are not listed here).
   15657 
   15658 [23]GCC 4.4.6
   15659 
   15660    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   15661    system that are known to be fixed in the 4.4.6 release. This list might
   15662    not be complete (that is, it is possible that some PRs that have been
   15663    fixed are not listed here).
   15664 
   15665 [25]GCC 4.4.7
   15666 
   15667    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   15668    system that are known to be fixed in the 4.4.7 release. This list might
   15669    not be complete (that is, it is possible that some PRs that have been
   15670    fixed are not listed here).
   15671 
   15672 
   15673     For questions related to the use of GCC, please consult these web
   15674     pages and the [27]GCC manuals. If that fails, the
   15675     [28]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15676     web pages and the development of GCC are welcome on our developer
   15677     list at [29]gcc (a] gcc.gnu.org. All of [30]our lists have public
   15678     archives.
   15679 
   15680    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
   15681    distribution of this entire article is permitted in any medium,
   15682    provided this notice is preserved.
   15683 
   15684    These pages are [32]maintained by the GCC team. Last modified
   15685    2025-01-31.
   15686 
   15687 References
   15688 
   15689    1. https://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
   15690    2. https://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
   15691    3. https://gcc.gnu.org/gcc-4.4/porting_to.html
   15692    4. https://gcc.gnu.org/wiki/Graphite
   15693    5. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
   15694    6. https://gcc.gnu.org/gcc-4.4/cxx0x_status.html
   15695    7. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
   15696    8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
   15697    9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
   15698   10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
   15699   11. https://gcc.gnu.org/gcc-4.4/changes.html#targets
   15700   12. https://gcc.gnu.org/gcc-4.4/changes.html#picochip
   15701   13. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.1
   15702   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
   15703   15. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.2
   15704   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
   15705   17. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.3
   15706   18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
   15707   19. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.4
   15708   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
   15709   21. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.5
   15710   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
   15711   23. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.6
   15712   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
   15713   25. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.7
   15714   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
   15715   27. https://gcc.gnu.org/onlinedocs/
   15716   28. mailto:gcc-help (a] gcc.gnu.org
   15717   29. mailto:gcc (a] gcc.gnu.org
   15718   30. https://gcc.gnu.org/lists.html
   15719   31. https://www.fsf.org/
   15720   32. https://gcc.gnu.org/about.html
   15721 ======================================================================
   15722 http://gcc.gnu.org/gcc-4.3/index.html
   15723                              GCC 4.3 Release Series
   15724 
   15725    (This release series is no longer supported.)
   15726 
   15727    Jun 27, 2011
   15728 
   15729    The [1]GNU project and the GCC developers are pleased to announce the
   15730    release of GCC 4.3.6.
   15731 
   15732    This release is a bug-fix release, containing fixes for regressions in
   15733    GCC 4.3.5 relative to previous releases of GCC.
   15734 
   15735 Release History
   15736 
   15737    GCC 4.3.6
   15738           Jun 27, 2011 ([2]changes)
   15739 
   15740    GCC 4.3.5
   15741           May 22, 2010 ([3]changes)
   15742 
   15743    GCC 4.3.4
   15744           August 4, 2009 ([4]changes)
   15745 
   15746    GCC 4.3.3
   15747           January 24, 2009 ([5]changes)
   15748 
   15749    GCC 4.3.2
   15750           August 27, 2008 ([6]changes)
   15751 
   15752    GCC 4.3.1
   15753           June 6, 2008 ([7]changes)
   15754 
   15755    GCC 4.3.0
   15756           March 5, 2008 ([8]changes)
   15757 
   15758 References and Acknowledgements
   15759 
   15760    GCC used to stand for the GNU C Compiler, but since the compiler
   15761    supports several other languages aside from C, it now stands for the
   15762    GNU Compiler Collection.
   15763 
   15764    A list of [9]successful builds is updated as new information becomes
   15765    available.
   15766 
   15767    The GCC developers would like to thank the numerous people that have
   15768    contributed new features, improvements, bug fixes, and other changes as
   15769    well as test results to GCC. This [10]amazing group of volunteers is
   15770    what makes GCC successful.
   15771 
   15772    For additional information about GCC please refer to the [11]GCC
   15773    project web site or contact the [12]GCC development mailing list.
   15774 
   15775    To obtain GCC please use [13]our mirror sites or [14]our version
   15776    control system.
   15777 
   15778 
   15779     For questions related to the use of GCC, please consult these web
   15780     pages and the [15]GCC manuals. If that fails, the
   15781     [16]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15782     web pages and the development of GCC are welcome on our developer
   15783     list at [17]gcc (a] gcc.gnu.org. All of [18]our lists have public
   15784     archives.
   15785 
   15786    Copyright (C) [19]Free Software Foundation, Inc. Verbatim copying and
   15787    distribution of this entire article is permitted in any medium,
   15788    provided this notice is preserved.
   15789 
   15790    These pages are [20]maintained by the GCC team. Last modified
   15791    2022-10-26.
   15792 
   15793 References
   15794 
   15795    1. http://www.gnu.org/
   15796    2. https://gcc.gnu.org/gcc-4.3/changes.html
   15797    3. https://gcc.gnu.org/gcc-4.3/changes.html
   15798    4. https://gcc.gnu.org/gcc-4.3/changes.html
   15799    5. https://gcc.gnu.org/gcc-4.3/changes.html
   15800    6. https://gcc.gnu.org/gcc-4.3/changes.html
   15801    7. https://gcc.gnu.org/gcc-4.3/changes.html
   15802    8. https://gcc.gnu.org/gcc-4.3/changes.html
   15803    9. https://gcc.gnu.org/gcc-4.3/buildstat.html
   15804   10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15805   11. https://gcc.gnu.org/index.html
   15806   12. mailto:gcc (a] gcc.gnu.org
   15807   13. https://gcc.gnu.org/mirrors.html
   15808   14. https://gcc.gnu.org/git.html
   15809   15. https://gcc.gnu.org/onlinedocs/
   15810   16. mailto:gcc-help (a] gcc.gnu.org
   15811   17. mailto:gcc (a] gcc.gnu.org
   15812   18. https://gcc.gnu.org/lists.html
   15813   19. https://www.fsf.org/
   15814   20. https://gcc.gnu.org/about.html
   15815 ======================================================================
   15816 http://gcc.gnu.org/gcc-4.3/changes.html
   15817                              GCC 4.3 Release Series
   15818                         Changes, New Features, and Fixes
   15819 
   15820    The latest release in the 4.3 release series is [1]GCC 4.3.5.
   15821 
   15822 Caveats
   15823 
   15824      * GCC requires the [2]GMP and [3]MPFR libraries for building all the
   15825        various front-end languages it supports. See the [4]prerequisites
   15826        page for version requirements.
   15827      * ColdFire targets now treat long double as having the same format as
   15828        double. In earlier versions of GCC, they used the 68881 long double
   15829        format instead.
   15830      * The m68k-uclinux target now uses the same calling conventions as
   15831        m68k-linux-gnu. You can select the original calling conventions by
   15832        configuring for m68k-uclinuxoldabi instead. Note that
   15833        m68k-uclinuxoldabi also retains the original 80-bit long double on
   15834        ColdFire targets.
   15835      * The -fforce-mem option has been removed because it has had no
   15836        effect in the last few GCC releases.
   15837      * The i386 -msvr3-shlib option has been removed since it is no longer
   15838        used.
   15839      * Fastcall for i386 has been changed not to pass aggregate arguments
   15840        in registers, following Microsoft compilers.
   15841      * Support for the AOF assembler has been removed from the ARM back
   15842        end; this affects only the targets arm-semi-aof and armel-semi-aof,
   15843        which are no longer recognized. We removed these targets without a
   15844        deprecation period because we discovered that they have been
   15845        unusable since GCC 4.0.0.
   15846      * Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*)
   15847        has been removed. This support had been deprecated since GCC 4.0.0.
   15848      * Support for a number of older systems and recently unmaintained or
   15849        untested target ports of GCC has been declared obsolete in GCC 4.3.
   15850        Unless there is activity to revive them, the next release of GCC
   15851        will have their sources permanently removed.
   15852        All GCC ports for the following processor architectures have been
   15853        declared obsolete:
   15854           + Morpho MT (mt-*)
   15855        The following aliases for processor architectures have been
   15856        declared obsolete. Users should use the indicated generic target
   15857        names instead, with compile-time options such as -mcpu or
   15858        configure-time options such as --with-cpu to control the
   15859        configuration more precisely.
   15860           + strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-*
   15861             instead).
   15862           + parisc*-*-* (use hppa*-*-* instead).
   15863           + m680[012]0-*-* (use m68k-*-* instead).
   15864        All GCC ports for the following operating systems have been
   15865        declared obsolete:
   15866           + BeOS (*-*-beos*)
   15867           + kaOS (*-*-kaos*)
   15868           + GNU/Linux using the a.out object format (*-*-linux*aout*)
   15869           + GNU/Linux using version 1 of the GNU C Library
   15870             (*-*-linux*libc1*)
   15871           + Solaris versions before Solaris 7 (*-*-solaris2.[0-6],
   15872             *-*-solaris2.[0-6].*)
   15873           + Miscellaneous System V (*-*-sysv*)
   15874           + WindISS (*-*-windiss*)
   15875        Also, those for some individual systems on particular architectures
   15876        have been obsoleted:
   15877           + UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*)
   15878           + CRIS with a.out object format (cris-*-aout)
   15879           + BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
   15880           + OSF/1 on PA-RISC (hppa1.1-*-osf*)
   15881           + PRO on PA-RISC (hppa1.1-*-pro*)
   15882           + Sequent PTX on IA32 (i[34567]86-sequent-ptx4*,
   15883             i[34567]86-sequent-sysv4*)
   15884           + SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*)
   15885           + UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host
   15886             was previously [5]removed in 2001, leaving only the support
   15887             for UWIN as a target now being deprecated)
   15888           + ChorusOS on PowerPC (powerpc-*-chorusos*)
   15889           + All VAX configurations apart from NetBSD and OpenBSD
   15890             (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*)
   15891      * The [6]-Wconversion option has been modified. Its purpose now is to
   15892        warn for implicit conversions that may alter a value. This new
   15893        behavior is available for both C and C++. Warnings about
   15894        conversions between signed and unsigned integers can be disabled by
   15895        using -Wno-sign-conversion. In C++, they are disabled by default
   15896        unless -Wsign-conversion is explicitly requested. The old behavior
   15897        of -Wconversion, that is, warn for prototypes causing a type
   15898        conversion that is different from what would happen to the same
   15899        argument in the absence of a prototype, has been moved to a new
   15900        option -Wtraditional-conversion, which is only available for C.
   15901      * The -m386, -m486, -mpentium and -mpentiumpro tuning options have
   15902        been removed because they were deprecated for more than 3 GCC major
   15903        releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or
   15904        -mtune=pentiumpro as a replacement.
   15905      * The -funsafe-math-optimizations option now automatically turns on
   15906        -fno-trapping-math in addition to -fno-signed-zeros, as it enables
   15907        reassociation and thus may introduce or remove traps.
   15908      * The -ftree-vectorize option is now on by default under -O3. In
   15909        order to generate code for a SIMD extension, it has to be enabled
   15910        as well: use -maltivec for PowerPC platforms and -msse/-msse2 for
   15911        i?86 and x86_64.
   15912      * More information on porting to GCC 4.3 from previous versions of
   15913        GCC can be found in the [7]porting guide for this release.
   15914 
   15915 General Optimizer Improvements
   15916 
   15917      * The GCC middle-end has been integrated with the MPFR library. This
   15918        allows GCC to evaluate and replace at compile-time calls to
   15919        built-in math functions having constant arguments with their
   15920        mathematically equivalent results. In making use of MPFR, GCC can
   15921        generate correct results regardless of the math library
   15922        implementation or floating point precision of the host platform.
   15923        This also allows GCC to generate identical results regardless of
   15924        whether one compiles in native or cross-compile configurations to a
   15925        particular target. The following built-in functions take advantage
   15926        of this new capability: acos, acosh, asin, asinh, atan2, atan,
   15927        atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1,
   15928        fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10,
   15929        log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh,
   15930        tan, tanh, tgamma, y0, y1 and yn. The float and long double
   15931        variants of these functions (e.g. sinf and sinl) are also handled.
   15932        The sqrt and cabs functions with constant arguments were already
   15933        optimized in prior GCC releases. Now they also use MPFR.
   15934      * A new forward propagation pass on RTL was added. The new pass
   15935        replaces several slower transformations, resulting in compile-time
   15936        improvements as well as better code generation in some cases.
   15937      * A new command-line switch -frecord-gcc-switches has been added to
   15938        GCC, although it is only enabled for some targets. The switch
   15939        causes the command line that was used to invoke the compiler to be
   15940        recorded into the object file that is being created. The exact
   15941        format of this recording is target and binary file format
   15942        dependent, but it usually takes the form of a note section
   15943        containing ASCII text. The switch is related to the -fverbose-asm
   15944        switch, but that one only records the information in the assembler
   15945        output file as comments, so the information never reaches the
   15946        object file.
   15947      * The inliner heuristic is now aware of stack frame consumption. New
   15948        command-line parameters --param large-stack-frame and --param
   15949        large-stack-frame-growth can be used to limit stack frame size
   15950        growth caused by inlining.
   15951      * During feedback directed optimizations, the expected block size the
   15952        memcpy, memset and bzero functions operate on is discovered and for
   15953        cases of commonly used small sizes, specialized inline code is
   15954        generated.
   15955      * __builtin_expect no longer requires its argument to be a compile
   15956        time constant.
   15957      * Interprocedural optimization was reorganized to work on functions
   15958        in SSA form. This enables more precise and cheaper dataflow
   15959        analysis and makes writing interprocedural optimizations easier.
   15960        The following improvements have been implemented on top of this
   15961        framework:
   15962           + Pre-inline optimization: Selected local optimization passes
   15963             are run before the inliner (and other interprocedural passes)
   15964             are executed. This significantly improves the accuracy of code
   15965             growth estimates used by the inliner and reduces the overall
   15966             memory footprint for large compilation units.
   15967           + Early inlining (a simple bottom-up inliner pass inlining only
   15968             functions whose body is smaller than the expected call
   15969             overhead) is now executed with the early optimization passes,
   15970             thus inlining already optimized function bodies into an
   15971             unoptimized function that is subsequently optimized by early
   15972             optimizers. This enables the compiler to quickly eliminate
   15973             abstraction penalty in C++ programs.
   15974           + Interprocedural constant propagation now operate on SSA form
   15975             increasing accuracy of the analysis.
   15976      * A new internal representation for GIMPLE statements has been
   15977        contributed, resulting in compile-time memory savings.
   15978      * The vectorizer was enhanced to support vectorization of outer
   15979        loops, intra-iteration parallelism (loop-aware SLP), vectorization
   15980        of strided accesses and loops with multiple data-types. Run-time
   15981        dependency testing using loop versioning was added. The cost model,
   15982        turned on by -fvect-cost-model, was developed.
   15983 
   15984 New Languages and Language specific improvements
   15985 
   15986      * We have added new command-line options
   15987        -finstrument-functions-exclude-function-list and
   15988        -finstrument-functions-exclude-file-list. They provide more control
   15989        over which functions are annotated by the -finstrument-functions
   15990        option.
   15991 
   15992   C family
   15993 
   15994      * Implicit conversions between generic vector types are now only
   15995        permitted when the two vectors in question have the same number of
   15996        elements and compatible element types. (Note that the restriction
   15997        involves compatible element types, not implicitly-convertible
   15998        element types: thus, a vector type with element type int may not be
   15999        implicitly converted to a vector type with element type unsigned
   16000        int.) This restriction, which is in line with specifications for
   16001        SIMD architectures such as AltiVec, may be relaxed using the flag
   16002        -flax-vector-conversions. This flag is intended only as a
   16003        compatibility measure and should not be used for new code.
   16004      * -Warray-bounds has been added and is now enabled by default for
   16005        -Wall . It produces warnings for array subscripts that can be
   16006        determined at compile time to be always out of bounds.
   16007        -Wno-array-bounds will disable the warning.
   16008      * The constructor and destructor function attributes now accept
   16009        optional priority arguments which control the order in which the
   16010        constructor and destructor functions are run.
   16011      * New [8]command-line options -Wtype-limits, -Wold-style-declaration,
   16012        -Wmissing-parameter-type, -Wempty-body, -Wclobbered and
   16013        -Wignored-qualifiers have been added for finer control of the
   16014        diverse warnings enabled by -Wextra.
   16015      * A new function attribute alloc_size has been added to mark up
   16016        malloc style functions. For constant sized allocations this can be
   16017        used to find out the size of the returned pointer using the
   16018        __builtin_object_size() function for buffer overflow checking and
   16019        similar. This supplements the already built-in malloc and calloc
   16020        constant size handling.
   16021      * Integer constants written in binary are now supported as a GCC
   16022        extension. They consist of a prefix 0b or 0B, followed by a
   16023        sequence of 0 and 1 digits.
   16024      * A new predefined macro __COUNTER__ has been added. It expands to
   16025        sequential integral values starting from 0. In conjunction with the
   16026        ## operator, this provides a convenient means to generate unique
   16027        identifiers.
   16028      * A new command-line option -fdirectives-only has been added. It
   16029        enables a special preprocessing mode which improves the performance
   16030        of applications like distcc and ccache.
   16031      * Fixed-point data types and operators have been added. They are
   16032        based on Chapter 4 of the Embedded-C specification (n1169.pdf).
   16033        Currently, only MIPS targets are supported.
   16034      * Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
   16035        N1241, is now supported as a GCC extension to C for targets
   16036        i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu,
   16037        and x86_64-*-linux-gnu. The feature introduces new data types
   16038        _Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF,
   16039        DD, and DL.
   16040 
   16041   C++
   16042 
   16043      * [9]Experimental support for the upcoming ISO C++ standard, C++0x.
   16044      * -Wc++0x-compat has been added and is now enabled by default for
   16045        -Wall. It produces warnings for constructs whose meaning differs
   16046        between ISO C++ 1998 and C++0x.
   16047      * The -Wparentheses option now works for C++ as it does for C. It
   16048        warns if parentheses are omitted when operators with confusing
   16049        precedence are nested. It also warns about ambiguous else
   16050        statements. Since -Wparentheses is enabled by -Wall, this may cause
   16051        additional warnings with existing C++ code which uses -Wall. These
   16052        new warnings may be disabled by using -Wall -Wno-parentheses.
   16053      * The -Wmissing-declarations now works for C++ as it does for C.
   16054      * The -fvisibility-ms-compat flag was added, to make it easier to
   16055        port larger projects using shared libraries from Microsoft's Visual
   16056        Studio to ELF and Mach-O systems.
   16057      * C++ attribute handling has been overhauled for template arguments
   16058        (ie dependent types). In particular, __attribute__((aligned(T)));
   16059        works for C++ types.
   16060 
   16061     Runtime Library (libstdc++)
   16062 
   16063      * [10]Experimental support for the upcoming ISO C++ standard, C++0x.
   16064      * Support for TR1 mathematical special functions and regular
   16065        expressions.
   16066      * Default what implementations give more elaborate exception strings
   16067        for bad_cast, bad_typeid, bad_exception, and bad_alloc.
   16068      * Header dependencies have been streamlined, reducing unnecessary
   16069        includes and pre-processed bloat.
   16070      * Variadic template implementations of items in <tuple> and
   16071        <functional>.
   16072      * An experimental [11]parallel mode has been added. This is a
   16073        parallel implementation of many C++ Standard library algorithms,
   16074        like std::accumulate, std::for_each, std::transform, or std::sort,
   16075        to give but four examples. These algorithms can be substituted for
   16076        the normal (sequential) libstdc++ algorithms on a piecemeal basis,
   16077        or all existing algorithms can be transformed via the
   16078        -D_GLIBCXX_PARALLEL macro.
   16079      * Debug mode versions of classes in <unordered_set> and
   16080        <unordered_map>.
   16081      * Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are
   16082        now <backward/hash_set> and <backward/hash_map>. This code:
   16083     #include <ext/hash_set>
   16084     __gnu_cxx::hash_set<int> s;
   16085 
   16086        Can be transformed (in order of preference) to:
   16087     #include <tr1/unordered_set>
   16088     std::tr1::unordered_set<int> s;
   16089 
   16090        or
   16091     #include <backward/hash_set>
   16092     __gnu_cxx::hash_set<int> s;
   16093 
   16094        Similar transformations apply to __gnu_cxx::hash_map,
   16095        __gnu_cxx::hash_multimap, __gnu_cxx::hash_set,
   16096        __gnu_cxx::hash_multiset.
   16097 
   16098   Fortran
   16099 
   16100      * Due to the fact that the GMP and MPFR libraries are required for
   16101        all languages, Fortran is no longer special in this regard and is
   16102        available by default.
   16103      * The [12]-fexternal-blas option has been added, which generates
   16104        calls to BLAS routines for intrinsic matrix operations such as
   16105        matmul rather than using the built-in algorithms.
   16106      * Support to give a backtrace (compiler flag -fbacktrace or
   16107        environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems
   16108        only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a
   16109        run-time error occured.
   16110      * GNU Fortran now defines __GFORTRAN__ when it runs the C
   16111        preprocessor (CPP).
   16112      * The [13]-finit-local-zero, -finit-real, -finit-integer,
   16113        -finit-character, and -finit-logical options have been added, which
   16114        can be used to initialize local variables.
   16115      * The intrinsic procedures [14]GAMMA and [15]LGAMMA have been added,
   16116        which calculate the Gamma function and its logarithm. Use EXTERNAL
   16117        gamma if you want to use your own gamma function.
   16118      * GNU Fortran now regards the backslash character as literal (as
   16119        required by the Fortran 2003 standard); using [16]-fbackslash GNU
   16120        Fortran interprets backslashes as C-style escape characters.
   16121      * The [17]interpretation of binary, octal and hexadecimal (BOZ)
   16122        literal constants has been changed. Before they were always
   16123        interpreted as integer; now they are bit-wise transferred as
   16124        argument of INT, REAL, DBLE and CMPLX as required by the Fortran
   16125        2003 standard, and for real and complex variables in DATA
   16126        statements or when directly assigned to real and complex variables.
   16127        Everywhere else and especially in expressions they are still
   16128        regarded as integer constants.
   16129      * Fortran 2003 support has been extended:
   16130           + Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
   16131           + Pointer intent
   16132           + Intrinsic module ISO_ENV_FORTRAN
   16133           + Interoperability with C (ISO C Bindings)
   16134           + ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
   16135             attribute)
   16136           + Fortran 2003 BOZ
   16137 
   16138   Java (GCJ)
   16139 
   16140      * GCJ now uses the Eclipse Java compiler for its Java parsing needs.
   16141        This enables the use of all 1.5 language features, and fixes most
   16142        existing front end bugs.
   16143      * libgcj now supports all 1.5 language features which require runtime
   16144        support: foreach, enum, annotations, generics, and auto-boxing.
   16145      * We've made many changes to the tools shipped with gcj.
   16146           + The old jv-scan tool has been removed. This tool never really
   16147             worked properly. There is no replacement.
   16148           + gcjh has been rewritten. Some of its more obscure options no
   16149             longer work, but are still recognized in an attempt at
   16150             compatibility. gjavah is a new program with similar
   16151             functionality but different command-line options.
   16152           + grmic and grmiregistry have been rewritten. grmid has been
   16153             added.
   16154           + gjar replaces the old fastjar.
   16155           + gjarsigner (used for signing jars), gkeytool (used for key
   16156             management), gorbd (for CORBA), gserialver (computes
   16157             serialization UIDs), and gtnameserv (also for CORBA) are now
   16158             installed.
   16159      * The ability to dump the contents of the java run time heap to a
   16160        file for off-line analysis has been added. The heap dumps may be
   16161        analyzed with the new gc-analyze tool. They may be generated on
   16162        out-of-memory conditions or on demand and are controlled by the new
   16163        run time class gnu.gcj.util.GCInfo.
   16164      * java.util.TimeZone can now read files from /usr/share/zoneinfo to
   16165        provide correct, updated, timezone information. This means that
   16166        packagers no longer have to update libgcj when a time zone change
   16167        is published.
   16168 
   16169 [18]New Targets and Target Specific Improvements
   16170 
   16171   IA-32/x86-64
   16172 
   16173      * Tuning for Intel Core 2 processors is available via -mtune=core2
   16174        and -march=core2.
   16175      * Tuning for AMD Geode processors is available via -mtune=geode and
   16176        -march=geode.
   16177      * Code generation of block move (memcpy) and block set (memset) was
   16178        rewritten. GCC can now pick the best algorithm (loop, unrolled
   16179        loop, instruction with rep prefix or a library call) based on the
   16180        size of the block being copied and the CPU being optimized for. A
   16181        new option -minline-stringops-dynamically has been added. With this
   16182        option string operations of unknown size are expanded such that
   16183        small blocks are copied by in-line code, while for large blocks a
   16184        library call is used. This results in faster code than
   16185        -minline-all-stringops when the library implementation is capable
   16186        of using cache hierarchy hints. The heuristic choosing the
   16187        particular algorithm can be overwritten via -mstringop-strategy.
   16188        Newly also memset of values different from 0 is inlined.
   16189      * GCC no longer places the cld instruction before string operations.
   16190        Both i386 and x86-64 ABI documents mandate the direction flag to be
   16191        clear at the entry of a function. It is now invalid to set the flag
   16192        in asm statement without reseting it afterward.
   16193      * Support for SSSE3 built-in functions and code generation are
   16194        available via -mssse3.
   16195      * Support for SSE4.1 built-in functions and code generation are
   16196        available via -msse4.1.
   16197      * Support for SSE4.2 built-in functions and code generation are
   16198        available via -msse4.2.
   16199      * Both SSE4.1 and SSE4.2 support can be enabled via -msse4.
   16200      * A new set of options -mpc32, -mpc64 and -mpc80 have been added to
   16201        allow explicit control of x87 floating point precision.
   16202      * Support for __float128 (TFmode) IEEE quad type and corresponding
   16203        TCmode IEEE complex quad type is available via the soft-fp library
   16204        on x86_64 targets. This includes basic arithmetic operations
   16205        (addition, subtraction, negation, multiplication and division) on
   16206        __float128 real and TCmode complex values, the full set of IEEE
   16207        comparisons between __float128 values, conversions to and from
   16208        float, double and long double floating point types, as well as
   16209        conversions to and from signed or unsigned integer, signed or
   16210        unsigned long integer and signed or unsigned quad (TImode) integer
   16211        types. Additionally, all operations generate the full set of IEEE
   16212        exceptions and support the full set of IEEE rounding modes.
   16213      * GCC can now utilize the ACML library for vectorizing calls to a set
   16214        of C99 functions on x86_64 if -mveclibabi=acml is specified and you
   16215        link to an ACML ABI compatible library.
   16216 
   16217   ARM
   16218 
   16219      * Compiler and Library support for Thumb-2 and the ARMv7 architecture
   16220        has been added.
   16221 
   16222   [19]CRIS
   16223 
   16224     New features
   16225 
   16226      * Compiler and Library support for the CRIS v32 architecture, as
   16227        found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been
   16228        added.
   16229 
   16230     Configuration changes
   16231 
   16232      * The cris-*-elf target now includes support for CRIS v32, including
   16233        libraries, through the -march=v32 option.
   16234      * A new crisv32-*-elf target defaults to generate code for CRIS v32.
   16235      * A new crisv32-*-linux* target defaults to generate code for CRIS
   16236        v32.
   16237      * The cris-*-aout target has been obsoleted.
   16238 
   16239     Improved support for built-in functions
   16240 
   16241      * GCC can now use the lz and swapwbr instructions to implement the
   16242        __builtin_clz, __builtin_ctz and __builtin_ffs family of functions.
   16243      * __builtin_bswap32 is now implemented using the swapwb instruction,
   16244        when available.
   16245 
   16246   [20]m68k and ColdFire
   16247 
   16248     New features
   16249 
   16250      * Support for several new ColdFire processors has been added. You can
   16251        generate code for them using the new -mcpu option.
   16252      * All targets now support ColdFire processors.
   16253      * m68k-uclinux targets have improved support for C++ constructors and
   16254        destructors, and for shared libraries.
   16255      * It is now possible to set breakpoints on the first or last line of
   16256        a function, even if there are no statements on that line.
   16257 
   16258     Optimizations
   16259 
   16260      * Support for sibling calls has been added.
   16261      * More use is now made of the ColdFire mov3q instruction.
   16262      * __builtin_clz is now implemented using the ff1 ColdFire
   16263        instruction, when available.
   16264      * GCC now honors the -m68010 option. 68010 code now uses clr rather
   16265        than move to zero volatile memory.
   16266      * 68020 targets and above can now use symbol(index.size*scale)
   16267        addresses for indexed array accesses. Earlier compilers would
   16268        always load the symbol into a base register first.
   16269 
   16270     Configuration changes
   16271 
   16272      * All m68k and ColdFire targets now allow the default processor to be
   16273        set at configure time using --with-cpu.
   16274      * A --with-arch configuration option has been added. This option
   16275        allows you to restrict a target to ColdFire or non-ColdFire
   16276        processors.
   16277 
   16278     Preprocessor macros
   16279 
   16280      * An __mcfv*__ macro is now defined for all ColdFire targets.
   16281        (Earlier versions of GCC only defined __mcfv4e__.)
   16282      * __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added.
   16283      * All targets now define __mc68010 and __mc68010__ when generating
   16284        68010 code.
   16285 
   16286     Command-line changes
   16287 
   16288      * New command-line options -march, -mcpu, -mtune and -mhard-float
   16289        have been added. These options apply to both m68k and ColdFire
   16290        targets.
   16291      * -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative
   16292        versions of -mshort, etc.
   16293      * -fforce-addr has been removed. It is now ignored by the compiler.
   16294 
   16295     Other improvements
   16296 
   16297      * ColdFire targets now try to maintain a 4-byte-aligned stack where
   16298        possible.
   16299      * m68k-uclinux targets now try to avoid situations that lead to the
   16300        load-time error: BINFMT_FLAT: reloc outside program.
   16301 
   16302   MIPS
   16303 
   16304     Changes to existing configurations
   16305 
   16306      * libffi and libjava now support all three GNU/Linux ABIs: o32, n32
   16307        and n64. Every GNU/Linux configuration now builds these libraries
   16308        by default.
   16309      * GNU/Linux configurations now generate -mno-shared code unless
   16310        overridden by -fpic, -fPIC, -fpie or -fPIE.
   16311      * mipsisa32*-linux-gnu configurations now generate hard-float code by
   16312        default, just like other mipsisa32* and mips*-linux-gnu
   16313        configurations. You can build a soft-float version of any
   16314        mips*-linux-gnu configuration by passing --with-float=soft to
   16315        configure.
   16316      * mips-wrs-vxworks now supports run-time processes (RTPs).
   16317 
   16318     Changes to existing command-line options
   16319 
   16320      * The -march and -mtune options no longer accept 24k as a processor
   16321        name. Please use 24kc, 24kf2_1 or 24kf1_1 instead.
   16322      * The -march and -mtune options now accept 24kf2_1, 24kef2_1 and
   16323        34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The
   16324        options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for
   16325        24kx, 24kex and 34kx.
   16326 
   16327     New configurations
   16328 
   16329    GCC now supports the following configurations:
   16330      * mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by
   16331        default. Earlier releases also recognized this configuration, but
   16332        they treated it in the same way as mipsisa32*-linux-gnu*. Note that
   16333        you can customize any mips*-linux-gnu* configuration to a
   16334        particular ISA or processor by passing an appropriate --with-arch
   16335        option to configure.
   16336      * mipsisa*-sde-elf*, which provides compatibility with MIPS
   16337        Technologies' SDE toolchains. The configuration uses the SDE
   16338        libraries by default, but you can use it like other newlib-based
   16339        ELF configurations by passing --with-newlib to configure. It is the
   16340        only configuration besides mips64vr*-elf* to build MIPS16 as well
   16341        as non-MIPS16 libraries.
   16342      * mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf*
   16343        configuration, but uses the o32 and o64 ABIs instead of the 32-bit
   16344        and 64-bit forms of the EABI.
   16345 
   16346     New processors and application-specific extensions
   16347 
   16348      * Support for the SmartMIPS ASE is available through the new
   16349        -msmartmips option.
   16350      * Support for revision 2 of the DSP ASE is available through the new
   16351        -mdspr2 option. A new preprocessor macro called __mips_dsp_rev
   16352        indicates the revision of the ASE in use.
   16353      * Support for the 4KS and 74K families of processors is available
   16354        through the -march and -mtune options.
   16355 
   16356     Improved support for built-in functions
   16357 
   16358      * GCC can now use load-linked, store-conditional and sync
   16359        instructions to implement atomic built-in functions such as
   16360        __sync_fetch_and_add. The memory reference must be 4 bytes wide for
   16361        32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
   16362      * GCC can now use the clz and dclz instructions to implement the
   16363        __builtin_ctz and __builtin_ffs families of functions.
   16364      * There is a new __builtin___clear_cache function for flushing the
   16365        instruction cache. GCC expands this function inline on MIPS32
   16366        revision 2 targets, otherwise it calls the function specified by
   16367        -mcache-flush-func.
   16368 
   16369     MIPS16 improvements
   16370 
   16371      * GCC can now compile objects that contain a mixture of MIPS16 and
   16372        non-MIPS16 code. There are two new attributes, mips16 and nomips16,
   16373        for specifying which mode a function should use.
   16374      * A new option called -minterlink-mips16 makes non-MIPS16 code
   16375        link-compatible with MIPS16 code.
   16376      * After many bug fixes, the long-standing MIPS16 -mhard-float support
   16377        should now work fairly reliably.
   16378      * GCC can now use the MIPS16e save and restore instructions.
   16379      * -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled
   16380        with -G0 -fsection-anchors is often smaller than code compiled with
   16381        -G8. However, please note that you must usually compile all objects
   16382        in your application with the same -G option; see the documentation
   16383        of -G for details.
   16384      * A new option called-mcode-readable specifies which instructions are
   16385        allowed to load from the code segment. -mcode-readable=yes is the
   16386        default and says that any instruction may load from the code
   16387        segment. The other alternatives are -mcode-readable=pcrel, which
   16388        says that only PC-relative MIPS16 instructions may load from the
   16389        code segment, and -mcode-readable=no, which says that no
   16390        instruction may do so. Please see the documentation for more
   16391        details, including example uses.
   16392 
   16393     Small-data improvements
   16394 
   16395    There are three new options for controlling small data:
   16396      * -mno-extern-sdata, which disables small-data accesses for
   16397        externally-defined variables. Code compiled with -Gn
   16398        -mno-extern-sdata will be link-compatible with any -G setting
   16399        between -G0 and -Gn inclusive.
   16400      * -mno-local-sdata, which disables the use of small-data sections for
   16401        data that is not externally visible. This option can be a useful
   16402        way of reducing small-data usage in less performance-critical parts
   16403        of an application.
   16404      * -mno-gpopt, which disables the use of the $gp register while still
   16405        honoring the -G limit when placing externally-visible data. This
   16406        option implies -mno-extern-sdata and -mno-local-sdata and it can be
   16407        useful in situations where $gp does not necessarily hold the
   16408        expected value.
   16409 
   16410     Miscellaneous improvements
   16411 
   16412      * There is a new option called -mbranch-cost for tweaking the
   16413        perceived cost of branches.
   16414      * If GCC is configured to use a version of GAS that supports the
   16415        .gnu_attribute directive, it will use that directive to record
   16416        certain properties of the output code. .gnu_attribute is new to GAS
   16417        2.18.
   16418      * There are two new function attributes, near and far, for overriding
   16419        the command-line setting of -mlong-calls on a function-by-function
   16420        basis.
   16421      * -mfp64, which previously required a 64-bit target, now works with
   16422        MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and
   16423        mipsisa*-sde-elf* configurations provide suitable library support.
   16424      * GCC now recognizes the -mdmx and -mmt options and passes them down
   16425        to the assembler. It does nothing else with the options at present.
   16426 
   16427   SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture
   16428   (BEA)
   16429 
   16430      * Support has been added for this new architecture.
   16431 
   16432   RS6000 (POWER/PowerPC)
   16433 
   16434      * Support for the PowerPC 750CL paired-single instructions has been
   16435        added with a new powerpc-*-linux*paired* target configuration. It
   16436        is enabled by an associated -mpaired option and can be accessed
   16437        using new built-in functions.
   16438      * Support for auto-detecting architecture and system configuration to
   16439        auto-select processor optimization tuning.
   16440      * Support for VMX on AIX 5.3 has been added.
   16441      * Support for AIX Version 6.1 has been added.
   16442 
   16443   S/390, zSeries and System z9
   16444 
   16445      * Support for the IBM System z9 EC/BC processor (z9 GA3) has been
   16446        added. When using the -march=z9-ec option, the compiler will
   16447        generate code making use of instructions provided by the decimal
   16448        floating point facility and the floating point conversion facility
   16449        (pfpo). Besides the instructions used to implement decimal floating
   16450        point operations these facilities also contain instructions to move
   16451        between general purpose and floating point registers and to modify
   16452        and copy the sign-bit of floating point values.
   16453      * When the -march=z9-ec option is used the new
   16454        -mhard-dfp/-mno-hard-dfp options can be used to specify whether the
   16455        decimal floating point hardware instructions will be used or not.
   16456        If none of them is given the hardware support is enabled by
   16457        default.
   16458      * The -mstack-guard option can now be omitted when using stack
   16459        checking via -mstack-size in order to let GCC choose a sensible
   16460        stack guard value according to the frame size of each function.
   16461      * Various changes to improve performance of generated code have been
   16462        implemented, including:
   16463           + The condition code set by an add logical with carry
   16464             instruction is now available for overflow checks like: a + b +
   16465             carry < b.
   16466           + The test data class instruction is now used to implement
   16467             sign-bit and infinity checks of binary and decimal floating
   16468             point numbers.
   16469 
   16470   SPARC
   16471 
   16472      * Support for the Sun UltraSPARC T2 (Niagara 2) processor has been
   16473        added.
   16474 
   16475   Xtensa
   16476 
   16477      * Stack unwinding for exception handling now uses by default a
   16478        specialized version of DWARF unwinding. This is not
   16479        binary-compatible with the setjmp/longjmp (sjlj) unwinding used for
   16480        Xtensa with previous versions of GCC.
   16481      * For Xtensa processors that include the Conditional Store option,
   16482        the built-in functions for atomic memory access are now implemented
   16483        using S32C1I instructions.
   16484      * If the Xtensa NSA option is available, GCC will use it to implement
   16485        the __builtin_ctz and __builtin_clz functions.
   16486 
   16487 Documentation improvements
   16488 
   16489      * Existing libstdc++ documentation has been edited and restructured
   16490        into a single DocBook XML manual. The results can be viewed online
   16491        [21]here.
   16492 
   16493 Other significant improvements
   16494 
   16495      * The compiler's --help command-line option has been extended so that
   16496        it now takes an optional set of arguments. These arguments restrict
   16497        the information displayed to specific classes of command-line
   16498        options, and possibly only a subset of those options. It is also
   16499        now possible to replace the descriptive text associated with each
   16500        displayed option with an indication of its current value, or for
   16501        binary options, whether it has been enabled or disabled.
   16502        Here are some examples. The following will display all the options
   16503        controlling warning messages:
   16504       --help=warnings
   16505 
   16506        Whereas this will display all the undocumented, target specific
   16507        options:
   16508       --help=target,undocumented
   16509 
   16510        This sequence of commands will display the binary optimizations
   16511        that are enabled by -O3:
   16512       gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   16513       gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   16514       diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   16515 
   16516      * The configure options --with-pkgversion and --with-bugurl have been
   16517        added. These allow distributors of GCC to include a
   16518        distributor-specific string in manuals and --version output and to
   16519        specify the URL for reporting bugs in their versions of GCC.
   16520 
   16521 [22]GCC 4.3.1
   16522 
   16523    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   16524    system that are known to be fixed in the 4.3.1 release. This list might
   16525    not be complete (that is, it is possible that some PRs that have been
   16526    fixed are not listed here).
   16527 
   16528 Target Specific Changes
   16529 
   16530   IA-32/x86-64
   16531 
   16532     ABI changes
   16533 
   16534      * Starting with GCC 4.3.1, decimal floating point variables are
   16535        aligned to their natural boundaries when they are passed on the
   16536        stack for i386.
   16537 
   16538     Command-line changes
   16539 
   16540      * Starting with GCC 4.3.1, the -mcld option has been added to
   16541        automatically generate a cld instruction in the prologue of
   16542        functions that use string instructions. This option is used for
   16543        backward compatibility on some operating systems and can be enabled
   16544        by default for 32-bit x86 targets by configuring GCC with the
   16545        --enable-cld configure option.
   16546 
   16547 [24]GCC 4.3.2
   16548 
   16549    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   16550    system that are known to be fixed in the 4.3.2 release. This list might
   16551    not be complete (that is, it is possible that some PRs that have been
   16552    fixed are not listed here).
   16553 
   16554 [26]GCC 4.3.3
   16555 
   16556    This is the [27]list of problem reports (PRs) from GCC's bug tracking
   16557    system that are known to be fixed in the 4.3.3 release. This list might
   16558    not be complete (that is, it is possible that some PRs that have been
   16559    fixed are not listed here).
   16560 
   16561 [28]GCC 4.3.4
   16562 
   16563    This is the [29]list of problem reports (PRs) from GCC's bug tracking
   16564    system that are known to be fixed in the 4.3.4 release. This list might
   16565    not be complete (that is, it is possible that some PRs that have been
   16566    fixed are not listed here).
   16567 
   16568 [30]GCC 4.3.5
   16569 
   16570    This is the [31]list of problem reports (PRs) from GCC's bug tracking
   16571    system that are known to be fixed in the 4.3.5 release. This list might
   16572    not be complete (that is, it is possible that some PRs that have been
   16573    fixed are not listed here).
   16574 
   16575 [32]GCC 4.3.6
   16576 
   16577    This is the [33]list of problem reports (PRs) from GCC's bug tracking
   16578    system that are known to be fixed in the 4.3.6 release. This list might
   16579    not be complete (that is, it is possible that some PRs that have been
   16580    fixed are not listed here).
   16581 
   16582 
   16583     For questions related to the use of GCC, please consult these web
   16584     pages and the [34]GCC manuals. If that fails, the
   16585     [35]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16586     web pages and the development of GCC are welcome on our developer
   16587     list at [36]gcc (a] gcc.gnu.org. All of [37]our lists have public
   16588     archives.
   16589 
   16590    Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and
   16591    distribution of this entire article is permitted in any medium,
   16592    provided this notice is preserved.
   16593 
   16594    These pages are [39]maintained by the GCC team. Last modified
   16595    2025-01-31.
   16596 
   16597 References
   16598 
   16599    1. https://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
   16600    2. https://gmplib.org/
   16601    3. https://www.mpfr.org/
   16602    4. https://gcc.gnu.org/install/prerequisites.html
   16603    5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
   16604    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   16605    7. https://gcc.gnu.org/gcc-4.3/porting_to.html
   16606    8. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   16607    9. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   16608   10. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   16609   11. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
   16610   12. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
   16611   13. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
   16612   14. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
   16613   15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
   16614   16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
   16615   17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
   16616   18. https://gcc.gnu.org/gcc-4.3/changes.html#targets
   16617   19. https://gcc.gnu.org/gcc-4.3/changes.html#cris
   16618   20. https://gcc.gnu.org/gcc-4.3/changes.html#m68k
   16619   21. https://gcc.gnu.org/onlinedocs/libstdc++/
   16620   22. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.1
   16621   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
   16622   24. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.2
   16623   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
   16624   26. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.3
   16625   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
   16626   28. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.4
   16627   29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
   16628   30. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.5
   16629   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
   16630   32. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.6
   16631   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
   16632   34. https://gcc.gnu.org/onlinedocs/
   16633   35. mailto:gcc-help (a] gcc.gnu.org
   16634   36. mailto:gcc (a] gcc.gnu.org
   16635   37. https://gcc.gnu.org/lists.html
   16636   38. https://www.fsf.org/
   16637   39. https://gcc.gnu.org/about.html
   16638 ======================================================================
   16639 http://gcc.gnu.org/gcc-4.2/index.html
   16640                              GCC 4.2 Release Series
   16641 
   16642    (This release series is no longer supported.)
   16643 
   16644    May 19, 2008
   16645 
   16646    The [1]GNU project and the GCC developers are pleased to announce the
   16647    release of GCC 4.2.4.
   16648 
   16649    This release is a bug-fix release, containing fixes for regressions in
   16650    GCC 4.2.3 relative to previous releases of GCC.
   16651 
   16652 Release History
   16653 
   16654    GCC 4.2.4
   16655           May 19, 2008 ([2]changes)
   16656 
   16657    GCC 4.2.3
   16658           February 1, 2008 ([3]changes)
   16659 
   16660    GCC 4.2.2
   16661           October 7, 2007 ([4]changes)
   16662 
   16663    GCC 4.2.1
   16664           July 18, 2007 ([5]changes)
   16665 
   16666    GCC 4.2.0
   16667           May 13, 2007 ([6]changes)
   16668 
   16669 References and Acknowledgements
   16670 
   16671    GCC used to stand for the GNU C Compiler, but since the compiler
   16672    supports several other languages aside from C, it now stands for the
   16673    GNU Compiler Collection.
   16674 
   16675    A list of [7]successful builds is updated as new information becomes
   16676    available.
   16677 
   16678    The GCC developers would like to thank the numerous people that have
   16679    contributed new features, improvements, bug fixes, and other changes as
   16680    well as test results to GCC. This [8]amazing group of volunteers is
   16681    what makes GCC successful.
   16682 
   16683    For additional information about GCC please refer to the [9]GCC project
   16684    web site or contact the [10]GCC development mailing list.
   16685 
   16686    To obtain GCC please use [11]our mirror sites or [12]our version
   16687    control system.
   16688 
   16689 
   16690     For questions related to the use of GCC, please consult these web
   16691     pages and the [13]GCC manuals. If that fails, the
   16692     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16693     web pages and the development of GCC are welcome on our developer
   16694     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   16695     archives.
   16696 
   16697    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   16698    distribution of this entire article is permitted in any medium,
   16699    provided this notice is preserved.
   16700 
   16701    These pages are [18]maintained by the GCC team. Last modified
   16702    2022-10-26.
   16703 
   16704 References
   16705 
   16706    1. http://www.gnu.org/
   16707    2. https://gcc.gnu.org/gcc-4.2/changes.html
   16708    3. https://gcc.gnu.org/gcc-4.2/changes.html
   16709    4. https://gcc.gnu.org/gcc-4.2/changes.html
   16710    5. https://gcc.gnu.org/gcc-4.2/changes.html
   16711    6. https://gcc.gnu.org/gcc-4.2/changes.html
   16712    7. https://gcc.gnu.org/gcc-4.2/buildstat.html
   16713    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   16714    9. https://gcc.gnu.org/index.html
   16715   10. mailto:gcc (a] gcc.gnu.org
   16716   11. https://gcc.gnu.org/mirrors.html
   16717   12. https://gcc.gnu.org/git.html
   16718   13. https://gcc.gnu.org/onlinedocs/
   16719   14. mailto:gcc-help (a] gcc.gnu.org
   16720   15. mailto:gcc (a] gcc.gnu.org
   16721   16. https://gcc.gnu.org/lists.html
   16722   17. https://www.fsf.org/
   16723   18. https://gcc.gnu.org/about.html
   16724 ======================================================================
   16725 http://gcc.gnu.org/gcc-4.2/changes.html
   16726                              GCC 4.2 Release Series
   16727                         Changes, New Features, and Fixes
   16728 
   16729 Caveats
   16730 
   16731      * GCC no longer accepts the -fshared-data option. This option has had
   16732        no effect in any GCC 4 release; the targets to which the option
   16733        used to apply had been removed before GCC 4.0.
   16734 
   16735 General Optimizer Improvements
   16736 
   16737      * New command-line options specify the possible relationships among
   16738        parameters and between parameters and global data. For example,
   16739        -fargument-noalias-anything specifies that arguments do not alias
   16740        any other storage.
   16741        Each language will automatically use whatever option is required by
   16742        the language standard. You should not need to use these options
   16743        yourself.
   16744 
   16745 New Languages and Language specific improvements
   16746 
   16747      * [1]OpenMP is now supported for the C, C++ and Fortran compilers.
   16748      * New command-line options -fstrict-overflow and -Wstrict-overflow
   16749        have been added. -fstrict-overflow tells the compiler that it may
   16750        assume that the program follows the strict signed overflow
   16751        semantics permitted for the language: for C and C++ this means that
   16752        the compiler may assume that signed overflow does not occur. For
   16753        example, a loop like
   16754       for (i = 1; i > 0; i *= 2)
   16755 
   16756        is presumably intended to continue looping until i overflows. With
   16757        -fstrict-overflow, the compiler may assume that signed overflow
   16758        will not occur, and transform this into an infinite loop.
   16759        -fstrict-overflow is turned on by default at -O2, and may be
   16760        disabled via -fno-strict-overflow. The -Wstrict-overflow option may
   16761        be used to warn about cases where the compiler assumes that signed
   16762        overflow will not occur. It takes five different levels:
   16763        -Wstrict-overflow=1 to 5. See the [2]documentation for details.
   16764        -Wstrict-overflow=1 is enabled by -Wall.
   16765      * The new command-line option -fno-toplevel-reorder directs GCC to
   16766        emit top-level functions, variables, and asm statements in the same
   16767        order that they appear in the input file. This is intended to
   16768        support existing code which relies on a particular ordering (for
   16769        example, code which uses top-level asm statements to switch
   16770        sections). For new code, it is generally better to use function and
   16771        variable attributes. The -fno-toplevel-reorder option may be used
   16772        for most cases which currently use -fno-unit-at-a-time. The
   16773        -fno-unit-at-a-time option will be removed in some future version
   16774        of GCC. If you know of a case which requires -fno-unit-at-a-time
   16775        which is not fixed by -fno-toplevel-reorder, please open a bug
   16776        report.
   16777 
   16778   C family
   16779 
   16780      * The pragma redefine_extname will now macro expand its tokens for
   16781        compatibility with SunPRO.
   16782      * In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct
   16783        GCC to handle inline functions as specified in the C99 standard. In
   16784        preparation for this, GCC 4.2 will warn about any use of non-static
   16785        inline functions in gnu99 or c99 mode. This new warning may be
   16786        disabled with the new gnu_inline function attribute or the new
   16787        -fgnu89-inline command-line option. Also, GCC 4.2 and later will
   16788        define one of the preprocessor macros __GNUC_GNU_INLINE__ or
   16789        __GNUC_STDC_INLINE__ to indicate the semantics of inline functions
   16790        in the current compilation.
   16791      * A new command-line option -Waddress has been added to warn about
   16792        suspicious uses of memory addresses as, for example, using the
   16793        address of a function in a conditional expression, and comparisons
   16794        against the memory address of a string literal. This warning is
   16795        enabled by -Wall.
   16796 
   16797   C++
   16798 
   16799      * C++ visibility handling has been overhauled.
   16800        Restricted visiblity is propagated from classes to members, from
   16801        functions to local statics, and from templates and template
   16802        arguments to instantiations, unless the latter has explicitly
   16803        declared visibility.
   16804        The visibility attribute for a class must come between the
   16805        class-key and the name, not after the closing brace.
   16806        Attributes are now allowed for enums and elaborated-type-specifiers
   16807        that only declare a type.
   16808        Members of the anonymous namespace are now local to a particular
   16809        translation unit, along with any other declarations which use them,
   16810        though they are still treated as having external linkage for
   16811        language semantics.
   16812      * The (undocumented) extension which permitted templates with default
   16813        arguments to be bound to template template parameters with fewer
   16814        parameters has been removed. For example:
   16815         template <template <typename> class C>
   16816         void f(C<double>) {}
   16817 
   16818         template <typename T, typename U = int>
   16819         struct S {};
   16820 
   16821         template void f(S<double>);
   16822 
   16823        is no longer accepted by G++. The reason this code is not accepted
   16824        is that S is a template with two parameters; therefore, it cannot
   16825        be bound to C which has only one parameter.
   16826      * The <?, >?, <?=, and >?= operators, deprecated in previous GCC
   16827        releases, have been removed.
   16828      * The command-line option -fconst-strings, deprecated in previous GCC
   16829        releases, has been removed.
   16830      * The configure variable enable-__cxa_atexit is now enabled by
   16831        default for more targets. Enabling this variable is necessary in
   16832        order for static destructors to be executed in the correct order,
   16833        but it depends upon the presence of a non-standard C library in the
   16834        target library in order to work. The variable is now enabled for
   16835        more targets which are known to have suitable C libraries.
   16836      * -Wextra will produce warnings for if statements with a semicolon as
   16837        the only body, to catch code like:
   16838          if (a);
   16839             return 1;
   16840          return 0;
   16841 
   16842        To suppress the warning in valid cases, use { } instead.
   16843      * The C++ front end now also produces strict aliasing warnings when
   16844        -fstrict-aliasing -Wstrict-aliasing is in effect.
   16845 
   16846     Runtime Library (libstdc++)
   16847 
   16848      * Added support for TR1 <random>, <complex>, and C compatibility
   16849        headers. In addition, a lock-free version of shared_ptr was
   16850        contributed as part of Phillip Jordan's Google Summer of Code
   16851        project on lock-free containers.
   16852      * In association with the Summer of Code work on lock-free
   16853        containers, the interface for atomic builtins was adjusted,
   16854        creating simpler alternatives for non-threaded code paths. Also,
   16855        usage was consolidated and all elements were moved from namespace
   16856        std to namespace__gnu_cxx. Affected interfaces are the functions
   16857        __exchange_and_add, __atomic_add, and the objects __mutex,
   16858        __recursive_mutex, and __scoped_lock.
   16859      * Support for versioning weak symbol names via namespace association
   16860        was added. However, as this changes the names of exported symbols,
   16861        this is turned off by default in the current ABI. Intrepid users
   16862        can enable this feature by using
   16863        --enable-symvers=gnu-versioned-namespace during configuration.
   16864      * Revised, simplified, and expanded policy-based associative
   16865        containers, including data types for tree and trie forms
   16866        (basic_tree, tree, trie), lists (list_update), and both
   16867        collision-chaining and probing hash-based containers
   16868        (basic_hash_table, cc_hash_table, gp_hash_table). More details per
   16869        the [3]documentation.
   16870      * The implementation of the debug mode was modified, whereby the
   16871        debug namespaces were nested inside of namespace std and namespace
   16872        __gnu_cxx in order to resolve some long standing corner cases
   16873        involving name lookup. Debug functionality from the policy-based
   16874        data structures was consolidated and enabled with the single macro,
   16875        _GLIBCXX_DEBUG. See PR 26142 for more information.
   16876      * Added extensions for type traits: __conditional_type,
   16877        __numeric_traits, __add_unsigned, __removed_unsigned, __enable_if.
   16878      * Added a typelist implementation for compile-time meta-programming.
   16879        Elements for typelist construction and operation can be found
   16880        within namespace __gnu_cxx::typelist.
   16881      * Added a new allocator, __gnu_cxx::throw_allocator, for testing
   16882        exception-safety.
   16883      * Enabled library-wide visibility control, allowing -fvisibility to
   16884        be used.
   16885      * Consolidated all nested namespaces and the conversion of
   16886        __gnu_internal implementation-private details to anonymous
   16887        namespaces whenever possible.
   16888      * Implemented LWG resolutions DR 431 and DR 538.
   16889 
   16890   Fortran
   16891 
   16892      * Support for allocatable components has been added (TR 15581 and
   16893        Fortran 2003).
   16894      * Support for the Fortran 2003 streaming IO extension has been added.
   16895      * The GNU Fortran compiler now uses 4-byte record markers by default
   16896        for unformatted files to be compatible with g77 and most other
   16897        compilers. The implementation allows for records greater than 2 GB
   16898        and is compatible with several other compilers. Older versions of
   16899        gfortran used 8-byte record markers by default (on most systems).
   16900        In order to change the length of the record markers, e.g. to read
   16901        unformatted files created by older gfortran versions, the
   16902        [4]-frecord-marker=8 option can be used.
   16903 
   16904   Java (GCJ)
   16905 
   16906      * A new command-line option -static-libgcj has been added for targets
   16907        that use a linker compatible with GNU Binutils. As its name
   16908        implies, this causes libgcj to be linked statically. In some cases
   16909        this causes the resulting executable to start faster and use less
   16910        memory than if the shared version of libgcj were used. However
   16911        caution should be used as it can also cause essential parts of the
   16912        library to be omitted. Some of these issues are discussed in:
   16913        [5]https://gcc.gnu.org/wiki/Statically_linking_libgcj
   16914      * fastjar is no longer bundled with GCC. To build libgcj, you will
   16915        need either InfoZIP (both zip and unzip) or an external jar
   16916        program. In the former case, the GCC build will install a jar shell
   16917        script that is based on InfoZIP and provides the same functionality
   16918        as fastjar.
   16919 
   16920 [6]New Targets and Target Specific Improvements
   16921 
   16922   IA-32/x86-64
   16923 
   16924      * -mtune=generic can now be used to generate code running well on
   16925        common x86 chips. This includes AMD Athlon, AMD Opteron, Intel
   16926        Pentium-M, Intel Pentium 4 and Intel Core 2.
   16927      * -mtune=native and -march=native will produce code optimized for the
   16928        host architecture as detected using the cpuid instruction.
   16929      * Added a new command-line option -fstackrealign and and
   16930        __attribute__ ((force_align_arg_pointer)) to realign the stack at
   16931        runtime. This allows functions compiled with a vector-aligned stack
   16932        to be invoked from legacy objects that keep only word-alignment.
   16933 
   16934   SPARC
   16935 
   16936      * The default CPU setting has been changed from V7 to V9 in 32-bit
   16937        mode on Solaris 7 and above. This is already the case in 64-bit
   16938        mode. It can be overridden by specifying --with-cpu at configure
   16939        time.
   16940      * Back-end support of built-in functions for atomic memory access has
   16941        been implemented.
   16942      * Support for the Sun UltraSPARC T1 (Niagara) processor has been
   16943        added.
   16944 
   16945   M32C
   16946 
   16947      * Various bug fixes have made some functions (notably, functions
   16948        returning structures) incompatible with previous releases.
   16949        Recompiling all libraries is recommended. Note that code quality
   16950        has considerably improved since 4.1, making a recompile even more
   16951        beneficial.
   16952 
   16953   MIPS
   16954 
   16955      * Added support for the Broadcom SB-1A core.
   16956 
   16957   IA-64
   16958 
   16959      * Added support for IA-64 data and control speculation. By default
   16960        speculation is enabled only during second scheduler pass. A number
   16961        of machine flags was introduced to control the usage of speculation
   16962        for both scheduler passes.
   16963 
   16964   HPPA
   16965 
   16966      * Added Java language support (libffi and libjava) for 32-bit HP-UX
   16967        11 target.
   16968 
   16969 [7]Obsolete Systems
   16970 
   16971 Documentation improvements
   16972 
   16973   PDF Documentation
   16974 
   16975      * A make pdf target has been added to the top-level makefile,
   16976        enabling automated production of PDF documentation files.
   16977        (Front-ends external to GCC should modify their Make-lang.in file
   16978        to add a lang.pdf: target.)
   16979 
   16980 Other significant improvements
   16981 
   16982   Build system improvements
   16983 
   16984      * All the components of the compiler are now bootstrapped by default.
   16985        This improves the resilience to bugs in the system compiler or
   16986        binary compatibility problems, as well as providing better testing
   16987        of GCC 4.2 itself. In addition, if you build the compiler from a
   16988        combined tree, the assembler, linker, etc. will also be
   16989        bootstrapped (i.e. built with themselves).
   16990        You can disable this behavior, and go back to the pre-GCC 4.2 set
   16991        up, by configuring GCC with --disable-bootstrap.
   16992      * The rules that configure follows to find target tools resemble more
   16993        closely the locations that the built compiler will search. In
   16994        addition, you can use the new configure option --with-target-tools
   16995        to specify where to find the target tools used during the build,
   16996        without affecting what the built compiler will use.
   16997        This can be especially useful when building packages of GCC. For
   16998        example, you may want to build GCC with GNU as or ld, even if the
   16999        resulting compiler to work with the native assembler and linker. To
   17000        do so, you can use --with-target-tools to point to the native
   17001        tools.
   17002 
   17003   Incompatible changes to the build system
   17004 
   17005      * Front-ends external to GCC should modify their Make-lang.in file to
   17006        replace double-colon rules (e.g. dvi::) with normal rules (like
   17007        lang.dvi:). Front-end makefile hooks do not use double-colon rules
   17008        anymore.
   17009      * Up to GCC 4.1, a popular way to specify the target tools used
   17010        during the build was to create directories named gas, binutils,
   17011        etc. in the build tree, and create links to the tools from there.
   17012        This does not work any more when the compiler is bootstrapped. The
   17013        new configure option --with-target-tools provides a better way to
   17014        achieve the same effect, and works for all native and cross
   17015        settings.
   17016 
   17017 
   17018     For questions related to the use of GCC, please consult these web
   17019     pages and the [8]GCC manuals. If that fails, the
   17020     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17021     web pages and the development of GCC are welcome on our developer
   17022     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   17023     archives.
   17024 
   17025    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   17026    distribution of this entire article is permitted in any medium,
   17027    provided this notice is preserved.
   17028 
   17029    These pages are [13]maintained by the GCC team. Last modified
   17030    2025-01-31.
   17031 
   17032 References
   17033 
   17034    1. https://gcc.gnu.org/projects/gomp/
   17035    2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   17036    3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
   17037    4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
   17038    5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
   17039    6. https://gcc.gnu.org/gcc-4.2/changes.html#targets
   17040    7. https://gcc.gnu.org/gcc-4.2/changes.html#obsolete_systems
   17041    8. https://gcc.gnu.org/onlinedocs/
   17042    9. mailto:gcc-help (a] gcc.gnu.org
   17043   10. mailto:gcc (a] gcc.gnu.org
   17044   11. https://gcc.gnu.org/lists.html
   17045   12. https://www.fsf.org/
   17046   13. https://gcc.gnu.org/about.html
   17047 ======================================================================
   17048 http://gcc.gnu.org/gcc-4.1/index.html
   17049                              GCC 4.1 Release Series
   17050 
   17051    (This release series is no longer supported.)
   17052 
   17053    February 13, 2007
   17054 
   17055    The [1]GNU project and the GCC developers are pleased to announce the
   17056    release of GCC 4.1.2.
   17057 
   17058    This release is a bug-fix release, containing fixes for regressions in
   17059    GCC 4.1.1 relative to previous releases of GCC.
   17060 
   17061 Release History
   17062 
   17063    GCC 4.1.2
   17064           February 13, 2007 ([2]changes)
   17065 
   17066    GCC 4.1.1
   17067           May 24, 2006 ([3]changes)
   17068 
   17069    GCC 4.1.0
   17070           February 28, 2006 ([4]changes)
   17071 
   17072 References and Acknowledgements
   17073 
   17074    GCC used to stand for the GNU C Compiler, but since the compiler
   17075    supports several other languages aside from C, it now stands for the
   17076    GNU Compiler Collection.
   17077 
   17078    A list of [5]successful builds is updated as new information becomes
   17079    available.
   17080 
   17081    The GCC developers would like to thank the numerous people that have
   17082    contributed new features, improvements, bug fixes, and other changes as
   17083    well as test results to GCC. This [6]amazing group of volunteers is
   17084    what makes GCC successful.
   17085 
   17086    For additional information about GCC please refer to the [7]GCC project
   17087    web site or contact the [8]GCC development mailing list.
   17088 
   17089    To obtain GCC please use [9]our mirror sites or [10]our version control
   17090    system.
   17091 
   17092 
   17093     For questions related to the use of GCC, please consult these web
   17094     pages and the [11]GCC manuals. If that fails, the
   17095     [12]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17096     web pages and the development of GCC are welcome on our developer
   17097     list at [13]gcc (a] gcc.gnu.org. All of [14]our lists have public
   17098     archives.
   17099 
   17100    Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
   17101    distribution of this entire article is permitted in any medium,
   17102    provided this notice is preserved.
   17103 
   17104    These pages are [16]maintained by the GCC team. Last modified
   17105    2022-10-26.
   17106 
   17107 References
   17108 
   17109    1. http://www.gnu.org/
   17110    2. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   17111    3. https://gcc.gnu.org/gcc-4.1/changes.html
   17112    4. https://gcc.gnu.org/gcc-4.1/changes.html
   17113    5. https://gcc.gnu.org/gcc-4.1/buildstat.html
   17114    6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   17115    7. https://gcc.gnu.org/index.html
   17116    8. mailto:gcc (a] gcc.gnu.org
   17117    9. https://gcc.gnu.org/mirrors.html
   17118   10. https://gcc.gnu.org/git.html
   17119   11. https://gcc.gnu.org/onlinedocs/
   17120   12. mailto:gcc-help (a] gcc.gnu.org
   17121   13. mailto:gcc (a] gcc.gnu.org
   17122   14. https://gcc.gnu.org/lists.html
   17123   15. https://www.fsf.org/
   17124   16. https://gcc.gnu.org/about.html
   17125 ======================================================================
   17126 http://gcc.gnu.org/gcc-4.1/changes.html
   17127                              GCC 4.1 Release Series
   17128                         Changes, New Features, and Fixes
   17129 
   17130    The latest release in the 4.1 release series is [1]GCC 4.1.2.
   17131 
   17132 Caveats
   17133 
   17134 General Optimizer Improvements
   17135 
   17136      * GCC now has infrastructure for inter-procedural optimizations and
   17137        the following inter-procedural optimizations are implemented:
   17138           + Profile guided inlining. When doing profile feedback guided
   17139             optimization, GCC can now use the profile to make better
   17140             informed decisions on whether inlining of a function is
   17141             profitable or not. This means that GCC will no longer inline
   17142             functions at call sites that are not executed very often, and
   17143             that functions at hot call sites are more likely to be
   17144             inlined.
   17145             A new parameter min-inline-recursive-probability is also now
   17146             available to throttle recursive inlining of functions with
   17147             small average recursive depths.
   17148           + Discovery of pure and const functions, a form of side-effects
   17149             analysis. While older GCC releases could also discover such
   17150             special functions, the new IPA-based pass runs earlier so that
   17151             the results are available to more optimizers. The pass is also
   17152             simply more powerful than the old one.
   17153           + Analysis of references to static variables and type escape
   17154             analysis, also forms of side-effects analysis. The results of
   17155             these passes allow the compiler to be less conservative about
   17156             call-clobbered variables and references. This results in more
   17157             redundant loads being eliminated and in making static
   17158             variables candidates for register promotion.
   17159           + Improvement of RTL-based alias analysis. The results of type
   17160             escape analysis are fed to the RTL type-based alias analyzer,
   17161             allowing it to disambiguate more memory references.
   17162           + Interprocedural constant propagation and function versioning.
   17163             This pass looks for functions that are always called with the
   17164             same constant value for one or more of the function arguments,
   17165             and propagates those constants into those functions.
   17166           + GCC will now eliminate static variables whose usage was
   17167             optimized out.
   17168           + -fwhole-program --combine can now be used to make all
   17169             functions in program static allowing whole program
   17170             optimization. As an exception, the main function and all
   17171             functions marked with the new externally_visible attribute are
   17172             kept global so that programs can link with runtime libraries.
   17173      * GCC can now do a form of partial dead code elimination (PDCE) that
   17174        allows code motion of expressions to the paths where the result of
   17175        the expression is actually needed. This is not always a win, so the
   17176        pass has been limited to only consider profitable cases. Here is an
   17177        example:
   17178     int foo (int *, int *);
   17179     int
   17180     bar (int d)
   17181     {
   17182       int a, b, c;
   17183       b = d + 1;
   17184       c = d + 2;
   17185       a = b + c;
   17186       if (d)
   17187         {
   17188           foo (&b, &c);
   17189           a = b + c;
   17190         }
   17191       printf ("%d\n", a);
   17192     }
   17193 
   17194        The a = b + c can be sunk to right before the printf. Normal code
   17195        sinking will not do this, it will sink the first one above into the
   17196        else-branch of the conditional jump, which still gives you two
   17197        copies of the code.
   17198      * GCC now has a value range propagation pass. This allows the
   17199        compiler to eliminate bounds checks and branches. The results of
   17200        the pass can also be used to accurately compute branch
   17201        probabilities.
   17202      * The pass to convert PHI nodes to straight-line code (a form of
   17203        if-conversion for GIMPLE) has been improved significantly. The two
   17204        most significant improvements are an improved algorithm to
   17205        determine the order in which the PHI nodes are considered, and an
   17206        improvement that allow the pass to consider if-conversions of basic
   17207        blocks with more than two predecessors.
   17208      * Alias analysis improvements. GCC can now differentiate between
   17209        different fields of structures in Tree-SSA's virtual operands form.
   17210        This lets stores/loads from non-overlapping structure fields not
   17211        conflict. A new algorithm to compute points-to sets was contributed
   17212        that can allows GCC to see now that p->a and p->b, where p is a
   17213        pointer to a structure, can never point to the same field.
   17214      * Various enhancements to auto-vectorization:
   17215           + Incrementally preserve SSA form when vectorizing.
   17216           + Incrementally preserve loop-closed form when vectorizing.
   17217           + Improvements to peeling for alignment: generate better code
   17218             when the misalignment of an access is known at compile time,
   17219             or when different accesses are known to have the same
   17220             misalignment, even if the misalignment amount itself is
   17221             unknown.
   17222           + Consider dependence distance in the vectorizer.
   17223           + Externalize generic parts of data reference analysis to make
   17224             this analysis available to other passes.
   17225           + Vectorization of conditional code.
   17226           + Reduction support.
   17227      * GCC can now partition functions in sections of hot and cold code.
   17228        This can significantly improve performance due to better
   17229        instruction cache locality. This feature works best together with
   17230        profile feedback driven optimization.
   17231      * A new pass to avoid saving of unneeded arguments to the stack in
   17232        vararg functions if the compiler can prove that they will not be
   17233        needed.
   17234      * Transition of basic block profiling to tree level implementation
   17235        has been completed. The new implementation should be considerably
   17236        more reliable (hopefully avoiding profile mismatch errors when
   17237        using -fprofile-use or -fbranch-probabilities) and can be used to
   17238        drive higher level optimizations, such as inlining.
   17239        The -ftree-based-profiling command-line option was removed and
   17240        -fprofile-use now implies disabling old RTL level loop optimizer
   17241        (-fno-loop-optimize). Speculative prefetching optimization
   17242        (originally enabled by -fspeculative-prefetching) was removed.
   17243 
   17244 New Languages and Language specific improvements
   17245 
   17246   C and Objective-C
   17247 
   17248      * The old Bison-based C and Objective-C parser has been replaced by a
   17249        new, faster hand-written recursive-descent parser.
   17250 
   17251   Ada
   17252 
   17253      * The build infrastructure for the Ada runtime library and tools has
   17254        been changed to be better integrated with the rest of the build
   17255        infrastructure of GCC. This should make doing cross builds of Ada a
   17256        bit easier.
   17257 
   17258   [2]C++
   17259 
   17260      * ARM-style name-injection of friend declarations is no longer the
   17261        default. For example:
   17262           struct S {
   17263             friend void f();
   17264           };
   17265 
   17266           void g() { f(); }
   17267        will not be accepted; instead a declaration of f will need to be
   17268        present outside of the scope of S. The new -ffriend-injection
   17269        option will enable the old behavior.
   17270      * The (undocumented) extension which permitted templates with default
   17271        arguments to be bound to template template parameters with fewer
   17272        parameters has been deprecated, and will be removed in the next
   17273        major release of G++. For example:
   17274        template <template <typename> class C>
   17275        void f(C<double>) {}
   17276 
   17277        template <typename T, typename U = int>
   17278        struct S {};
   17279 
   17280        template void f(S<double>);
   17281 
   17282        makes use of the deprecated extension. The reason this code is not
   17283        valid ISO C++ is that S is a template with two parameters;
   17284        therefore, it cannot be bound to C which has only one parameter.
   17285 
   17286     Runtime Library (libstdc++)
   17287 
   17288      * Optimization work:
   17289           + A new implementation of std::search_n is provided, better
   17290             performing in case of random access iterators.
   17291           + Added further efficient specializations of istream functions,
   17292             i.e., character array and string extractors.
   17293           + Other smaller improvements throughout.
   17294      * Policy-based associative containers, designed for high-performance,
   17295        flexibility and semantic safety are delivered in ext/pb_assoc.
   17296      * A versatile string class, __gnu_cxx::__versa_string, providing
   17297        facilities conforming to the standard requirements for
   17298        basic_string, is delivered in <ext/vstring.h>. In particular:
   17299           + Two base classes are provided: the default one avoids
   17300             reference counting and is optimized for short strings; the
   17301             alternate one, still uses it while improving in a few low
   17302             level areas (e.g., alignment). See vstring_fwd.h for some
   17303             useful typedefs.
   17304           + Various algorithms have been rewritten (e.g., replace), the
   17305             code streamlined and simple optimizations added.
   17306           + Option 3 of DR 431 is implemented for both available bases,
   17307             thus improving the support for stateful allocators.
   17308      * As usual, many bugs have been fixed (e.g., libstdc++/13583,
   17309        libstdc++/23953) and LWG resolutions put into effect for the first
   17310        time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
   17311        Issue 6.19). The implementation status of TR1 is now tracked in the
   17312        docs in tr1.html.
   17313 
   17314   Objective-C++
   17315 
   17316      * A new language front end for Objective-C++ has been added. This
   17317        language allows users to mix the object oriented features of
   17318        Objective-C with those of C++.
   17319 
   17320   Java (GCJ)
   17321 
   17322      * Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
   17323        features (plus some 0.20 bug-fixes)
   17324           + Networking
   17325                o The java.net.HttpURLConnection implementation no longer
   17326                  buffers the entire response body in memory. This means
   17327                  that response bodies larger than available memory can now
   17328                  be handled.
   17329           + (N)IO
   17330                o NIO FileChannel.map implementation, fast bulk put
   17331                  implementation for DirectByteBuffer (speeds up this
   17332                  method 10x).
   17333                o FileChannel.lock() and FileChannel.force() implemented.
   17334           + XML
   17335                o gnu.xml fix for nodes created outside a namespace
   17336                  context.
   17337                o Add support for output indenting and
   17338                  cdata-section-elements output instruction in
   17339                  xml.transform.
   17340                o xml.xpath corrections for cases where elements/attributes
   17341                  might have been created in non-namespace-aware mode.
   17342                  Corrections to handling of XSL variables and minor
   17343                  conformance updates.
   17344           + AWT
   17345                o GNU JAWT implementation, the AWT Native Interface, which
   17346                  allows direct access to native screen resources from
   17347                  within a Canvas's paint method. GNU Classpath Examples
   17348                  comes with a Demo, see libjava/classpath/examples/README.
   17349                o awt.datatransfer updated to 1.5 with support for
   17350                  FlavorEvents. The gtk+ awt peers now allow copy/paste of
   17351                  text, images, URIs/files and serialized objects with
   17352                  other applications and tracking clipboard change events
   17353                  with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
   17354                  objects are supported). A GNU Classpath Examples
   17355                  datatransfer Demo was added to show the new
   17356                  functionality.
   17357                o Split gtk+ awt peers event handling in two threads and
   17358                  improve gdk lock handling (solves several awt lock ups).
   17359                o Speed up awt Image loading.
   17360                o Better gtk+ scrollbar peer implementation when using gtk+
   17361                  >= 2.6.
   17362                o Handle image loading errors correctly for gdkpixbuf and
   17363                  MediaTracker.
   17364                o Better handle GDK lock. Properly prefix gtkpeer native
   17365                  functions (cp_gtk).
   17366                o GdkGraphics2D has been updated to use Cairo 0.5.x or
   17367                  higher.
   17368                o BufferedImage and GtkImage rewrites. All image drawing
   17369                  operations should now work correctly (flipping requires
   17370                  gtk+ >= 2.6)
   17371                o When gtk+ 2.6 or higher is installed the default log
   17372                  handler will produce stack traces whenever a WARNING,
   17373                  CRITICAL or ERROR message is produced.
   17374           + Free Swing
   17375                o The RepaintManager has been reworked for more efficient
   17376                  painting, especially for large GUIs.
   17377                o The layout manager OverlayLayout has been implemented,
   17378                  the BoxLayout has been rewritten to make use of the
   17379                  SizeRequirements utility class and caching for more
   17380                  efficient layout.
   17381                o Improved accessibility support.
   17382                o Significant progress has been made in the implementation
   17383                  of the javax.swing.plaf.metal package, with most UI
   17384                  delegates in a working state now. Please test this with
   17385                  your own applications and provide feedback that will help
   17386                  us to improve this package.
   17387                o The GUI demo (gnu.classpath.examples.swing.Demo) has been
   17388                  extended to highlight various features in our Free Swing
   17389                  implementation. And it includes a look and feel switcher
   17390                  for Metal (default), Ocean and GNU themes.
   17391                o The javax.swing.plaf.multi package is now implemented.
   17392                o Editing and several key actions for JTree and JTable were
   17393                  implemented.
   17394                o Lots of icons and look and feel improvements for Free
   17395                  Swing basic and metal themes were added. Try running the
   17396                  GNU Classpath Swing Demo in examples
   17397                  (gnu.classpath.examples.swing.Demo) with:
   17398                  -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFee
   17399                  l or
   17400                  -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFee
   17401                  l
   17402                o Start of styled text capabilites for java.swing.text.
   17403                o DefaultMutableTreeNode pre-order, post-order, depth-first
   17404                  and breadth-first traversal enumerations implemented.
   17405                o JInternalFrame colors and titlebar draw properly.
   17406                o JTree is working up to par (icons, selection and keyboard
   17407                  traversal).
   17408                o JMenus were made more compatible in visual and
   17409                  programmatic behavior.
   17410                o JTable changeSelection and multiple selections
   17411                  implemented.
   17412                o JButton and JToggleButton change states work properly
   17413                  now.
   17414                o JFileChooser fixes.
   17415                o revalidate() and repaint() fixes which make Free Swing
   17416                  much more responsive.
   17417                o MetalIconFactory implemented.
   17418                o Free Swing Top-Level Compatibility. JFrame, JDialog,
   17419                  JApplet, JInternalFrame, and JWindow are now 1.5
   17420                  compatible in the sense that you can call add() and
   17421                  setLayout() directly on them, which will have the same
   17422                  effect as calling getContentPane().add() and
   17423                  getContentPane().setLayout().
   17424                o The JTree interface has been completed. JTrees now
   17425                  recognizes mouse clicks and selections work.
   17426                o BoxLayout works properly now.
   17427                o Fixed GrayFilter to actually work.
   17428                o Metal SplitPane implemented.
   17429                o Lots of Free Swing text and editor stuff work now.
   17430           + Free RMI and Corba
   17431                o Andrew Watson, Vice President and Technical Director of
   17432                  the Object Management Group, has officially assigned us
   17433                  20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
   17434                  mark remote classpath-specific system exceptions.
   17435                  Obtaining the VMCID means that GNU Classpath now is a
   17436                  recogniseable type of node in a highly interoperable
   17437                  CORBA world.
   17438                o GNU Classpath now includes the first working draft to
   17439                  support the RMI over IIOP protocol. The current
   17440                  implementation is capable of remote invocations,
   17441                  transferring various Serializables and Externalizables
   17442                  via RMI-IIOP protocol. It can flatten graphs and, at
   17443                  least for the simple cases, is interoperable with 1.5
   17444                  JDKs.
   17445                o org.omg.PortableInterceptor and related functionality in
   17446                  other packages is now implemented:
   17447                     # The sever and client interceptors work as required
   17448                       since 1.4.
   17449                     # The IOR interceptor works as needed for 1.5.
   17450                o The org.omg.DynamicAny package is completed and passes
   17451                  the prepared tests.
   17452                o The Portable Object Adapter should now support the output
   17453                  of the recent IDL to java compilers. These compilers now
   17454                  generate servants and not CORBA objects as before, making
   17455                  the output depend on the existing POA implementation.
   17456                  Completing POA means that such code can already be tried
   17457                  to run on Classpath. Our POA is tested for the following
   17458                  usager scenarios:
   17459                     # POA converts servant to the CORBA object.
   17460                     # Servant provides to the CORBA object.
   17461                     # POA activates new CORBA object with the given Object
   17462                       Id (byte array) that is later accessible for the
   17463                       servant.
   17464                     # During the first call, the ServantActivator provides
   17465                       servant for this and all subsequent calls on the
   17466                       current object.
   17467                     # During each call, the ServantLocator provides
   17468                       servant for this call only.
   17469                     # ServantLocator or ServantActivator forwards call to
   17470                       another server.
   17471                     # POA has a single servant, responsible for all
   17472                       objects.
   17473                     # POA has a default servant, but some objects are
   17474                       explicitly connected to they specific servants.
   17475                  The POA is verified using tests from the former
   17476                  cost.omg.org.
   17477                o The CORBA implementation is now a working prototype that
   17478                  should support features up to 1.3 inclusive. We invite
   17479                  groups writing CORBA dependent applications to try
   17480                  Classpath implementation, reporting any possible bugs.
   17481                  The CORBA prototype is interoperable with Sun's
   17482                  implementation v 1.4, transferring object references,
   17483                  primitive types, narrow and wide strings, arrays,
   17484                  structures, trees, abstract interfaces and value types
   17485                  (feature of CORBA 2.3) between these two platforms.
   17486                  Remote exceptions are transferred and handled correctly.
   17487                  The stringified object references (IORs) from various
   17488                  sources are parsed as required. The transient (for
   17489                  current session) and permanent (till jre restart)
   17490                  redirections work. Both Little and Big Endian encoded
   17491                  messages are accepted. The implementation is verified
   17492                  using tests from the former cost.omg.org. The current
   17493                  release includes working examples (see the examples
   17494                  directory), demonstrating the client-server
   17495                  communication, using either CORBA Request or IDL-based
   17496                  stub (usually generated by a IDL to java compiler). These
   17497                  examples also show how to use the Classpath CORBA naming
   17498                  service. The IDL to java compiler is not yet written, but
   17499                  as our library must be compatible, it naturally accepts
   17500                  the output of other idlj implementations.
   17501           + Misc
   17502                o Updated TimeZone data against Olson tzdata2005l.
   17503                o Make zip and jar packages UTF-8 clean.
   17504                o "native" code builds and compiles (warning free) on
   17505                  Darwin and Solaris.
   17506                o java.util.logging.FileHandler now rotates files.
   17507                o Start of a generic JDWP framework in gnu/classpath/jdwp.
   17508                  This is unfinished, but feedback (at classpath (a] gnu.org)
   17509                  from runtime hackers is greatly appreciated. Although
   17510                  most of the work is currently being done around gcj/gij
   17511                  we want this framework to be as VM neutral as possible.
   17512                  Early design is described in:
   17513                  [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   17514                o QT4 AWT peers, enable by giving configure
   17515                  --enable-qt-peer. Included, but not ready for production
   17516                  yet. They are explicitly disabled and not supported. But
   17517                  if you want to help with the development of these new
   17518                  features we are interested in feedback. You will have to
   17519                  explicitly enable them to try them out (and they will
   17520                  most likely contain bugs).
   17521                o Documentation fixes all over the place. See
   17522                  [4]https://developer.classpath.org/doc/
   17523 
   17524 [5]New Targets and Target Specific Improvements
   17525 
   17526   IA-32/x86-64
   17527 
   17528      * The x86-64 medium model (that allows building applications whose
   17529        data segment exceeds 4GB) was redesigned to match latest ABI draft.
   17530        New implementation split large datastructures into separate segment
   17531        improving performance of accesses to small datastructures and also
   17532        allows linking of small model libraries into medium model programs
   17533        as long as the libraries are not accessing the large datastructures
   17534        directly. Medium model is also supported in position independent
   17535        code now.
   17536        The ABI change results in partial incompatibility among medium
   17537        model objects. Linking medium model libraries (or objects) compiled
   17538        with new compiler into medium model program compiled with older
   17539        will likely result in exceeding ranges of relocations.
   17540        Binutils 2.16.91 or newer are required for compiling medium model
   17541        now.
   17542 
   17543   RS6000 (POWER/PowerPC)
   17544 
   17545      * The AltiVec vector primitives in <altivec.h> are now implemented in
   17546        a way that puts a smaller burden on the preprocessor, instead
   17547        processing the "overloading" in the front ends. This should benefit
   17548        compilation speed on AltiVec vector code.
   17549      * AltiVec initializers now are generated more efficiently.
   17550      * The popcountb instruction available on POWER5 now is generated.
   17551      * The floating point round to integer instructions available on
   17552        POWER5+ now is generated.
   17553      * Floating point divides can be synthesized using the floating point
   17554        reciprocal estimate instructions.
   17555      * Double precision floating point constants are initialized as single
   17556        precision values if they can be represented exactly.
   17557 
   17558   S/390, zSeries and System z9
   17559 
   17560      * Support for the IBM System z9 109 processor has been added. When
   17561        using the -march=z9-109 option, the compiler will generate code
   17562        making use of instructions provided by the extended immediate
   17563        facility.
   17564      * Support for 128-bit IEEE floating point has been added. When using
   17565        the -mlong-double-128 option, the compiler will map the long double
   17566        data type to 128-bit IEEE floating point. Using this option
   17567        constitutes an ABI change, and requires glibc support.
   17568      * Various changes to improve performance of generated code have been
   17569        implemented, including:
   17570           + In functions that do not require a literal pool, register %r13
   17571             (which is traditionally reserved as literal pool pointer), can
   17572             now be freely used for other purposes by the compiler.
   17573           + More precise tracking of register use allows the compiler to
   17574             generate more efficient function prolog and epilog code in
   17575             certain cases.
   17576           + The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
   17577             instructions are now used to implement C string functions.
   17578           + The MOVE CHARACTER instruction with single byte overlap is now
   17579             used to implement the memset function with non-zero fill byte.
   17580           + The LOAD ZERO instructions are now used where appropriate.
   17581           + The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK,
   17582             and INSERT IMMEDIATE instructions are now used more frequently
   17583             to optimize bitfield operations.
   17584           + The BRANCH ON COUNT instruction is now used more frequently.
   17585             In particular, the fact that a loop contains a subroutine call
   17586             no longer prevents the compiler from using this instruction.
   17587           + The compiler is now aware that all shift and rotate
   17588             instructions implicitly truncate the shift count to six bits.
   17589      * Back-end support for the following generic features has been
   17590        implemented:
   17591           + The full set of [6]built-in functions for atomic memory
   17592             access.
   17593           + The -fstack-protector feature.
   17594           + The optimization pass avoiding unnecessary stores of incoming
   17595             argument registers in functions with variable argument list.
   17596 
   17597   SPARC
   17598 
   17599      * The default code model in 64-bit mode has been changed from
   17600        Medium/Anywhere to Medium/Middle on Solaris.
   17601      * TLS support is disabled by default on Solaris prior to release 10.
   17602        It can be enabled on TLS-capable Solaris 9 versions (4/04 release
   17603        and later) by specifying --enable-tls at configure time.
   17604 
   17605   MorphoSys
   17606 
   17607      * Support has been added for this new architecture.
   17608 
   17609 [7]Obsolete Systems
   17610 
   17611 Documentation improvements
   17612 
   17613 Other significant improvements
   17614 
   17615      * GCC can now emit code for protecting applications from
   17616        stack-smashing attacks. The protection is realized by buffer
   17617        overflow detection and reordering of stack variables to avoid
   17618        pointer corruption.
   17619      * Some built-in functions have been fortified to protect them against
   17620        various buffer overflow (and format string) vulnerabilities.
   17621        Compared to the mudflap bounds checking feature, the safe builtins
   17622        have far smaller overhead. This means that programs built using
   17623        safe builtins should not experience any measurable slowdown.
   17624 
   17625 [8]GCC 4.1.2
   17626 
   17627    This is the [9]list of problem reports (PRs) from GCC's bug tracking
   17628    system that are known to be fixed in the 4.1.2 release. This list might
   17629    not be complete (that is, it is possible that some PRs that have been
   17630    fixed are not listed here).
   17631 
   17632    When generating code for a shared library, GCC now recognizes that
   17633    global functions may be replaced when the program runs. Therefore, it
   17634    is now more conservative in deducing information from the bodies of
   17635    functions. For example, in this example:
   17636     void f() {}
   17637     void g() {
   17638      try { f(); }
   17639      catch (...) {
   17640        cout << "Exception";
   17641      }
   17642     }
   17643 
   17644    G++ would previously have optimized away the catch clause, since it
   17645    would have concluded that f cannot throw exceptions. Because users may
   17646    replace f with another function in the main body of the program, this
   17647    optimization is unsafe, and is no longer performed. If you wish G++ to
   17648    continue to optimize as before, you must add a throw() clause to the
   17649    declaration of f to make clear that it does not throw exceptions.
   17650 
   17651 
   17652     For questions related to the use of GCC, please consult these web
   17653     pages and the [10]GCC manuals. If that fails, the
   17654     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17655     web pages and the development of GCC are welcome on our developer
   17656     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   17657     archives.
   17658 
   17659    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   17660    distribution of this entire article is permitted in any medium,
   17661    provided this notice is preserved.
   17662 
   17663    These pages are [15]maintained by the GCC team. Last modified
   17664    2025-01-31.
   17665 
   17666 References
   17667 
   17668    1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   17669    2. https://gcc.gnu.org/gcc-4.1/changes.html#cplusplus
   17670    3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   17671    4. https://developer.classpath.org/doc/
   17672    5. https://gcc.gnu.org/gcc-4.1/changes.html#targets
   17673    6. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
   17674    7. https://gcc.gnu.org/gcc-4.1/changes.html#obsolete_systems
   17675    8. https://gcc.gnu.org/gcc-4.1/changes.html#GCC4.1.2
   17676    9. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
   17677   10. https://gcc.gnu.org/onlinedocs/
   17678   11. mailto:gcc-help (a] gcc.gnu.org
   17679   12. mailto:gcc (a] gcc.gnu.org
   17680   13. https://gcc.gnu.org/lists.html
   17681   14. https://www.fsf.org/
   17682   15. https://gcc.gnu.org/about.html
   17683 ======================================================================
   17684 http://gcc.gnu.org/gcc-4.0/index.html
   17685                              GCC 4.0 Release Series
   17686 
   17687    (This release series is no longer supported.)
   17688 
   17689    January 31, 2007
   17690 
   17691    The [1]GNU project and the GCC developers are pleased to announce the
   17692    release of GCC 4.0.4.
   17693 
   17694    This release is a bug-fix release, containing fixes for regressions in
   17695    GCC 4.0.3 relative to previous releases of GCC.
   17696 
   17697 Release History
   17698 
   17699    GCC 4.0.4
   17700           January 31, 2007 ([2]changes)
   17701 
   17702    GCC 4.0.3
   17703           March 10, 2006 ([3]changes)
   17704 
   17705    GCC 4.0.2
   17706           September 28, 2005 ([4]changes)
   17707 
   17708    GCC 4.0.1
   17709           July 7, 2005 ([5]changes)
   17710 
   17711    GCC 4.0.0
   17712           April 20, 2005 ([6]changes)
   17713 
   17714 References and Acknowledgements
   17715 
   17716    GCC used to stand for the GNU C Compiler, but since the compiler
   17717    supports several other languages aside from C, it now stands for the
   17718    GNU Compiler Collection.
   17719 
   17720    A list of [7]successful builds is updated as new information becomes
   17721    available.
   17722 
   17723    The GCC developers would like to thank the numerous people that have
   17724    contributed new features, improvements, bug fixes, and other changes as
   17725    well as test results to GCC. This [8]amazing group of volunteers is
   17726    what makes GCC successful.
   17727 
   17728    For additional information about GCC please refer to the [9]GCC project
   17729    web site or contact the [10]GCC development mailing list.
   17730 
   17731    To obtain GCC please use [11]our mirror sites, or [12]our version
   17732    control system.
   17733 
   17734 
   17735     For questions related to the use of GCC, please consult these web
   17736     pages and the [13]GCC manuals. If that fails, the
   17737     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17738     web pages and the development of GCC are welcome on our developer
   17739     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   17740     archives.
   17741 
   17742    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   17743    distribution of this entire article is permitted in any medium,
   17744    provided this notice is preserved.
   17745 
   17746    These pages are [18]maintained by the GCC team. Last modified
   17747    2022-10-26.
   17748 
   17749 References
   17750 
   17751    1. http://www.gnu.org/
   17752    2. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   17753    3. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
   17754    4. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
   17755    5. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
   17756    6. https://gcc.gnu.org/gcc-4.0/changes.html
   17757    7. https://gcc.gnu.org/gcc-4.0/buildstat.html
   17758    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   17759    9. https://gcc.gnu.org/index.html
   17760   10. mailto:gcc (a] gcc.gnu.org
   17761   11. https://gcc.gnu.org/mirrors.html
   17762   12. https://gcc.gnu.org/git.html
   17763   13. https://gcc.gnu.org/onlinedocs/
   17764   14. mailto:gcc-help (a] gcc.gnu.org
   17765   15. mailto:gcc (a] gcc.gnu.org
   17766   16. https://gcc.gnu.org/lists.html
   17767   17. https://www.fsf.org/
   17768   18. https://gcc.gnu.org/about.html
   17769 ======================================================================
   17770 http://gcc.gnu.org/gcc-4.0/changes.html
   17771                              GCC 4.0 Release Series
   17772                         Changes, New Features, and Fixes
   17773 
   17774    The latest release in the 4.0 release series is [1]GCC 4.0.4.
   17775 
   17776 Caveats
   17777 
   17778      * GCC now generates location lists by default when compiling with
   17779        debug info and optimization.
   17780           + GDB 6.0 and older crashes when it sees location lists. GDB 6.1
   17781             or later is needed to debug binaries containing location
   17782             lists.
   17783           + When you are trying to view a value of a variable in a part of
   17784             a function where it has no location (for example when the
   17785             variable is no longer used and thus its location was used for
   17786             something else) GDB will say that it is not available.
   17787        You can disable generating location lists by -fno-var-tracking.
   17788      * GCC no longer accepts the -fwritable-strings option. Use named
   17789        character arrays when you need a writable string.
   17790      * The options -freduce-all-givs and -fmove-all-movables have been
   17791        discontinued. They were used to circumvent a shortcoming in the
   17792        heuristics of the old loop optimization code with respect to common
   17793        Fortran constructs. The new (tree) loop optimizer works differently
   17794        and doesn't need those work-arounds.
   17795      * The graph-coloring register allocator, formerly enabled by the
   17796        option -fnew-ra, has been discontinued.
   17797      * -I- has been deprecated. -iquote is meant to replace the need for
   17798        this option.
   17799      * The MIPS -membedded-pic and -mrnames options have been removed.
   17800      * All MIPS targets now require the GNU assembler. In particular, IRIX
   17801        configurations can no longer use the MIPSpro assemblers, although
   17802        they do still support the MIPSpro linkers.
   17803      * The SPARC option -mflat has been removed.
   17804      * English-language diagnostic messages will now use Unicode quotation
   17805        marks in UTF-8 locales. (Non-English messages already used the
   17806        quotes appropriate for the language in previous releases.) If your
   17807        terminal does not support UTF-8 but you are using a UTF-8 locale
   17808        (such locales are the default on many GNU/Linux systems) then you
   17809        should set LC_CTYPE=C in the environment to disable that locale.
   17810        Programs that parse diagnostics and expect plain ASCII
   17811        English-language messages should set LC_ALL=C. See [2]Markus Kuhn's
   17812        explanation of Unicode quotation marks for more information.
   17813      * The specs file is no longer installed on most platforms. Most users
   17814        will be totally unaffected. However, if you are accustomed to
   17815        editing the specs file yourself, you will now have to use the
   17816        -dumpspecs option to generate the specs file, and then edit the
   17817        resulting file.
   17818 
   17819 General Optimizer Improvements
   17820 
   17821      * The [3]tree ssa branch has been merged. This merge has brought in a
   17822        completely new optimization framework based on a higher level
   17823        intermediate representation than the existing RTL representation.
   17824        Numerous new code transformations based on the new framework are
   17825        available in GCC 4.0, including:
   17826           + Scalar replacement of aggregates
   17827           + Constant propagation
   17828           + Value range propagation
   17829           + Partial redundancy elimination
   17830           + Load and store motion
   17831           + Strength reduction
   17832           + Dead store elimination
   17833           + Dead and unreachable code elimination
   17834           + [4]Autovectorization
   17835           + Loop interchange
   17836           + Tail recursion by accumulation
   17837        Many of these passes outperform their counterparts from previous
   17838        GCC releases.
   17839      * [5]Swing Modulo Scheduling (SMS). An RTL level instruction
   17840        scheduling optimization intended for loops that perform heavy
   17841        computations.
   17842 
   17843 New Languages and Language specific improvements
   17844 
   17845   C family
   17846 
   17847      * The sentinel attribute has been added to GCC. This function
   17848        attribute allows GCC to warn when variadic functions such as execl
   17849        are not NULL terminated. See the GCC manual for a complete
   17850        description of its behavior.
   17851      * Given __attribute__((alias("target"))) it is now an error if target
   17852        is not a symbol, defined in the same translation unit. This also
   17853        applies to aliases created by #pragma weak alias=target. This is
   17854        because it's meaningless to define an alias to an undefined symbol.
   17855        On Solaris, the native assembler would have caught this error, but
   17856        GNU as does not.
   17857 
   17858   C and Objective-C
   17859 
   17860      * The -Wstrict-aliasing=2 option has been added. This warning catches
   17861        all unsafe cases, but it may also give a warning for some cases
   17862        that are safe.
   17863      * The cast-as-lvalue, conditional-expression-as-lvalue and
   17864        compound-expression-as-lvalue extensions, which were deprecated in
   17865        3.3.4 and 3.4, have been removed.
   17866      * The -fwritable-strings option, which was deprecated in 3.4, has
   17867        been removed.
   17868      * #pragma pack() semantics have been brought closer to those used by
   17869        other compilers. This also applies to C++.
   17870      * Taking the address of a variable with register storage is invalid
   17871        in C. GCC now issues an error instead of a warning.
   17872      * Arrays of incomplete element type are invalid in C. GCC now issues
   17873        an error for such arrays. Declarations such as extern struct s x[];
   17874        (where struct s has not been defined) can be moved after the
   17875        definition of struct s. Function parameters declared as arrays of
   17876        incomplete type can instead be declared as pointers.
   17877 
   17878   C++
   17879 
   17880      * When compiling without optimizations (-O0), the C++ front end is
   17881        much faster than in any previous versions of GCC. Independent
   17882        testers have measured speed-ups up to 25% in real-world production
   17883        code, compared to the 3.4 family (which was already the fastest
   17884        version to date). Upgrading from older versions might show even
   17885        bigger improvements.
   17886      * ELF visibility attributes can now be applied to a class type, so
   17887        that it affects every member function of a class at once, without
   17888        having to specify each individually:
   17889 class __attribute__ ((visibility("hidden"))) Foo
   17890 {
   17891    int foo1();
   17892    void foo2();
   17893 };
   17894        The syntax is deliberately similar to the __declspec() system used
   17895        by Microsoft Windows based compilers, allowing cross-platform
   17896        projects to easily reuse their existing macro system for denoting
   17897        exports and imports. By explicitly marking internal classes never
   17898        used outside a binary as hidden, one can completely avoid PLT
   17899        indirection overheads during their usage by the compiler. You can
   17900        find out more about the advantages of this at
   17901        [6]https://www.akkadia.org/drepper/dsohowto.pdf
   17902      * The -fvisibility-inlines-hidden option has been added which marks
   17903        all inlineable functions as having hidden ELF visibility, thus
   17904        removing their symbol and typeinfo from the exported symbol table
   17905        of the output ELF binary. Using this option can reduce the exported
   17906        symbol count of template-heavy code by up to 40% with no code
   17907        change at all, thus notably improving link and load times for the
   17908        binary as well as a reduction in size of up to 10%. Also, check the
   17909        new [7]-fvisibility option.
   17910      * The compiler now uses the library interface specified by the [8]C++
   17911        ABI for thread-safe initialization of function-scope static
   17912        variables. Most users should leave this alone, but embedded
   17913        programmers may want to disable this by specifying
   17914        -fno-threadsafe-statics for a small savings in code size.
   17915      * Taking the address of an explicit register variable is no longer
   17916        supported. Note that C++ allows taking the address of variables
   17917        with register storage so this will continue to compile with a
   17918        warning. For example, assuming that r0 is a machine register:
   17919 register int foo asm ("r0");
   17920 register int bar;
   17921 &foo; // error, no longer accepted
   17922 &bar; // OK, with a warning
   17923      * G++ has an undocumented extension to virtual function covariancy
   17924        rules that allowed the overrider to return a type that was
   17925        implicitly convertable to the overridden function's return type.
   17926        For instance a function returning void * could be overridden by a
   17927        function returning T *. This is now deprecated and will be removed
   17928        in a future release.
   17929      * The G++ minimum and maximum operators (<? and >?) and their
   17930        compound forms (<?=) and >?=) have been deprecated and will be
   17931        removed in a future version. Code using these operators should be
   17932        modified to use std::min and std::max instead.
   17933      * Declaration of nested classes of class templates as friends are
   17934        supported:
   17935 template <typename T> struct A {
   17936   class B {};
   17937 };
   17938 class C {
   17939   template <typename T> friend class A<T>::B;
   17940 };
   17941        This complements the feature member functions of class templates as
   17942        friends introduced in GCC 3.4.0.
   17943      * When declaring a friend class using an unqualified name, classes
   17944        outside the innermost non-class scope are not searched:
   17945 class A;
   17946 namespace N {
   17947   class B {
   17948     friend class A;   // Refer to N::A which has not been declared yet
   17949                       // because name outside namespace N are not searched
   17950     friend class ::A; // Refer to ::A
   17951   };
   17952 }
   17953        Hiding the friend name until declaration is still not implemented.
   17954      * Friends of classes defined outside their namespace are correctly
   17955        handled:
   17956 namespace N {
   17957   class A;
   17958 }
   17959 class N::A {
   17960   friend class B; // Refer to N::B in GCC 4.0.0
   17961                   // but ::B in earlier versions of GCC
   17962 };
   17963 
   17964     Runtime Library (libstdc++)
   17965 
   17966      * Optimization work:
   17967           + Added efficient specializations of istream functions for char
   17968             and wchar_t.
   17969           + Further performance tuning of strings, in particular wrt
   17970             single-char append and getline.
   17971           + iter_swap - and therefore most of the mutating algorithms -
   17972             now makes an unqualified call to swap when the value_type of
   17973             the two iterators is the same.
   17974      * A large subset of the features in Technical Report 1 (TR1 for
   17975        short) is experimentally delivered (i.e., no guarantees about the
   17976        implementation are provided. In particular it is not promised that
   17977        the library will remain link-compatible when code using TR1 is
   17978        used):
   17979           + General utilities such as reference_wrapper and shared_ptr.
   17980           + Function objects, i.e., result_of, mem_fn, bind, function.
   17981           + Support for metaprogramming.
   17982           + New containers such as tuple, array, unordered_set,
   17983             unordered_map, unordered_multiset, unordered_multimap.
   17984      * As usual, many bugs have been fixed and LWG resolutions implemented
   17985        for the first time (e.g., DR 409).
   17986 
   17987   Java
   17988 
   17989      * In order to prevent naming conflicts with other implementations of
   17990        these tools, some GCJ binaries have been renamed:
   17991           + rmic is now grmic,
   17992           + rmiregistry is now grmiregistry, and
   17993           + jar is now fastjar.
   17994        In particular, these names were problematic for the jpackage.org
   17995        packaging conventions which install symlinks in /usr/bin that point
   17996        to the preferred versions of these tools.
   17997      * The -findirect-dispatch argument to the compiler now works and
   17998        generates code following a new "binary compatibility" ABI. Code
   17999        compiled this way follows the binary compatibility rules of the
   18000        Java Language Specification.
   18001      * libgcj now has support for using GCJ as a JIT, using the
   18002        gnu.gcj.jit family of system properties.
   18003      * libgcj can now find a shared library corresponding to the bytecode
   18004        representation of a class. See the documentation for the new
   18005        gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
   18006        property.
   18007      * There have been many improvements to the class library. Here are
   18008        some highlights:
   18009           + Much more of AWT and Swing exist.
   18010           + Many new packages and classes were added, including
   18011             java.util.regex, java.net.URI, javax.crypto,
   18012             javax.crypto.interfaces, javax.crypto.spec, javax.net,
   18013             javax.net.ssl, javax.security.auth,
   18014             javax.security.auth.callback, javax.security.auth.login,
   18015             javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
   18016             javax.imageio, javax.imageio.event, javax.imageio.spi,
   18017             javax.print, javax.print.attribute,
   18018             javax.print.attribute.standard, javax.print.event, and
   18019             javax.xml
   18020           + Updated SAX and DOM, and imported GNU JAXP
   18021 
   18022   Fortran
   18023 
   18024      * A new [9]Fortran front end has replaced the aging GNU Fortran 77
   18025        front end. The new front end supports Fortran 90 and Fortran 95. It
   18026        may not yet be as stable as the old Fortran front end.
   18027 
   18028   Ada
   18029 
   18030      * Ada (with tasking and Zero Cost Exceptions) is now available on
   18031        many more targets, including but not limited to: alpha-linux,
   18032        hppa-hpux, hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
   18033        s390x-linux, sparc-linux.
   18034      * Some of the new Ada 2005 features are now implemented like
   18035        Wide_Wide_Character and Ada.Containers.
   18036      * Many bugs have been fixed, tools and documentation improved.
   18037      * To compile Ada from the sources, install an older working Ada
   18038        compiler and then use --enable-languages=ada at configuration time,
   18039        since the Ada front end is not currently activated by default. See
   18040        the [10]Installing GCC for details.
   18041 
   18042 [11]New Targets and Target Specific Improvements
   18043 
   18044   H8/300
   18045 
   18046      * The frame layout has changed. In the new layout, the prologue of a
   18047        function first saves registers and then allocate space for locals,
   18048        resulting in an 1% improvement on code size.
   18049 
   18050   IA-32/x86-64 (AMD64)
   18051 
   18052      * The acos, asin, drem, exp10, exp2, expm1, fmod, ilogb, log10,
   18053        log1p, log2, logb and tan mathematical builtins (and their float
   18054        and long double variants) are now implemented as inline x87
   18055        intrinsics when using -ffast-math.
   18056      * The ceil, floor, nearbyint, rint and trunc mathematical builtins
   18057        (and their float and long double variants) are now implemented as
   18058        inline x87 intrinsics when using -ffast-math.
   18059      * The x87's fsincos instruction is now used automatically with
   18060        -ffast-math when calculating both the sin and cos of the same
   18061        argument.
   18062      * Instruction selection for multiplication and division by constants
   18063        has been improved.
   18064 
   18065   IA-64
   18066 
   18067      * Floating point division, integer division and sqrt are now inlined,
   18068        resulting in significant performance improvements on some codes.
   18069 
   18070   MIPS
   18071 
   18072      * Division by zero checks now use conditional traps if the target
   18073        processor supports them. This decreases code size by one word per
   18074        division operation. The old behavior (branch and break) can be
   18075        obtained either at configure time by passing --with-divide=breaks
   18076        to configure or at runtime by passing -mdivide-breaks to GCC.
   18077      * Support for MIPS64 paired-single instructions has been added. It is
   18078        enabled by -mpaired-single and can be accessed using both the
   18079        target-independent vector extensions and new MIPS-specific built-in
   18080        functions.
   18081      * Support for the MIPS-3D ASE has been added. It is enabled by
   18082        -mips3d and provides new MIPS-3D-specific built-in functions.
   18083      * The -mexplicit-relocs option now supports static n64 code (as is
   18084        used, for example, in 64-bit linux kernels). -mexplicit-relocs
   18085        should now be feature-complete and is enabled by default when GCC
   18086        is configured to use a compatible assembler.
   18087      * Support for the NEC VR4130 series has been added. This support
   18088        includes the use of VR-specific instructions and a new VR4130
   18089        scheduler. Full VR4130 support can be selected with -march=vr4130
   18090        while code for any ISA can be tuned for the VR4130 using
   18091        -mtune=vr4130. There is also a new -mvr4130-align option that
   18092        produces better schedules at the cost of increased code size.
   18093      * Support for the Broadcom SB-1 has been extended. There is now an
   18094        SB-1 scheduler as well as support for the SB-1-specific
   18095        paired-single instructions. Full SB-1 support can be selected with
   18096        -march=sb1 while code for any ISA can be optimized for the SB-1
   18097        using -mtune=sb1.
   18098      * The compiler can now work around errata in R4000, R4400, VR4120 and
   18099        VR4130 processors. These workarounds are enabled by -mfix-r4000,
   18100        -mfix-r4400, -mfix-vr4120 and -mfix-vr4130 respectively. The VR4120
   18101        and VR4130 workarounds need binutils 2.16 or above.
   18102      * IRIX shared libraries are now installed into the standard library
   18103        directories: o32 libraries go into lib/, n32 libraries go into
   18104        lib32/ and n64 libraries go into lib64/.
   18105      * The compiler supports a new -msym32 option. It can be used to
   18106        optimize n64 code in which all symbols are known to have 32-bit
   18107        values.
   18108 
   18109   S/390 and zSeries
   18110 
   18111      * New command-line options help to generate code intended to run in
   18112        an environment where stack space is restricted, e.g. Linux kernel
   18113        code:
   18114           + -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
   18115             warnings for single functions that require large or dynamic
   18116             stack frames.
   18117           + -mstack-size and -mstack-guard generate code that checks for
   18118             stack overflow at run time.
   18119           + -mpacked-stack generates code that reduces the stack frame
   18120             size of many functions by reusing unneeded parts of the stack
   18121             bias area.
   18122      * The -msoft-float option now ensures that generated code never
   18123        accesses floating point registers.
   18124      * The s390x-ibm-tpf target now fully supports C++, including
   18125        exceptions and threads.
   18126      * Various changes to improve performance of the generated code have
   18127        been implemented, including:
   18128           + GCC now uses sibling calls where possible.
   18129           + Condition code handling has been optimized, allowing GCC to
   18130             omit redundant comparisons in certain cases.
   18131           + The cost function guiding many optimizations has been refined
   18132             to more accurately represent the z900 and z990 processors.
   18133           + The ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
   18134             instructions are now used to avoid conditional branches in
   18135             certain cases.
   18136           + The back end now uses the LEGITIMIZE_RELOAD_ADDRESS feature to
   18137             optimize address arithmetic required to access large stack
   18138             frames.
   18139           + GCC now makes more efficient use of memory-to-memory type
   18140             instructions (MVC, CLC, ...).
   18141           + More precise tracking of special register use allows better
   18142             instruction scheduling, in particular of the function prologue
   18143             and epilogue sequences.
   18144           + The Java front end now generates inline code to implement
   18145             integer division, instead of calling library routines.
   18146 
   18147   SPARC
   18148 
   18149      * The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
   18150        -mf934 have been removed. They have been replaced with -mcpu=xxx.
   18151      * The internal model used to estimate the relative cost of each
   18152        instruction has been updated. It is expected to give better results
   18153        on recent UltraSPARC processors.
   18154      * Code generation for function prologues and epilogues has been
   18155        improved, resulting in better scheduling and allowing multiple exit
   18156        points in functions.
   18157      * Support for Sun's Visual Instruction Set (VIS) has been enhanced.
   18158        It is enabled by -mvis and provides new built-in functions for VIS
   18159        instructions on UltraSPARC processors.
   18160      * The option -mapp-regs has been turned on by default on Solaris too.
   18161 
   18162   NetWare
   18163 
   18164      * Novell NetWare (on ix86, no other hardware platform was ever really
   18165        supported by this OS) has been re-enabled and the ABI supported by
   18166        GCC has been brought into sync with that of MetroWerks CodeWarrior
   18167        (the ABI previously supported was that of some Unix systems, which
   18168        NetWare never tried to support).
   18169 
   18170 [12]Obsolete Systems
   18171 
   18172    Support for a number of older systems has been declared obsolete in GCC
   18173    4.0. Unless there is activity to revive them, the next release of GCC
   18174    will have their sources permanently removed.
   18175 
   18176    All GCC ports for the following processor architectures have been
   18177    declared obsolete:
   18178      * Intel i860
   18179      * Ubicom IP2022
   18180      * National Semiconductor NS32K (ns32k)
   18181      * Texas Instruments TMS320C[34]x
   18182 
   18183    Also, those for some individual systems have been obsoleted:
   18184      * SPARC family
   18185           + SPARClite-based systems (sparclite-*-coff, sparclite-*-elf,
   18186             sparc86x-*-elf)
   18187           + OpenBSD 32-bit (sparc-*-openbsd*)
   18188 
   18189 Documentation improvements
   18190 
   18191 Other significant improvements
   18192 
   18193      * Location lists are now generated by default when compiling with
   18194        debug info and optimization. Location lists provide more accurate
   18195        debug info about locations of variables and they allow debugging
   18196        code compiled with -fomit-frame-pointer.
   18197      * The -fvisibility option has been added which allows the default ELF
   18198        visibility of all symbols to be set per compilation and the new
   18199        #pragma GCC visibility preprocessor command allows the setting of
   18200        default ELF visibility for a region of code. Using
   18201        -fvisibility=hidden especially in combination with the new
   18202        -fvisibility-inlines-hidden can yield substantial improvements in
   18203        output binary quality including avoiding PLT indirection overheads,
   18204        reduction of the exported symbol count by up to 60% (with resultant
   18205        improvements to link and load times), better scope for the
   18206        optimizer to improve code and up to a 20% reduction in binary size.
   18207        Using these options correctly yields a binary with a similar symbol
   18208        count to a Windows DLL.
   18209        Perhaps more importantly, this new feature finally allows (with
   18210        careful planning) complete avoidance of symbol clashes when
   18211        manually loading shared objects with RTLD_GLOBAL, thus finally
   18212        solving problems many projects such as python were forced to use
   18213        RTLD_LOCAL for (with its resulting issues for C++ correctness). You
   18214        can find more information about using these options at
   18215        [13]https://gcc.gnu.org/wiki/Visibility.
   18216      __________________________________________________________________
   18217 
   18218 [14]GCC 4.0.1
   18219 
   18220    This is the [15]list of problem reports (PRs) from GCC's bug tracking
   18221    system that are known to be fixed in the 4.0.1 release. This list might
   18222    not be complete (that is, it is possible that some PRs that have been
   18223    fixed are not listed here).
   18224 
   18225 [16]GCC 4.0.2
   18226 
   18227    This is the [17]list of problem reports (PRs) from GCC's bug tracking
   18228    system that are known to be fixed in the 4.0.2 release. This list might
   18229    not be complete (that is, it is possible that some PRs that have been
   18230    fixed are not listed here).
   18231 
   18232    Unfortunately, due to a release engineering failure, this release has a
   18233    regression on Solaris that will affect some C++ programs. We suggest
   18234    that Solaris users apply a [18]patch that corrects the problem. Users
   18235    who do not wish to apply the patch should explicitly link C++ programs
   18236    with the -pthreads option, even if they do not use threads. This
   18237    problem has been corrected in the current 4.0 branch sources and will
   18238    not be present in GCC 4.0.3.
   18239 
   18240 [19]GCC 4.0.3
   18241 
   18242    Starting with this release, the function getcontext is recognized by
   18243    the compiler as having the same semantics as the setjmp function. In
   18244    particular, the compiler will ensure that all registers are dead before
   18245    calling such a function and will emit a warning about the variables
   18246    that may be clobbered after the second return from the function.
   18247 
   18248 [20]GCC 4.0.4
   18249 
   18250    This is the [21]list of problem reports (PRs) from GCC's bug tracking
   18251    system that are known to be fixed in the 4.0.4 release. This list might
   18252    not be complete (that is, it is possible that some PRs that have been
   18253    fixed are not listed here).
   18254 
   18255    The 4.0.4 release is provided for those that require a high degree of
   18256    binary compatibility with previous 4.0.x releases. For most users, the
   18257    GCC team recommends that version 4.1.1 or later be used instead."
   18258 
   18259 
   18260     For questions related to the use of GCC, please consult these web
   18261     pages and the [22]GCC manuals. If that fails, the
   18262     [23]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18263     web pages and the development of GCC are welcome on our developer
   18264     list at [24]gcc (a] gcc.gnu.org. All of [25]our lists have public
   18265     archives.
   18266 
   18267    Copyright (C) [26]Free Software Foundation, Inc. Verbatim copying and
   18268    distribution of this entire article is permitted in any medium,
   18269    provided this notice is preserved.
   18270 
   18271    These pages are [27]maintained by the GCC team. Last modified
   18272    2025-01-31.
   18273 
   18274 References
   18275 
   18276    1. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   18277    2. https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
   18278    3. https://gcc.gnu.org/projects/tree-ssa/
   18279    4. https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   18280    5. https://gcc.gnu.org/news/sms.html
   18281    6. https://www.akkadia.org/drepper/dsohowto.pdf
   18282    7. https://gcc.gnu.org/gcc-4.0/changes.html#visibility
   18283    8. https://itanium-cxx-abi.github.io/cxx-abi/
   18284    9. https://gcc.gnu.org/fortran/
   18285   10. https://gcc.gnu.org/install/
   18286   11. https://gcc.gnu.org/gcc-4.0/changes.html#targets
   18287   12. https://gcc.gnu.org/gcc-4.0/changes.html#obsolete_systems
   18288   13. https://gcc.gnu.org/wiki/Visibility
   18289   14. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.1
   18290   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
   18291   16. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.2
   18292   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
   18293   18. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
   18294   19. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.3
   18295   20. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.4
   18296   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
   18297   22. https://gcc.gnu.org/onlinedocs/
   18298   23. mailto:gcc-help (a] gcc.gnu.org
   18299   24. mailto:gcc (a] gcc.gnu.org
   18300   25. https://gcc.gnu.org/lists.html
   18301   26. https://www.fsf.org/
   18302   27. https://gcc.gnu.org/about.html
   18303 ======================================================================
   18304 http://gcc.gnu.org/gcc-3.4/index.html
   18305                              GCC 3.4 Release Series
   18306 
   18307    (This release series is no longer supported.)
   18308 
   18309    May 26, 2006
   18310 
   18311    The [1]GNU project and the GCC developers are pleased to announce the
   18312    release of GCC 3.4.6.
   18313 
   18314    This release is a bug-fix release, containing fixes for regressions in
   18315    GCC 3.4.4 relative to previous releases of GCC. This is the last of the
   18316    3.4.x series.
   18317 
   18318    The GCC 3.4 release series includes numerous [2]new features,
   18319    improvements, bug fixes, and other changes, thanks to an [3]amazing
   18320    group of volunteers.
   18321 
   18322 Release History
   18323 
   18324    GCC 3.4.6
   18325           March 6, 2006 ([4]changes)
   18326 
   18327    GCC 3.4.5
   18328           November 30, 2005 ([5]changes)
   18329 
   18330    GCC 3.4.4
   18331           May 18, 2005 ([6]changes)
   18332 
   18333    GCC 3.4.3
   18334           November 4, 2004 ([7]changes)
   18335 
   18336    GCC 3.4.2
   18337           September 6, 2004 ([8]changes)
   18338 
   18339    GCC 3.4.1
   18340           July 1, 2004 ([9]changes)
   18341 
   18342    GCC 3.4.0
   18343           April 18, 2004 ([10]changes)
   18344 
   18345 References and Acknowledgements
   18346 
   18347    GCC used to stand for the GNU C Compiler, but since the compiler
   18348    supports several other languages aside from C, it now stands for the
   18349    GNU Compiler Collection.
   18350 
   18351    A list of [11]successful builds is updated as new information becomes
   18352    available.
   18353 
   18354    The GCC developers would like to thank the numerous people that have
   18355    contributed new features, improvements, bug fixes, and other changes as
   18356    well as test results to GCC. This [12]amazing group of volunteers is
   18357    what makes GCC successful.
   18358 
   18359    For additional information about GCC please refer to the [13]GCC
   18360    project web site or contact the [14]GCC development mailing list.
   18361 
   18362    To obtain GCC please use [15]our mirror sites, or [16]our version
   18363    control system.
   18364 
   18365 
   18366     For questions related to the use of GCC, please consult these web
   18367     pages and the [17]GCC manuals. If that fails, the
   18368     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18369     web pages and the development of GCC are welcome on our developer
   18370     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   18371     archives.
   18372 
   18373    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   18374    distribution of this entire article is permitted in any medium,
   18375    provided this notice is preserved.
   18376 
   18377    These pages are [22]maintained by the GCC team. Last modified
   18378    2022-10-26.
   18379 
   18380 References
   18381 
   18382    1. http://www.gnu.org/
   18383    2. https://gcc.gnu.org/gcc-3.4/changes.html
   18384    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18385    4. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   18386    5. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
   18387    6. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
   18388    7. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
   18389    8. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.2
   18390    9. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
   18391   10. https://gcc.gnu.org/gcc-3.4/changes.html
   18392   11. https://gcc.gnu.org/gcc-3.4/buildstat.html
   18393   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18394   13. https://gcc.gnu.org/index.html
   18395   14. mailto:gcc (a] gcc.gnu.org
   18396   15. https://gcc.gnu.org/mirrors.html
   18397   16. https://gcc.gnu.org/git.html
   18398   17. https://gcc.gnu.org/onlinedocs/
   18399   18. mailto:gcc-help (a] gcc.gnu.org
   18400   19. mailto:gcc (a] gcc.gnu.org
   18401   20. https://gcc.gnu.org/lists.html
   18402   21. https://www.fsf.org/
   18403   22. https://gcc.gnu.org/about.html
   18404 ======================================================================
   18405 http://gcc.gnu.org/gcc-3.4/changes.html
   18406                              GCC 3.4 Release Series
   18407                         Changes, New Features, and Fixes
   18408 
   18409    The final release in the 3.4 release series is [1]GCC 3.4.6. The series
   18410    is now closed.
   18411 
   18412    GCC 3.4 has [2]many improvements in the C++ front end. Before reporting
   18413    a bug, please make sure it's really GCC, and not your code, that is
   18414    broken.
   18415 
   18416 Caveats
   18417 
   18418      * GNU Make is now required to build GCC.
   18419      * With -nostdinc the preprocessor used to ignore both standard
   18420        include paths and include paths contained in environment variables.
   18421        It was neither documented nor intended that environment variable
   18422        paths be ignored, so this has been corrected.
   18423      * GCC no longer accepts the options -fvolatile, -fvolatile-global and
   18424        -fvolatile-static. It is unlikely that they worked correctly in any
   18425        3.x release.
   18426      * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
   18427      * Support for all the systems [3]obsoleted in GCC 3.3 has been
   18428        removed from GCC 3.4. See below for a [4]list of systems which are
   18429        obsoleted in this release.
   18430      * GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
   18431        compilers will not work.
   18432      * The implementation of the [5]MIPS ABIs has changed. As a result,
   18433        the code generated for certain MIPS targets will not be binary
   18434        compatible with earlier releases.
   18435      * In previous releases, the MIPS port had a fake "hilo" register with
   18436        the user-visible name accum. This register has been removed.
   18437      * The implementation of the [6]SPARC ABIs has changed. As a result,
   18438        the code generated will not be binary compatible with earlier
   18439        releases in certain cases.
   18440      * The configure option --enable-threads=pthreads has been removed;
   18441        use --enable-threads=posix instead, which should have the same
   18442        effect.
   18443      * Code size estimates used by inlining heuristics for C, Objective-C,
   18444        C++ and Java have been redesigned significantly. As a result the
   18445        parameters of -finline-insns, --param max-inline-insns-single and
   18446        --param max-inline-insns-auto need to be reconsidered.
   18447      * --param max-inline-slope and --param min-inline-insns have been
   18448        removed; they are not needed for the new bottom-up inlining
   18449        heuristics.
   18450      * The new unit-at-a-time compilation scheme has several compatibility
   18451        issues:
   18452           + The order in which functions, variables, and top-level asm
   18453             statements are emitted may have changed. Code relying on some
   18454             particular ordering needs to be updated. The majority of such
   18455             top-level asm statements can be replaced by section
   18456             attributes.
   18457           + Unreferenced static variables and functions are removed. This
   18458             may result in undefined references when an asm statement
   18459             refers to the variable/function directly. In that case either
   18460             the variable/function shall be listed in asm statement operand
   18461             or in the case of top-level asm statements the attribute used
   18462             shall be used to force function/variable to be always output
   18463             and considered as a possibly used by unknown code.
   18464             For variables the attribute is accepted only by GCC 3.4 and
   18465             newer, while for earlier versions it is sufficient to use
   18466             unused to silence warnings about the variables not being
   18467             referenced. To keep code portable across different GCC
   18468             versions, you can use appropriate preprocessor conditionals.
   18469           + Static functions now can use non-standard passing conventions
   18470             that may break asm statements calling functions directly.
   18471             Again the attribute used shall be used to prevent this
   18472             behavior.
   18473        As a temporary workaround, -fno-unit-at-a-time can be used, but
   18474        this scheme may not be supported by future releases of GCC.
   18475      * GCC 3.4 automatically places zero-initialized variables in the .bss
   18476        section on some operating systems. Versions of GNU Emacs up to (and
   18477        including) 21.3 will not work correctly when using this
   18478        optimization; you can use -fno-zero-initialized-in-bss to disable
   18479        it.
   18480      * If GCC 3.4 is configured with --enable-threads=posix (the default
   18481        on most targets that support pthreads) then _REENTRANT will be
   18482        defined unconditionally by some libstdc++ headers. C++ code which
   18483        relies on that macro to detect whether multi-threaded code is being
   18484        compiled might change in meaning, possibly resulting in linker
   18485        errors for single-threaded programs. Affected users of [7]Boost
   18486        should compile single-threaded code with -DBOOST_DISABLE_THREADS.
   18487        See Bugzilla for [8]more information.
   18488 
   18489 General Optimizer Improvements
   18490 
   18491      * Usability of the profile feedback and coverage testing has been
   18492        improved.
   18493           + Performance of profiled programs has been improved by faster
   18494             profile merging code.
   18495           + Better use of the profile feedback for optimization (loop
   18496             unrolling and loop peeling).
   18497           + File locking support allowing fork() calls and parallel runs
   18498             of profiled programs.
   18499           + Coverage file format has been redesigned.
   18500           + gcov coverage tool has been improved.
   18501           + make profiledbootstrap available to build a faster compiler.
   18502             Experiments made on i386 hardware showed an 11% speedup on -O0
   18503             and a 7.5% speedup on -O2 compilation of a [9]large C++
   18504             testcase.
   18505           + New value profiling pass enabled via -fprofile-values
   18506           + New value profile transformations pass enabled via -fvpt aims
   18507             to optimize some code sequences by exploiting knowledge about
   18508             value ranges or other properties of the operands. At the
   18509             moment a conversion of expensive divisions into cheaper
   18510             operations has been implemented.
   18511           + New -fprofile-generate and -fprofile-use command-line options
   18512             to simplify the use of profile feedback.
   18513      * A new unit-at-a-time compilation scheme for C, Objective-C, C++ and
   18514        Java which is enabled via -funit-at-a-time (and implied by -O2). In
   18515        this scheme a whole file is parsed first and optimized later. The
   18516        following basic inter-procedural optimizations are implemented:
   18517           + Removal of unreachable functions and variables
   18518           + Discovery of local functions (functions with static linkage
   18519             whose address is never taken)
   18520           + On i386, these local functions use register parameter passing
   18521             conventions.
   18522           + Reordering of functions in topological order of the call graph
   18523             to enable better propagation of optimizing hints (such as the
   18524             stack alignments needed by functions) in the back end.
   18525           + Call graph based out-of-order inlining heuristics which allows
   18526             to limit overall compilation unit growth (--param
   18527             inline-unit-growth).
   18528        Overall, the unit-at-a-time scheme produces a 1.3% improvement for
   18529        the SPECint2000 benchmark on the i386 architecture (AMD Athlon
   18530        CPU).
   18531      * More realistic code size estimates used by inlining for C,
   18532        Objective-C, C++ and Java. The growth of large functions can now be
   18533        limited via --param large-function-insns and --param
   18534        large-function-growth.
   18535      * A new cfg-level loop optimizer pass replaces the old loop unrolling
   18536        pass and adds two other loop transformations -- loop peeling and
   18537        loop unswitching -- and also uses the profile feedback to limit
   18538        code growth. (The three optimizations are enabled by
   18539        -funroll-loops, -fpeel-loops and -funswitch-loops flags,
   18540        respectively).
   18541        The old loop unroller still can be enabled by -fold-unroll-loops
   18542        and may produce better code in some cases, especially when the
   18543        webizer optimization pass is not run.
   18544      * A new web construction pass enabled via -fweb (and implied by -O3)
   18545        improves the quality of register allocation, CSE, first scheduling
   18546        pass and some other optimization passes by avoiding re-use of
   18547        pseudo registers with non-overlapping live ranges. The pass almost
   18548        always improves code quality but does make debugging difficult and
   18549        thus is not enabled by default by -O2
   18550        The pass is especially effective as cleanup after code duplication
   18551        passes, such as the loop unroller or the tracer.
   18552      * Experimental implementations of superblock or trace scheduling in
   18553        the second scheduling pass can be enabled via
   18554        -fsched2-use-superblocks and -fsched2-use-traces, respectively.
   18555 
   18556 New Languages and Language specific improvements
   18557 
   18558   Ada
   18559 
   18560      * The Ada front end has been updated to include numerous bug fixes
   18561        and enhancements. These include:
   18562           + Improved project file support
   18563           + Additional set of warnings about potential wrong code
   18564           + Improved error messages
   18565           + Improved code generation
   18566           + Improved cross reference information
   18567           + Improved inlining
   18568           + Better run-time check elimination
   18569           + Better error recovery
   18570           + More efficient implementation of unbounded strings
   18571           + Added features in GNAT.Sockets, GNAT.OS_Lib, GNAT.Debug_Pools,
   18572             ...
   18573           + New GNAT.xxxx packages (e.g. GNAT.Strings,
   18574             GNAT.Exception_Action)
   18575           + New pragmas
   18576           + New -gnatS switch replacing gnatpsta
   18577           + Implementation of new Ada features (in particular limited
   18578             with, limited aggregates)
   18579 
   18580   C/Objective-C/C++
   18581 
   18582      * Precompiled headers are now supported. Precompiled headers can
   18583        dramatically speed up compilation of some projects. There are some
   18584        known defects in the current precompiled header implementation that
   18585        will result in compiler crashes in relatively rare situations.
   18586        Therefore, precompiled headers should be considered a "technology
   18587        preview" in this release. Read the manual for details about how to
   18588        use precompiled headers.
   18589      * File handling in the preprocessor has been rewritten. GCC no longer
   18590        gets confused by symlinks and hardlinks, and now has a correct
   18591        implementation of #import and #pragma once. These two directives
   18592        have therefore been un-deprecated.
   18593      * The undocumented extension that allowed C programs to have a label
   18594        at the end of a compound statement, which has been deprecated since
   18595        GCC 3.0, has been removed.
   18596      * The cast-as-lvalue extension has been removed for C++ and
   18597        deprecated for C and Objective-C. In particular, code like this:
   18598         int i;
   18599         (char) i = 5;
   18600 
   18601        or this:
   18602         char *p;
   18603         ((int *) p)++;
   18604 
   18605        is no longer accepted for C++ and will not be accepted for C and
   18606        Objective-C in a future version.
   18607      * The conditional-expression-as-lvalue extension has been deprecated
   18608        for C and Objective-C. In particular, code like this:
   18609         int a, b, c;
   18610         (a ? b : c) = 2;
   18611 
   18612        will not be accepted for C and Objective-C in a future version.
   18613      * The compound-expression-as-lvalue extension has been deprecated for
   18614        C and Objective-C. In particular, code like this:
   18615         int a, b;
   18616         (a, b) = 2;
   18617 
   18618        will not be accepted for C and Objective-C in a future version. A
   18619        possible non-intrusive workaround is the following:
   18620         (*(a, &b)) = 2;
   18621 
   18622      * Several [10]built-in functions such as __builtin_popcount for
   18623        counting bits, finding the highest and lowest bit in a word, and
   18624        parity have been added.
   18625      * The -fwritable-strings option has been deprecated and will be
   18626        removed.
   18627      * Many C math library functions are now recognized as built-ins and
   18628        optimized.
   18629      * The C, C++, and Objective-C compilers can now handle source files
   18630        written in any character encoding supported by the host C library.
   18631        The default input character set is taken from the current locale,
   18632        and may be overridden with the -finput-charset command line option.
   18633        In the future we will add support for inline encoding markers.
   18634 
   18635   [11]C++
   18636 
   18637      * G++ is now much closer to full conformance to the ISO/ANSI C++
   18638        standard. This means, among other things, that a lot of invalid
   18639        constructs which used to be accepted in previous versions will now
   18640        be rejected. It is very likely that existing C++ code will need to
   18641        be fixed. This document lists some of the most common issues.
   18642      * A hand-written recursive-descent C++ parser has replaced the
   18643        YACC-derived C++ parser from previous GCC releases. The new parser
   18644        contains much improved infrastructure needed for better parsing of
   18645        C++ source codes, handling of extensions, and clean separation
   18646        (where possible) between proper semantics analysis and parsing. The
   18647        new parser fixes many bugs that were found in the old parser.
   18648      * You must now use the typename and template keywords to disambiguate
   18649        dependent names, as required by the C++ standard.
   18650         struct K {
   18651           typedef int mytype_t;
   18652         };
   18653 
   18654         template <class T1> struct A {
   18655           template <class T2> struct B {
   18656               void callme(void);
   18657             };
   18658 
   18659           template <int N> void bar(void)
   18660           {
   18661             // Use 'typename' to tell the parser that T1::mytype_t names
   18662             //  a type. This is needed because the name is dependent (in
   18663             //  this case, on template parameter T1).
   18664             typename T1::mytype_t x;
   18665             x = 0;
   18666           }
   18667         };
   18668 
   18669         template <class T> void template_func(void)
   18670         {
   18671           // Use 'template' to prefix member templates within
   18672           //  dependent types (a has type A<T>, which depends on
   18673           //  the template parameter T).
   18674           A<T> a;
   18675           a.template bar<0>();
   18676 
   18677           // Use 'template' to tell the parser that B is a nested
   18678           //  template class (dependent on template parameter T), and
   18679           //  'typename' because the whole A<T>::B<int> is
   18680           //  the name of a type (again, dependent).
   18681           typename A<T>::template B<int> b;
   18682           b.callme();
   18683         }
   18684 
   18685         void non_template_func(void)
   18686         {
   18687           // Outside of any template class or function, no names can be
   18688           //  dependent, so the use of the keyword 'typename' and 'template'
   18689           //  is not needed (and actually forbidden).
   18690           A<K> a;
   18691           a.bar<0>();
   18692           A<K>::B<float> b;
   18693           b.callme();
   18694         }
   18695      * In a template definition, unqualified names will no longer find
   18696        members of a dependent base (as specified by [temp.dep]/3 in the
   18697        C++ standard). For example,
   18698         template <typename T> struct B {
   18699           int m;
   18700           int n;
   18701           int f ();
   18702           int g ();
   18703         };
   18704         int n;
   18705         int g ();
   18706         template <typename T> struct C : B<T> {
   18707           void h ()
   18708           {
   18709             m = 0; // error
   18710             f ();  // error
   18711             n = 0; // ::n is modified
   18712             g ();  // ::g is called
   18713           }
   18714         };
   18715        You must make the names dependent, e.g. by prefixing them with
   18716        this->. Here is the corrected definition of C<T>::h,
   18717         template <typename T> void C<T>::h ()
   18718         {
   18719           this->m = 0;
   18720           this->f ();
   18721           this->n = 0
   18722           this->g ();
   18723         }
   18724        As an alternative solution (unfortunately not backwards compatible
   18725        with GCC 3.3), you may use using declarations instead of this->:
   18726         template <typename T> struct C : B<T> {
   18727           using B<T>::m;
   18728           using B<T>::f;
   18729           using B<T>::n;
   18730           using B<T>::g;
   18731           void h ()
   18732           {
   18733             m = 0;
   18734             f ();
   18735             n = 0;
   18736             g ();
   18737           }
   18738         };
   18739      * In templates, all non-dependent names are now looked up and bound
   18740        at definition time (while parsing the code), instead of later when
   18741        the template is instantiated. For instance:
   18742         void foo(int);
   18743 
   18744         template <int> struct A {
   18745           static void bar(void){
   18746             foo('a');
   18747           }
   18748         };
   18749 
   18750         void foo(char);
   18751 
   18752         int main()
   18753         {
   18754           A<0>::bar();    // Calls foo(int), used to call foo(char).
   18755         }
   18756 
   18757      * In an explicit instantiation of a class template, you must use
   18758        class or struct before the template-id:
   18759         template <int N>
   18760         class A {};
   18761 
   18762         template A<0>;         // error, not accepted anymore
   18763         template class A<0>;   // OK
   18764      * The "named return value" and "implicit typename" extensions have
   18765        been removed.
   18766      * Default arguments in function types have been deprecated and will
   18767        be removed.
   18768      * ARM-style name-injection of friend declarations has been deprecated
   18769        and will be removed. For example: struct S { friend void f(); };
   18770        void g() { f(); } will not be accepted by future versions of G++;
   18771        instead a declaration of "f" will need to be present outside of the
   18772        scope of "S".
   18773      * Covariant returns are implemented for all but varadic functions
   18774        that require an adjustment.
   18775      * When -pedantic is used, G++ now issues errors about spurious
   18776        semicolons. For example,
   18777         namespace N {}; // Invalid semicolon.
   18778         void f() {}; // Invalid semicolon.
   18779      * G++ no longer accepts attributes for a declarator after the
   18780        initializer associated with that declarator. For example,
   18781         X x(1) __attribute__((...));
   18782        is no longer accepted. Instead, use:
   18783         X x __attribute__((...)) (1);
   18784      * Inside the scope of a template class, the name of the class itself
   18785        can be treated as either a class or a template. So GCC used to
   18786        accept the class name as argument of type template, and template
   18787        template parameter. However this is not C++ standard compliant. Now
   18788        the name is not treated as a valid template template argument
   18789        unless you qualify the name by its scope. For example, the code
   18790        below no longer compiles.
   18791         template <template <class> class TT> class X {};
   18792         template <class T> class Y {
   18793           X<Y> x; // Invalid, Y is always a type template parameter.
   18794         };
   18795        The valid code for the above example is
   18796           X< ::Y> x; // Valid.
   18797        (Notice the space between < and : to prevent GCC to interpret this
   18798        as a digraph for [.)
   18799      * Friend declarations that refer to template specializations are
   18800        rejected if the template has not already been declared. For
   18801        example,
   18802         template <typename T>
   18803         class C {
   18804           friend void f<> (C&);
   18805         };
   18806        is rejected. You must first declare f as a template,
   18807         template <typename T>
   18808         void f(T);
   18809      * In case of friend declarations, every name used in the friend
   18810        declaration must be accessible at the point of that declaration.
   18811        Previous versions of G++ used to be less strict about this and
   18812        allowed friend declarations for private class members, for example.
   18813        See the ISO C++ Standard Committee's [12]defect report #209 for
   18814        details.
   18815      * Declaration of member functions of class templates as friends are
   18816        supported. For example,
   18817         template <typename T> struct A {
   18818           void f();
   18819         };
   18820         class C {
   18821           template <typename T> friend void A<T>::f();
   18822         };
   18823      * You must use template <> to introduce template specializations, as
   18824        required by the standard. For example,
   18825         template <typename T>
   18826         struct S;
   18827 
   18828         struct S<int> { };
   18829        is rejected. You must write,
   18830         template <> struct S<int> {};
   18831      * G++ used to accept code like this,
   18832         struct S {
   18833           int h();
   18834           void f(int i = g());
   18835           int g(int i = h());
   18836         };
   18837        This behavior is not mandated by the standard. Now G++ issues an
   18838        error about this code. To avoid the error, you must move the
   18839        declaration of g before the declaration of f. The default arguments
   18840        for g must be visible at the point where it is called.
   18841      * The C++ ABI Section 3.3.3 specifications for the array construction
   18842        routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return
   18843        NULL when the allocator argument returns NULL. These changes are
   18844        incorporated into the libstdc++ runtime library.
   18845      * Using a name introduced by a typedef in a friend declaration or in
   18846        an explicit instantiation is now rejected, as specified by the ISO
   18847        C++ standard.
   18848         class A;
   18849         typedef A B;
   18850         class C {
   18851           friend class B;      // error, no typedef name here
   18852           friend B;            // error, friend always needs class/struct/enum
   18853           friend class A;      // OK
   18854         };
   18855 
   18856         template <int> class Q {};
   18857         typedef Q<0> R;
   18858         template class R;      // error, no typedef name here
   18859         template class Q<0>;   // OK
   18860      * When allocating an array with a new expression, GCC used to allow
   18861        parentheses around the type name. This is actually ill-formed and
   18862        it is now rejected:
   18863         int* a = new (int)[10];    // error, not accepted anymore
   18864         int* a = new int[10];      // OK
   18865      * When binding an rvalue of class type to a reference, the copy
   18866        constructor of the class must be accessible. For instance, consider
   18867        the following code:
   18868         class A
   18869         {
   18870         public:
   18871           A();
   18872 
   18873         private:
   18874           A(const A&);   // private copy ctor
   18875         };
   18876 
   18877         A makeA(void);
   18878         void foo(const A&);
   18879 
   18880         void bar(void)
   18881         {
   18882           foo(A());       // error, copy ctor is not accessible
   18883           foo(makeA());   // error, copy ctor is not accessible
   18884 
   18885           A a1;
   18886           foo(a1);        // OK, a1 is a lvalue
   18887         }
   18888        This might be surprising at first sight, especially since most
   18889        popular compilers do not correctly implement this rule ([13]further
   18890        details).
   18891      * When forming a pointer to member or a pointer to member function,
   18892        access checks for class visibility (public, protected, private) are
   18893        now performed using the qualifying scope of the name itself. This
   18894        is better explained with an example:
   18895         class A
   18896         {
   18897         public:
   18898           void pub_func();
   18899         protected:
   18900           void prot_func();
   18901         private:
   18902           void priv_func();
   18903         };
   18904 
   18905         class B : public A
   18906         {
   18907         public:
   18908           void foo()
   18909           {
   18910             &A::pub_func;   // OK, pub_func is accessible through A
   18911             &A::prot_func;  // error, cannot access prot_func through A
   18912             &A::priv_func;  // error, cannot access priv_func through A
   18913 
   18914             &B::pub_func;   // OK, pub_func is accessible through B
   18915             &B::prot_func;  // OK, can access prot_func through B (within B)
   18916             &B::priv_func;  // error, cannot access priv_func through B
   18917           }
   18918         };
   18919 
   18920     Runtime Library (libstdc++)
   18921 
   18922      * Optimization work:
   18923           + Streamlined streambuf, filebuf, separate synched with C
   18924             Standard I/O streambuf.
   18925           + All formatted I/O now uses cached locale information.
   18926           + STL optimizations (memory/speed for list, red-black trees as
   18927             used by sets and maps).
   18928           + More use of GCC builtins.
   18929           + String optimizations (avoid contention on
   18930             increment/decrement-and-test of the reference count in the
   18931             empty-string object, constructor from input_iterators
   18932             speedup).
   18933      * Static linkage size reductions.
   18934      * Large File Support (files larger than 2 GB on 32-bit systems).
   18935      * Wide character and variable encoding filebuf work (UTF-8, Unicode).
   18936      * Generic character traits.
   18937      * Also support wchar_t specializations on Mac OS 10.3.x, FreeBSD 5.x,
   18938        Solaris 2.7 and above, AIX 5.x, Irix 6.5.
   18939      * The allocator class is now standard-conformant, and two additional
   18940        extension allocators have been added, mt_alloc and
   18941        bitmap_allocator.
   18942      * PCH support: -include bits/stdc++.h (2x compile speedup).
   18943      * Rewrote __cxa_demangle with support for C++ style allocators.
   18944      * New debug modes for STL containers and iterators.
   18945      * Testsuite rewrite: five times as many tests, plus increasingly
   18946        sophisticated tests, including I/O, MT, multi-locale, wide and
   18947        narrow characters.
   18948      * Use current versions of GNU "autotools" for build/configuration.
   18949 
   18950   Objective-C
   18951 
   18952      * The Objective-C front end has been updated to include the numerous
   18953        bug fixes and enhancements previously available only in Apple's
   18954        version of GCC. These include:
   18955           + Structured exception (@try... @catch... @finally, @throw) and
   18956             synchronization (@synchronized) support. These are accessible
   18957             via the -fobjc-exceptions switch; as of this writing, they may
   18958             only be used in conjunction with -fnext-runtime on Mac OS X
   18959             10.3 and later. See [14]Options Controlling Objective-C
   18960             Dialect for more information.
   18961           + An overhaul of @encode logic. The C99 _Bool and C++ bool type
   18962             may now be encoded as 'B'. In addition, the back-end/codegen
   18963             dependencies have been removed.
   18964           + An overhaul of message dispatch construction, ensuring that
   18965             the various receiver types (and casts thereof) are handled
   18966             properly, and that correct diagnostics are issued.
   18967           + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
   18968             (-freplace-objc-classes) debugging modes, currently available
   18969             on Mac OS X 10.3 and later. See [15]Options Controlling
   18970             Objective-C Dialect for more information.
   18971           + Access to optimized runtime entry points (-fno-nil-receivers )
   18972             on the assumption that message receivers are never nil. This
   18973             is currently available on Mac OS X 10.3 and later. See
   18974             [16]Options Controlling Objective-C Dialect for more
   18975             information.
   18976 
   18977   Java
   18978 
   18979      * Compiling a .jar file will now cause non-.class entries to be
   18980        automatically compiled as resources.
   18981      * libgcj has been ported to Darwin.
   18982      * Jeff Sturm has adapted Jan Hubicka's call graph optimization code
   18983        to gcj.
   18984      * libgcj has a new gcjlib URL type; this lets URLClassLoader load
   18985        code from shared libraries.
   18986      * libgcj has been much more completely merged with [17]GNU Classpath.
   18987      * Class loading is now much more correct; in particular the caller's
   18988        class loader is now used when that is required.
   18989      * [18]Eclipse 2.x will run out of the box using gij.
   18990      * Parts of java.nio have been implemented. Direct and indirect
   18991        buffers work, as do fundamental file and socket operations.
   18992      * java.awt has been improved, though it is still not ready for
   18993        general use.
   18994      * The HTTP protocol handler now uses HTTP/1.1 and can handle the POST
   18995        method.
   18996      * The MinGW port has matured. Enhancements include socket timeout
   18997        support, thread interruption, improved Runtime.exec() handling and
   18998        support for accented characters in filenames.
   18999 
   19000   Fortran
   19001 
   19002      * Fortran improvements are listed in the [19]Fortran documentation.
   19003 
   19004 New Targets and Target Specific Improvements
   19005 
   19006   Alpha
   19007 
   19008      * Several [20]built-in functions have been added such as
   19009        __builtin_alpha_zap to allow utilizing the more obscure
   19010        instructions of the CPU.
   19011      * Parameter passing of complex arguments has changed to match the
   19012        ABI. This change is incompatible with previous GCC versions, but
   19013        does fix compatibility with the Tru64 compiler and several corner
   19014        cases where GCC was incompatible with itself.
   19015 
   19016   ARM
   19017 
   19018      * Nicolas Pitre has contributed his hand-coded floating-point support
   19019        code for ARM. It is both significantly smaller and faster than the
   19020        existing C-based implementation, even when building applications
   19021        for Thumb. The arm-elf configuration has been converted to use the
   19022        new code.
   19023      * Support for the Intel's iWMMXt architecture, a second generation
   19024        XScale processor, has been added. Enabled at run time with the
   19025        -mcpu=iwmmxt command line switch.
   19026      * A new ARM target has been added: arm-wince-pe. This is similar to
   19027        the arm-pe target, but it defaults to using the APCS32 ABI.
   19028      * The existing ARM pipeline description has been converted to the use
   19029        the [21]DFA processor pipeline model. There is not much change in
   19030        code performance, but the description is now [22]easier to
   19031        understand.
   19032      * Support for the Cirrus EP9312 Maverick floating point co-processor
   19033        added. Enabled at run time with the -mcpu=ep9312 command line
   19034        switch. Note however that the multilibs to support this chip are
   19035        currently disabled in gcc/config/arm/t-arm-elf, so if you want to
   19036        enable their production you will have to uncomment the entries in
   19037        that file.
   19038 
   19039   H8/300
   19040 
   19041      * Support for long long has been added.
   19042      * Support for saveall attribute has been added.
   19043      * Pavel Pisa contributed hand-written 32-bit-by-32-bit division code
   19044        for H8/300H and H8S, which is much faster than the previous
   19045        implementation.
   19046      * A lot of small performance improvements.
   19047 
   19048   IA-32/AMD64 (x86-64)
   19049 
   19050      * Tuning for K8 (AMD Opteron/Athlon64) core is available via
   19051        -march=k8 and -mcpu=k8.
   19052      * Scalar SSE code generation carefully avoids reformatting penalties,
   19053        hidden dependencies and minimizes the number of uops generated on
   19054        both Intel and AMD CPUs.
   19055      * Vector MMX and SSE operands are now passed in registers to improve
   19056        performance and match the argument passing convention used by the
   19057        Intel C++ Compiler. As a result it is not possible to call
   19058        functions accepting vector arguments compiled by older GCC version.
   19059      * Conditional jump elimination is now more aggressive on modern CPUs.
   19060      * The Athlon ports has been converted to use the DFA processor
   19061        pipeline description.
   19062      * Optimization of indirect tail calls is now possible in a similar
   19063        fashion as direct sibcall optimization.
   19064      * Further small performance improvements.
   19065      * -m128bit-long-double is now less buggy.
   19066      * __float128 support in 64-bit compilation.
   19067      * Support for data structures exceeding 2GB in 64-bit mode.
   19068      * -mcpu has been renamed to -mtune.
   19069 
   19070   IA-64
   19071 
   19072      * Tuning code for the Itanium 2 processor has been added. The
   19073        generation of code tuned for Itanium 2 (option -mtune=itanium2) is
   19074        enabled by default now. To generate code tuned for Itanium 1 the
   19075        option -mtune=itanium1 should be used.
   19076      * [23]DFA processor pipeline descriptions for the IA-64 processors
   19077        have been added. This resulted in about 3% improvement on the
   19078        SPECInt2000 benchmark for Itanium 2.
   19079      * Instruction bundling for the IA-64 processors has been rewritten
   19080        using the DFA pipeline hazard recognizer. It resulted in about 60%
   19081        compiler speedup on the SPECInt2000 C programs.
   19082 
   19083   M32R
   19084 
   19085      * Support for the M32R/2 processor has been added by Renesas.
   19086      * Support for an M32R GNU/Linux target and PIC code generation has
   19087        been added by Renesas.
   19088 
   19089   M68000
   19090 
   19091      * Bernardo Innocenti (Develer S.r.l.) has contributed the
   19092        m68k-uclinux target, based on former work done by Paul Dale
   19093        (SnapGear Inc.). Code generation for the ColdFire processors family
   19094        has been enhanced and extended to support the MCF 53xx and MCF 54xx
   19095        cores, integrating former work done by Peter Barada (Motorola).
   19096 
   19097   MIPS
   19098 
   19099     Processor-specific changes
   19100 
   19101      * Support for the RM7000 and RM9000 processors has been added. It can
   19102        be selected using the -march compiler option and should work with
   19103        any MIPS I (mips-*) or MIPS III (mips64-*) configuration.
   19104      * Support for revision 2 of the MIPS32 ISA has been added. It can be
   19105        selected with the command-line option -march=mips32r2.
   19106      * There is a new option, -mfix-sb1, to work around certain SB-1
   19107        errata.
   19108 
   19109     Configuration
   19110 
   19111      * It is possible to customize GCC using the following configure-time
   19112        options:
   19113           + --with-arch, which specifies the default value of the -march
   19114             option.
   19115           + --with-tune, which specifies the default value of the -mtune
   19116             option.
   19117           + --with-abi, which specifies the default ABI.
   19118           + --with-float=soft, which tells GCC to use software floating
   19119             point by default.
   19120           + --with-float=hard, which tells GCC to use hardware floating
   19121             point by default.
   19122      * A 64-bit GNU/Linux port has been added. The associated
   19123        configurations are mips64-linux-gnu and mips64el-linux-gnu.
   19124      * The 32-bit GNU/Linux port now supports Java.
   19125      * The IRIX 6 configuration now supports the o32 ABI and will build
   19126        o32 multilibs by default. This support is compatible with both
   19127        binutils and the SGI tools, but note that several features,
   19128        including debugging information and DWARF2 exception handling, are
   19129        only available when using the GNU assembler. Use of the GNU
   19130        assembler and linker (version 2.15 or above) is strongly
   19131        recommended.
   19132      * The IRIX 6 configuration now supports 128-bit long doubles.
   19133      * There are two new RTEMS-specific configurations, mips-rtems and
   19134        mipsel-rtems.
   19135      * There are two new *-elf configurations, mipsisa32r2-elf and
   19136        mipsisa32r2el-elf.
   19137 
   19138     General
   19139 
   19140      * Several [24]ABI bugs have been fixed. Unfortunately, these changes
   19141        will break binary compatibility with earlier releases.
   19142      * GCC can now use explicit relocation operators when generating
   19143        -mabicalls code. This behavior is controlled by -mexplicit-relocs
   19144        and can have several performance benefits. For example:
   19145           + It allows for more optimization of GOT accesses, including
   19146             better scheduling and redundancy elimination.
   19147           + It allows sibling calls to be implemented as jumps.
   19148           + n32 and n64 leaf functions can use a call-clobbered global
   19149             pointer instead of $28.
   19150           + The code to set up $gp can be removed from functions that
   19151             don't need it.
   19152      * A new option, -mxgot, allows the GOT to be bigger than 64k. This
   19153        option is equivalent to the assembler's -xgot option and should be
   19154        used instead of -Wa,-xgot.
   19155      * Frame pointer elimination is now supported when generating 64-bit
   19156        MIPS16 code.
   19157      * Inline block moves have been optimized to take more account of
   19158        alignment information.
   19159      * Many internal changes have been made to the MIPS port, mostly aimed
   19160        at reducing the reliance on assembler macros.
   19161 
   19162   PowerPC
   19163 
   19164      * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
   19165        [25]ABI incompatibilities regarding the way parameters are passed
   19166        during functions calls. These changes may result in incompatibility
   19167        between code compiled with GCC 3.3 and GCC 3.4.
   19168 
   19169     PowerPC Darwin
   19170 
   19171      * Support for shared/dylib gcc libraries has been added. It is
   19172        enabled by default on powerpc-apple-darwin7.0.0 and up.
   19173      * Libgcj is enabled by default. On systems older than
   19174        powerpc-apple-darwin7.0.0 you need to install dlcompat.
   19175      * 128-bit IBM extended precision format support added for long
   19176        double.
   19177 
   19178     PowerPC64 GNU/Linux
   19179 
   19180      * By default, PowerPC64 GNU/Linux now uses natural alignment of
   19181        structure elements. The old four byte alignment for double, with
   19182        special rules for a struct starting with a double, can be chosen
   19183        with -malign-power. This change may result in incompatibility
   19184        between code compiled with GCC 3.3 and GCC 3.4.
   19185      * -mabi=altivec is now the default rather than -mabi=no-altivec.
   19186      * 128-bit IBM extended precision format support added for long
   19187        double.
   19188 
   19189   S/390 and zSeries
   19190 
   19191      * New command-line options allow to specify the intended execution
   19192        environment for generated code:
   19193           + -mesa/-mzarch allows to specify whether to generate code
   19194             running in ESA/390 mode or in z/Architecture mode (this is
   19195             applicable to 31-bit code only).
   19196           + -march allows to specify a minimum processor architecture
   19197             level (g5, g6, z900, or z990).
   19198           + -mtune allows to specify which processor to tune for.
   19199      * It is possible to customize GCC using the following configure-time
   19200        options:
   19201           + --with-mode, which specifies whether to default to assuming
   19202             ESA/390 or z/Architecture mode.
   19203           + --with-arch, which specifies the default value of the -march
   19204             option.
   19205           + --with-tune, which specifies the default value of the -mtune
   19206             option.
   19207      * Support for the z990 processor has been added, and can be selected
   19208        using -march=z990 or -mtune=z990. This includes instruction
   19209        scheduling tuned for the superscalar instruction pipeline of the
   19210        z990 processor as well as support for all new instructions provided
   19211        by the long-displacement facility.
   19212      * Support to generate 31-bit code optimized for zSeries processors
   19213        (running in ESA/390 or in z/Architecture mode) has been added. This
   19214        can be selected using -march=z900 and -mzarch respectively.
   19215      * Instruction scheduling for the z900 and z990 processors now uses
   19216        the DFA pipeline hazard recognizer.
   19217      * GCC no longer generates code to maintain a stack backchain,
   19218        previously used to generate stack backtraces for debugging
   19219        purposes. As replacement that does not incur runtime overhead,
   19220        DWARF-2 call frame information is provided by GCC; this is
   19221        supported by GDB 6.1. The old behavior can be restored using the
   19222        -mbackchain option.
   19223      * The stack frame size of functions may now exceed 2 GB in 64-bit
   19224        code.
   19225      * A port for the 64-bit IBM TPF operating system has been added; the
   19226        configuration is s390x-ibm-tpf. This configuration is supported as
   19227        cross-compilation target only.
   19228      * Various changes to improve the generated code have been
   19229        implemented, including:
   19230           + GCC now uses the MULTIPLY AND ADD and MULTIPLY AND SUBTRACT
   19231             instructions to significantly speed up many floating-point
   19232             applications.
   19233           + GCC now uses the ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL
   19234             WITH BORROW instructions to speed up long long arithmetic.
   19235           + GCC now uses the SEARCH STRING instruction to implement
   19236             strlen().
   19237           + In many cases, function call overhead for 31-bit code has been
   19238             reduced by placing the literal pool after the function code
   19239             instead of after the function prolog.
   19240           + Register 14 is no longer reserved in 64-bit code.
   19241           + Handling of global register variables has been improved.
   19242 
   19243   SPARC
   19244 
   19245      * The option -mflat is deprecated.
   19246      * Support for large (> 2GB) frames has been added to the 64-bit port.
   19247      * Several [26]ABI bugs have been fixed. Unfortunately, these changes
   19248        will break binary compatibility with earlier releases.
   19249      * The default debugging format has been switched from STABS to
   19250        DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
   19251        the default debugging format for 64-bit code on Solaris.
   19252 
   19253   SuperH
   19254 
   19255      * Support for the SH2E processor has been added. Enabled at run time
   19256        with the -m2e command line switch, or at configure time by
   19257        specifying sh2e as the machine part of the target triple.
   19258 
   19259   V850
   19260 
   19261      * Support for the Mitsubishi V850E1 processor has been added. This is
   19262        a variant of the V850E processor with some additional debugging
   19263        instructions.
   19264 
   19265   Xtensa
   19266 
   19267      * Several ABI bugs have been fixed. Unfortunately, these changes
   19268        break binary compatibility with earlier releases.
   19269           + For big-endian processors, the padding of aggregate return
   19270             values larger than a word has changed. If the size of an
   19271             aggregate return value is not a multiple of 32 bits, previous
   19272             versions of GCC inserted padding in the most-significant bytes
   19273             of the first return value register. Aggregates larger than a
   19274             word are now padded in the least-significant bytes of the last
   19275             return value register used. Aggregates smaller than a word are
   19276             still padded in the most-significant bytes. The return value
   19277             padding has not changed for little-endian processors.
   19278           + Function arguments with 16-byte alignment are now properly
   19279             aligned.
   19280           + The implementation of the va_list type has changed. A va_list
   19281             value created by va_start from a previous release cannot be
   19282             used with va_arg from this release, or vice versa.
   19283      * More processor configuration options for Xtensa processors are
   19284        supported:
   19285           + the ABS instruction is now optional;
   19286           + the ADDX* and SUBX* instructions are now optional;
   19287           + an experimental CONST16 instruction can be used to synthesize
   19288             constants instead of loading them from constant pools.
   19289        These and other Xtensa processor configuration options can no
   19290        longer be enabled or disabled by command-line options; the
   19291        processor configuration must be specified by the xtensa-config.h
   19292        header file when building GCC. Additionally, the
   19293        -mno-serialize-volatile option is no longer supported.
   19294 
   19295 [27]Obsolete Systems
   19296 
   19297    Support for a number of older systems has been declared obsolete in GCC
   19298    3.4. Unless there is activity to revive them, the next release of GCC
   19299    will have their sources permanently removed.
   19300 
   19301    All configurations of the following processor architectures have been
   19302    declared obsolete:
   19303      * Mitsubishi D30V, d30v-*
   19304      * AT&T DSP1600 and DSP1610, dsp16xx-*
   19305      * Intel 80960, i960
   19306 
   19307    Also, some individual systems have been obsoleted:
   19308      * ARM Family
   19309           + Support for generating code for operation in APCS/26 mode
   19310             (-mapcs-26).
   19311      * IBM ESA/390
   19312           + "Bigfoot" port, i370-*. (The other port, s390-*, is actively
   19313             maintained and supported.)
   19314      * Intel 386 family
   19315           + MOSS, i?86-moss-msdos and i?86-*-moss*
   19316           + NCR 3000 running System V r.4, i?86-ncr-sysv4*
   19317           + FreeBSD with a.out object format, i?86-*-freebsd*aout* and
   19318             i?86-*-freebsd2*
   19319           + GNU/Linux with a.out object format, i?86-linux*aout*
   19320           + GNU/Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
   19321           + Interix versions before Interix 3, i?86-*-interix
   19322           + Mach microkernel, i?86-mach*
   19323           + SCO UnixWare with UDK, i?86-*-udk*
   19324           + Generic System V releases 1, 2, and 3, i?86-*-sysv[123]*
   19325           + VSTa microkernel, i386-*-vsta
   19326      * Motorola M68000 family
   19327           + HPUX, m68k-hp-hpux* and m68000-hp-hpux*
   19328           + NetBSD with a.out object format (before NetBSD 1.4),
   19329             m68k-*-*-netbsd* except m68k-*-*-netbsdelf*
   19330           + Generic System V r.4, m68k-*-sysv4*
   19331      * VAX
   19332           + Generic VAX, vax-*-* (This is generic VAX only; we have not
   19333             obsoleted any VAX triples for specific operating systems.)
   19334 
   19335 Documentation improvements
   19336 
   19337 Other significant improvements
   19338 
   19339      * The build system has undergone several significant cleanups.
   19340        Subdirectories will only be configured if they are being built, and
   19341        all subdirectory configures are run from the make command. The top
   19342        level has been autoconfiscated.
   19343      * Building GCC no longer writes to its source directory. This should
   19344        help those wishing to share a read-only source directory over NFS
   19345        or build from a CD. The exceptions to this feature are if you
   19346        configure with either --enable-maintainer-mode or
   19347        --enable-generated-files-in-srcdir.
   19348      * The -W warning option has been renamed to -Wextra, which is more
   19349        easily understood. The older spelling will be retained for
   19350        backwards compatibility.
   19351      * Substantial improvements in compile time have been made,
   19352        particularly for non-optimizing compilations.
   19353      __________________________________________________________________
   19354 
   19355 [28]GCC 3.4.0
   19356 
   19357   Bug Fixes
   19358 
   19359    A vast number of bugs have been fixed in 3.4.0, too many to publish a
   19360    complete list here. [29]Follow this link to query the Bugzilla database
   19361    for the list of over 900 bugs fixed in 3.4.0. This is the list of all
   19362    bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
   19363    regressions.
   19364      __________________________________________________________________
   19365 
   19366 [30]GCC 3.4.1
   19367 
   19368   Bug Fixes
   19369 
   19370    This section lists the problem reports (PRs) from GCC's bug tracking
   19371    system that are known to be fixed in the 3.4.1 release. This list might
   19372    not be complete (that is, it is possible that some PRs that have been
   19373    fixed are not listed here).
   19374 
   19375     Bootstrap failures
   19376 
   19377      * [31]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
   19378        emitted - PIC related
   19379      * [32]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
   19380      * [33]14760 A bug in configure.in prevents using both
   19381        --program-suffix and --program-prefix
   19382      * [34]14671 [hppa64] bootstrap fails: ICE in
   19383        save_call_clobbered_regs, in caller_save.c
   19384      * [35]15093 [alpha][Java] make bootstrap fails to configure libffi on
   19385        Alpha
   19386      * [36]15178 Solaris 9/x86 fails linking after stage 3
   19387 
   19388     Multi-platform internal compiler errors (ICEs)
   19389 
   19390      * [37]12753 (preprocessor) Memory corruption in preprocessor on bad
   19391        input
   19392      * [38]13985 ICE in gcc.c-torture/compile/930621-1.c
   19393      * [39]14810 (c++) tree check failures with invalid code involving
   19394        templates
   19395      * [40]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
   19396        cp/parser.c
   19397      * [41]15044 (c++) ICE on syntax error, template header
   19398      * [42]15057 (c++) Compiling of conditional value throw constructs
   19399        cause a segmentation violation
   19400      * [43]15064 (c++) typeid of template parameter gives ICE
   19401      * [44]15142 (c++) ICE when passing a string where a char* is expected
   19402        in a throw statement
   19403      * [45]15159 ICE in rtl_verify_flow_info_1
   19404      * [46]15165 (c++) ICE in instantiate_template
   19405      * [47]15193 Unary minus using pointer to V4SF vector causes
   19406        -fforce-mem to exhaust all memory
   19407      * [48]15209 (c++) Runs out of memory with packed structs
   19408      * [49]15227 (c++) Trouble with invalid function definition
   19409      * [50]15285 (c++) instantiate_type ICE when forming pointer to
   19410        template function
   19411      * [51]15299 (c++) ICE in resolve_overloaded_unification
   19412      * [52]15329 (c++) ICE on constructor of member template
   19413      * [53]15550 ICE in extract_insn, in recog.c
   19414      * [54]15554 (c++) ICE in tsubst_copy, in cp/pt.c
   19415      * [55]15640 (c++) ICE on invalid code in arg_assoc, in
   19416        cp/name-lookup.c
   19417      * [56]15666 [unit-at-a-time] Gcc abort on valid code
   19418      * [57]15696 (c++) ICE with bad pointer-to-member code
   19419      * [58]15701 (c++) ICE with friends and template template parameter
   19420      * [59]15761 ICE in do_SUBST, in combine.c
   19421      * [60]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
   19422 
   19423     Ada
   19424 
   19425      * [61]14538 All RTEMS targets broken for gnat
   19426 
   19427     C front end
   19428 
   19429      * [62]12391 missing warning about assigning to an incomplete type
   19430      * [63]14649 atan(1.0) should not be a constant expression
   19431      * [64]15004 [unit-at-a-time] no warning for unused paramater in
   19432        static function
   19433      * [65]15749 --pedantic-errors behaves differently from --pedantic
   19434        with C-compiler on GNU/Linux
   19435 
   19436     C++ compiler and library
   19437 
   19438      * [66]10646 non-const reference is incorrectly matched in a "const T"
   19439        partial specialization
   19440      * [67]12077 wcin.rdbuf()->in_avail() return value too high
   19441      * [68]13598 enc_filebuf doesn't work
   19442      * [69]14211 const_cast returns lvalue but should be rvalue
   19443      * [70]14220 num_put::do_put() undesired float/double behavior
   19444      * [71]14245 problem with user-defined allocators in std::basic_string
   19445      * [72]14340 libstdc++ Debug mode: failure to convert iterator to
   19446        const_iterator
   19447      * [73]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
   19448        FILE*
   19449      * [74]14668 no warning anymore for reevaluation of declaration
   19450      * [75]14775 LFS (large file support) tests missing
   19451      * [76]14821 Duplicate namespace alias declaration should not conflict
   19452      * [77]14930 Friend declaration ignored
   19453      * [78]14932 cannot use offsetof to get offsets of array elements in
   19454        g++ 3.4.0
   19455      * [79]14950 [non unit-at-a-time] always_inline does not mix with
   19456        templates and -O0
   19457      * [80]14962 g++ ignores #pragma redefine_extname
   19458      * [81]14975 Segfault on low-level write error during imbue
   19459      * [82]15002 Linewise stream input is unusably slow (std::string slow)
   19460      * [83]15025 compiler accepts redeclaration of template as
   19461        non-template
   19462      * [84]15046 [arm] Math functions misdetected by cross configuration
   19463      * [85]15069 a bit test on a variable of enum type is miscompiled
   19464      * [86]15074 g++ -lsupc++ still links against libstdc++
   19465      * [87]15083 spurious "statement has no effect" warning
   19466      * [88]15096 parse error with templates and pointer to const member
   19467      * [89]15287 combination of operator[] and operator .* fails in
   19468        templates
   19469      * [90]15317 __attribute__ unused in first parameter of constructor
   19470        gives error
   19471      * [91]15337 sizeof on incomplete type diagnostic
   19472      * [92]15361 bitset<>::_Find_next fails
   19473      * [93]15412 _GLIBCXX_ symbols symbols defined and used in different
   19474        namespaces
   19475      * [94]15427 valid code results in incomplete type error
   19476      * [95]15471 Incorrect member pointer offsets in anonymous
   19477        structs/unions
   19478      * [96]15503 nested template problem
   19479      * [97]15507 compiler hangs while laying out union
   19480      * [98]15542 operator & and template definitions
   19481      * [99]15565 SLES9: leading + sign for unsigned int with showpos
   19482      * [100]15625 friend defined inside a template fails to find static
   19483        function
   19484      * [101]15629 Function templates, overloads, and friend name injection
   19485      * [102]15742 'noreturn' attribute ignored in method of template
   19486        functions.
   19487      * [103]15775 Allocator::pointer consistently ignored
   19488      * [104]15821 Duplicate namespace alias within namespace rejected
   19489      * [105]15862 'enum yn' fails (confict with undeclared builtin)
   19490      * [106]15875 rejects pointer to member in template
   19491      * [107]15877 valid code using templates and anonymous enums is
   19492        rejected
   19493      * [108]15947 Puzzling error message for wrong destructor declaration
   19494        in template class
   19495      * [109]16020 cannot copy __gnu_debug::bitset
   19496      * [110]16154 input iterator concept too restrictive
   19497      * [111]16174 deducing top-level consts
   19498 
   19499     Java
   19500 
   19501      * [112]14315 Java compiler is not parallel make safe
   19502 
   19503     Fortran
   19504 
   19505      * [113]15151 [g77] incorrect logical i/o in 64-bit mode
   19506 
   19507     Objective-C
   19508 
   19509      * [114]7993 private variables cannot be shadowed in subclasses
   19510 
   19511     Optimization bugs
   19512 
   19513      * [115]15228 useless copies of floating point operands
   19514      * [116]15345 [non-unit-at-a-time] unreferenced nested inline
   19515        functions not optimized away
   19516      * [117]15945 Incorrect floating point optimization
   19517      * [118]15526 ftrapv aborts on 0 * (-1)
   19518      * [119]14690 Miscompiled POOMA tests
   19519      * [120]15112 GCC generates code to write to unchanging memory
   19520 
   19521     Preprocessor
   19522 
   19523      * [121]15067 Minor glitch in the source of cpp
   19524 
   19525     Main driver program bugs
   19526 
   19527      * [122]1963 collect2 interprets -oldstyle_liblookup as -o
   19528        ldstyle_liblookup
   19529 
   19530     x86-specific (Intel/AMD)
   19531 
   19532      * [123]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
   19533        section}
   19534 
   19535     HPPA-specific
   19536 
   19537      * [124]14782 GCC produces an unaligned data access at -O2
   19538      * [125]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
   19539      * [126]15202 ICE in reload_cse_simplify_operands, in postreload.c
   19540 
   19541     IA64-specific
   19542 
   19543      * [127]14610 __float80 constants incorrectly emitted
   19544      * [128]14813 init_array sections are initialized in the wrong order
   19545      * [129]14857 GCC segfault on duplicated asm statement
   19546      * [130]15598 Gcc 3.4 ICE on valid code
   19547      * [131]15653 Gcc 3.4 ICE on valid code
   19548 
   19549     MIPS-specific
   19550 
   19551      * [132]15189 wrong filling of delay slot with -march=mips1 -G0
   19552        -mno-split-addresses -mno-explicit-relocs
   19553      * [133]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
   19554        2.14.91
   19555      * [134]16144 Bogus reference to __divdf3 when -O1
   19556      * [135]16176 Miscompilation of unaligned data in MIPS backend
   19557 
   19558     PowerPC-specific
   19559 
   19560      * [136]11591 ICE in gcc.dg/altivec-5.c
   19561      * [137]12028 powerpc-eabispe produces bad sCOND operation
   19562      * [138]14478 rs6000 geu/ltu patterns generate incorrect code
   19563      * [139]14567 long double and va_arg complex args
   19564      * [140]14715 Altivec stack layout may overlap gpr save with stack
   19565        temps
   19566      * [141]14902 (libstdc++) Stream checking functions fail when -pthread
   19567        option is used.
   19568      * [142]14924 Compiler ICE on valid code
   19569      * [143]14960 -maltivec affects vector return with -mabi=no-altivec
   19570      * [144]15106 vector varargs failure passing from altivec to
   19571        non-altivec code for -m32
   19572      * [145]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
   19573        half-word operation
   19574      * [146]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
   19575        and stvx
   19576      * [147]15662 Segmentation fault when an exception is thrown - even if
   19577        try and catch are specified
   19578 
   19579     s390-specific
   19580 
   19581      * [148]15054 Bad code due to overlapping stack temporaries
   19582 
   19583     SPARC-specific
   19584 
   19585      * [149]15783 ICE with union assignment in 64-bit mode
   19586      * [150]15626 GCC 3.4 emits "ld: warning: relocation error:
   19587        R_SPARC_UA32"
   19588 
   19589     x86-64-specific
   19590 
   19591      * [151]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
   19592      * [152]14723 Backported -march=nocona from mainline
   19593      * [153]15290 __float128 failed to pass to function properly
   19594 
   19595     Cygwin/Mingw32-specific
   19596 
   19597      * [154]15250 Option -mms-bitfields support on GCC 3.4 is not
   19598        conformant to MS layout
   19599      * [155]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
   19600        worker on windows32 targets
   19601 
   19602     Bugs specific to embedded processors
   19603 
   19604      * [156]8309 [m68k] -m5200 produces erroneous SImode set of short
   19605        varaible on stack
   19606      * [157]13250 [SH] Gcc code for rotation clobbers the register, but
   19607        gcc continues to use the register as if it was not clobbered
   19608      * [158]13803 [coldfire] movqi operand constraints too restrictivefor
   19609        TARGET_COLDFIRE
   19610      * [159]14093 [SH] ICE for code when using -mhitachi option in SH
   19611      * [160]14457 [m6811hc] ICE with simple c++ source
   19612      * [161]14542 [m6811hc] ICE on simple source
   19613      * [162]15100 [SH] cc1plus got hang-up on
   19614        libstdc++-v3/testsuite/abi_check.cc
   19615      * [163]15296 [CRIS] Delayed branch scheduling causing invalid code on
   19616        cris-*
   19617      * [164]15396 [SH] ICE with -O2 -fPIC
   19618      * [165]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
   19619        ColdFire
   19620 
   19621     Testsuite problems (compiler not affected)
   19622 
   19623      * [166]11610 libstdc++ testcases 27_io/* don't work properly remotely
   19624      * [167]15488 (libstdc++) possibly insufficient file permissions for
   19625        executing test suite
   19626      * [168]15489 (libstdc++) testsuite_files determined incorrectly
   19627 
   19628     Documentation bugs
   19629 
   19630      * [169]13928 (libstdc++) no whatis info in some man pages generated
   19631        by doxygen
   19632      * [170]14150 Ada documentation out of date
   19633      * [171]14949 (c++) Need to document method visibility changes
   19634      * [172]15123 libstdc++-doc: Allocators.3 manpage is empty
   19635      __________________________________________________________________
   19636 
   19637 [173]GCC 3.4.2
   19638 
   19639   Bug Fixes
   19640 
   19641    This section lists the problem reports (PRs) from GCC's bug tracking
   19642    system that are known to be fixed in the 3.4.2 release. This list might
   19643    not be complete (that is, it is possible that some PRs that have been
   19644    fixed are not listed here).
   19645 
   19646     Bootstrap failures and issues
   19647 
   19648      * [174]16469 [mips-sgi-irix5.3] bootstrap fails in
   19649        libstdc++-v3/testsuite
   19650      * [175]16344 [hppa-linux-gnu] libstdc++'s PCH built by
   19651        profiledbootstrap does not work with the built compiler
   19652      * [176]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
   19653 
   19654     Multi-platform internal compiler errors (ICEs)
   19655 
   19656      * [177]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
   19657        cp_parser_class_specifier, in cp/parser.c
   19658      * [178]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   19659      * [179]15461 (c++) ICE due to NRV and inlining
   19660      * [180]15890 (c++) ICE in c_expand_expr, in c-common.c
   19661      * [181]16180 ICE: segmentation fault in RTL optimization
   19662      * [182]16224 (c++) ICE in write_unscoped_name (template/namespace)
   19663      * [183]16408 ICE: in delete_insn, in cfgrtl.c
   19664      * [184]16529 (c++) ICE for: namespace-alias shall not be declared as
   19665        the name of any other entity
   19666      * [185]16698 (c++) ICE with exceptions and declaration of __cxa_throw
   19667      * [186]16706 (c++) ICE in finish_member_declaration, in
   19668        cp/semantics.c
   19669      * [187]16810 (c++) Legal C++ program with cast gives ICE in
   19670        build_ptrmemfunc
   19671      * [188]16851 (c++) ICE when throwing a comma expression
   19672      * [189]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
   19673      * [190]16904 (c++) ICE in finish_class_member_access_expr, in
   19674        cp/typeck.c
   19675      * [191]16905 (c++) ICE (segfault) with exceptions
   19676      * [192]16964 (c++) ICE in cp_parser_class_specifier due to
   19677        redefinition
   19678      * [193]17068 (c++) ICE: tree check: expected class 'd', have 'x'
   19679        (identifier_node) in dependent_template_p, in cp/pt.c
   19680 
   19681     Preprocessor bugs
   19682 
   19683      * [194]16366 Preprocessor option -remap causes memory corruption
   19684 
   19685     Optimization
   19686 
   19687      * [195]15345 unreferenced nested inline functions not optimized away
   19688      * [196]16590 Incorrect execution when compiling with -O2
   19689      * [197]16693 Bitwise AND is lost when used within a cast to an enum
   19690        of the same precision
   19691      * [198]17078 Jump into if(0) substatement fails
   19692 
   19693     Problems in generated debug information
   19694 
   19695      * [199]13956 incorrect stabs for nested local variables
   19696 
   19697     C front end bugs
   19698 
   19699      * [200]16684 GCC should not warn about redundant redeclarations of
   19700        built-ins
   19701 
   19702     C++ compiler and library
   19703 
   19704      * [201]12658 Thread safety problems in locale::global() and
   19705        locale::locale()
   19706      * [202]13092 g++ accepts invalid pointer-to-member conversion
   19707      * [203]15320 Excessive memory consumption
   19708      * [204]16246 Incorrect template argument deduction
   19709      * [205]16273 Memory exhausted when using nested classes and virtual
   19710        functions
   19711      * [206]16401 ostringstream in gcc 3.4.x very slow for big data
   19712      * [207]16411 undefined reference to
   19713        __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
   19714        >::file()
   19715      * [208]16489 G++ incorrectly rejects use of a null constant integral
   19716        expression as a null constant pointer
   19717      * [209]16618 offsetof fails with constant member
   19718      * [210]16637 syntax error reported for valid input code
   19719      * [211]16717 __attribute__((constructor)) broken in C++
   19720      * [212]16813 compiler error in DEBUG version of range insertion
   19721        std::map::insert
   19722      * [213]16853 pointer-to-member initialization from incompatible one
   19723        accepted
   19724      * [214]16889 ambiguity is not detected
   19725      * [215]16959 Segmentation fault in ios_base::sync_with_stdio
   19726 
   19727     Java compiler and library
   19728 
   19729      * [216]7587 direct threaded interpreter not thread-safe
   19730      * [217]16473 ServerSocket accept() leaks file descriptors
   19731      * [218]16478 Hash synchronization deadlock with finalizers
   19732 
   19733     Alpha-specific
   19734 
   19735      * [219]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
   19736      * [220]16974 could not split insn (ice in final_scan_insn, in
   19737        final.c)
   19738 
   19739     x86-specific
   19740 
   19741      * [221]16298 ICE in output_operand
   19742      * [222]17113 ICE with SSE2 intrinsics
   19743 
   19744     x86-64 specific
   19745 
   19746      * [223]14697 libstdc++ couldn't find 32bit libgcc_s
   19747 
   19748     MIPS-specific
   19749 
   19750      * [224]15869 [mips64] No NOP after LW (with -mips1 -O0)
   19751      * [225]16325 [mips64] value profiling clobbers gp on mips
   19752      * [226]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
   19753        char[]s
   19754      * [227]16380 [mips64] Use of uninitialised register after dbra
   19755        conversion
   19756      * [228]16407 [mips64] Unaligned access to local variables
   19757      * [229]16643 [mips64] verify_local_live_at_start ICE after
   19758        crossjumping & cfgcleanup
   19759 
   19760     ARM-specific
   19761 
   19762      * [230]15927 THUMB -O2: strength-reduced iteration variable ends up
   19763        off by 1
   19764      * [231]15948 THUMB: ICE with non-commutative cbranch
   19765      * [232]17019 THUMB: bad switch statement in md code for
   19766        addsi3_cbranch_scratch
   19767 
   19768     IA64-specific
   19769 
   19770      * [233]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
   19771        (-mtune=merced)
   19772      * [234]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
   19773        (-mtune=itanium)
   19774      * [235]16278 Gcc failed to build Linux kernel with -mtune=merced
   19775      * [236]16414 ICE on valid code: typo in comparison of asm_noperands
   19776        result
   19777      * [237]16445 ICE on valid code: don't count ignored insns
   19778      * [238]16490 ICE (segfault) while compiling with -fprofile-use
   19779      * [239]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
   19780 
   19781     PowerPC-specific
   19782 
   19783      * [240]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
   19784      * [241]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
   19785        issue)
   19786 
   19787     SPARC-specific
   19788 
   19789      * [242]16199 ICE while compiling apache 2.0.49
   19790      * [243]16416 -m64 doesn't imply -mcpu=v9 anymore
   19791      * [244]16430 ICE when returning non-C aggregates larger than 16 bytes
   19792 
   19793     Bugs specific to embedded processors
   19794 
   19795      * [245]16379 [m32r] can't output large model function call of memcpy
   19796      * [246]17093 [m32r] ICE with -msdata=use -O0
   19797      * [247]17119 [m32r] ICE at switch case 0x8000
   19798 
   19799     DJGPP-specific
   19800 
   19801      * [248]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
   19802 
   19803     Alpha Tru64-specific
   19804 
   19805      * [249]16210 libstdc++ gratuitously omits "long long" I/O
   19806 
   19807     Testsuite, documentation issues (compiler is not affected):
   19808 
   19809      * [250]15488 (libstdc++) possibly insufficient file permissions for
   19810        executing test suite
   19811      * [251]16250 ada/doctools runs makeinfo even in release tarball
   19812      __________________________________________________________________
   19813 
   19814 [252]GCC 3.4.3
   19815 
   19816    This is the [253]list of problem reports (PRs) from GCC's bug tracking
   19817    system that are known to be fixed in the 3.4.3 release. This list might
   19818    not be complete (that is, it is possible that some PRs that have been
   19819    fixed are not listed here).
   19820 
   19821     Bootstrap failures
   19822 
   19823      * [254]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
   19824      * [255]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
   19825        when undeclared
   19826 
   19827     Internal compiler errors (ICEs) affecting multiple platforms
   19828 
   19829      * [256]13948 (java) GCJ segmentation fault while compiling GL4Java
   19830        .class files
   19831      * [257]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   19832      * [258]16301 (c++) ICE when "strong" attribute is attached to a using
   19833        directive
   19834      * [259]16566 ICE with flexible arrays
   19835      * [260]17023 ICE with nested functions in parameter declaration
   19836      * [261]17027 ICE with noreturn function in loop at -O2
   19837      * [262]17524 ICE in grokdeclarator, in cp/decl.c
   19838      * [263]17826 (c++) ICE in cp_tree_equal
   19839 
   19840     C and optimization bugs
   19841 
   19842      * [264]15526 -ftrapv aborts on 0 * (-1)
   19843      * [265]16999 #ident stopped working
   19844      * [266]17503 quadratic behaviour in invalid_mode_change_p
   19845      * [267]17581 Long long arithmetic fails inside a switch/case
   19846        statement when compiled with -O2
   19847      * [268]18129 -fwritable-strings doesn't work
   19848 
   19849     C++ compiler and library bugs
   19850 
   19851      * [269]10975 incorrect initial ostringstream::tellp()
   19852      * [270]11722 Unbuffered filebuf::sgetn is slow
   19853      * [271]14534 Unrecognizing static function as a template parameter
   19854        when its return value is also templated
   19855      * [272]15172 Copy constructor optimization in aggregate
   19856        initialization
   19857      * [273]15786 Bad error message for frequently occuring error.
   19858      * [274]16162 Rejects valid member-template-definition
   19859      * [275]16612 empty basic_strings can't live in shared memory
   19860      * [276]16715 std::basic_iostream is instantiated when used, even
   19861        though instantiations are already contained in libstdc++
   19862      * [277]16848 code in /ext/demangle.h appears broken
   19863      * [278]17132 GCC fails to eliminate function template specialization
   19864        when argument deduction fails
   19865      * [279]17259 One more _S_leaf incorrectly qualified with _RopeRep::
   19866        in ropeimpl.h
   19867      * [280]17327 use of `enumeral_type' in template type unification
   19868      * [281]17393 "unused variable '._0'" warning with -Wall
   19869      * [282]17501 Confusion with member templates
   19870      * [283]17537 g++ not passing -lstdc++ to linker when all command line
   19871        arguments are libraries
   19872      * [284]17585 usage of unqualified name of static member from within
   19873        class not allowed
   19874      * [285]17821 Poor diagnostic for using "." instead of "->"
   19875      * [286]17829 wrong error: call of overloaded function is ambiguous
   19876      * [287]17851 Misleading diagnostic for invalid function declarations
   19877        with undeclared types
   19878      * [288]17976 Destructor is called twice
   19879      * [289]18020 rejects valid definition of enum value in template
   19880      * [290]18093 bogus conflict in namespace aliasing
   19881      * [291]18140 C++ parser bug when using >> in templates
   19882 
   19883     Fortran
   19884 
   19885      * [292]17541 data statements with double precision constants fail
   19886 
   19887     x86-specific
   19888 
   19889      * [293]17853 -O2 ICE for MMX testcase
   19890 
   19891     SPARC-specific
   19892 
   19893      * [294]17245 ICE compiling gsl-1.5 statistics/lag1.c
   19894 
   19895     Darwin-specific
   19896 
   19897      * [295]17167 FATAL:Symbol L_foo$stub already defined.
   19898 
   19899     AIX-specific
   19900 
   19901      * [296]17277 could not catch an exception when specified -maix64
   19902 
   19903     Solaris-specific
   19904 
   19905      * [297]17505 <cmath> calls acosf(), ceilf(), and other functions
   19906        missing from system libraries
   19907 
   19908     HP/UX specific:
   19909 
   19910      * [298]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
   19911 
   19912     ARM-specific
   19913 
   19914      * [299]17384 ICE with mode attribute on structures
   19915 
   19916     MIPS-specific
   19917 
   19918      * [300]17770 No NOP after LWL with -mips1
   19919 
   19920     Other embedded target specific
   19921 
   19922      * [301]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
   19923      * [302]14064 [avr-elf] -fdata-sections triggers ICE
   19924      * [303]14678 [m68hc11-elf] gcc ICE
   19925      * [304]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
   19926      * [305]15790 [i686-coff] Alignment error building gcc with i686-coff
   19927        target
   19928      * [306]15886 [SH] Miscompilation with -O2 -fPIC
   19929      * [307]16884 [avr-elf] [fweb related] bug while initializing
   19930        variables
   19931 
   19932     Bugs relating to debugger support
   19933 
   19934      * [308]13841 missing debug info for _Complex function arguments
   19935      * [309]15860 [big-endian targets] No DW_AT_location debug info is
   19936        emitted for formal arguments to a function that uses "register"
   19937        qualifiers
   19938 
   19939     Testsuite issues (compiler not affected)
   19940 
   19941      * [310]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
   19942      * [311]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
   19943      * [312]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
   19944        testsuite
   19945 
   19946     Documentation
   19947 
   19948      * [313]15498 typo in gcc manual: non-existing locale example en_UK,
   19949        should be en_GB
   19950      * [314]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
   19951        document broken shell
   19952      * [315]16406 USE_LD_AS_NEEDED undocumented
   19953      __________________________________________________________________
   19954 
   19955 [316]GCC 3.4.4
   19956 
   19957    This is the [317]list of problem reports (PRs) from GCC's bug tracking
   19958    system that are known to be fixed in the 3.4.4 release. This list might
   19959    not be complete (that is, it is possible that some PRs that have been
   19960    fixed are not listed here).
   19961      __________________________________________________________________
   19962 
   19963 [318]GCC 3.4.5
   19964 
   19965    This is the [319]list of problem reports (PRs) from GCC's bug tracking
   19966    system that are known to be fixed in the 3.4.5 release. This list might
   19967    not be complete (that is, it is possible that some PRs that have been
   19968    fixed are not listed here).
   19969 
   19970     Bootstrap issues
   19971 
   19972      * [320]24688 sco_math fixincl breaks math.h
   19973 
   19974     C compiler bugs
   19975 
   19976      * [321]17188 struct Foo { } redefinition
   19977      * [322]20187 wrong code for ((unsigned char)(unsigned long
   19978        long)((a?a:1)&(a*b)))?0:1)
   19979      * [323]21873 infinite warning loop on bad array initializer
   19980      * [324]21899 enum definition accepts values to be overriden
   19981      * [325]22061 ICE in find_function_data, in function.c
   19982      * [326]22308 Failure to diagnose violation of constraint 6.516p2
   19983      * [327]22458 ICE on missing brace
   19984      * [328]22589 ICE casting to long long
   19985      * [329]24101 Segfault with preprocessed source
   19986 
   19987     C++ compiler and library bugs
   19988 
   19989      * [330]10611 operations on vector mode not recognized in C++
   19990      * [331]13377 unexpected behavior of namespace usage directive
   19991      * [332]16002 Strange error message with new parser
   19992      * [333]17413 local classes as template argument
   19993      * [334]17609 spurious error message after using keyword
   19994      * [335]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
   19995      * [336]18124 ICE with invalid template template parameter
   19996      * [337]18155 typedef in template declaration not rejected
   19997      * [338]18177 ICE with const_cast for undeclared variable
   19998      * [339]18368 C++ error message regression
   19999      * [340]16378 ICE when returning a copy of a packed member
   20000      * [341]18466 int ::i; accepted
   20001      * [342]18512 ICE on invalid usage of template base class
   20002      * [343]18454 ICE when returning undefined type
   20003      * [344]18738 typename not allowed with non-dependent qualified name
   20004      * [345]18803 rejects access to operator() in template
   20005      * [346]19004 ICE in uses_template_parms, in cp/pt.c
   20006      * [347]19208 Spurious error about variably modified type
   20007      * [348]18253 bad error message / ICE for invalid template parameter
   20008      * [349]19608 ICE after friend function definition in local class
   20009      * [350]19884 ICE on explicit instantiation of a non-template
   20010        constructor
   20011      * [351]20153 ICE when C++ template function contains anonymous union
   20012      * [352]20563 Infinite loop in diagnostic (and ice after error
   20013        message)
   20014      * [353]20789 ICE with incomplete type in template
   20015      * [354]21336 Internal compiler error when using custom new operators
   20016      * [355]21768 ICE in error message due to violation of coding
   20017        conventions
   20018      * [356]21853 constness of pointer to data member ignored
   20019      * [357]21903 Default argument of template function causes a
   20020        compile-time error
   20021      * [358]21983 multiple diagnostics
   20022      * [359]21987 New testsuite failure
   20023        g++.dg/warn/conversion-function-1.C
   20024      * [360]22153 ICE on invalid template specialization
   20025      * [361]22172 Internal compiler error, seg fault.
   20026      * [362]21286 filebuf::xsgetn vs pipes
   20027      * [363]22233 ICE with wrong number of template parameters
   20028      * [364]22508 ICE after invalid operator new
   20029      * [365]22545 ICE with pointer to class member & user defined
   20030        conversion operator
   20031      * [366]23528 Wrong default allocator in ext/hash_map
   20032      * [367]23550 char_traits requirements/1.cc test bad math
   20033      * [368]23586 Bad diagnostic for invalid namespace-name
   20034      * [369]23624 ICE in invert_truthvalue, in fold-const.c
   20035      * [370]23639 Bad error message: not a member of '<declaration error>'
   20036      * [371]23797 ICE on typename outside template
   20037      * [372]23965 Bogus error message: no matching function for call to
   20038        'foo(<type error>)'
   20039      * [373]24052 &#`label_decl' not supported by dump_expr#<expression
   20040        error>
   20041      * [374]24580 virtual base class cause exception not to be caught
   20042 
   20043     Problems in generated debug information
   20044 
   20045      * [375]24267 Bad DWARF for altivec vectors
   20046 
   20047     Optimizations issues
   20048 
   20049      * [376]17810 ICE in verify_local_live_at_start
   20050      * [377]17860 Wrong generated code for loop with varying bound
   20051      * [378]21709 ICE on compile-time complex NaN
   20052      * [379]21964 broken tail call at -O2 or more
   20053      * [380]22167 Strange optimization bug when using -Os
   20054      * [381]22619 Compilation failure for real_const_1.f and
   20055        real_const_2.f90
   20056      * [382]23241 Invalid code generated for comparison of uchar to 255
   20057      * [383]23478 Miscompilation due to reloading of a var that is also
   20058        used in EH pad
   20059      * [384]24470 segmentation fault in cc1plus when compiling with -O
   20060      * [385]24950 ICE in operand_subword_force
   20061 
   20062     Precompiled headers problems
   20063 
   20064      * [386]14400 Cannot compile qt-x11-free-3.3.0
   20065      * [387]14940 PCH largefile test fails on various platforms
   20066 
   20067     Preprocessor bugs
   20068 
   20069      * [388]20239 ICE on empty preprocessed input
   20070      * [389]15220 "gcc -E -MM -MG" reports missing system headers in
   20071        source directory
   20072 
   20073     Testsuite issues
   20074 
   20075      * [390]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
   20076        i686-pc-linux-gnu
   20077 
   20078     Alpha specific
   20079 
   20080      * [391]21888 bootstrap failure with linker relaxation enabled
   20081 
   20082     ARM specific
   20083 
   20084      * [392]15342 [arm-linux]: ICE in verify_local_live_at_start
   20085      * [393]23985 Memory aliasing information incorrect in inlined memcpy
   20086 
   20087     ColdFile specific
   20088 
   20089      * [394]16719 Illegal move of byte into address register causes
   20090        compiler to ICE
   20091 
   20092     HPPA specific
   20093 
   20094      * [395]21723 ICE while building libgfortran
   20095      * [396]21841 -mhp-ld/-mgnu-ld documentation
   20096 
   20097     IA-64 specific
   20098 
   20099      * [397]23644 IA-64 hardware models and configuration options
   20100        documentation error
   20101      * [398]24718 Shared libgcc not used for linking by default
   20102 
   20103     M68000 specific
   20104 
   20105      * [399]18421 ICE in reload_cse_simplify_operands, in postreload.c
   20106 
   20107     MIPS specific
   20108 
   20109      * [400]20621 ICE in change_address_1, in emit-rtl.c
   20110 
   20111     PowerPC and PowerPC64 specific
   20112 
   20113      * [401]18583 error on valid code: const
   20114        __attribute__((altivec(vector__))) doesn't work in arrays
   20115      * [402]20191 ICE in reload_cse_simplify_operands
   20116      * [403]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
   20117      * [404]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
   20118      * [405]23404 gij trashes args of functions with more than 8 fp args
   20119      * [406]23539 C & C++ compiler generating misaligned references
   20120        regardless of compiler flags
   20121      * [407]24102 floatdisf2_internal2 broken
   20122      * [408]24465 -mminimal-toc miscompilation of __thread vars
   20123 
   20124     Solaris specific
   20125 
   20126      * [409]19933 Problem with define of HUGE_VAL in math_c99
   20127      * [410]21889 Native Solaris assembler cannot grok DTP-relative debug
   20128        symbols
   20129 
   20130     SPARC specific
   20131 
   20132      * [411]19300 PCH failures on sparc-linux
   20133      * [412]20301 Assembler labels have a leading "-"
   20134      * [413]20673 C PCH testsuite assembly comparison failure
   20135 
   20136     x86 and x86_64 specific
   20137 
   20138      * [414]18582 ICE with arrays of type V2DF
   20139      * [415]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
   20140        -fsched2-use-traces
   20141      * [416]21716 ICE in reg-stack.c's swap_rtx_condition
   20142      * [417]24315 amd64 fails -fpeephole2
   20143      __________________________________________________________________
   20144 
   20145 [418]GCC 3.4.6
   20146 
   20147    This is the [419]list of problem reports (PRs) from GCC's bug tracking
   20148    system that are known to be fixed in the 3.4.6 release. This list might
   20149    not be complete (that is, it is possible that some PRs that have been
   20150    fixed are not listed here).
   20151 
   20152 
   20153     For questions related to the use of GCC, please consult these web
   20154     pages and the [420]GCC manuals. If that fails, the
   20155     [421]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20156     web pages and the development of GCC are welcome on our developer
   20157     list at [422]gcc (a] gcc.gnu.org. All of [423]our lists have public
   20158     archives.
   20159 
   20160    Copyright (C) [424]Free Software Foundation, Inc. Verbatim copying and
   20161    distribution of this entire article is permitted in any medium,
   20162    provided this notice is preserved.
   20163 
   20164    These pages are [425]maintained by the GCC team. Last modified
   20165    2025-01-31.
   20166 
   20167 References
   20168 
   20169    1. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   20170    2. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   20171    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   20172    4. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   20173    5. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   20174    6. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   20175    7. https://www.boost.org/
   20176    8. https://gcc.gnu.org/PR11953
   20177    9. https://gcc.gnu.org/PR8361
   20178   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
   20179   11. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   20180   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
   20181   13. https://gcc.gnu.org/bugs/#cxx_rvalbind
   20182   14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20183   15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20184   16. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20185   17. https://www.gnu.org/software/classpath/
   20186   18. https://www.eclipse.org/
   20187   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
   20188   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
   20189   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   20190   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
   20191   23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   20192   24. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   20193   25. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
   20194   26. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   20195   27. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   20196   28. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.0
   20197   29. 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
   20198   30. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.1
   20199   31. https://gcc.gnu.org/PR10129
   20200   32. https://gcc.gnu.org/PR14576
   20201   33. https://gcc.gnu.org/PR14760
   20202   34. https://gcc.gnu.org/PR14671
   20203   35. https://gcc.gnu.org/PR15093
   20204   36. https://gcc.gnu.org/PR15178
   20205   37. https://gcc.gnu.org/PR12753
   20206   38. https://gcc.gnu.org/PR13985
   20207   39. https://gcc.gnu.org/PR14810
   20208   40. https://gcc.gnu.org/PR14883
   20209   41. https://gcc.gnu.org/PR15044
   20210   42. https://gcc.gnu.org/PR15057
   20211   43. https://gcc.gnu.org/PR15064
   20212   44. https://gcc.gnu.org/PR15142
   20213   45. https://gcc.gnu.org/PR15159
   20214   46. https://gcc.gnu.org/PR15165
   20215   47. https://gcc.gnu.org/PR15193
   20216   48. https://gcc.gnu.org/PR15209
   20217   49. https://gcc.gnu.org/PR15227
   20218   50. https://gcc.gnu.org/PR15285
   20219   51. https://gcc.gnu.org/PR15299
   20220   52. https://gcc.gnu.org/PR15329
   20221   53. https://gcc.gnu.org/PR15550
   20222   54. https://gcc.gnu.org/PR15554
   20223   55. https://gcc.gnu.org/PR15640
   20224   56. https://gcc.gnu.org/PR15666
   20225   57. https://gcc.gnu.org/PR15696
   20226   58. https://gcc.gnu.org/PR15701
   20227   59. https://gcc.gnu.org/PR15761
   20228   60. https://gcc.gnu.org/PR15829
   20229   61. https://gcc.gnu.org/PR14538
   20230   62. https://gcc.gnu.org/PR12391
   20231   63. https://gcc.gnu.org/PR14649
   20232   64. https://gcc.gnu.org/PR15004
   20233   65. https://gcc.gnu.org/PR15749
   20234   66. https://gcc.gnu.org/PR10646
   20235   67. https://gcc.gnu.org/PR12077
   20236   68. https://gcc.gnu.org/PR13598
   20237   69. https://gcc.gnu.org/PR14211
   20238   70. https://gcc.gnu.org/PR14220
   20239   71. https://gcc.gnu.org/PR14245
   20240   72. https://gcc.gnu.org/PR14340
   20241   73. https://gcc.gnu.org/PR14600
   20242   74. https://gcc.gnu.org/PR14668
   20243   75. https://gcc.gnu.org/PR14775
   20244   76. https://gcc.gnu.org/PR14821
   20245   77. https://gcc.gnu.org/PR14930
   20246   78. https://gcc.gnu.org/PR14932
   20247   79. https://gcc.gnu.org/PR14950
   20248   80. https://gcc.gnu.org/PR14962
   20249   81. https://gcc.gnu.org/PR14975
   20250   82. https://gcc.gnu.org/PR15002
   20251   83. https://gcc.gnu.org/PR15025
   20252   84. https://gcc.gnu.org/PR15046
   20253   85. https://gcc.gnu.org/PR15069
   20254   86. https://gcc.gnu.org/PR15074
   20255   87. https://gcc.gnu.org/PR15083
   20256   88. https://gcc.gnu.org/PR15096
   20257   89. https://gcc.gnu.org/PR15287
   20258   90. https://gcc.gnu.org/PR15317
   20259   91. https://gcc.gnu.org/PR15337
   20260   92. https://gcc.gnu.org/PR15361
   20261   93. https://gcc.gnu.org/PR15412
   20262   94. https://gcc.gnu.org/PR15427
   20263   95. https://gcc.gnu.org/PR15471
   20264   96. https://gcc.gnu.org/PR15503
   20265   97. https://gcc.gnu.org/PR15507
   20266   98. https://gcc.gnu.org/PR15542
   20267   99. https://gcc.gnu.org/PR15565
   20268  100. https://gcc.gnu.org/PR15625
   20269  101. https://gcc.gnu.org/PR15629
   20270  102. https://gcc.gnu.org/PR15742
   20271  103. https://gcc.gnu.org/PR15775
   20272  104. https://gcc.gnu.org/PR15821
   20273  105. https://gcc.gnu.org/PR15862
   20274  106. https://gcc.gnu.org/PR15875
   20275  107. https://gcc.gnu.org/PR15877
   20276  108. https://gcc.gnu.org/PR15947
   20277  109. https://gcc.gnu.org/PR16020
   20278  110. https://gcc.gnu.org/PR16154
   20279  111. https://gcc.gnu.org/PR16174
   20280  112. https://gcc.gnu.org/PR14315
   20281  113. https://gcc.gnu.org/PR15151
   20282  114. https://gcc.gnu.org/PR7993
   20283  115. https://gcc.gnu.org/PR15228
   20284  116. https://gcc.gnu.org/PR15345
   20285  117. https://gcc.gnu.org/PR15945
   20286  118. https://gcc.gnu.org/PR15526
   20287  119. https://gcc.gnu.org/PR14690
   20288  120. https://gcc.gnu.org/PR15112
   20289  121. https://gcc.gnu.org/PR15067
   20290  122. https://gcc.gnu.org/PR1963
   20291  123. https://gcc.gnu.org/PR15717
   20292  124. https://gcc.gnu.org/PR14782
   20293  125. https://gcc.gnu.org/PR14828
   20294  126. https://gcc.gnu.org/PR15202
   20295  127. https://gcc.gnu.org/PR14610
   20296  128. https://gcc.gnu.org/PR14813
   20297  129. https://gcc.gnu.org/PR14857
   20298  130. https://gcc.gnu.org/PR15598
   20299  131. https://gcc.gnu.org/PR15653
   20300  132. https://gcc.gnu.org/PR15189
   20301  133. https://gcc.gnu.org/PR15331
   20302  134. https://gcc.gnu.org/PR16144
   20303  135. https://gcc.gnu.org/PR16176
   20304  136. https://gcc.gnu.org/PR11591
   20305  137. https://gcc.gnu.org/PR12028
   20306  138. https://gcc.gnu.org/PR14478
   20307  139. https://gcc.gnu.org/PR14567
   20308  140. https://gcc.gnu.org/PR14715
   20309  141. https://gcc.gnu.org/PR14902
   20310  142. https://gcc.gnu.org/PR14924
   20311  143. https://gcc.gnu.org/PR14960
   20312  144. https://gcc.gnu.org/PR15106
   20313  145. https://gcc.gnu.org/PR16026
   20314  146. https://gcc.gnu.org/PR15191
   20315  147. https://gcc.gnu.org/PR15662
   20316  148. https://gcc.gnu.org/PR15054
   20317  149. https://gcc.gnu.org/PR15783
   20318  150. https://gcc.gnu.org/PR15626
   20319  151. https://gcc.gnu.org/PR14326
   20320  152. https://gcc.gnu.org/PR14723
   20321  153. https://gcc.gnu.org/PR15290
   20322  154. https://gcc.gnu.org/PR15250
   20323  155. https://gcc.gnu.org/PR15551
   20324  156. https://gcc.gnu.org/PR8309
   20325  157. https://gcc.gnu.org/PR13250
   20326  158. https://gcc.gnu.org/PR13803
   20327  159. https://gcc.gnu.org/PR14093
   20328  160. https://gcc.gnu.org/PR14457
   20329  161. https://gcc.gnu.org/PR14542
   20330  162. https://gcc.gnu.org/PR15100
   20331  163. https://gcc.gnu.org/PR15296
   20332  164. https://gcc.gnu.org/PR15396
   20333  165. https://gcc.gnu.org/PR15782
   20334  166. https://gcc.gnu.org/PR11610
   20335  167. https://gcc.gnu.org/PR15488
   20336  168. https://gcc.gnu.org/PR15489
   20337  169. https://gcc.gnu.org/PR13928
   20338  170. https://gcc.gnu.org/PR14150
   20339  171. https://gcc.gnu.org/PR14949
   20340  172. https://gcc.gnu.org/PR15123
   20341  173. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.2
   20342  174. https://gcc.gnu.org/PR16469
   20343  175. https://gcc.gnu.org/PR16344
   20344  176. https://gcc.gnu.org/PR16842
   20345  177. https://gcc.gnu.org/PR12608
   20346  178. https://gcc.gnu.org/PR14492
   20347  179. https://gcc.gnu.org/PR15461
   20348  180. https://gcc.gnu.org/PR15890
   20349  181. https://gcc.gnu.org/PR16180
   20350  182. https://gcc.gnu.org/PR16224
   20351  183. https://gcc.gnu.org/PR16408
   20352  184. https://gcc.gnu.org/PR16529
   20353  185. https://gcc.gnu.org/PR16698
   20354  186. https://gcc.gnu.org/PR16706
   20355  187. https://gcc.gnu.org/PR16810
   20356  188. https://gcc.gnu.org/PR16851
   20357  189. https://gcc.gnu.org/PR16870
   20358  190. https://gcc.gnu.org/PR16904
   20359  191. https://gcc.gnu.org/PR16905
   20360  192. https://gcc.gnu.org/PR16964
   20361  193. https://gcc.gnu.org/PR17068
   20362  194. https://gcc.gnu.org/PR16366
   20363  195. https://gcc.gnu.org/PR15345
   20364  196. https://gcc.gnu.org/PR16590
   20365  197. https://gcc.gnu.org/PR16693
   20366  198. https://gcc.gnu.org/PR17078
   20367  199. https://gcc.gnu.org/PR13956
   20368  200. https://gcc.gnu.org/PR16684
   20369  201. https://gcc.gnu.org/PR12658
   20370  202. https://gcc.gnu.org/PR13092
   20371  203. https://gcc.gnu.org/PR15320
   20372  204. https://gcc.gnu.org/PR16246
   20373  205. https://gcc.gnu.org/PR16273
   20374  206. https://gcc.gnu.org/PR16401
   20375  207. https://gcc.gnu.org/PR16411
   20376  208. https://gcc.gnu.org/PR16489
   20377  209. https://gcc.gnu.org/PR16618
   20378  210. https://gcc.gnu.org/PR16637
   20379  211. https://gcc.gnu.org/PR16717
   20380  212. https://gcc.gnu.org/PR16813
   20381  213. https://gcc.gnu.org/PR16853
   20382  214. https://gcc.gnu.org/PR16889
   20383  215. https://gcc.gnu.org/PR16959
   20384  216. https://gcc.gnu.org/PR7587
   20385  217. https://gcc.gnu.org/PR16473
   20386  218. https://gcc.gnu.org/PR16478
   20387  219. https://gcc.gnu.org/PR10695
   20388  220. https://gcc.gnu.org/PR16974
   20389  221. https://gcc.gnu.org/PR16298
   20390  222. https://gcc.gnu.org/PR17113
   20391  223. https://gcc.gnu.org/PR14697
   20392  224. https://gcc.gnu.org/PR15869
   20393  225. https://gcc.gnu.org/PR16325
   20394  226. https://gcc.gnu.org/PR16357
   20395  227. https://gcc.gnu.org/PR16380
   20396  228. https://gcc.gnu.org/PR16407
   20397  229. https://gcc.gnu.org/PR16643
   20398  230. https://gcc.gnu.org/PR15927
   20399  231. https://gcc.gnu.org/PR15948
   20400  232. https://gcc.gnu.org/PR17019
   20401  233. https://gcc.gnu.org/PR16130
   20402  234. https://gcc.gnu.org/PR16142
   20403  235. https://gcc.gnu.org/PR16278
   20404  236. https://gcc.gnu.org/PR16414
   20405  237. https://gcc.gnu.org/PR16445
   20406  238. https://gcc.gnu.org/PR16490
   20407  239. https://gcc.gnu.org/PR16683
   20408  240. https://gcc.gnu.org/PR16195
   20409  241. https://gcc.gnu.org/PR16239
   20410  242. https://gcc.gnu.org/PR16199
   20411  243. https://gcc.gnu.org/PR16416
   20412  244. https://gcc.gnu.org/PR16430
   20413  245. https://gcc.gnu.org/PR16379
   20414  246. https://gcc.gnu.org/PR17093
   20415  247. https://gcc.gnu.org/PR17119
   20416  248. https://gcc.gnu.org/PR15928
   20417  249. https://gcc.gnu.org/PR16210
   20418  250. https://gcc.gnu.org/PR15488
   20419  251. https://gcc.gnu.org/PR16250
   20420  252. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.3
   20421  253. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
   20422  254. https://gcc.gnu.org/PR17369
   20423  255. https://gcc.gnu.org/PR17850
   20424  256. https://gcc.gnu.org/PR13948
   20425  257. https://gcc.gnu.org/PR14492
   20426  258. https://gcc.gnu.org/PR16301
   20427  259. https://gcc.gnu.org/PR16566
   20428  260. https://gcc.gnu.org/PR17023
   20429  261. https://gcc.gnu.org/PR17027
   20430  262. https://gcc.gnu.org/PR17524
   20431  263. https://gcc.gnu.org/PR17826
   20432  264. https://gcc.gnu.org/PR15526
   20433  265. https://gcc.gnu.org/PR16999
   20434  266. https://gcc.gnu.org/PR17503
   20435  267. https://gcc.gnu.org/PR17581
   20436  268. https://gcc.gnu.org/PR18129
   20437  269. https://gcc.gnu.org/PR10975
   20438  270. https://gcc.gnu.org/PR11722
   20439  271. https://gcc.gnu.org/PR14534
   20440  272. https://gcc.gnu.org/PR15172
   20441  273. https://gcc.gnu.org/PR15786
   20442  274. https://gcc.gnu.org/PR16162
   20443  275. https://gcc.gnu.org/PR16612
   20444  276. https://gcc.gnu.org/PR16715
   20445  277. https://gcc.gnu.org/PR16848
   20446  278. https://gcc.gnu.org/PR17132
   20447  279. https://gcc.gnu.org/PR17259
   20448  280. https://gcc.gnu.org/PR17327
   20449  281. https://gcc.gnu.org/PR17393
   20450  282. https://gcc.gnu.org/PR17501
   20451  283. https://gcc.gnu.org/PR17537
   20452  284. https://gcc.gnu.org/PR17585
   20453  285. https://gcc.gnu.org/PR17821
   20454  286. https://gcc.gnu.org/PR17829
   20455  287. https://gcc.gnu.org/PR17851
   20456  288. https://gcc.gnu.org/PR17976
   20457  289. https://gcc.gnu.org/PR18020
   20458  290. https://gcc.gnu.org/PR18093
   20459  291. https://gcc.gnu.org/PR18140
   20460  292. https://gcc.gnu.org/PR17541
   20461  293. https://gcc.gnu.org/PR17853
   20462  294. https://gcc.gnu.org/PR17245
   20463  295. https://gcc.gnu.org/PR17167
   20464  296. https://gcc.gnu.org/PR17277
   20465  297. https://gcc.gnu.org/PR17505
   20466  298. https://gcc.gnu.org/PR17684
   20467  299. https://gcc.gnu.org/PR17384
   20468  300. https://gcc.gnu.org/PR17770
   20469  301. https://gcc.gnu.org/PR11476
   20470  302. https://gcc.gnu.org/PR14064
   20471  303. https://gcc.gnu.org/PR14678
   20472  304. https://gcc.gnu.org/PR15583
   20473  305. https://gcc.gnu.org/PR15790
   20474  306. https://gcc.gnu.org/PR15886
   20475  307. https://gcc.gnu.org/PR16884
   20476  308. https://gcc.gnu.org/PR13841
   20477  309. https://gcc.gnu.org/PR15860
   20478  310. https://gcc.gnu.org/PR17465
   20479  311. https://gcc.gnu.org/PR17469
   20480  312. https://gcc.gnu.org/PR18138
   20481  313. https://gcc.gnu.org/PR15498
   20482  314. https://gcc.gnu.org/PR15747
   20483  315. https://gcc.gnu.org/PR16406
   20484  316. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.4
   20485  317. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
   20486  318. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.5
   20487  319. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
   20488  320. https://gcc.gnu.org/PR24688
   20489  321. https://gcc.gnu.org/PR17188
   20490  322. https://gcc.gnu.org/PR20187
   20491  323. https://gcc.gnu.org/PR21873
   20492  324. https://gcc.gnu.org/PR21899
   20493  325. https://gcc.gnu.org/PR22061
   20494  326. https://gcc.gnu.org/PR22208
   20495  327. https://gcc.gnu.org/PR22458
   20496  328. https://gcc.gnu.org/PR22589
   20497  329. https://gcc.gnu.org/PR24101
   20498  330. https://gcc.gnu.org/PR10611
   20499  331. https://gcc.gnu.org/PR13377
   20500  332. https://gcc.gnu.org/PR16002
   20501  333. https://gcc.gnu.org/PR17413
   20502  334. https://gcc.gnu.org/PR17609
   20503  335. https://gcc.gnu.org/PR17618
   20504  336. https://gcc.gnu.org/PR18124
   20505  337. https://gcc.gnu.org/PR18155
   20506  338. https://gcc.gnu.org/PR18177
   20507  339. https://gcc.gnu.org/PR18368
   20508  340. https://gcc.gnu.org/PR18378
   20509  341. https://gcc.gnu.org/PR18466
   20510  342. https://gcc.gnu.org/PR18512
   20511  343. https://gcc.gnu.org/PR18545
   20512  344. https://gcc.gnu.org/PR18738
   20513  345. https://gcc.gnu.org/PR18803
   20514  346. https://gcc.gnu.org/PR19004
   20515  347. https://gcc.gnu.org/PR19208
   20516  348. https://gcc.gnu.org/PR19253
   20517  349. https://gcc.gnu.org/PR19608
   20518  350. https://gcc.gnu.org/PR19884
   20519  351. https://gcc.gnu.org/PR20153
   20520  352. https://gcc.gnu.org/PR20563
   20521  353. https://gcc.gnu.org/PR20789
   20522  354. https://gcc.gnu.org/PR21336
   20523  355. https://gcc.gnu.org/PR21768
   20524  356. https://gcc.gnu.org/PR21853
   20525  357. https://gcc.gnu.org/PR21903
   20526  358. https://gcc.gnu.org/PR21983
   20527  359. https://gcc.gnu.org/PR21987
   20528  360. https://gcc.gnu.org/PR22153
   20529  361. https://gcc.gnu.org/PR22172
   20530  362. https://gcc.gnu.org/PR21286
   20531  363. https://gcc.gnu.org/PR22233
   20532  364. https://gcc.gnu.org/PR22508
   20533  365. https://gcc.gnu.org/PR22545
   20534  366. https://gcc.gnu.org/PR23528
   20535  367. https://gcc.gnu.org/PR23550
   20536  368. https://gcc.gnu.org/PR23586
   20537  369. https://gcc.gnu.org/PR23624
   20538  370. https://gcc.gnu.org/PR23639
   20539  371. https://gcc.gnu.org/PR23797
   20540  372. https://gcc.gnu.org/PR23965
   20541  373. https://gcc.gnu.org/PR24052
   20542  374. https://gcc.gnu.org/PR24580
   20543  375. https://gcc.gnu.org/PR24267
   20544  376. https://gcc.gnu.org/PR17810
   20545  377. https://gcc.gnu.org/PR17860
   20546  378. https://gcc.gnu.org/PR21709
   20547  379. https://gcc.gnu.org/PR21964
   20548  380. https://gcc.gnu.org/PR22167
   20549  381. https://gcc.gnu.org/PR22619
   20550  382. https://gcc.gnu.org/PR23241
   20551  383. https://gcc.gnu.org/PR23478
   20552  384. https://gcc.gnu.org/PR24470
   20553  385. https://gcc.gnu.org/PR24950
   20554  386. https://gcc.gnu.org/PR14400
   20555  387. https://gcc.gnu.org/PR14940
   20556  388. https://gcc.gnu.org/PR20239
   20557  389. https://gcc.gnu.org/PR15220
   20558  390. https://gcc.gnu.org/PR19275
   20559  391. https://gcc.gnu.org/PR21888
   20560  392. https://gcc.gnu.org/PR15342
   20561  393. https://gcc.gnu.org/PR23985
   20562  394. https://gcc.gnu.org/PR16719
   20563  395. https://gcc.gnu.org/PR21723
   20564  396. https://gcc.gnu.org/PR21841
   20565  397. https://gcc.gnu.org/PR23644
   20566  398. https://gcc.gnu.org/PR24718
   20567  399. https://gcc.gnu.org/PR18421
   20568  400. https://gcc.gnu.org/PR20621
   20569  401. https://gcc.gnu.org/PR18583
   20570  402. https://gcc.gnu.org/PR20191
   20571  403. https://gcc.gnu.org/PR22083
   20572  404. https://gcc.gnu.org/PR23070
   20573  405. https://gcc.gnu.org/PR23404
   20574  406. https://gcc.gnu.org/PR23539
   20575  407. https://gcc.gnu.org/PR24102
   20576  408. https://gcc.gnu.org/PR24465
   20577  409. https://gcc.gnu.org/PR19933
   20578  410. https://gcc.gnu.org/PR21889
   20579  411. https://gcc.gnu.org/PR19300
   20580  412. https://gcc.gnu.org/PR20301
   20581  413. https://gcc.gnu.org/PR20673
   20582  414. https://gcc.gnu.org/PR18582
   20583  415. https://gcc.gnu.org/PR19340
   20584  416. https://gcc.gnu.org/PR21716
   20585  417. https://gcc.gnu.org/PR24315
   20586  418. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.6
   20587  419. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
   20588  420. https://gcc.gnu.org/onlinedocs/
   20589  421. mailto:gcc-help (a] gcc.gnu.org
   20590  422. mailto:gcc (a] gcc.gnu.org
   20591  423. https://gcc.gnu.org/lists.html
   20592  424. https://www.fsf.org/
   20593  425. https://gcc.gnu.org/about.html
   20594 ======================================================================
   20595 http://gcc.gnu.org/gcc-3.3/index.html
   20596                              GCC 3.3 Release Series
   20597 
   20598    (This release series is no longer supported.)
   20599 
   20600    May 03, 2005
   20601 
   20602    The [1]GNU project and the GCC developers are pleased to announce the
   20603    release of GCC 3.3.6.
   20604 
   20605    This release is a bug-fix release, containing fixes for regressions in
   20606    GCC 3.3.5 relative to previous releases of GCC.
   20607 
   20608    This release is the last of the series 3.3.x.
   20609 
   20610    The GCC 3.3 release series includes numerous [2]new features,
   20611    improvements, bug fixes, and other changes, thanks to an [3]amazing
   20612    group of volunteers.
   20613 
   20614 Release History
   20615 
   20616    GCC 3.3.6
   20617           May 3, 2005 ([4]changes)
   20618 
   20619    GCC 3.3.5
   20620           September 30, 2004 ([5]changes)
   20621 
   20622    GCC 3.3.4
   20623           May 31, 2004 ([6]changes)
   20624 
   20625    GCC 3.3.3
   20626           February 14, 2004 ([7]changes)
   20627 
   20628    GCC 3.3.2
   20629           October 16, 2003 ([8]changes)
   20630 
   20631    GCC 3.3.1
   20632           August 8, 2003 ([9]changes)
   20633 
   20634    GCC 3.3
   20635           May 14, 2003 ([10]changes)
   20636 
   20637 References and Acknowledgements
   20638 
   20639    GCC used to stand for the GNU C Compiler, but since the compiler
   20640    supports several other languages aside from C, it now stands for the
   20641    GNU Compiler Collection.
   20642 
   20643    A list of [11]successful builds is updated as new information becomes
   20644    available.
   20645 
   20646    The GCC developers would like to thank the numerous people that have
   20647    contributed new features, improvements, bug fixes, and other changes as
   20648    well as test results to GCC. This [12]amazing group of volunteers is
   20649    what makes GCC successful.
   20650 
   20651    For additional information about GCC please refer to the [13]GCC
   20652    project web site or contact the [14]GCC development mailing list.
   20653 
   20654    To obtain GCC please use [15]our mirror sites, or our CVS server.
   20655 
   20656 
   20657     For questions related to the use of GCC, please consult these web
   20658     pages and the [16]GCC manuals. If that fails, the
   20659     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20660     web pages and the development of GCC are welcome on our developer
   20661     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   20662     archives.
   20663 
   20664    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   20665    distribution of this entire article is permitted in any medium,
   20666    provided this notice is preserved.
   20667 
   20668    These pages are [21]maintained by the GCC team. Last modified
   20669    2022-10-26.
   20670 
   20671 References
   20672 
   20673    1. http://www.gnu.org/
   20674    2. https://gcc.gnu.org/gcc-3.3/changes.html
   20675    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20676    4. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   20677    5. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
   20678    6. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
   20679    7. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.3
   20680    8. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.2
   20681    9. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
   20682   10. https://gcc.gnu.org/gcc-3.3/changes.html
   20683   11. https://gcc.gnu.org/gcc-3.3/buildstat.html
   20684   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20685   13. https://gcc.gnu.org/index.html
   20686   14. mailto:gcc (a] gcc.gnu.org
   20687   15. https://gcc.gnu.org/mirrors.html
   20688   16. https://gcc.gnu.org/onlinedocs/
   20689   17. mailto:gcc-help (a] gcc.gnu.org
   20690   18. mailto:gcc (a] gcc.gnu.org
   20691   19. https://gcc.gnu.org/lists.html
   20692   20. https://www.fsf.org/
   20693   21. https://gcc.gnu.org/about.html
   20694 ======================================================================
   20695 http://gcc.gnu.org/gcc-3.3/changes.html
   20696                              GCC 3.3 Release Series
   20697                         Changes, New Features, and Fixes
   20698 
   20699    The latest release in the 3.3 release series is [1]GCC 3.3.6.
   20700 
   20701 Caveats
   20702 
   20703      * The preprocessor no longer accepts multi-line string literals. They
   20704        were deprecated in 3.0, 3.1, and 3.2.
   20705      * The preprocessor no longer supports the -A- switch when appearing
   20706        alone. -A- followed by an assertion is still supported.
   20707      * Support for all the systems [2]obsoleted in GCC 3.1 has been
   20708        removed from GCC 3.3. See below for a [3]list of systems which are
   20709        obsoleted in this release.
   20710      * Checking for null format arguments has been decoupled from the rest
   20711        of the format checking mechanism. Programs which use the format
   20712        attribute may regain this functionality by using the new [4]nonnull
   20713        function attribute. Note that all functions for which GCC has a
   20714        built-in format attribute, an appropriate built-in nonnull
   20715        attribute is also applied.
   20716      * The DWARF (version 1) debugging format has been deprecated and will
   20717        be removed in a future version of GCC. Version 2 of the DWARF
   20718        debugging format will continue to be supported for the foreseeable
   20719        future.
   20720      * The C and Objective-C compilers no longer accept the "Naming Types"
   20721        extension (typedef foo = bar); it was already unavailable in C++.
   20722        Code which uses it will need to be changed to use the "typeof"
   20723        extension instead: typedef typeof(bar) foo. (We have removed this
   20724        extension without a period of deprecation because it has caused the
   20725        compiler to crash since version 3.0 and no one noticed until very
   20726        recently. Thus we conclude it is not in widespread use.)
   20727      * The -traditional C compiler option has been removed. It was
   20728        deprecated in 3.1 and 3.2. (Traditional preprocessing remains
   20729        available.) The <varargs.h> header, used for writing variadic
   20730        functions in traditional C, still exists but will produce an error
   20731        message if used.
   20732      * GCC 3.3.1 automatically places zero-initialized variables in the
   20733        .bss section on some operating systems. Versions of GNU Emacs up to
   20734        (and including) 21.3 will not work correctly when using this
   20735        optimization; you can use -fno-zero-initialized-in-bss to disable
   20736        it.
   20737 
   20738 General Optimizer Improvements
   20739 
   20740      * A new scheme for accurately describing processor pipelines, the
   20741        [5]DFA scheduler, has been added.
   20742      * Pavel Nejedly, Charles University Prague, has contributed new file
   20743        format used by the edge coverage profiler (-fprofile-arcs).
   20744        The new format is robust and diagnoses common mistakes where
   20745        profiles from different versions (or compilations) of the program
   20746        are combined resulting in nonsensical profiles and slow code to
   20747        produced with profile feedback. Additionally this format allows
   20748        extra data to be gathered. Currently, overall statistics are
   20749        produced helping optimizers to identify hot spots of a program
   20750        globally replacing the old intra-procedural scheme and resulting in
   20751        better code. Note that the gcov tool from older GCC versions will
   20752        not be able to parse the profiles generated by GCC 3.3 and vice
   20753        versa.
   20754      * Jan Hubicka, SuSE Labs, has contributed a new superblock formation
   20755        pass enabled using -ftracer. This pass simplifies the control flow
   20756        of functions allowing other optimizations to do better job.
   20757        He also contributed the function reordering pass
   20758        (-freorder-functions) to optimize function placement using profile
   20759        feedback.
   20760 
   20761 New Languages and Language specific improvements
   20762 
   20763   C/ObjC/C++
   20764 
   20765      * The preprocessor now accepts directives within macro arguments. It
   20766        processes them just as if they had not been within macro arguments.
   20767      * The separate ISO and traditional preprocessors have been completely
   20768        removed. The front end handles either type of preprocessed output
   20769        if necessary.
   20770      * In C99 mode preprocessor arithmetic is done in the precision of the
   20771        target's intmax_t, as required by that standard.
   20772      * The preprocessor can now copy comments inside macros to the output
   20773        file when the macro is expanded. This feature, enabled using the
   20774        -CC option, is intended for use by applications which place
   20775        metadata or directives inside comments, such as lint.
   20776      * The method of constructing the list of directories to be searched
   20777        for header files has been revised. If a directory named by a -I
   20778        option is a standard system include directory, the option is
   20779        ignored to ensure that the default search order for system
   20780        directories and the special treatment of system header files are
   20781        not defeated.
   20782      * A few more [6]ISO C99 features now work correctly.
   20783      * A new function attribute, nonnull, has been added which allows
   20784        pointer arguments to functions to be specified as requiring a
   20785        non-null value. The compiler currently uses this information to
   20786        issue a warning when it detects a null value passed in such an
   20787        argument slot.
   20788      * A new type attribute, may_alias, has been added. Accesses to
   20789        objects with types with this attribute are not subjected to
   20790        type-based alias analysis, but are instead assumed to be able to
   20791        alias any other type of objects, just like the char type.
   20792 
   20793   C++
   20794 
   20795      * Type based alias analysis has been implemented for C++ aggregate
   20796        types.
   20797 
   20798   Objective-C
   20799 
   20800      * Generate an error if Objective-C objects are passed by value in
   20801        function and method calls.
   20802      * When -Wselector is used, check the whole list of selectors at the
   20803        end of compilation, and emit a warning if a @selector() is not
   20804        known.
   20805      * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime.
   20806      * No longer need to include objc/objc-class.h to compile self calls
   20807        in class methods (NeXT runtime only).
   20808      * New -Wundeclared-selector option.
   20809      * Removed selector bloating which was causing object files to be 10%
   20810        bigger on average (GNU runtime only).
   20811      * Using at run time @protocol() objects has been fixed in certain
   20812        situations (GNU runtime only).
   20813      * Type checking has been fixed and improved in many situations
   20814        involving protocols.
   20815 
   20816   Java
   20817 
   20818      * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK
   20819        1.4) API.
   20820      * The JDK 1.4 assert facility has been implemented.
   20821      * The bytecode interpreter is now direct threaded and thus faster.
   20822 
   20823   Fortran
   20824 
   20825      * Fortran improvements are listed in [7]the Fortran documentation.
   20826 
   20827   Ada
   20828 
   20829      * Ada tasking now works with glibc 2.3.x threading libraries.
   20830 
   20831 New Targets and Target Specific Improvements
   20832 
   20833      * The following changes have been made to the HP-PA port:
   20834           + The port now defaults to scheduling for the PA8000 series of
   20835             processors.
   20836           + Scheduling support for the PA7300 processor has been added.
   20837           + The 32-bit port now supports weak symbols under HP-UX 11.
   20838           + The handling of initializers and finalizers has been improved
   20839             under HP-UX 11. The 64-bit port no longer uses collect2.
   20840           + Dwarf2 EH support has been added to the 32-bit GNU/Linux port.
   20841           + ABI fixes to correct the passing of small structures by value.
   20842      * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to
   20843        use the DFA processor pipeline description.
   20844      * The following NetBSD configurations for the SuperH processor family
   20845        have been added:
   20846           + SH3, big-endian, sh-*-netbsdelf*
   20847           + SH3, little-endian, shle-*-netbsdelf*
   20848           + SH5, SHmedia, big-endian, 32-bit default, sh5-*-netbsd*
   20849           + SH5, SHmedia, little-endian, 32-bit default, sh5le-*-netbsd*
   20850           + SH5, SHmedia, big-endian, 64-bit default, sh64-*-netbsd*
   20851           + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd*
   20852      * The following changes have been made to the IA-32/x86-64 port:
   20853           + SSE2 and 3dNOW! intrinsics are now supported.
   20854           + Support for thread local storage has been added to the IA-32
   20855             and x86-64 ports.
   20856           + The x86-64 port has been significantly improved.
   20857      * The following changes have been made to the MIPS port:
   20858           + All configurations now accept the -mabi switch. Note that you
   20859             will need appropriate multilibs for this option to work
   20860             properly.
   20861           + ELF configurations will always pass an ABI flag to the
   20862             assembler, except when the MIPS EABI is selected.
   20863           + -mabi=64 no longer selects MIPS IV code.
   20864           + The -mcpu option, which was deprecated in 3.1 and 3.2, has
   20865             been removed from this release.
   20866           + -march now changes the core ISA level. In previous releases,
   20867             it would change the use of processor-specific extensions, but
   20868             would leave the core ISA unchanged. For example, mips64-elf
   20869             -march=r8000 will now generate MIPS IV code.
   20870           + Under most configurations, -mipsN now acts as a synonym for
   20871             -march.
   20872           + There are some new preprocessor macros to describe the -march
   20873             and -mtune settings. See the documentation of those options
   20874             for details.
   20875           + Support for the NEC VR-Series processors has been added. This
   20876             includes the 54xx, 5500, and 41xx series.
   20877           + Support for the Sandcraft sr71k processor has been added.
   20878      * The following changes have been made to the S/390 port:
   20879           + Support to build the Java runtime libraries has been added.
   20880             Java is now enabled by default on s390-*-linux* and
   20881             s390x-*-linux* targets.
   20882           + Multilib support for the s390x-*-linux* target has been added;
   20883             this allows to build 31-bit binaries using the -m31 option.
   20884           + Support for thread local storage has been added.
   20885           + Inline assembler code may now use the 'Q' constraint to
   20886             specify memory operands without index register.
   20887           + Various platform-specific performance improvements have been
   20888             implemented; in particular, the compiler now uses the BRANCH
   20889             ON COUNT family of instructions and makes more frequent use of
   20890             the TEST UNDER MASK family of instructions.
   20891      * The following changes have been made to the PowerPC port:
   20892           + Support for IBM Power4 processor added.
   20893           + Support for Motorola e500 SPE added.
   20894           + Support for AIX 5.2 added.
   20895           + Function and Data sections now supported on AIX.
   20896           + Sibcall optimizations added.
   20897      * The support for H8 Tiny is added to the H8/300 port with -mn.
   20898 
   20899 [8]Obsolete Systems
   20900 
   20901    Support for a number of older systems has been declared obsolete in GCC
   20902    3.3. Unless there is activity to revive them, the next release of GCC
   20903    will have their sources permanently removed.
   20904 
   20905    All configurations of the following processor architectures have been
   20906    declared obsolete:
   20907      * Matsushita MN10200, mn10200-*-*
   20908      * Motorola 88000, m88k-*-*
   20909      * IBM ROMP, romp-*-*
   20910 
   20911    Also, some individual systems have been obsoleted:
   20912      * Alpha
   20913           + Interix, alpha*-*-interix*
   20914           + Linux libc1, alpha*-*-linux*libc1*
   20915           + Linux ECOFF, alpha*-*-linux*ecoff*
   20916      * ARM
   20917           + Generic a.out, arm*-*-aout*
   20918           + Conix, arm*-*-conix*
   20919           + "Old ABI," arm*-*-oabi
   20920           + StrongARM/COFF, strongarm-*-coff*
   20921      * HPPA (PA-RISC)
   20922           + Generic OSF, hppa1.0-*-osf*
   20923           + Generic BSD, hppa1.0-*-bsd*
   20924           + HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
   20925           + HiUX, hppa*-*-hiux*
   20926           + Mach Lites, hppa*-*-lites*
   20927      * Intel 386 family
   20928           + Windows NT 3.x, i?86-*-win32
   20929      * MC68000 family
   20930           + HP systems, m68000-hp-bsd* and m68k-hp-bsd*
   20931           + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and
   20932             m68k-sun-mach*
   20933           + AT&T systems, m68000-att-sysv*
   20934           + Atari systems, m68k-atari-sysv*
   20935           + Motorola systems, m68k-motorola-sysv*
   20936           + NCR systems, m68k-ncr-sysv*
   20937           + Plexus systems, m68k-plexus-sysv*
   20938           + Commodore systems, m68k-cbm-sysv*
   20939           + Citicorp TTI, m68k-tti-*
   20940           + Unos, m68k-crds-unos*
   20941           + Concurrent RTU, m68k-ccur-rtu*
   20942           + Linux a.out, m68k-*-linux*aout*
   20943           + Linux libc1, m68k-*-linux*libc1*
   20944           + pSOS, m68k-*-psos*
   20945      * MIPS
   20946           + Generic ECOFF, mips*-*-ecoff*
   20947           + SINIX, mips-sni-sysv4
   20948           + Orion RTEMS, mips64orion-*-rtems*
   20949      * National Semiconductor 32000
   20950           + OpenBSD, ns32k-*-openbsd*
   20951      * POWER (aka RS/6000) and PowerPC
   20952           + AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
   20953           + Bull BOSX, rs6000-bull-bosx
   20954           + Generic Mach, rs6000-*-mach*
   20955           + Generic SysV, powerpc*-*-sysv*
   20956           + Linux libc1, powerpc*-*-linux*libc1*
   20957      * Sun SPARC
   20958           + Generic a.out, sparc-*-aout*, sparclet-*-aout*,
   20959             sparclite-*-aout*, and sparc86x-*-aout*
   20960           + NetBSD a.out, sparc-*-netbsd*aout*
   20961           + Generic BSD, sparc-*-bsd*
   20962           + ChorusOS, sparc-*-chorusos*
   20963           + Linux a.out, sparc-*-linux*aout*
   20964           + Linux libc1, sparc-*-linux*libc1*
   20965           + LynxOS, sparc-*-lynxos*
   20966           + Solaris on HAL hardware, sparc-hal-solaris2*
   20967           + SunOS versions 3 and 4, sparc-*-sunos[34]*
   20968      * NEC V850
   20969           + RTEMS, v850-*-rtems*
   20970      * VAX
   20971           + VMS, vax-*-vms*
   20972 
   20973 Documentation improvements
   20974 
   20975 Other significant improvements
   20976 
   20977      * Almost all front-end dependencies in the compiler have been
   20978        separated out into a set of language hooks. This should make adding
   20979        a new front end clearer and easier.
   20980      * One effect of removing the separate preprocessor is a small
   20981        increase in the robustness of the compiler in general, and the
   20982        maintainability of target descriptions. Previously target-specific
   20983        built-in macros and others, such as __FAST_MATH__, had to be
   20984        handled with so-called specs that were hard to maintain. Often they
   20985        would fail to behave properly when conflicting options were
   20986        supplied on the command line, and define macros in the user's
   20987        namespace even when strict ISO compliance was requested.
   20988        Integrating the preprocessor has cleanly solved these issues.
   20989      * The Makefile suite now supports redirection of make install by
   20990        means of the variable DESTDIR.
   20991      __________________________________________________________________
   20992 
   20993 GCC 3.3
   20994 
   20995    Detailed release notes for the GCC 3.3 release follow.
   20996 
   20997   Bug Fixes
   20998 
   20999     bootstrap failures
   21000 
   21001      * [9]10140 cross compiler build failures: missing __mempcpy (DUP:
   21002        [10]10198,[11]10338)
   21003 
   21004     Internal compiler errors (multi-platform)
   21005 
   21006      * [12]3581 large string causes segmentation fault in cc1
   21007      * [13]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
   21008      * [14]5533 (c++) ICE when processing std::accumulate(begin, end,
   21009        init, invalid_op)
   21010      * [15]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
   21011      * [16]6412 (c++) ICE in retrieve_specialization
   21012      * [17]6620 (c++) partial template specialization causes an ICE
   21013        (segmentation fault)
   21014      * [18]6663 (c++) ICE with attribute aligned
   21015      * [19]7068 ICE with incomplete types
   21016      * [20]7083 (c++) ICE using -gstabs with dodgy class derivation
   21017      * [21]7647 (c++) ICE when data member has the name of the enclosing
   21018        class
   21019      * [22]7675 ICE in fixup_var_refs_1
   21020      * [23]7718 'complex' template instantiation causes ICE
   21021      * [24]8116 (c++) ICE in member template function
   21022      * [25]8358 (ada) Ada compiler accesses freed memory, crashes
   21023      * [26]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
   21024        fault
   21025      * [27]8564 (c++) ICE in find_function_data, in function.c
   21026      * [28]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
   21027      * [29]8766 (c++) ICE after failed initialization of static template
   21028        variable
   21029      * [30]8803 ICE in instantiate_virtual_regs_1, in function.c
   21030      * [31]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
   21031      * [32]8906 (c++) ICE (Segmentation fault) when parsing nested-class
   21032        definition
   21033      * [33]9216 (c++) ICE on missing template parameter
   21034      * [34]9261 (c++) ICE in arg_assoc, in cp/decl2.c
   21035      * [35]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
   21036        loop
   21037      * [36]9429 (c++) ICE in template instantiation with a pointered new
   21038        operator
   21039      * [37]9516 Internal error when using a big array
   21040      * [38]9600 (c++) ICE with typedefs in template class
   21041      * [39]9629 (c++) virtual inheritance segfault
   21042      * [40]9672 (c++) ICE: Error reporting routines re-entered
   21043      * [41]9749 (c++) ICE in write_expression on invalid function
   21044        prototype
   21045      * [42]9794 (fortran) ICE: floating point exception during constant
   21046        folding
   21047      * [43]9829 (c++) Missing colon in nested namespace usage causes ICE
   21048      * [44]9916 (c++) ICE with noreturn function in ?: statement
   21049      * [45]9936 ICE with local function and variable-length 2d array
   21050      * [46]10262 (c++) cc1plus crashes with large generated code
   21051      * [47]10278 (c++) ICE in parser for invalid code
   21052      * [48]10446 (c++) ICE on definition of nonexistent member function of
   21053        nested class in a class template
   21054      * [49]10451 (c++) ICE in grokdeclarator on spurious mutable
   21055        declaration
   21056      * [50]10506 (c++) ICE in build_new at cp/init.c with
   21057        -fkeep-inline-functions and multiple inheritance
   21058      * [51]10549 (c++) ICE in store_bit_field on bitfields that exceed the
   21059        precision of the declared type
   21060 
   21061     Optimization bugs
   21062 
   21063      * [52]2001 Inordinately long compile times in reload CSE regs
   21064      * [53]2391 Exponential compilation time explosion in combine
   21065      * [54]2960 Duplicate loop conditions even with -Os
   21066      * [55]4046 redundant conditional branch
   21067      * [56]6405 Loop-unrolling related performance regressions
   21068      * [57]6798 very long compile time with large case-statement
   21069      * [58]6871 const objects shouldn't be moved to .bss
   21070      * [59]6909 problem w/ -Os on modified loop-2c.c test case
   21071      * [60]7189 gcc -O2 -Wall does not print ``control reaches end of
   21072        non-void function'' warning
   21073      * [61]7642 optimization problem with signbit()
   21074      * [62]8634 incorrect code for inlining of memcpy under -O2
   21075      * [63]8750 Cygwin prolog generation erroneously emitting __alloca as
   21076        regular function call
   21077 
   21078     C front end
   21079 
   21080      * [64]2161 long if-else cascade overflows parser stack
   21081      * [65]4319 short accepted on typedef'd char
   21082      * [66]8602 incorrect line numbers in warning messages when using
   21083        inline functions
   21084      * [67]9177 -fdump-translation-unit: C front end deletes function_decl
   21085        AST nodes and breaks debugging dumps
   21086      * [68]9853 miscompilation of non-constant structure initializer
   21087 
   21088     c++ compiler and library
   21089 
   21090      * [69]45 legal template specialization code is rejected (DUP:
   21091        [70]3784)
   21092      * [71]764 lookup failure: friend operator and dereferencing a pointer
   21093        and templates (DUP: [72]5116)
   21094      * [73]2862 gcc accepts invalid explicit instantiation syntax (DUP:
   21095        2863)
   21096      * [74]3663 G++ doesn't check access control during template
   21097        instantiation
   21098      * [75]3797 gcc fails to emit explicit specialization of a template
   21099        member
   21100      * [76]3948 Two destructors are called when no copy destructor is
   21101        defined (ABI change)
   21102      * [77]4137 Conversion operator within template is not accepted
   21103      * [78]4361 bogus ambiguity taking the address of a member template
   21104      * [79]4802 g++ accepts illegal template code (access to private
   21105        member; DUP: [80]5837)
   21106      * [81]4803 inline function is used but never defined, and g++ does
   21107        not object
   21108      * [82]5094 Partial specialization cannot be friend?
   21109      * [83]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
   21110      * [84]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
   21111        time
   21112      * [85]7015 certain __asm__ constructs rejected
   21113      * [86]7086 compile time regression (quadratic behavior in
   21114        fixup_var_refs)
   21115      * [87]7099 G++ doesn't set the noreturn attribute on std::exit and
   21116        std::abort
   21117      * [88]7247 copy constructor missing when inlining enabled (invalid
   21118        optimization?)
   21119      * [89]7441 string array initialization compilation time regression
   21120        from seconds to minutes
   21121      * [90]7768 __PRETTY_FUNCTION__ for template destructor is wrong
   21122      * [91]7804 bad printing of floating point constant in warning message
   21123      * [92]8099 Friend classes and template specializations
   21124      * [93]8117 member function pointers and multiple inheritance
   21125      * [94]8205 using declaration and multiple inheritance
   21126      * [95]8645 unnecessary non-zero checks in stl_tree.h
   21127      * [96]8724 explicit destructor call for incomplete class allowed
   21128      * [97]8805 compile time regression with many member variables
   21129      * [98]8691 -O3 and -fno-implicit-templates are incompatible
   21130      * [99]8700 unhelpful error message for binding temp to reference
   21131      * [100]8724 explicit destructor call for incomplete class allowed
   21132      * [101]8949 numeric_limits<>::denorm_min() and is_iec559 problems
   21133      * [102]9016 Failure to consistently constant fold "constant" C++
   21134        objects
   21135      * [103]9053 g++ confused about ambiguity of overloaded function
   21136        templates
   21137      * [104]9152 undefined virtual thunks
   21138      * [105]9182 basic_filebuf<> does not report errors in codecvt<>::out
   21139      * [106]9297 data corruption due to codegen bug (when copying.)
   21140      * [107]9318 i/ostream::operator>>/<<(streambuf*) broken
   21141      * [108]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
   21142      * [109]9400 bogus -Wshadow warning: shadowed declaration of this in
   21143        local classes
   21144      * [110]9424 i/ostream::operator>>/<<(streambuf*) drops characters
   21145      * [111]9425 filebuf::pbackfail broken (DUP: [112]9439)
   21146      * [113]9474 GCC freezes in compiling a weird code mixing <iostream>
   21147        and <iostream.h>
   21148      * [114]9548 Incorrect results from setf(ios::fixed) and precision(-1)
   21149        [115][DR 231]
   21150      * [116]9555 ostream inserters fail to set badbit on exception
   21151      * [117]9561 ostream inserters rethrow exception of wrong type
   21152      * [118]9563 ostream::sentry returns true after a failed preparation
   21153      * [119]9582 one-definition rule violation in std::allocator
   21154      * [120]9622 __PRETTY_FUNCTION__ incorrect in template destructors
   21155      * [121]9683 bug in initialization chains for static const variables
   21156        from template classes
   21157      * [122]9791 -Woverloaded-virtual reports hiding of destructor
   21158      * [123]9817 collate::compare doesn't handle nul characters
   21159      * [124]9825 filebuf::sputbackc breaks sbumpc
   21160      * [125]9826 operator>>(basic_istream, basic_string) fails to compile
   21161        with custom traits
   21162      * [126]9924 Multiple using statements for builtin functions not
   21163        allowed
   21164      * [127]9946 destructor is not called for temporary object
   21165      * [128]9964 filebuf::close() sometimes fails to close file
   21166      * [129]9988 filebuf::overflow writes EOF to file
   21167      * [130]10033 optimization breaks polymorphic references w/ typeid
   21168        operator
   21169      * [131]10097 filebuf::underflow drops characters
   21170      * [132]10132 filebuf destructor can throw exceptions
   21171      * [133]10180 gcc fails to warn about non-inlined function
   21172      * [134]10199 method parametrized by template does not work everywhere
   21173      * [135]10300 use of array-new (nothrow) in segfaults on NULL return
   21174      * [136]10427 Stack corruption with variable-length automatic arrays
   21175        and virtual destructors
   21176      * [137]10503 Compilation never stops in fixed_type_or_null
   21177 
   21178     Objective-C
   21179 
   21180      * [138]5956 selectors aren't matched properly when added to the
   21181        selector table
   21182 
   21183     Fortran compiler and library
   21184 
   21185      * [139]1832 list directed i/o overflow hangs, -fbounds-check doesn't
   21186        detect
   21187      * [140]3924 g77 generates code that is rejected by GAS if COFF debug
   21188        info requested
   21189      * [141]5634 doc: explain that configure --prefix=~/... does not work
   21190      * [142]6367 multiple repeat counts confuse namelist read into array
   21191      * [143]6491 Logical operations error on logicals when using
   21192        -fugly-logint
   21193      * [144]6742 Generation of C++ Prototype for FORTRAN and extern "C"
   21194      * [145]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
   21195        on irix6.5
   21196      * [146]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
   21197        assume a direct access file
   21198      * [147]7278 g77 "bug"; the executable misbehaves (with -O2
   21199        -fno-automatic)
   21200      * [148]7384 DATE_AND_TIME milliseconds field inactive on Windows
   21201      * [149]7388 Incorrect output with 0-based array of characters
   21202      * [150]8587 Double complex zero ** double precision number -> NaN
   21203        instead of zero
   21204      * [151]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
   21205        unknown register name line-length-none
   21206      * [152]10197 Direct access files not unformatted by default
   21207 
   21208     Java compiler and library
   21209 
   21210      * [153]6005 gcj fails to build rhug on alpha
   21211      * [154]6389 System.getProperty("") should always throw an
   21212        IllegalArgumentException
   21213      * [155]6576 java.util.ResourceBundle.getResource ignores locale
   21214      * [156]6652 new java.io.File("").getCanonicalFile() throws exception
   21215      * [157]7060 getMethod() doesn't search super interface
   21216      * [158]7073 bytecode interpreter gives wrong answer for interface
   21217        getSuperclass()
   21218      * [159]7180 possible bug in
   21219        javax.naming.spi.NamingManager.getPlusPath()
   21220      * [160]7416 java.security startup refs "GNU libgcj.security"
   21221      * [161]7570 Runtime.exec with null envp: child doesn't inherit parent
   21222        env (DUP: [162]7578)
   21223      * [163]7611 Internal error while compiling libjava with -O
   21224      * [164]7709 NullPointerException in _Jv_ResolvePoolEntry
   21225      * [165]7766 ZipInputStream.available returns 0 immediately after
   21226        construction
   21227      * [166]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
   21228      * [167]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
   21229      * [168]8142 '$' in class names vs. dlopen 'dynamic string tokens'
   21230      * [169]8234 ZipInputStream chokes when InputStream.read() returns
   21231        small chunks
   21232      * [170]8415 reflection bug: exception info for Method
   21233      * [171]8481 java.Random.nextInt(int) may return negative
   21234      * [172]8593 Error reading GZIPped files with BufferedReader
   21235      * [173]8759 java.beans.Introspector has no flushCaches() or
   21236        flushFromCaches() methods
   21237      * [174]8997 spin() calls Thread.sleep
   21238      * [175]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
   21239        instead of the root content of C:
   21240      * [176]9254 java::lang::Object::wait(), threads-win32.cc returns
   21241        wrong return codes
   21242      * [177]9271 Severe bias in java.security.SecureRandom
   21243 
   21244     Ada compiler and library
   21245 
   21246      * [178]6767 make gnatlib-shared fails on -laddr2line
   21247      * [179]9911 gnatmake fails to link when GCC configured with
   21248        --with-sjlj-exceptions=yes
   21249      * [180]10020 Can't bootstrap gcc on AIX with Ada enabled
   21250      * [181]10546 Ada tasking not working on Red Hat 9
   21251 
   21252     preprocessor
   21253 
   21254      * [182]7029 preprocessor should ignore #warning with -M
   21255 
   21256     ARM-specific
   21257 
   21258      * [183]2903 [arm] Optimization bug with long long arithmetic
   21259      * [184]7873 arm-linux-gcc fails when assigning address to a bit field
   21260 
   21261     FreeBSD-specific
   21262 
   21263      * [185]7680 float functions undefined in math.h/cmath with #define
   21264        _XOPEN_SOURCE
   21265 
   21266     HP-UX or HP-PA-specific
   21267 
   21268      * [186]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
   21269      * [187]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
   21270        fputc_unlocked
   21271      * [188]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
   21272 
   21273     m68hc11-specific
   21274 
   21275      * [189]6744 Bad assembler code generated: reference to pseudo
   21276        register z
   21277      * [190]7361 Internal compiler error in reload_cse_simplify_operands,
   21278        in reload1.c
   21279 
   21280     MIPS-specific
   21281 
   21282      * [191]9496 [mips-linux] bug in optimizer?
   21283 
   21284     PowerPC-specific
   21285 
   21286      * [192]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
   21287        space
   21288      * [193]8480 reload ICEs for LAPACK code on powerpc64-linux
   21289      * [194]8784 [AIX] Internal compiler error in simplify_gen_subreg
   21290      * [195]10315 [powerpc] ICE: in extract_insn, in recog.c
   21291 
   21292     SPARC-specific
   21293 
   21294      * [196]10267 (documentation) Wrong build instructions for
   21295        *-*-solaris2*
   21296 
   21297     x86-specific (Intel/AMD)
   21298 
   21299      * [197]7916 ICE in instantiate_virtual_register_1
   21300      * [198]7926 (c++) i486 instructions in header files make c++ programs
   21301        crash on i386
   21302      * [199]8555 ICE in gen_split_1231
   21303      * [200]8994 ICE with -O -march=pentium4
   21304      * [201]9426 ICE with -fssa -funroll-loops -fprofile-arcs
   21305      * [202]9806 ICE in inline assembly with -fPIC flag
   21306      * [203]10077 gcc -msse2 generates movd to move dwords between xmm
   21307        regs
   21308      * [204]10233 64-bit comparison only comparing bottom 32-bits
   21309      * [205]10286 type-punning doesn't work with __m64 and -O
   21310      * [206]10308 [x86] ICE with -O -fgcse or -O2
   21311      __________________________________________________________________
   21312 
   21313 [207]GCC 3.3.1
   21314 
   21315   Bug Fixes
   21316 
   21317    This section lists the problem reports (PRs) from GCC's bug tracking
   21318    system that are known to be fixed in the 3.3.1 release. This list might
   21319    not be complete (that is, it is possible that some PRs that have been
   21320    fixed are not listed here).
   21321 
   21322     Bootstrap failures
   21323 
   21324      * [208]11272 [Solaris] make bootstrap fails while building libstdc++
   21325 
   21326     Internal compiler errors (multi-platform)
   21327 
   21328      * [209]5754 ICE on invalid nested template class
   21329      * [210]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
   21330        and --enable-checking
   21331      * [211]6949 (c++) ICE in tsubst_decl, in cp/pt.c
   21332      * [212]7053 (c++) ICE when declaring a function already defined as a
   21333        friend method of a template class
   21334      * [213]8164 (c++) ICE when using different const expressions as
   21335        template parameter
   21336      * [214]8384 (c++) ICE in is_base_type, in dwarf2out.c
   21337      * [215]9559 (c++) ICE with invalid initialization of a static const
   21338      * [216]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
   21339        when redeclaring a static member variable
   21340      * [217]9864 (fortran) ICE in add_abstract_origin_attribute, in
   21341        dwarfout.c with -g -O -finline-functions
   21342      * [218]10432 (c++) ICE in poplevel, in cp/decl.c
   21343      * [219]10475 ICE in subreg_highpart_offset for code with long long
   21344      * [220]10635 (c++) ICE when dereferencing an incomplete type casted
   21345        from a void pointer
   21346      * [221]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
   21347        instantiating static member variables
   21348      * [222]10700 ICE in copy_to_mode_reg on 64-bit targets
   21349      * [223]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
   21350      * [224]10796 (c++) ICE when defining an enum with two values: -1 and
   21351        MAX_INT_64BIT
   21352      * [225]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
   21353        sched.c
   21354      * [226]10939 (c++) ICE with template code
   21355      * [227]10956 (c++) ICE when specializing a template member function
   21356        of a template class, in tsubst, in cp/pt.c
   21357      * [228]11041 (c++) ICE: const myclass &x = *x; (when operator*()
   21358        defined)
   21359      * [229]11059 (c++) ICE with empty union
   21360      * [230]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
   21361        -O2 -fnon-call-exceptions
   21362      * [231]11105 (c++) ICE in mangle_conv_op_name_for_type
   21363      * [232]11149 (c++) ICE on error when instantiation with call function
   21364        of a base type
   21365      * [233]11228 (c++) ICE on new-expression using array operator new and
   21366        default-initialization
   21367      * [234]11282 (c++) Infinite memory usage after syntax error
   21368      * [235]11301 (fortran) ICE with -fno-globals
   21369      * [236]11308 (c++) ICE when using an enum type name as if it were a
   21370        class or namespace
   21371      * [237]11473 (c++) ICE with -gstabs when empty struct inherits from
   21372        an empty struct
   21373      * [238]11503 (c++) ICE when instantiating template with ADDR_EXPR
   21374      * [239]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
   21375        template member functions
   21376 
   21377     Optimization bugs
   21378 
   21379      * [240]11198 -O2 -frename-registers generates wrong code (aliasing
   21380        problem)
   21381      * [241]11304 Wrong code production with -fomit-frame-pointer
   21382      * [242]11381 volatile memory access optimized away
   21383      * [243]11536 [strength-reduce] -O2 optimization produces wrong code
   21384      * [244]11557 constant folding bug generates wrong code
   21385 
   21386     C front end
   21387 
   21388      * [245]5897 No warning for statement after return
   21389      * [246]11279 DWARF-2 output mishandles large enums
   21390 
   21391     Preprocessor bugs
   21392 
   21393      * [247]11022 no warning for non-compatible macro redefinition
   21394 
   21395     C++ compiler and library
   21396 
   21397      * [248]2330 static_cast<>() to a private base is allowed
   21398      * [249]5388 Incorrect message "operands to ?: have different types"
   21399      * [250]5390 Libiberty fails to demangle multi-digit template
   21400        parameters
   21401      * [251]7877 Incorrect parameter passing to specializations of member
   21402        function templates
   21403      * [252]9393 Anonymous namespaces and compiling the same file twice
   21404      * [253]10032 -pedantic converts some errors to warnings
   21405      * [254]10468 const typeof(x) is non-const, but only in templates
   21406      * [255]10527 confused error message with "new int()" parameter
   21407        initializer
   21408      * [256]10679 parameter MIN_INLINE_INSNS is not honored
   21409      * [257]10682 gcc chokes on a typedef for an enum inside a class
   21410        template
   21411      * [258]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
   21412        0.
   21413      * [259]10845 template member function (with nested template as
   21414        parameter) cannot be called anymore if another unrelated template
   21415        member function is defined
   21416      * [260]10849 Cannot define an out-of-class specialization of a
   21417        private nested template class
   21418      * [261]10888 Suppress -Winline warnings for system headers
   21419      * [262]10929 -Winline warns about functions for which no definition
   21420        is visible
   21421      * [263]10931 valid conversion static_cast<const unsigned
   21422        int&>(lvalue-of-type-int) is rejected
   21423      * [264]10940 Bad code with explicit specialization
   21424      * [265]10968 If member function implicitly instantiated, explicit
   21425        instantiation of class fails to instantiate it
   21426      * [266]10990 Cannot convert with dynamic_cast<> to a private base
   21427        class from within a member function
   21428      * [267]11039 Bad interaction between implicit typename deprecation
   21429        and friendship
   21430      * [268]11062 (libstdc++) avoid __attribute__ ((unused)); say
   21431        "__unused__" instead
   21432      * [269]11095 C++ iostream manipulator causes segfault when called
   21433        with negative argument
   21434      * [270]11098 g++ doesn't emit complete debugging information for
   21435        local variables in destructors
   21436      * [271]11137 GNU/Linux shared library constructors not called unless
   21437        there's one global object
   21438      * [272]11154 spurious ambiguity report for template class
   21439        specialization
   21440      * [273]11329 Compiler cannot find user defined implicit typecast
   21441      * [274]11332 Spurious error with casts in ?: expression
   21442      * [275]11431 static_cast behavior with subclasses when default
   21443        constructor available
   21444      * [276]11528 money_get facet does not accept "$.00" as valid
   21445      * [277]11546 Type lookup problems in out-of-line definition of a
   21446        class doubly nested from a template class
   21447      * [278]11567 C++ code containing templated member function with same
   21448        name as pure virtual member function results in linking failure
   21449      * [279]11645 Failure to deal with using and private inheritance
   21450 
   21451     Java compiler and library
   21452 
   21453      * [280]5179 Qualified static field access doesn't initialize its
   21454        class
   21455      * [281]8204 gcj -O2 to native reorders certain instructions
   21456        improperly
   21457      * [282]10838 java.io.ObjectInputStream syntax error
   21458      * [283]10886 The RMI registry that comes with GCJ does not work
   21459        correctly
   21460      * [284]11349 JNDI URL context factories not located correctly
   21461 
   21462     x86-specific (Intel/AMD)
   21463 
   21464      * [285]4823 ICE on inline assembly code
   21465      * [286]8878 miscompilation with -O and SSE
   21466      * [287]9815 (c++ library) atomicity.h - fails to compile with -O3
   21467        -masm=intel
   21468      * [288]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
   21469        in reload1.c
   21470      * [289]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
   21471      * [290]10673 ICE for x86-64 on freebsd libc vfprintf.c source
   21472      * [291]11044 [x86] out of range loop instructions for FP code on K6
   21473      * [292]11089 ICE: instantiate_virtual_regs_lossage while using SSE
   21474        built-ins
   21475      * [293]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
   21476        is used
   21477 
   21478     SPARC- or Solaris- specific
   21479 
   21480      * [294]9362 solaris 'as' dies when fed .s and "-gstabs"
   21481      * [295]10142 [SPARC64] gcc produces wrong code when passing
   21482        structures by value
   21483      * [296]10663 New configure check aborts with Sun tools.
   21484      * [297]10835 combinatorial explosion in scheduler on HyperSPARC
   21485      * [298]10876 ICE in calculate_giv_inc when building KDE
   21486      * [299]10955 wrong code at -O3 for structure argument in context of
   21487        structure return
   21488      * [300]11018 -mcpu=ultrasparc busts tar-1.13.25
   21489      * [301]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
   21490        Linux kernel
   21491 
   21492     ia64 specific
   21493 
   21494      * [302]10907 gcc violates the ia64 ABI (GP must be preserved)
   21495      * [303]11320 scheduler bug (in machine depended reorganization pass)
   21496      * [304]11599 bug with conditional and __builtin_prefetch
   21497 
   21498     PowerPC specific
   21499 
   21500      * [305]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
   21501        during loop)
   21502      * [306]10871 error in rs6000_stack_info save_size computation
   21503      * [307]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
   21504        cures it
   21505 
   21506     m68k-specific
   21507 
   21508      * [308]7594 [m68k] ICE on legal code associated with simplify-rtx
   21509      * [309]10557 [m68k] ICE in subreg_offset_representable_p
   21510      * [310]11054 [m68k] ICE in reg_overlap_mentioned_p
   21511 
   21512     ARM-specific
   21513 
   21514      * [311]10834 [arm] GCC 3.3 still generates incorrect instructions for
   21515        functions with __attribute__ ((interrupt ("IRQ")))
   21516      * [312]10842 [arm] Clobbered link register is copied to pc under
   21517        certain circumstances
   21518      * [313]11052 [arm] noce_process_if_block() can lose REG_INC notes
   21519      * [314]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
   21520        (3.4)
   21521 
   21522     MIPS-specific
   21523 
   21524      * [315]11084 ICE in propagate_one_insn, in flow.c
   21525 
   21526     SH-specific
   21527 
   21528      * [316]10331 can't compile c++ part of gcc cross compiler for sh-elf
   21529      * [317]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
   21530      * [318]11096 i686-linux to sh-linux cross compiler fails to compile
   21531        C++ files
   21532 
   21533     GNU/Linux (or Hurd?) specific
   21534 
   21535      * [319]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
   21536 
   21537     UnixWare specific
   21538 
   21539      * [320]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
   21540        7.1.1
   21541 
   21542     Cygwin (or mingw) specific
   21543 
   21544      * [321]5287 ICE with dllimport attribute
   21545      * [322]10148 [MingW/CygWin] Compiler dumps core
   21546 
   21547     DJGPP specific
   21548 
   21549      * [323]8787 GCC fails to emit .intel_syntax when invoked with
   21550        -masm=intel on DJGPP
   21551 
   21552     Darwin (and MacOS X) specific
   21553 
   21554      * [324]10900 trampolines crash
   21555 
   21556     Documentation
   21557 
   21558      * [325]1607 (c++) Format attributes on methods undocumented
   21559      * [326]4252 Invalid option `-fdump-translation-unit'
   21560      * [327]4490 Clarify restrictions on -m96bit-long-double,
   21561        -m128bit-long-double
   21562      * [328]10355 document an issue with regparm attribute on some systems
   21563        (e.g. Solaris)
   21564      * [329]10726 (fortran) Documentation for function "IDate Intrinsic
   21565        (Unix)" is wrong
   21566      * [330]10805 document bug in old version of Sun assembler
   21567      * [331]10815 warn against GNU binutils on AIX
   21568      * [332]10877 document need for newer binutils on i?86-*-linux-gnu
   21569      * [333]11280 Manual incorrect with respect to -freorder-blocks
   21570      * [334]11466 Document -mlittle-endian and its restrictions for the
   21571        sparc64 port
   21572 
   21573     Testsuite bugs (compiler itself is not affected)
   21574 
   21575      * [335]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
   21576        report failure
   21577      * [336]10810 gcc-3.3 fails make check: buffer overrun in
   21578        test_demangle.c
   21579      __________________________________________________________________
   21580 
   21581 [337]GCC 3.3.2
   21582 
   21583   Bug Fixes
   21584 
   21585    This section lists the problem reports (PRs) from GCC's bug tracker
   21586    that are known to be fixed in the 3.3.2 release. This list might not be
   21587    complete (that is, it is possible that some PRs that have been fixed
   21588    are not listed here).
   21589 
   21590     Bootstrap failures and problems
   21591 
   21592      * [338]8336 [SCO5] bootstrap config still tries to use COFF options
   21593      * [339]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
   21594        --enable-threads=posix
   21595      * [340]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
   21596      * [341]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
   21597        7.1.1)
   21598      * [342]11687 xstormy16-elf build fails in libf2c
   21599      * [343]12263 [SGI IRIX] bootstrap fails during compile of
   21600        libf2c/libI77/backspace.c
   21601      * [344]12490 buffer overflow in scan-decls.c (during Solaris 9
   21602        fix-header processing)
   21603 
   21604     Internal compiler errors (multi-platform)
   21605 
   21606      * [345]7277 Casting integers to vector types causes ICE
   21607      * [346]7939 (c++) ICE on invalid function template specialization
   21608      * [347]11063 (c++) ICE on parsing initialization list of const array
   21609        member
   21610      * [348]11207 ICE with negative index in array element designator
   21611      * [349]11522 (fortran) g77 dwarf-2 ICE in
   21612        add_abstract_origin_attribute
   21613      * [350]11595 (c++) ICE on duplicate label definition
   21614      * [351]11646 (c++) ICE in commit_one_edge_insertion with
   21615        -fnon-call-exceptions -fgcse -O
   21616      * [352]11665 ICE in struct initializer when taking address
   21617      * [353]11852 (c++) ICE with bad struct initializer.
   21618      * [354]11878 (c++) ICE in cp_expr_size
   21619      * [355]11883 ICE with any -O on mercury-generated C code
   21620      * [356]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
   21621        cp/typeck2.c when applying typeid operator to template template
   21622        parameter
   21623      * [357]12146 ICE in lookup_template_function, in cp/pt.c
   21624      * [358]12215 ICE in make_label_edge with -fnon-call-exceptions
   21625        -fno-gcse -O2
   21626      * [359]12369 (c++) ICE with templates and friends
   21627      * [360]12446 ICE in emit_move_insn on complicated array reference
   21628      * [361]12510 ICE in final_scan_insn
   21629      * [362]12544 ICE with large parameters used in nested functions
   21630 
   21631     C and optimization bugs
   21632 
   21633      * [363]9862 spurious warnings with -W -finline-functions
   21634      * [364]10962 lookup_field is a linear search on a linked list (can be
   21635        slow if large struct)
   21636      * [365]11370 -Wunreachable-code gives false complaints
   21637      * [366]11637 invalid assembly with -fnon-call-exceptions
   21638      * [367]11885 Problem with bitfields in packed structs
   21639      * [368]12082 Inappropriate unreachable code warnings
   21640      * [369]12180 Inline optimization fails for variadic function
   21641      * [370]12340 loop unroller + gcse produces wrong code
   21642 
   21643     C++ compiler and library
   21644 
   21645      * [371]3907 nested template parameter collides with member name
   21646      * [372]5293 confusing message when binding a temporary to a reference
   21647      * [373]5296 [DR115] Pointers to functions and to template functions
   21648        behave differently in deduction
   21649      * [374]7939 ICE on function template specialization
   21650      * [375]8656 Unable to assign function with __attribute__ and pointer
   21651        return type to an appropriate variable
   21652      * [376]10147 Confusing error message for invalid template function
   21653        argument
   21654      * [377]11400 std::search_n() makes assumptions about Size parameter
   21655      * [378]11409 issues with using declarations, overloading, and
   21656        built-in functions
   21657      * [379]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
   21658        multiple bits in mask
   21659      * [380]11786 operator() call on variable in other namespace not
   21660        recognized
   21661      * [381]11867 static_cast ignores ambiguity
   21662      * [382]11928 bug with conversion operators that are typedefs
   21663      * [383]12114 Uninitialized memory accessed in dtor
   21664      * [384]12163 static_cast + explicit constructor regression
   21665      * [385]12181 Wrong code with comma operator and c++
   21666      * [386]12236 regparm and fastcall messes up parameters
   21667      * [387]12266 incorrect instantiation of unneeded template during
   21668        overload resolution
   21669      * [388]12296 istream::peek() doesn't set eofbit
   21670      * [389]12298 [sjlj exceptions] Stack unwind destroys
   21671        not-yet-constructed object
   21672      * [390]12369 ICE with templates and friends
   21673      * [391]12337 apparently infinite loop in g++
   21674      * [392]12344 stdcall attribute ignored if function returns a pointer
   21675      * [393]12451 missing(late) class forward declaration in cxxabi.h
   21676      * [394]12486 g++ accepts invalid use of a qualified name
   21677 
   21678     x86 specific (Intel/AMD)
   21679 
   21680      * [395]8869 [x86 MMX] ICE with const variable optimization and MMX
   21681        builtins
   21682      * [396]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
   21683        -O2
   21684      * [397]11689 g++3.3 emits un-assembleable code for k6 architecture
   21685      * [398]12116 [k6] Invalid assembly output values with X-MAME code
   21686      * [399]12070 ICE converting between double and long double with
   21687        -msoft-float
   21688 
   21689     ia64-specific
   21690 
   21691      * [400]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
   21692      * [401]11535 __builtin_return_address may not work on ia64
   21693      * [402]11693 [ia64] ICE in gen_nop_type
   21694      * [403]12224 [ia64] Thread-local storage doesn't work
   21695 
   21696     PowerPC-specific
   21697 
   21698      * [404]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
   21699        kernel
   21700      * [405]11319 loop miscompiled on ppc32
   21701      * [406]11949 ICE Compiler segfault with ffmpeg -maltivec code
   21702 
   21703     SPARC-specific
   21704 
   21705      * [407]11662 wrong code for expr. with cast to long long and
   21706        exclusive or
   21707      * [408]11965 invalid assembler code for a shift < 32 operation
   21708      * [409]12301 (c++) stack corruption when a returned expression throws
   21709        an exception
   21710 
   21711     Alpha-specific
   21712 
   21713      * [410]11717 [alpha-linux] unrecognizable insn compiling for.c of
   21714        kernel 2.4.22-pre8
   21715 
   21716     HPUX-specific
   21717 
   21718      * [411]11313 problem with #pragma weak and static inline functions
   21719      * [412]11712 __STDC_EXT__ not defined for C++ by default anymore?
   21720 
   21721     Solaris specific
   21722 
   21723      * [413]12166 Profiled programs crash if PROFDIR is set
   21724 
   21725     Solaris-x86 specific
   21726 
   21727      * [414]12101 i386 Solaris no longer works with GNU as?
   21728 
   21729     Miscellaneous embedded target-specific bugs
   21730 
   21731      * [415]10988 [m32r-elf] wrong blockmove code with -O3
   21732      * [416]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
   21733        -O2
   21734      * [417]11902 [sh4] spec file improperly inserts rpath even when none
   21735        needed
   21736      * [418]11903 [sh4] -pthread fails to link due to error in spec file
   21737        on sh4
   21738      __________________________________________________________________
   21739 
   21740 [419]GCC 3.3.3
   21741 
   21742   Minor features
   21743 
   21744    In addition to the bug fixes documented below, this release contains
   21745    few minor features such as:
   21746      * Support for --with-sysroot
   21747      * Support for automatic detection of executable stacks
   21748      * Support for SSE3 instructions
   21749      * Support for thread local storage debugging under GDB on S390
   21750 
   21751   Bug Fixes
   21752 
   21753    This section lists the problem reports (PRs) from GCC's bug tracker
   21754    that are known to be fixed in the 3.3.3 release. This list might not be
   21755    complete (that is, it is possible that some PRs that have been fixed
   21756    are not listed here).
   21757 
   21758     Bootstrap failures and issues
   21759 
   21760      * [420]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
   21761      * [421]12399 boehm-gc fails (when building a cross compiler): libtool
   21762        unable to infer tagged configuration
   21763      * [422]13068 mklibgcc.in doesn't handle multi-level multilib
   21764        subdirectories properly
   21765 
   21766     Internal compiler errors (multi-platform)
   21767 
   21768      * [423]10060 ICE (stack overflow) on huge file (300k lines) due to
   21769        recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
   21770      * [424]10555 (c++) ICE on undefined template argument
   21771      * [425]10706 (c++) ICE in mangle_class_name_for_template
   21772      * [426]11496 (fortran) error in flow_loops_find when -funroll-loops
   21773        active
   21774      * [427]11741 ICE in pre_insert_copy_insn, in gcse.c
   21775      * [428]12440 GCC crashes during compilation of quicktime4linux 2.0.0
   21776      * [429]12632 (fortran) -fbounds-check ICE
   21777      * [430]12712 (c++) ICE on short legit C++ code fragment with gcc
   21778        3.3.2
   21779      * [431]12726 (c++) ICE (segfault) on trivial code
   21780      * [432]12890 (c++) ICE on compilation of class with throwing method
   21781      * [433]12900 (c++) ICE in rtl_verify_flow_info_1
   21782      * [434]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
   21783        correct code with -O2 -fno-force-mem
   21784      * [435]13289 (c++) ICE in regenerate_decl_from_template on recursive
   21785        template
   21786      * [436]13318 ICE: floating point exception in the loop optimizer
   21787      * [437]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
   21788        except.c
   21789      * [438]13574 (c++) invalid array default initializer in class lets
   21790        gcc consume all memory and die
   21791      * [439]13475 ICE on SIMD variables with partial value initialization
   21792      * [440]13797 (c++) ICE on invalid template parameter
   21793      * [441]13824 (java) gcj SEGV with simple .java program
   21794 
   21795     C and optimization bugs
   21796 
   21797      * [442]8776 loop invariants are not removed (most likely)
   21798      * [443]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
   21799        strncmp by memcmp
   21800      * [444]11350 undefined labels with -Os -fPIC
   21801      * [445]12826 Optimizer removes reference through volatile pointer
   21802      * [446]12500 stabs debug info: void no longer a predefined / builtin
   21803        type
   21804      * [447]12941 builtin-bitops-1.c miscompilation (latent bug)
   21805      * [448]12953 tree inliner bug (in inline_forbidden_p) and fix
   21806      * [449]13041 linux-2.6/sound/core/oss/rate.c miscompiled
   21807      * [450]13507 spurious printf format warning
   21808      * [451]13382 Type information for const pointer disappears during
   21809        optimization.
   21810      * [452]13394 noreturn attribute ignored on recursive invokation
   21811      * [453]13400 Compiled code crashes storing to read-only location
   21812      * [454]13521 Endless loop in calculate_global_regs_live
   21813 
   21814     C++ compiler and library
   21815 
   21816    Some of the bug fixes in this list were made to implement decisions
   21817    that the ISO C++ standards committee has made concerning several defect
   21818    reports (DRs). Links in the list below point to detailed discussion of
   21819    the relevant defect report.
   21820      * [455]2094 unimplemented: use of `ptrmem_cst' in template type
   21821        unification
   21822      * [456]2294 using declaration confusion
   21823      * [457]5050 template instantiation depth exceeds limit: recursion
   21824        problem?
   21825      * [458]9371 Bad exception handling in
   21826        i/ostream::operator>>/<<(streambuf*)
   21827      * [459]9546 bad exception handling in ostream members
   21828      * [460]10081 basic_ios::_M_cache_locale leaves NULL members in the
   21829        face of unknown locales
   21830      * [461]10093 [462][DR 61] Setting failbit in exceptions doesn't work
   21831      * [463]10095 istream::operator>>(int&) sets ios::badbit when
   21832        ios::failbit is set.
   21833      * [464]11554 Warning about reordering of initializers doesn't mention
   21834        location of constructor
   21835      * [465]12297 istream::sentry::sentry() handles eof() incorrectly.
   21836      * [466]12352 Exception safety problems in src/localename.cc
   21837      * [467]12438 Memory leak in locale::combine()
   21838      * [468]12540 Memory leak in locale::locale(const char*)
   21839      * [469]12594 DRs [470]60 [TC] and [471]63 [TC] not implemented
   21840      * [472]12657 Resolution of [473]DR 292 (WP) still unimplemented
   21841      * [474]12696 memory eating infinite loop in diagnostics (error
   21842        recovery problem)
   21843      * [475]12815 Code compiled with optimization behaves unexpectedly
   21844      * [476]12862 Conflicts between typedefs/enums and namespace member
   21845        declarations
   21846      * [477]12926 Wrong value after assignment in initialize list using
   21847        bit-fields
   21848      * [478]12967 Resolution of [479]DR 300 [WP] still unimplemented
   21849      * [480]12971 Resolution of [481]DR 328 [WP] still unimplemented
   21850      * [482]13007 basic_streambuf::pubimbue, imbue wrong
   21851      * [483]13009 Implicitly-defined assignment operator writes to wrong
   21852        memory
   21853      * [484]13057 regparm attribute not applied to destructor
   21854      * [485]13070 -Wformat option ignored in g++
   21855      * [486]13081 forward template declarations in <complex> let inlining
   21856        fail
   21857      * [487]13239 Assertion does not seem to work correctly anymore
   21858      * [488]13262 "xxx is private within this context" when initializing a
   21859        self-contained template class
   21860      * [489]13290 simple typo in concept checking for std::generate_n
   21861      * [490]13323 Template code does not compile in presence of typedef
   21862      * [491]13369 __verify_grouping (and __add_grouping?) not correct
   21863      * [492]13371 infinite loop with packed struct and inlining
   21864      * [493]13445 Template argument replacement "dereferences" a typedef
   21865      * [494]13461 Fails to access protected-ctor from public constant
   21866      * [495]13462 Non-standard-conforming type set::pointer
   21867      * [496]13478 gcc uses wrong constructor to initialize a const
   21868        reference
   21869      * [497]13544 "conflicting types" for enums in different scopes
   21870      * [498]13650 string::compare should not (always) use
   21871        traits_type::length()
   21872      * [499]13683 bogus warning about passing non-PODs through ellipsis
   21873      * [500]13688 Derived class is denied access to protected base class
   21874        member class
   21875      * [501]13774 Member variable cleared in virtual multiple inheritance
   21876        class
   21877      * [502]13884 Protect sstream.tcc from extern template use
   21878 
   21879     Java compiler and library
   21880 
   21881      * [503]10746 [win32] garbage collection crash in GCJ
   21882 
   21883     Objective-C compiler and library
   21884 
   21885      * [504]11433 Crash due to dereferencing null pointer when querying
   21886        protocol
   21887 
   21888     Fortran compiler and library
   21889 
   21890      * [505]12633 logical expression gives incorrect result with
   21891        -fugly-logint option
   21892      * [506]13037 [gcse-lm] g77 generates incorrect code
   21893      * [507]13213 Hex constant problem when compiling with -fugly-logint
   21894        and -ftypeless-boz
   21895 
   21896     x86-specific (Intel/AMD)
   21897 
   21898      * [508]4490 ICE with -m128bit-long-double
   21899      * [509]12292 [x86_64] ICE: RTL check: expected code `const_int', have
   21900        `reg' in make_field_assignment, in combine.c
   21901      * [510]12441 ICE: can't find a register to spill
   21902      * [511]12943 array static-init failure under -fpic, -fPIC
   21903      * [512]13608 Incorrect code with -O3 -ffast-math
   21904 
   21905     PowerPC-specific
   21906 
   21907      * [513]11598 testcase gcc.dg/20020118-1.c fails runtime check of
   21908        __attribute__((aligned(16)))
   21909      * [514]11793 ICE in extract_insn, in recog.c (const_vector's)
   21910      * [515]12467 vmsumubm emitted when vmsummbm appropriate (typo in
   21911        altivec.md)
   21912      * [516]12537 g++ generates writeable text sections
   21913 
   21914     SPARC-specific
   21915 
   21916      * [517]12496 wrong result for __atomic_add(&value, -1) when using -O0
   21917        -m64
   21918      * [518]12865 mprotect call to make trampoline executable may fail
   21919      * [519]13354 ICE in sparc_emit_set_const32
   21920 
   21921     ARM-specific
   21922 
   21923      * [520]10467 [arm] ICE in pre_insert_copy_insn,
   21924 
   21925     ia64-specific
   21926 
   21927      * [521]11226 ICE passing struct arg with two floats
   21928      * [522]11227 ICE for _Complex float, _Complex long double args
   21929      * [523]12644 GCC 3.3.2 fails to compile glibc on ia64
   21930      * [524]13149 build gcc-3.3.2 1305 error:unrecognizable insn
   21931      * Various fixes for libunwind
   21932 
   21933     Alpha-specific
   21934 
   21935      * [525]12654 Incorrect comparison code generated for Alpha
   21936      * [526]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
   21937      * [527]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
   21938 
   21939     HPPA-specific
   21940 
   21941      * [528]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
   21942      * [529]12158 [hppa] compilation does not terminate at -O1
   21943 
   21944     S390-specific
   21945 
   21946      * [530]11992 Wrong built-in code for memcmp with length 1<<24: only
   21947        (1<<24)-1 possible for CLCL-Instruction
   21948 
   21949     SH-specific
   21950 
   21951      * [531]9365 segfault in gen_far_branch (config/sh/sh.c)
   21952      * [532]10392 optimizer generates faulty array indexing
   21953      * [533]11322 SH profiler outputs multiple definitions of symbol
   21954      * [534]13069 gcc/config/sh/rtems.h broken
   21955      * [535]13302 Putting a va_list in a struct causes seg fault
   21956      * [536]13585 Incorrect optimization of call to sfunc
   21957      * Fix inappropriately exported libgcc functions from the shared
   21958        library
   21959 
   21960     Other embedded target specific
   21961 
   21962      * [537]8916 [mcore] unsigned char assign gets hosed.
   21963      * [538]11576 [h8300] ICE in change_address_1, in emit-rtl.c
   21964      * [539]13122 [h8300] local variable gets corrupted by function call
   21965        when -fomit-frame-pointer is given
   21966      * [540]13256 [cris] strict_low_part mistreated in delay slots
   21967      * [541]13373 [mcore] optimization with -frerun-cse-after-loop
   21968        -fexpensive-optimizations produces wrong code on mcore
   21969 
   21970     GNU HURD-specific
   21971 
   21972      * [542]12561 gcc/config/t-gnu needs updating to work with
   21973        --with-sysroot
   21974 
   21975     Tru64 Unix specific
   21976 
   21977      * [543]6243 testsuite fails almost all tests due to no libintl in
   21978        LD_LIBRARY_PATH during test.
   21979      * [544]11397 weak aliases broken on Tru64 UNIX
   21980 
   21981     AIX-specific
   21982 
   21983      * [545]12505 build failure due to defines of uchar in cpphash.h and
   21984        sys/types.h
   21985      * [546]13150 WEAK symbols not exported by collect2
   21986 
   21987     IRIX-specific
   21988 
   21989      * [547]12666 fixincludes problem on IRIX 6.5.19m
   21990 
   21991     Solaris-specific
   21992 
   21993      * [548]12969 Including sys/byteorder.h breaks configure checks
   21994 
   21995     Testsuite problems (compiler is not affected)
   21996 
   21997      * [549]10819 testsuite creates CR+LF on compiler version lines in
   21998        test summary files
   21999      * [550]11612 abi_check not finding correct libgcc_s.so.1
   22000 
   22001     Miscellaneous
   22002 
   22003      * [551]13211 using -###, incorrect warnings about unused linker file
   22004        are produced
   22005      __________________________________________________________________
   22006 
   22007 [552]GCC 3.3.4
   22008 
   22009    This is the [553]list of problem reports (PRs) from GCC's bug tracking
   22010    system that are known to be fixed in the 3.3.4 release. This list might
   22011    not be complete (that is, it is possible that some PRs that have been
   22012    fixed are not listed here).
   22013      __________________________________________________________________
   22014 
   22015 [554]GCC 3.3.5
   22016 
   22017    This is the [555]list of problem reports (PRs) from GCC's bug tracking
   22018    system that are known to be fixed in the 3.3.5 release. This list might
   22019    not be complete (that is, it is possible that some PRs that have been
   22020    fixed are not listed here).
   22021      __________________________________________________________________
   22022 
   22023 [556]GCC 3.3.6
   22024 
   22025    This is the [557]list of problem reports (PRs) from GCC's bug tracking
   22026    system that are known to be fixed in the 3.3.6 release. This list might
   22027    not be complete (that is, it is possible that some PRs that have been
   22028    fixed are not listed here).
   22029 
   22030 
   22031     For questions related to the use of GCC, please consult these web
   22032     pages and the [558]GCC manuals. If that fails, the
   22033     [559]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22034     web pages and the development of GCC are welcome on our developer
   22035     list at [560]gcc (a] gcc.gnu.org. All of [561]our lists have public
   22036     archives.
   22037 
   22038    Copyright (C) [562]Free Software Foundation, Inc. Verbatim copying and
   22039    distribution of this entire article is permitted in any medium,
   22040    provided this notice is preserved.
   22041 
   22042    These pages are [563]maintained by the GCC team. Last modified
   22043    2025-06-05.
   22044 
   22045 References
   22046 
   22047    1. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   22048    2. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   22049    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   22050    4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
   22051    5. https://gcc.gnu.org/news/dfa.html
   22052    6. https://gcc.gnu.org/projects/c-status.html
   22053    7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
   22054    8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   22055    9. https://gcc.gnu.org/PR10140
   22056   10. https://gcc.gnu.org/PR10198
   22057   11. https://gcc.gnu.org/PR10338
   22058   12. https://gcc.gnu.org/PR3581
   22059   13. https://gcc.gnu.org/PR4382
   22060   14. https://gcc.gnu.org/PR5533
   22061   15. https://gcc.gnu.org/PR6387
   22062   16. https://gcc.gnu.org/PR6412
   22063   17. https://gcc.gnu.org/PR6620
   22064   18. https://gcc.gnu.org/PR6663
   22065   19. https://gcc.gnu.org/PR7068
   22066   20. https://gcc.gnu.org/PR7083
   22067   21. https://gcc.gnu.org/PR7647
   22068   22. https://gcc.gnu.org/PR7675
   22069   23. https://gcc.gnu.org/PR7718
   22070   24. https://gcc.gnu.org/PR8116
   22071   25. https://gcc.gnu.org/PR8358
   22072   26. https://gcc.gnu.org/PR8511
   22073   27. https://gcc.gnu.org/PR8564
   22074   28. https://gcc.gnu.org/PR8660
   22075   29. https://gcc.gnu.org/PR8766
   22076   30. https://gcc.gnu.org/PR8803
   22077   31. https://gcc.gnu.org/PR8846
   22078   32. https://gcc.gnu.org/PR8906
   22079   33. https://gcc.gnu.org/PR9216
   22080   34. https://gcc.gnu.org/PR9261
   22081   35. https://gcc.gnu.org/PR9263
   22082   36. https://gcc.gnu.org/PR9429
   22083   37. https://gcc.gnu.org/PR9516
   22084   38. https://gcc.gnu.org/PR9600
   22085   39. https://gcc.gnu.org/PR9629
   22086   40. https://gcc.gnu.org/PR9672
   22087   41. https://gcc.gnu.org/PR9749
   22088   42. https://gcc.gnu.org/PR9794
   22089   43. https://gcc.gnu.org/PR9829
   22090   44. https://gcc.gnu.org/PR9916
   22091   45. https://gcc.gnu.org/PR9936
   22092   46. https://gcc.gnu.org/PR10262
   22093   47. https://gcc.gnu.org/PR10278
   22094   48. https://gcc.gnu.org/PR10446
   22095   49. https://gcc.gnu.org/PR10451
   22096   50. https://gcc.gnu.org/PR10506
   22097   51. https://gcc.gnu.org/PR10549
   22098   52. https://gcc.gnu.org/PR2001
   22099   53. https://gcc.gnu.org/PR2391
   22100   54. https://gcc.gnu.org/PR2960
   22101   55. https://gcc.gnu.org/PR4046
   22102   56. https://gcc.gnu.org/PR6405
   22103   57. https://gcc.gnu.org/PR6798
   22104   58. https://gcc.gnu.org/PR6871
   22105   59. https://gcc.gnu.org/PR6909
   22106   60. https://gcc.gnu.org/PR7189
   22107   61. https://gcc.gnu.org/PR7642
   22108   62. https://gcc.gnu.org/PR8634
   22109   63. https://gcc.gnu.org/PR8750
   22110   64. https://gcc.gnu.org/PR2161
   22111   65. https://gcc.gnu.org/PR4319
   22112   66. https://gcc.gnu.org/PR8602
   22113   67. https://gcc.gnu.org/PR9177
   22114   68. https://gcc.gnu.org/PR9853
   22115   69. https://gcc.gnu.org/PR45
   22116   70. https://gcc.gnu.org/PR3784
   22117   71. https://gcc.gnu.org/PR764
   22118   72. https://gcc.gnu.org/PR5116
   22119   73. https://gcc.gnu.org/PR2862
   22120   74. https://gcc.gnu.org/PR3663
   22121   75. https://gcc.gnu.org/PR3797
   22122   76. https://gcc.gnu.org/PR3948
   22123   77. https://gcc.gnu.org/PR4137
   22124   78. https://gcc.gnu.org/PR4361
   22125   79. https://gcc.gnu.org/PR4802
   22126   80. https://gcc.gnu.org/PR5837
   22127   81. https://gcc.gnu.org/PR4803
   22128   82. https://gcc.gnu.org/PR5094
   22129   83. https://gcc.gnu.org/PR5730
   22130   84. https://gcc.gnu.org/PR6713
   22131   85. https://gcc.gnu.org/PR7015
   22132   86. https://gcc.gnu.org/PR7086
   22133   87. https://gcc.gnu.org/PR7099
   22134   88. https://gcc.gnu.org/PR7247
   22135   89. https://gcc.gnu.org/PR7441
   22136   90. https://gcc.gnu.org/PR7768
   22137   91. https://gcc.gnu.org/PR7804
   22138   92. https://gcc.gnu.org/PR8099
   22139   93. https://gcc.gnu.org/PR8117
   22140   94. https://gcc.gnu.org/PR8205
   22141   95. https://gcc.gnu.org/PR8645
   22142   96. https://gcc.gnu.org/PR8724
   22143   97. https://gcc.gnu.org/PR8805
   22144   98. https://gcc.gnu.org/PR8691
   22145   99. https://gcc.gnu.org/PR8700
   22146  100. https://gcc.gnu.org/PR8724
   22147  101. https://gcc.gnu.org/PR8949
   22148  102. https://gcc.gnu.org/PR9016
   22149  103. https://gcc.gnu.org/PR9053
   22150  104. https://gcc.gnu.org/PR9152
   22151  105. https://gcc.gnu.org/PR9182
   22152  106. https://gcc.gnu.org/PR9297
   22153  107. https://gcc.gnu.org/PR9318
   22154  108. https://gcc.gnu.org/PR9320
   22155  109. https://gcc.gnu.org/PR9400
   22156  110. https://gcc.gnu.org/PR9424
   22157  111. https://gcc.gnu.org/PR9425
   22158  112. https://gcc.gnu.org/PR9439
   22159  113. https://gcc.gnu.org/PR9474
   22160  114. https://gcc.gnu.org/PR9548
   22161  115. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
   22162  116. https://gcc.gnu.org/PR9555
   22163  117. https://gcc.gnu.org/PR9561
   22164  118. https://gcc.gnu.org/PR9563
   22165  119. https://gcc.gnu.org/PR9582
   22166  120. https://gcc.gnu.org/PR9622
   22167  121. https://gcc.gnu.org/PR9683
   22168  122. https://gcc.gnu.org/PR9791
   22169  123. https://gcc.gnu.org/PR9817
   22170  124. https://gcc.gnu.org/PR9825
   22171  125. https://gcc.gnu.org/PR9826
   22172  126. https://gcc.gnu.org/PR9924
   22173  127. https://gcc.gnu.org/PR9946
   22174  128. https://gcc.gnu.org/PR9964
   22175  129. https://gcc.gnu.org/PR9988
   22176  130. https://gcc.gnu.org/PR10033
   22177  131. https://gcc.gnu.org/PR10097
   22178  132. https://gcc.gnu.org/PR10132
   22179  133. https://gcc.gnu.org/PR10180
   22180  134. https://gcc.gnu.org/PR10199
   22181  135. https://gcc.gnu.org/PR10300
   22182  136. https://gcc.gnu.org/PR10427
   22183  137. https://gcc.gnu.org/PR10503
   22184  138. https://gcc.gnu.org/PR5956
   22185  139. https://gcc.gnu.org/PR1832
   22186  140. https://gcc.gnu.org/PR3924
   22187  141. https://gcc.gnu.org/PR5634
   22188  142. https://gcc.gnu.org/PR6367
   22189  143. https://gcc.gnu.org/PR6491
   22190  144. https://gcc.gnu.org/PR6742
   22191  145. https://gcc.gnu.org/PR7113
   22192  146. https://gcc.gnu.org/PR7236
   22193  147. https://gcc.gnu.org/PR7278
   22194  148. https://gcc.gnu.org/PR7384
   22195  149. https://gcc.gnu.org/PR7388
   22196  150. https://gcc.gnu.org/PR8587
   22197  151. https://gcc.gnu.org/PR9038
   22198  152. https://gcc.gnu.org/PR10197
   22199  153. https://gcc.gnu.org/PR6005
   22200  154. https://gcc.gnu.org/PR6389
   22201  155. https://gcc.gnu.org/PR6576
   22202  156. https://gcc.gnu.org/PR6652
   22203  157. https://gcc.gnu.org/PR7060
   22204  158. https://gcc.gnu.org/PR7073
   22205  159. https://gcc.gnu.org/PR7180
   22206  160. https://gcc.gnu.org/PR7416
   22207  161. https://gcc.gnu.org/PR7570
   22208  162. https://gcc.gnu.org/PR7578
   22209  163. https://gcc.gnu.org/PR7611
   22210  164. https://gcc.gnu.org/PR7709
   22211  165. https://gcc.gnu.org/PR7766
   22212  166. https://gcc.gnu.org/PR7785
   22213  167. https://gcc.gnu.org/PR7786
   22214  168. https://gcc.gnu.org/PR8142
   22215  169. https://gcc.gnu.org/PR8234
   22216  170. https://gcc.gnu.org/PR8415
   22217  171. https://gcc.gnu.org/PR8481
   22218  172. https://gcc.gnu.org/PR8593
   22219  173. https://gcc.gnu.org/PR8759
   22220  174. https://gcc.gnu.org/PR8997
   22221  175. https://gcc.gnu.org/PR9253
   22222  176. https://gcc.gnu.org/PR9254
   22223  177. https://gcc.gnu.org/PR9271
   22224  178. https://gcc.gnu.org/PR6767
   22225  179. https://gcc.gnu.org/PR9911
   22226  180. https://gcc.gnu.org/PR10020
   22227  181. https://gcc.gnu.org/PR10546
   22228  182. https://gcc.gnu.org/PR7029
   22229  183. https://gcc.gnu.org/PR2903
   22230  184. https://gcc.gnu.org/PR7873
   22231  185. https://gcc.gnu.org/PR7680
   22232  186. https://gcc.gnu.org/PR8705
   22233  187. https://gcc.gnu.org/PR9986
   22234  188. https://gcc.gnu.org/PR10056
   22235  189. https://gcc.gnu.org/PR6744
   22236  190. https://gcc.gnu.org/PR7361
   22237  191. https://gcc.gnu.org/PR9496
   22238  192. https://gcc.gnu.org/PR7067
   22239  193. https://gcc.gnu.org/PR8480
   22240  194. https://gcc.gnu.org/PR8784
   22241  195. https://gcc.gnu.org/PR10315
   22242  196. https://gcc.gnu.org/PR10267
   22243  197. https://gcc.gnu.org/PR7916
   22244  198. https://gcc.gnu.org/PR7926
   22245  199. https://gcc.gnu.org/PR8555
   22246  200. https://gcc.gnu.org/PR8994
   22247  201. https://gcc.gnu.org/PR9426
   22248  202. https://gcc.gnu.org/PR9806
   22249  203. https://gcc.gnu.org/PR10077
   22250  204. https://gcc.gnu.org/PR10233
   22251  205. https://gcc.gnu.org/PR10286
   22252  206. https://gcc.gnu.org/PR10308
   22253  207. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.1
   22254  208. https://gcc.gnu.org/PR11272
   22255  209. https://gcc.gnu.org/PR5754
   22256  210. https://gcc.gnu.org/PR6597
   22257  211. https://gcc.gnu.org/PR6949
   22258  212. https://gcc.gnu.org/PR7053
   22259  213. https://gcc.gnu.org/PR8164
   22260  214. https://gcc.gnu.org/PR8384
   22261  215. https://gcc.gnu.org/PR9559
   22262  216. https://gcc.gnu.org/PR9649
   22263  217. https://gcc.gnu.org/PR9864
   22264  218. https://gcc.gnu.org/PR10432
   22265  219. https://gcc.gnu.org/PR10475
   22266  220. https://gcc.gnu.org/PR10635
   22267  221. https://gcc.gnu.org/PR10661
   22268  222. https://gcc.gnu.org/PR10700
   22269  223. https://gcc.gnu.org/PR10712
   22270  224. https://gcc.gnu.org/PR10796
   22271  225. https://gcc.gnu.org/PR10890
   22272  226. https://gcc.gnu.org/PR10939
   22273  227. https://gcc.gnu.org/PR10956
   22274  228. https://gcc.gnu.org/PR11041
   22275  229. https://gcc.gnu.org/PR11059
   22276  230. https://gcc.gnu.org/PR11083
   22277  231. https://gcc.gnu.org/PR11105
   22278  232. https://gcc.gnu.org/PR11149
   22279  233. https://gcc.gnu.org/PR11228
   22280  234. https://gcc.gnu.org/PR11282
   22281  235. https://gcc.gnu.org/PR11301
   22282  236. https://gcc.gnu.org/PR11308
   22283  237. https://gcc.gnu.org/PR11473
   22284  238. https://gcc.gnu.org/PR11503
   22285  239. https://gcc.gnu.org/PR11513
   22286  240. https://gcc.gnu.org/PR11198
   22287  241. https://gcc.gnu.org/PR11304
   22288  242. https://gcc.gnu.org/PR11381
   22289  243. https://gcc.gnu.org/PR11536
   22290  244. https://gcc.gnu.org/PR11557
   22291  245. https://gcc.gnu.org/PR5897
   22292  246. https://gcc.gnu.org/PR11279
   22293  247. https://gcc.gnu.org/PR11022
   22294  248. https://gcc.gnu.org/PR2330
   22295  249. https://gcc.gnu.org/PR5388
   22296  250. https://gcc.gnu.org/PR5390
   22297  251. https://gcc.gnu.org/PR7877
   22298  252. https://gcc.gnu.org/PR9393
   22299  253. https://gcc.gnu.org/PR10032
   22300  254. https://gcc.gnu.org/PR10468
   22301  255. https://gcc.gnu.org/PR10527
   22302  256. https://gcc.gnu.org/PR10679
   22303  257. https://gcc.gnu.org/PR10682
   22304  258. https://gcc.gnu.org/PR10689
   22305  259. https://gcc.gnu.org/PR10845
   22306  260. https://gcc.gnu.org/PR10849
   22307  261. https://gcc.gnu.org/PR10888
   22308  262. https://gcc.gnu.org/PR10929
   22309  263. https://gcc.gnu.org/PR10931
   22310  264. https://gcc.gnu.org/PR10940
   22311  265. https://gcc.gnu.org/PR10968
   22312  266. https://gcc.gnu.org/PR10990
   22313  267. https://gcc.gnu.org/PR11039
   22314  268. https://gcc.gnu.org/PR11062
   22315  269. https://gcc.gnu.org/PR11095
   22316  270. https://gcc.gnu.org/PR11098
   22317  271. https://gcc.gnu.org/PR11137
   22318  272. https://gcc.gnu.org/PR11154
   22319  273. https://gcc.gnu.org/PR11329
   22320  274. https://gcc.gnu.org/PR11332
   22321  275. https://gcc.gnu.org/PR11431
   22322  276. https://gcc.gnu.org/PR11528
   22323  277. https://gcc.gnu.org/PR11546
   22324  278. https://gcc.gnu.org/PR11567
   22325  279. https://gcc.gnu.org/PR11645
   22326  280. https://gcc.gnu.org/PR5179
   22327  281. https://gcc.gnu.org/PR8204
   22328  282. https://gcc.gnu.org/PR10838
   22329  283. https://gcc.gnu.org/PR10886
   22330  284. https://gcc.gnu.org/PR11349
   22331  285. https://gcc.gnu.org/PR4823
   22332  286. https://gcc.gnu.org/PR8878
   22333  287. https://gcc.gnu.org/PR9815
   22334  288. https://gcc.gnu.org/PR10402
   22335  289. https://gcc.gnu.org/PR10504
   22336  290. https://gcc.gnu.org/PR10673
   22337  291. https://gcc.gnu.org/PR11044
   22338  292. https://gcc.gnu.org/PR11089
   22339  293. https://gcc.gnu.org/PR11420
   22340  294. https://gcc.gnu.org/PR9362
   22341  295. https://gcc.gnu.org/PR10142
   22342  296. https://gcc.gnu.org/PR10663
   22343  297. https://gcc.gnu.org/PR10835
   22344  298. https://gcc.gnu.org/PR10876
   22345  299. https://gcc.gnu.org/PR10955
   22346  300. https://gcc.gnu.org/PR11018
   22347  301. https://gcc.gnu.org/PR11556
   22348  302. https://gcc.gnu.org/PR10907
   22349  303. https://gcc.gnu.org/PR11320
   22350  304. https://gcc.gnu.org/PR11599
   22351  305. https://gcc.gnu.org/PR9745
   22352  306. https://gcc.gnu.org/PR10871
   22353  307. https://gcc.gnu.org/PR11440
   22354  308. https://gcc.gnu.org/PR7594
   22355  309. https://gcc.gnu.org/PR10557
   22356  310. https://gcc.gnu.org/PR11054
   22357  311. https://gcc.gnu.org/PR10834
   22358  312. https://gcc.gnu.org/PR10842
   22359  313. https://gcc.gnu.org/PR11052
   22360  314. https://gcc.gnu.org/PR11183
   22361  315. https://gcc.gnu.org/PR11084
   22362  316. https://gcc.gnu.org/PR10331
   22363  317. https://gcc.gnu.org/PR10413
   22364  318. https://gcc.gnu.org/PR11096
   22365  319. https://gcc.gnu.org/PR2873
   22366  320. https://gcc.gnu.org/PR3163
   22367  321. https://gcc.gnu.org/PR5287
   22368  322. https://gcc.gnu.org/PR10148
   22369  323. https://gcc.gnu.org/PR8787
   22370  324. https://gcc.gnu.org/PR10900
   22371  325. https://gcc.gnu.org/PR1607
   22372  326. https://gcc.gnu.org/PR4252
   22373  327. https://gcc.gnu.org/PR4490
   22374  328. https://gcc.gnu.org/PR10355
   22375  329. https://gcc.gnu.org/PR10726
   22376  330. https://gcc.gnu.org/PR10805
   22377  331. https://gcc.gnu.org/PR10815
   22378  332. https://gcc.gnu.org/PR10877
   22379  333. https://gcc.gnu.org/PR11280
   22380  334. https://gcc.gnu.org/PR11466
   22381  335. https://gcc.gnu.org/PR10737
   22382  336. https://gcc.gnu.org/PR10810
   22383  337. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.2
   22384  338. https://gcc.gnu.org/PR8336
   22385  339. https://gcc.gnu.org/PR9330
   22386  340. https://gcc.gnu.org/PR9631
   22387  341. https://gcc.gnu.org/PR9877
   22388  342. https://gcc.gnu.org/PR11687
   22389  343. https://gcc.gnu.org/PR12263
   22390  344. https://gcc.gnu.org/PR12490
   22391  345. https://gcc.gnu.org/PR7277
   22392  346. https://gcc.gnu.org/PR7939
   22393  347. https://gcc.gnu.org/PR11063
   22394  348. https://gcc.gnu.org/PR11207
   22395  349. https://gcc.gnu.org/PR11522
   22396  350. https://gcc.gnu.org/PR11595
   22397  351. https://gcc.gnu.org/PR11646
   22398  352. https://gcc.gnu.org/PR11665
   22399  353. https://gcc.gnu.org/PR11852
   22400  354. https://gcc.gnu.org/PR11878
   22401  355. https://gcc.gnu.org/PR11883
   22402  356. https://gcc.gnu.org/PR11991
   22403  357. https://gcc.gnu.org/PR12146
   22404  358. https://gcc.gnu.org/PR12215
   22405  359. https://gcc.gnu.org/PR12369
   22406  360. https://gcc.gnu.org/PR12446
   22407  361. https://gcc.gnu.org/PR12510
   22408  362. https://gcc.gnu.org/PR12544
   22409  363. https://gcc.gnu.org/PR9862
   22410  364. https://gcc.gnu.org/PR10962
   22411  365. https://gcc.gnu.org/PR11370
   22412  366. https://gcc.gnu.org/PR11637
   22413  367. https://gcc.gnu.org/PR11885
   22414  368. https://gcc.gnu.org/PR12082
   22415  369. https://gcc.gnu.org/PR12180
   22416  370. https://gcc.gnu.org/PR12340
   22417  371. https://gcc.gnu.org/PR3907
   22418  372. https://gcc.gnu.org/PR5293
   22419  373. https://gcc.gnu.org/PR5296
   22420  374. https://gcc.gnu.org/PR7939
   22421  375. https://gcc.gnu.org/PR8656
   22422  376. https://gcc.gnu.org/PR10147
   22423  377. https://gcc.gnu.org/PR11400
   22424  378. https://gcc.gnu.org/PR11409
   22425  379. https://gcc.gnu.org/PR11740
   22426  380. https://gcc.gnu.org/PR11786
   22427  381. https://gcc.gnu.org/PR11867
   22428  382. https://gcc.gnu.org/PR11928
   22429  383. https://gcc.gnu.org/PR12114
   22430  384. https://gcc.gnu.org/PR12163
   22431  385. https://gcc.gnu.org/PR12181
   22432  386. https://gcc.gnu.org/PR12236
   22433  387. https://gcc.gnu.org/PR12266
   22434  388. https://gcc.gnu.org/PR12296
   22435  389. https://gcc.gnu.org/PR12298
   22436  390. https://gcc.gnu.org/PR12369
   22437  391. https://gcc.gnu.org/PR12337
   22438  392. https://gcc.gnu.org/PR12344
   22439  393. https://gcc.gnu.org/PR12451
   22440  394. https://gcc.gnu.org/PR12486
   22441  395. https://gcc.gnu.org/PR8869
   22442  396. https://gcc.gnu.org/PR9786
   22443  397. https://gcc.gnu.org/PR11689
   22444  398. https://gcc.gnu.org/PR12116
   22445  399. https://gcc.gnu.org/PR12070
   22446  400. https://gcc.gnu.org/PR11184
   22447  401. https://gcc.gnu.org/PR11535
   22448  402. https://gcc.gnu.org/PR11693
   22449  403. https://gcc.gnu.org/PR12224
   22450  404. https://gcc.gnu.org/PR11087
   22451  405. https://gcc.gnu.org/PR11319
   22452  406. https://gcc.gnu.org/PR11949
   22453  407. https://gcc.gnu.org/PR11662
   22454  408. https://gcc.gnu.org/PR11965
   22455  409. https://gcc.gnu.org/PR12301
   22456  410. https://gcc.gnu.org/PR11717
   22457  411. https://gcc.gnu.org/PR11313
   22458  412. https://gcc.gnu.org/PR11712
   22459  413. https://gcc.gnu.org/PR12166
   22460  414. https://gcc.gnu.org/PR12101
   22461  415. https://gcc.gnu.org/PR10988
   22462  416. https://gcc.gnu.org/PR11805
   22463  417. https://gcc.gnu.org/PR11902
   22464  418. https://gcc.gnu.org/PR11903
   22465  419. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.3
   22466  420. https://gcc.gnu.org/PR11890
   22467  421. https://gcc.gnu.org/PR12399
   22468  422. https://gcc.gnu.org/PR13068
   22469  423. https://gcc.gnu.org/PR10060
   22470  424. https://gcc.gnu.org/PR10555
   22471  425. https://gcc.gnu.org/PR10706
   22472  426. https://gcc.gnu.org/PR11496
   22473  427. https://gcc.gnu.org/PR11741
   22474  428. https://gcc.gnu.org/PR12440
   22475  429. https://gcc.gnu.org/PR12632
   22476  430. https://gcc.gnu.org/PR12712
   22477  431. https://gcc.gnu.org/PR12726
   22478  432. https://gcc.gnu.org/PR12890
   22479  433. https://gcc.gnu.org/PR12900
   22480  434. https://gcc.gnu.org/PR13060
   22481  435. https://gcc.gnu.org/PR13289
   22482  436. https://gcc.gnu.org/PR13318
   22483  437. https://gcc.gnu.org/PR13392
   22484  438. https://gcc.gnu.org/PR13574
   22485  439. https://gcc.gnu.org/PR13475
   22486  440. https://gcc.gnu.org/PR13797
   22487  441. https://gcc.gnu.org/PR13824
   22488  442. https://gcc.gnu.org/PR8776
   22489  443. https://gcc.gnu.org/PR10339
   22490  444. https://gcc.gnu.org/PR11350
   22491  445. https://gcc.gnu.org/PR12826
   22492  446. https://gcc.gnu.org/PR12500
   22493  447. https://gcc.gnu.org/PR12941
   22494  448. https://gcc.gnu.org/PR12953
   22495  449. https://gcc.gnu.org/PR13041
   22496  450. https://gcc.gnu.org/PR13507
   22497  451. https://gcc.gnu.org/PR13382
   22498  452. https://gcc.gnu.org/PR13394
   22499  453. https://gcc.gnu.org/PR13400
   22500  454. https://gcc.gnu.org/PR13521
   22501  455. https://gcc.gnu.org/PR2094
   22502  456. https://gcc.gnu.org/PR2294
   22503  457. https://gcc.gnu.org/PR5050
   22504  458. https://gcc.gnu.org/PR9371
   22505  459. https://gcc.gnu.org/PR9546
   22506  460. https://gcc.gnu.org/PR10081
   22507  461. https://gcc.gnu.org/PR10093
   22508  462. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
   22509  463. https://gcc.gnu.org/PR10095
   22510  464. https://gcc.gnu.org/PR11554
   22511  465. https://gcc.gnu.org/PR12297
   22512  466. https://gcc.gnu.org/PR12352
   22513  467. https://gcc.gnu.org/PR12438
   22514  468. https://gcc.gnu.org/PR12540
   22515  469. https://gcc.gnu.org/PR12594
   22516  470. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
   22517  471. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
   22518  472. https://gcc.gnu.org/PR12657
   22519  473. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
   22520  474. https://gcc.gnu.org/PR12696
   22521  475. https://gcc.gnu.org/PR12815
   22522  476. https://gcc.gnu.org/PR12862
   22523  477. https://gcc.gnu.org/PR12926
   22524  478. https://gcc.gnu.org/PR12967
   22525  479. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
   22526  480. https://gcc.gnu.org/PR12971
   22527  481. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
   22528  482. https://gcc.gnu.org/PR13007
   22529  483. https://gcc.gnu.org/PR13009
   22530  484. https://gcc.gnu.org/PR13057
   22531  485. https://gcc.gnu.org/PR13070
   22532  486. https://gcc.gnu.org/PR13081
   22533  487. https://gcc.gnu.org/PR13239
   22534  488. https://gcc.gnu.org/PR13262
   22535  489. https://gcc.gnu.org/PR13290
   22536  490. https://gcc.gnu.org/PR13323
   22537  491. https://gcc.gnu.org/PR13369
   22538  492. https://gcc.gnu.org/PR13371
   22539  493. https://gcc.gnu.org/PR13445
   22540  494. https://gcc.gnu.org/PR13461
   22541  495. https://gcc.gnu.org/PR13462
   22542  496. https://gcc.gnu.org/PR13478
   22543  497. https://gcc.gnu.org/PR13544
   22544  498. https://gcc.gnu.org/PR13650
   22545  499. https://gcc.gnu.org/PR13683
   22546  500. https://gcc.gnu.org/PR13688
   22547  501. https://gcc.gnu.org/PR13774
   22548  502. https://gcc.gnu.org/PR13884
   22549  503. https://gcc.gnu.org/PR10746
   22550  504. https://gcc.gnu.org/PR11433
   22551  505. https://gcc.gnu.org/PR12633
   22552  506. https://gcc.gnu.org/PR13037
   22553  507. https://gcc.gnu.org/PR13213
   22554  508. https://gcc.gnu.org/PR4490
   22555  509. https://gcc.gnu.org/PR12292
   22556  510. https://gcc.gnu.org/PR12441
   22557  511. https://gcc.gnu.org/PR12943
   22558  512. https://gcc.gnu.org/PR13608
   22559  513. https://gcc.gnu.org/PR11598
   22560  514. https://gcc.gnu.org/PR11793
   22561  515. https://gcc.gnu.org/PR12467
   22562  516. https://gcc.gnu.org/PR12537
   22563  517. https://gcc.gnu.org/PR12496
   22564  518. https://gcc.gnu.org/PR12865
   22565  519. https://gcc.gnu.org/PR13354
   22566  520. https://gcc.gnu.org/PR10467
   22567  521. https://gcc.gnu.org/PR11226
   22568  522. https://gcc.gnu.org/PR11227
   22569  523. https://gcc.gnu.org/PR12644
   22570  524. https://gcc.gnu.org/PR13149
   22571  525. https://gcc.gnu.org/PR12654
   22572  526. https://gcc.gnu.org/PR12965
   22573  527. https://gcc.gnu.org/PR13031
   22574  528. https://gcc.gnu.org/PR11634
   22575  529. https://gcc.gnu.org/PR12158
   22576  530. https://gcc.gnu.org/PR11992
   22577  531. https://gcc.gnu.org/PR9365
   22578  532. https://gcc.gnu.org/PR10392
   22579  533. https://gcc.gnu.org/PR11322
   22580  534. https://gcc.gnu.org/PR13069
   22581  535. https://gcc.gnu.org/PR13302
   22582  536. https://gcc.gnu.org/PR13585
   22583  537. https://gcc.gnu.org/PR8916
   22584  538. https://gcc.gnu.org/PR11576
   22585  539. https://gcc.gnu.org/PR13122
   22586  540. https://gcc.gnu.org/PR13256
   22587  541. https://gcc.gnu.org/PR13373
   22588  542. https://gcc.gnu.org/PR12561
   22589  543. https://gcc.gnu.org/PR6243
   22590  544. https://gcc.gnu.org/PR11397
   22591  545. https://gcc.gnu.org/PR12505
   22592  546. https://gcc.gnu.org/PR13150
   22593  547. https://gcc.gnu.org/PR12666
   22594  548. https://gcc.gnu.org/PR12969
   22595  549. https://gcc.gnu.org/PR10819
   22596  550. https://gcc.gnu.org/PR11612
   22597  551. https://gcc.gnu.org/PR13211
   22598  552. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.4
   22599  553. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
   22600  554. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.5
   22601  555. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
   22602  556. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.6
   22603  557. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
   22604  558. https://gcc.gnu.org/onlinedocs/
   22605  559. mailto:gcc-help (a] gcc.gnu.org
   22606  560. mailto:gcc (a] gcc.gnu.org
   22607  561. https://gcc.gnu.org/lists.html
   22608  562. https://www.fsf.org/
   22609  563. https://gcc.gnu.org/about.html
   22610 ======================================================================
   22611 http://gcc.gnu.org/gcc-3.2/index.html
   22612                              GCC 3.2 Release Series
   22613 
   22614    (This release series is no longer supported.)
   22615 
   22616    April 25, 2003
   22617 
   22618    The [1]GNU project and the GCC developers are pleased to announce the
   22619    release of GCC 3.2.3.
   22620 
   22621    The purpose of the GCC 3.2 release series is to provide a stable
   22622    platform for OS distributors to use building their next releases. A
   22623    primary objective was to stabilize the C++ ABI; we believe that the
   22624    interface to the compiler and the C++ standard library are now
   22625    relatively stable.
   22626 
   22627    Be aware that C++ code compiled by GCC 3.2.x will (in general) not
   22628    interoperate with code compiled by GCC 3.1.1 or earlier.
   22629 
   22630    Please refer to our [2]detailed list of news, caveats, and bug-fixes
   22631    for further information.
   22632 
   22633 Release History
   22634 
   22635    GCC 3.2.3
   22636           April 25, 2003 ([3]changes)
   22637 
   22638    GCC 3.2.2
   22639           February 5, 2003 ([4]changes)
   22640 
   22641    GCC 3.2.1
   22642           November 19, 2002 ([5]changes)
   22643 
   22644    GCC 3.2
   22645           August 14, 2002 ([6]changes)
   22646 
   22647 References and Acknowledgements
   22648 
   22649    GCC used to stand for the GNU C Compiler, but since the compiler
   22650    supports several other languages aside from C, it now stands for the
   22651    GNU Compiler Collection.
   22652 
   22653    A list of [7]successful builds is updated as new information becomes
   22654    available.
   22655 
   22656    The GCC developers would like to thank the numerous people that have
   22657    contributed new features, improvements, bug fixes, and other changes as
   22658    well as test results to GCC. This [8]amazing group of volunteers is
   22659    what makes GCC successful.
   22660 
   22661    For additional information about GCC please refer to the [9]GCC project
   22662    web site or contact the [10]GCC development mailing list.
   22663 
   22664    To obtain GCC please use [11]our mirror sites, or our CVS server.
   22665 
   22666 
   22667     For questions related to the use of GCC, please consult these web
   22668     pages and the [12]GCC manuals. If that fails, the
   22669     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22670     web pages and the development of GCC are welcome on our developer
   22671     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
   22672     archives.
   22673 
   22674    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
   22675    distribution of this entire article is permitted in any medium,
   22676    provided this notice is preserved.
   22677 
   22678    These pages are [17]maintained by the GCC team. Last modified
   22679    2022-10-26.
   22680 
   22681 References
   22682 
   22683    1. http://www.gnu.org/
   22684    2. https://gcc.gnu.org/gcc-3.2/changes.html
   22685    3. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   22686    4. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.2
   22687    5. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
   22688    6. https://gcc.gnu.org/gcc-3.2/changes.html#3.2
   22689    7. https://gcc.gnu.org/gcc-3.2/buildstat.html
   22690    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   22691    9. https://gcc.gnu.org/index.html
   22692   10. mailto:gcc (a] gcc.gnu.org
   22693   11. https://gcc.gnu.org/mirrors.html
   22694   12. https://gcc.gnu.org/onlinedocs/
   22695   13. mailto:gcc-help (a] gcc.gnu.org
   22696   14. mailto:gcc (a] gcc.gnu.org
   22697   15. https://gcc.gnu.org/lists.html
   22698   16. https://www.fsf.org/
   22699   17. https://gcc.gnu.org/about.html
   22700 ======================================================================
   22701 http://gcc.gnu.org/gcc-3.2/changes.html
   22702                              GCC 3.2 Release Series
   22703                         Changes, New Features, and Fixes
   22704 
   22705    The latest release in the 3.2 release series is [1]GCC 3.2.3.
   22706 
   22707 Caveats and New Features
   22708 
   22709   Caveats
   22710 
   22711      * The C++ compiler does not correctly zero-initialize
   22712        pointers-to-data members. You must explicitly initialize them. For
   22713        example: int S::*m(0); will work, but depending on
   22714        default-initialization to zero will not work. This bug cannot be
   22715        fixed in GCC 3.2 without inducing unacceptable risks. It will be
   22716        fixed in GCC 3.3.
   22717      * This GCC release is based on the GCC 3.1 sourcebase, and thus has
   22718        all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
   22719        a number of C++ ABI fixes which make its C++ compiler generate
   22720        binary code which is incompatible with the C++ compilers found in
   22721        earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
   22722 
   22723   Frontend Enhancements
   22724 
   22725     C/C++/Objective-C
   22726 
   22727      * The method of constructing the list of directories to be searched
   22728        for header files has been revised. If a directory named by a -I
   22729        option is a standard system include directory, the option is
   22730        ignored to ensure that the default search order for system
   22731        directories and the special treatment of system header files are
   22732        not defeated.
   22733      * The C and Objective-C compilers no longer accept the "Naming Types"
   22734        extension (typedef foo = bar); it was already unavailable in C++.
   22735        Code which uses it will need to be changed to use the "typeof"
   22736        extension instead: typedef typeof(bar) foo. (We have removed this
   22737        extension without a period of deprecation because it has caused the
   22738        compiler to crash since version 3.0 and no one noticed until very
   22739        recently. Thus we conclude it is not in widespread use.)
   22740 
   22741     C++
   22742 
   22743      * GCC 3.2 fixed several differences between the C++ ABI implemented
   22744        in GCC and the multi-vendor standard, but more have been found
   22745        since the release. 3.2.1 adds a new warning, -Wabi, to warn about
   22746        code which is affected by these bugs. We will fix these bugs in
   22747        some future release, once we are confident that all have been
   22748        found; until then, it is our intention to make changes to the ABI
   22749        only if they are necessary for correct compilation of C++, as
   22750        opposed to conformance to the ABI documents.
   22751      * For details on how to build an ABI compliant compiler for GNU/Linux
   22752        systems, check the [3]common C++ ABI page.
   22753 
   22754   New Targets and Target Specific Improvements
   22755 
   22756     IA-32
   22757 
   22758      * Fixed a number of bugs in SSE and MMX intrinsics.
   22759      * Fixed common compiler crashes with SSE instruction set enabled
   22760        (implied by -march=pentium3, pentium4, athlon-xp)
   22761      * __m128 and __m128i is not 128bit aligned when used in structures.
   22762 
   22763     x86-64
   22764 
   22765      * A bug whereby the compiler could generate bad code for bzero has
   22766        been fixed.
   22767      * ABI fixes (implying ABI incompatibilities with previous version in
   22768        some corner cases)
   22769      * Fixed prefetch code generation
   22770      __________________________________________________________________
   22771 
   22772 [4]GCC 3.2.3
   22773 
   22774    3.2.3 is a bug fix release only; there are no new features that were
   22775    not present in GCC 3.2.2.
   22776 
   22777   Bug Fixes
   22778 
   22779    This section lists the problem reports (PRs) from GCC's bug tracking
   22780    system that are known to be fixed in the 3.2.3 release. This list might
   22781    not be complete (that is, it is possible that some PRs that have been
   22782    fixed are not listed here), and some of the titles have been changed to
   22783    make them more clear.
   22784 
   22785     Internal Compiler Errors (multi-platform)
   22786 
   22787      * [5]3782: (c++) -quiet -fstats produces a segmentation fault in
   22788        cc1plus
   22789      * [6]6440: (c++) template specializations cause ICE
   22790      * [7]7050: (c++) ICE on: (i ? get_string() : throw)
   22791      * [8]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
   22792      * [9]7982: (c++) ICE due to infinite recursion (using STL set)
   22793      * [10]8068: exceedingly high (infinite) memory usage
   22794      * [11]8178: ICE with __builtin_ffs
   22795      * [12]8396: ICE in copy_to_mode_reg, in explow.c
   22796      * [13]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
   22797      * [14]9768: ICE when optimizing inline code at -O2
   22798      * [15]9798: (c++) Infinite recursion (segfault) in
   22799        cp/decl.c:push_using_directive with recursive using directives
   22800      * [16]9799: mismatching structure initializer with nested flexible
   22801        array member: ICE
   22802      * [17]9928: ICE on duplicate enum declaration
   22803      * [18]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
   22804        sparc, alpha)
   22805      * [19]10352: ICE in find_reloads_toplev
   22806      * [20]10336: ICE with -Wunreachable-code
   22807 
   22808     C/optimizer bugs:
   22809 
   22810      * [21]8224: Incorrect joining of signed and unsigned division
   22811      * [22]8613: -O2 produces wrong code with builtin strlen and
   22812        postincrements
   22813      * [23]8828: gcc reports some code is unreachable when it is not
   22814      * [24]9226: GCSE breaking argument passing
   22815      * [25]9853: miscompilation of non-constant structure initializer
   22816      * [26]9797: C99-style struct initializers are miscompiled
   22817      * [27]9967: Some standard C function calls should not be replaced
   22818        when optimizing for size
   22819      * [28]10116: ce2: invalid merge of join_bb in the context of switch
   22820        statements
   22821      * [29]10171: wrong code for inlined function
   22822      * [30]10175: -Wunreachable-code doesn't work for single lines
   22823 
   22824     C++ compiler and library:
   22825 
   22826      * [31]8316: Confusing diagnostic for code that misuses conversion
   22827        operators
   22828      * [32]9169: filebuf output fails if codecvt<>::out returns noconv
   22829      * [33]9420: incomplete type incorrectly reported
   22830      * [34]9459: typeof in return type specification of template not
   22831        supported
   22832      * [35]9507: filebuf::open handles ios_base::ate incorrectly
   22833      * [36]9538: Out-of-bounds memory access in streambuf::sputbackc
   22834      * [37]9602: Total confusion about template/friend/virtual/abstract
   22835      * [38]9993: destructor not called for local object created within and
   22836        returned from infinite loop
   22837      * [39]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
   22838        system
   22839 
   22840     Java compiler and library:
   22841 
   22842      * [40]9652: libgcj build fails on irix6.5.1[78]
   22843      * [41]10144: gas on solaris complains about bad .stabs lines for
   22844        java, native as unaffected
   22845 
   22846     x86-specific (Intel/AMD):
   22847 
   22848      * [42]8746: gcc miscompiles Linux kernel ppa driver on x86
   22849      * [43]9888: -mcpu=k6 -Os produces out of range loop instructions
   22850      * [44]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
   22851        failed
   22852      * [45]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
   22853        failed
   22854 
   22855     SPARC-specific:
   22856 
   22857      * [46]7784: [Sparc] ICE in extract_insn, in recog.c
   22858      * [47]7796: sparc extra failure with -m64 on execute/930921-1.c in
   22859        unroll.c
   22860      * [48]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
   22861      * [49]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
   22862        execute/loop-2d.c
   22863      * [50]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
   22864      * [51]9414: Scheduling bug on Ultrasparc
   22865      * [52]10067: GCC-3.2.2 outputs invalid asm on sparc64
   22866 
   22867     m68k-specific:
   22868 
   22869      * [53]7248: broken "inclusive or" code
   22870      * [54]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
   22871 
   22872     PowerPC-specific:
   22873 
   22874      * [55]9732: Wrong code with -O2 -fPIC
   22875      * [56]10073: ICE: powerpc cannot split insn
   22876 
   22877     Alpha-specific:
   22878 
   22879      * [57]7702: optimization problem on a DEC alpha under OSF1
   22880      * [58]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
   22881 
   22882     HP-specific:
   22883 
   22884      * [59]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
   22885      * [60]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
   22886        (missing symbol)
   22887      * [61]10271: Floating point args don't get reloaded across function
   22888        calls with -O2
   22889 
   22890     MIPS specific:
   22891 
   22892      * [62]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
   22893        compile/920501-4.c
   22894 
   22895     CRIS specific:
   22896 
   22897      * [63]10377: gcc-3.2.2 creates bad assembler code for cris
   22898 
   22899     Miscellaneous and minor bugs:
   22900 
   22901      * [64]6955: collect2 says "core dumped" when there is no core
   22902      __________________________________________________________________
   22903 
   22904 [65]GCC 3.2.2
   22905 
   22906    Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
   22907    install by means of the DESTDIR variable. Parts of the GCC tree have
   22908    featured that support long before, but now it is available even from
   22909    the top level.
   22910 
   22911    Other than that, GCC 3.2.2 is a bug fix release only; there are no new
   22912    features that were not present in GCC 3.2.1.
   22913 
   22914   Bug Fixes
   22915 
   22916    On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
   22917    functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
   22918    with FreeBSD 5.0 does not have this problem), Interix, a.out-based
   22919    GNU/Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI
   22920    change, and thus restores ABI-compatibility with previous releases
   22921    (except GCC 3.2.1) on these platforms.
   22922 
   22923    This section lists the problem reports (PRs) from GCC's bug tracking
   22924    system that are known to be fixed in the 3.2.2 release. This list might
   22925    not be complete (that is, it is possible that some PRs that have been
   22926    fixed are not listed here) and some of the titles have been changed to
   22927    make them more clear.
   22928 
   22929     Internal Compiler Errors (multi-platform)
   22930 
   22931      * [66]5919: (c++) ICE when passing variable array to template
   22932        function
   22933      * [67]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
   22934      * [68]7507: ICE with -O2 when address of called function is a
   22935        complicated expression
   22936      * [69]7622: ICE with nested inline functions if function's address is
   22937        taken
   22938      * [70]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
   22939        [71]9258)
   22940      * [72]8031: (c++) ICE in code comparing typeids and casting from
   22941        virtual base
   22942      * [73]8275: ICE in simplify_subreg
   22943      * [74]8332: (c++) builtin strlen/template interaction causes ICE
   22944      * [75]8372: (c++) ICE on explicit call of destructor
   22945      * [76]8439: (c, not c++) empty struct causes ICE
   22946      * [77]8442: (c++) ICE with nested template classes
   22947      * [78]8518: ICE when compiling mplayer ("extern inline" issue)
   22948      * [79]8615: (c++) ICE with out-of-range character constant template
   22949        argument
   22950      * [80]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
   22951      * [81]8799: (c++) ICE: error reporting routines re-entered
   22952      * [82]9328: (c++) ICE with typeof(X) for overloaded X
   22953      * [83]9465: (preprocessor) cpp -traditional ICE on null bytes
   22954 
   22955     C++ (compiler and library) bugs
   22956 
   22957      * [84]47: scoping in nested classes is broken
   22958      * [85]6745: problems with iostream rdbuf() member function
   22959      * [86]8214: conversion from const char* const to char* sometimes
   22960        accepted illegally
   22961      * [87]8493: builtin strlen and overload resolution (same bug as
   22962        [88]8332)
   22963      * [89]8503: strange behaviour of function types
   22964      * [90]8727: compiler confused by inheritance from an anonymous struct
   22965      * [91]7445: poor performance of std::locale::classic() in
   22966        multi-threaded applications
   22967      * [92]8230: mishandling of overflow in vector<T>::resize
   22968      * [93]8399: sync_with_stdio(false) breaks unformatted input
   22969      * [94]8662: illegal access of private member of unnamed class is
   22970        accepted
   22971      * [95]8707: "make distclean" fails in libstdc++-v3 directory
   22972      * [96]8708: __USE_MALLOC doesn't work
   22973      * [97]8790: Use of non-thread-safe strtok in src/localename.cc
   22974      * [98]8887: Bug in date formats with --enable-clocale=generic
   22975      * [99]9076: Call Frame Instructions are not handled correctly during
   22976        unwind operation
   22977      * [100]9151: std::setprecision limited to 16 digits when outputting a
   22978        double to a stream
   22979      * [101]9168: codecvt<char, char, mbstate_t> overwrites output buffers
   22980      * [102]9269: libstdc++ headers: explicit specialization of function
   22981        must precede its first use
   22982      * [103]9322: return value of basic_streambuf<>::getloc affected by
   22983        locale::global
   22984      * [104]9433: segfault in runtime support for dynamic_cast
   22985 
   22986     C and optimizer bugs
   22987 
   22988      * [105]8032: GCC incorrectly initializes static structs that have
   22989        flexible arrays
   22990      * [106]8639: simple arithmetic expression broken
   22991      * [107]8794: optimization improperly eliminates certain expressions
   22992      * [108]8832: traditional "asm volatile" code is illegally optimized
   22993      * [109]8988: loop optimizer bug: with -O2, code is generated that
   22994        segfaults (found on i386, bug present for all platforms)
   22995      * [110]9492: structure copy clobbers subsequent stores to structure
   22996 
   22997     Objective-C bugs
   22998 
   22999      * [111]9267: Objective-C parser won't build with newer bison versions
   23000        (e.g. 1.875)
   23001 
   23002     Ada bugs
   23003 
   23004      * [112]8344: Ada build problem due to conflict between gcc/final.o,
   23005        gcc/ada/final.o
   23006 
   23007     Preprocessor bugs
   23008 
   23009      * [113]8524: _Pragma within macros is improperly expanded
   23010      * [114]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
   23011        -fshort-wchar
   23012 
   23013     ARM-specific
   23014 
   23015      * [115]9090: arm ICE with >= -O2; regression from gcc-2.95
   23016 
   23017     x86-specific (Intel/AMD)
   23018 
   23019      * [116]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
   23020      * [117]8599: loop unroll bug with -march=k6-3
   23021      * [118]9506: ABI breakage in structure return (affects BSD and
   23022        Cygwin, but not GNU/Linux)
   23023 
   23024     FreeBSD 5.0 specific
   23025 
   23026      * [119]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
   23027 
   23028     RTEMS-specific
   23029 
   23030      * [120]9292: hppa1.1-rtems configurery problems
   23031      * [121]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
   23032      * [122]9295: [mips-rtems] config/mips/rtems.h init/fini issue
   23033      * [123]9296: gthr-rtems regression
   23034      * [124]9316: powerpc-rtems: extending multilibs
   23035 
   23036     HP-PA specific
   23037 
   23038      * [125]9493: ICE with -O2 when building a simple function
   23039 
   23040     Documentation
   23041 
   23042      * [126]7341: hyperlink to gcov in GCC documentation doesn't work
   23043      * [127]8947: Please add a warning about "-malign-double" in docs
   23044      * [128]7448, [129]8882: typo cleanups
   23045      __________________________________________________________________
   23046 
   23047 [130]GCC 3.2.1
   23048 
   23049    3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
   23050    generates code that is known not to be binary-compatible with the
   23051    vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included
   23052    in the distribution, for details.
   23053 
   23054    This release also removes an old GCC extension, "naming types", and the
   23055    documentation now directs users to use a different GCC extension,
   23056    __typeof__, instead. The feature had evidently been broken for a while.
   23057 
   23058    Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and
   23059    the new warning there are no new features that were not present in GCC
   23060    3.2.
   23061 
   23062    In addition, the previous fix for [131]PR 7445 (poor performance of
   23063    std::locale::classic() in multi-threaded applications) was reverted
   23064    ("unfixed"), because the "fix" was not thread-safe.
   23065 
   23066   Bug Fixes
   23067 
   23068    This section lists the problem reports (PRs) from GCC's bug tracking
   23069    system that are known to be fixed in the 3.2.1 release. This list might
   23070    not be complete (that is, it is possible that some PRs that have been
   23071    fixed are not listed here). As you can see, the number of bug fixes is
   23072    quite large, so it is strongly recommended that users of earlier GCC
   23073    3.x releases upgrade to GCC 3.2.1.
   23074 
   23075     Internal Compiler Errors (multi-platform)
   23076 
   23077      * [132]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
   23078      * [133]5661: (c++) ICE instantiating template on array of unknown
   23079        size (bad code)
   23080      * [134]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
   23081        64-bit platforms
   23082      * [135]6994: (c++) ICE in find_function_data
   23083      * [136]7150: preprocessor: GCC -dM -E gives an ICE
   23084      * [137]7160: ICE when optimizing branches without a return value
   23085      * [138]7228: (c++) ICE when using member template and template
   23086        function
   23087      * [139]7266: (c++) ICE with -pedantic on missing typename
   23088      * [140]7353: ICE from use of "Naming Types" extension, see above
   23089      * [141]7411: ICE in instantiate_virtual_regs_1, in function.c
   23090      * [142]7478: (c++) ICE on static_cast inside template
   23091      * [143]7526: preprocessor core dump when _Pragma implies #pragma
   23092        dependency
   23093      * [144]7721: (c++) ICE on simple (but incorrect) template ([145]7803
   23094        is a duplicate)
   23095      * [146]7754: (c++) ICE on union with template parameter
   23096      * [147]7788: (c++) redeclaring a definition as an incomplete class
   23097        causes ICE
   23098      * [148]8031: (c++) ICE in comptypes, in cp/typeck.c
   23099      * [149]8055: preprocessor dies with SIG11 when building FreeBSD
   23100        kernel
   23101      * [150]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
   23102        variables
   23103      * [151]8134: (c++) ICE in force_store_init_value on legal code
   23104      * [152]8149: (c++) ICE on incomplete type
   23105      * [153]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
   23106        initialization
   23107 
   23108     C++ (compiler and library) bugs
   23109 
   23110      * [154]5607: No pointer adjustment in covariant return types
   23111      * [155]6579: Infinite loop with statement expressions in member
   23112        initialization
   23113      * [156]6803: Default copy constructor bug in GCC 3.1
   23114      * [157]7176: g++ confused by friend and static member with same name
   23115      * [158]7188: Segfault with template class and recursive (incorrect)
   23116        initializer list
   23117      * [159]7306: Regression: GCC 3.x fails to compile code with virtual
   23118        inheritance if a method has a variable number of arguments
   23119      * [160]7461: ctype<char>::classic_table() returns offset array on
   23120        Cygwin
   23121      * [161]7524: f(const float arg[3]) fails
   23122      * [162]7584: Erroneous ambiguous base error on using declaration
   23123      * [163]7676: Member template overloading problem
   23124      * [164]7679: infinite loop when a right parenthesis is missing
   23125      * [165]7811: default locale not taken from environment
   23126      * [166]7961: compare( char *) implemented incorrectly in
   23127        basic_string<>
   23128      * [167]8071: basic_ostream::operator<<(streambuf*) loops forever if
   23129        streambuf::underflow() leaves gptr() NULL (dups: [168]8127,
   23130        [169]6745)
   23131      * [170]8096: deque::at() throws std::range_error instead of
   23132        std::out_of_range
   23133      * [171]8127: cout << cin.rdbuf() infinite loop
   23134      * [172]8218: Excessively large memory consumed for classes with large
   23135        array members
   23136      * [173]8287: GCC 3.2: Destructor called for non-constructed local
   23137        object
   23138      * [174]8347: empty vector range used in string construction causes
   23139        core dump
   23140      * [175]8348: fail() flag is set in istringstream when eof() flag is
   23141        set
   23142      * [176]8391: regression: infinite loop in cp/decl2.c(finish_file)
   23143 
   23144     C and optimizer bugs
   23145 
   23146      * [177]6627: -fno-align-functions doesn't seem to disable function
   23147        alignment
   23148      * [178]6631: life_analysis misoptimizes code to initialize fields of
   23149        a structure
   23150      * [179]7102: unsigned char division results in floating exception
   23151      * [180]7120: Run once loop should *always* be unrolled
   23152        (pessimization)
   23153      * [181]7209: Bug involving array referencing and ?: operator
   23154      * [182]7515: invalid inlining of global function with -O3
   23155      * [183]7814: incorrect scheduling for glibc-2.2.92 strcpy test
   23156      * [184]8467: bug in sibling call optimization
   23157 
   23158     Preprocessor bugs
   23159 
   23160      * [185]4890: incorrect line markers from the traditional preprocessor
   23161      * [186]7357: -M option omits system headers files (making it the same
   23162        as -MM)
   23163      * [187]7358: Changes to Sun's make Dependencies
   23164      * [188]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
   23165        C headers
   23166      * [189]7862: Interrupting GCC -MD removes .d file but not .o
   23167      * [190]8190: Failed compilation deletes -MD dependency file
   23168      * [191]8524: _Pragma within macro is improperly expanded
   23169 
   23170     x86 specific (Intel/AMD)
   23171 
   23172      * [192]5351: (i686-only) function pass-by-value structure copy
   23173        corrupts stack ([193]7591 is a duplicate)
   23174      * [194]6845, [195]7034, [196]7124, [197]7174: ICE's with
   23175        -march=pentium3/pentium2/athlon (these are all the same underlying
   23176        bug, in MMX register use)
   23177      * [198]7134, [199]7375, [200]7390: ICE with -march=athlon (maybe same
   23178        as above?)
   23179      * [201]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
   23180      * [202]6981: wrong code in 64-bit manipulation on x86
   23181      * [203]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
   23182        macro
   23183      * [204]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
   23184        intrinsics are broken
   23185      * [205]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
   23186        -march=pentium4
   23187      * [206]7693: Typo in i386 mmintrin.h header
   23188      * [207]7723: ICE - Pentium3 sse - GCC 3.2
   23189      * [208]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
   23190      * [209]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
   23191 
   23192     PowerPC specific
   23193 
   23194      * [210]5967: GCC bug when profiling nested functions on powerpc
   23195      * [211]6984: wrong code generated with -O2, -O3, -Os for do-while
   23196        loop on PowerPC
   23197      * [212]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
   23198      * [213]7130: miscompiled code for GCC-3.1 on
   23199        powerpc-unknown-linux-gnu with -funroll-all-loops
   23200      * [214]7133: PowerPC ICE: unrecognizable insn
   23201      * [215]7380: ICE in extract_insn, at recog.c:2148
   23202      * [216]8252: ICE on Altivec code with optimization turned on
   23203      * [217]8451: Altivec ICE in GCC 3.2
   23204 
   23205     HP/PA specific
   23206 
   23207      * [218]7250: __ashrdi3 returns wrong value on 32 bit hppa
   23208 
   23209     SPARC specific
   23210 
   23211      * [219]6668: when using --disable-multilib, libgcc_s.so is installed
   23212        in the wrong place on sparc-solaris
   23213      * [220]7151: ICE when compiling for UltraSPARC
   23214      * [221]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
   23215        double and -O1
   23216      * [222]7842: [REGRESSION] SPARC code gen bug
   23217 
   23218     ARM specific
   23219 
   23220      * [223]7856: [arm] invalid offset in constant pool reference
   23221      * [224]7967: optimization produces wrong code (ARM)
   23222 
   23223     Alpha specific
   23224 
   23225      * [225]7374: __builtin_fabsl broken on alpha
   23226 
   23227     IBM s390 specific
   23228 
   23229      * [226]7370: ICE in fixup_var_refs_1 on s390x
   23230      * [227]7409: loop optimization bug on s390x-linux-gnu
   23231      * [228]8232: s390x: ICE when using bcmp with int length argument
   23232 
   23233     SCO specific
   23234 
   23235      * [229]7623: SCO OpenServer build fails with machmode.def: undefined
   23236        symbol: BITS_PER_UNIT
   23237 
   23238     m68k/Coldfire specific
   23239 
   23240      * [230]8314: crtbegin, crtend need to be multilib'ed for this
   23241        platform
   23242 
   23243     Documentation
   23244 
   23245      * [231]761: Document some undocumented options
   23246      * [232]5610: Fix documentation about invoking SSE instructions
   23247        (-mfpmath=sse)
   23248      * [233]7484: List -Wmissing-declarations as C-only option
   23249      * [234]7531: -mcmodel not documented for x86-64
   23250      * [235]8120: Update documentation of bad use of ##
   23251      __________________________________________________________________
   23252 
   23253 [236]GCC 3.2
   23254 
   23255    3.2 is a small bug fix release, but there is a change to the
   23256    application binary interface (ABI), hence the change to the second part
   23257    of the version number.
   23258 
   23259    The main purpose of the 3.2 release is to correct a couple of problems
   23260    in the C++ ABI, with the intention of providing a stable interface
   23261    going forward.  Accordingly, 3.2 is only a small change to 3.1.1.
   23262 
   23263   Bug Fixes
   23264 
   23265     C++
   23266 
   23267      * [237]7320: g++ 3.2 relocation problem
   23268      * [238]7470: vtable: virtual function pointers not in declaration
   23269        order
   23270 
   23271     libstdc++
   23272 
   23273      * [239]6410: Trouble with non-ASCII monetary symbols and wchar_t
   23274      * [240]6503, [241]6642, [242]7186: Problems with comparing or
   23275        subtracting various types of const and non-const iterators
   23276      * [243]7216: ambiguity with basic_iostream::traits_type
   23277      * [244]7220: problem with basic_istream::ignore(0,delimiter)
   23278      * [245]7222: locale::operator==() doesn't work on std::locale("")
   23279      * [246]7286: placement operator delete issue
   23280      * [247]7442: cxxabi.h does not match the C++ ABI
   23281      * [248]7445: poor performance of std::locale::classic() in
   23282        multi-threaded applications
   23283 
   23284     x86-64 specific
   23285 
   23286      * [249]7291: off-by-one in generated inline bzero code for x86-64
   23287 
   23288 
   23289     For questions related to the use of GCC, please consult these web
   23290     pages and the [250]GCC manuals. If that fails, the
   23291     [251]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23292     web pages and the development of GCC are welcome on our developer
   23293     list at [252]gcc (a] gcc.gnu.org. All of [253]our lists have public
   23294     archives.
   23295 
   23296    Copyright (C) [254]Free Software Foundation, Inc. Verbatim copying and
   23297    distribution of this entire article is permitted in any medium,
   23298    provided this notice is preserved.
   23299 
   23300    These pages are [255]maintained by the GCC team. Last modified
   23301    2025-04-08.
   23302 
   23303 References
   23304 
   23305    1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   23306    2. https://gcc.gnu.org/gcc-3.1/changes.html
   23307    3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
   23308    4. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.3
   23309    5. https://gcc.gnu.org/PR3782
   23310    6. https://gcc.gnu.org/PR6440
   23311    7. https://gcc.gnu.org/PR7050
   23312    8. https://gcc.gnu.org/PR7741
   23313    9. https://gcc.gnu.org/PR7982
   23314   10. https://gcc.gnu.org/PR8068
   23315   11. https://gcc.gnu.org/PR8178
   23316   12. https://gcc.gnu.org/PR8396
   23317   13. https://gcc.gnu.org/PR8674
   23318   14. https://gcc.gnu.org/PR9768
   23319   15. https://gcc.gnu.org/PR9798
   23320   16. https://gcc.gnu.org/PR9799
   23321   17. https://gcc.gnu.org/PR9928
   23322   18. https://gcc.gnu.org/PR10114
   23323   19. https://gcc.gnu.org/PR10352
   23324   20. https://gcc.gnu.org/PR10336
   23325   21. https://gcc.gnu.org/PR8224
   23326   22. https://gcc.gnu.org/PR8613
   23327   23. https://gcc.gnu.org/PR8828
   23328   24. https://gcc.gnu.org/PR9226
   23329   25. https://gcc.gnu.org/PR9853
   23330   26. https://gcc.gnu.org/PR9797
   23331   27. https://gcc.gnu.org/PR9967
   23332   28. https://gcc.gnu.org/PR10116
   23333   29. https://gcc.gnu.org/PR10171
   23334   30. https://gcc.gnu.org/PR10175
   23335   31. https://gcc.gnu.org/PR8316
   23336   32. https://gcc.gnu.org/PR9169
   23337   33. https://gcc.gnu.org/PR9420
   23338   34. https://gcc.gnu.org/PR9459
   23339   35. https://gcc.gnu.org/PR9507
   23340   36. https://gcc.gnu.org/PR9538
   23341   37. https://gcc.gnu.org/PR9602
   23342   38. https://gcc.gnu.org/PR9993
   23343   39. https://gcc.gnu.org/PR10167
   23344   40. https://gcc.gnu.org/PR9652
   23345   41. https://gcc.gnu.org/PR10144
   23346   42. https://gcc.gnu.org/PR8746
   23347   43. https://gcc.gnu.org/PR9888
   23348   44. https://gcc.gnu.org/PR9638
   23349   45. https://gcc.gnu.org/PR9954
   23350   46. https://gcc.gnu.org/PR7784
   23351   47. https://gcc.gnu.org/PR7796
   23352   48. https://gcc.gnu.org/PR8281
   23353   49. https://gcc.gnu.org/PR8366
   23354   50. https://gcc.gnu.org/PR8726
   23355   51. https://gcc.gnu.org/PR9414
   23356   52. https://gcc.gnu.org/PR10067
   23357   53. https://gcc.gnu.org/PR7248
   23358   54. https://gcc.gnu.org/PR8343
   23359   55. https://gcc.gnu.org/PR9732
   23360   56. https://gcc.gnu.org/PR10073
   23361   57. https://gcc.gnu.org/PR7702
   23362   58. https://gcc.gnu.org/PR9671
   23363   59. https://gcc.gnu.org/PR8694
   23364   60. https://gcc.gnu.org/PR9953
   23365   61. https://gcc.gnu.org/PR10271
   23366   62. https://gcc.gnu.org/PR6362
   23367   63. https://gcc.gnu.org/PR10377
   23368   64. https://gcc.gnu.org/PR6955
   23369   65. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.2
   23370   66. https://gcc.gnu.org/PR5919
   23371   67. https://gcc.gnu.org/PR7129
   23372   68. https://gcc.gnu.org/PR7507
   23373   69. https://gcc.gnu.org/PR7622
   23374   70. https://gcc.gnu.org/PR7681
   23375   71. https://gcc.gnu.org/PR9528
   23376   72. https://gcc.gnu.org/PR8031
   23377   73. https://gcc.gnu.org/PR8275
   23378   74. https://gcc.gnu.org/PR8332
   23379   75. https://gcc.gnu.org/PR8372
   23380   76. https://gcc.gnu.org/PR8439
   23381   77. https://gcc.gnu.org/PR8442
   23382   78. https://gcc.gnu.org/PR8518
   23383   79. https://gcc.gnu.org/PR8615
   23384   80. https://gcc.gnu.org/PR8663
   23385   81. https://gcc.gnu.org/PR8799
   23386   82. https://gcc.gnu.org/PR9328
   23387   83. https://gcc.gnu.org/PR9465
   23388   84. https://gcc.gnu.org/PR47
   23389   85. https://gcc.gnu.org/PR6745
   23390   86. https://gcc.gnu.org/PR8214
   23391   87. https://gcc.gnu.org/PR8493
   23392   88. https://gcc.gnu.org/PR8332
   23393   89. https://gcc.gnu.org/PR8503
   23394   90. https://gcc.gnu.org/PR8727
   23395   91. https://gcc.gnu.org/PR7445
   23396   92. https://gcc.gnu.org/PR8230
   23397   93. https://gcc.gnu.org/PR8399
   23398   94. https://gcc.gnu.org/PR8662
   23399   95. https://gcc.gnu.org/PR8707
   23400   96. https://gcc.gnu.org/PR8708
   23401   97. https://gcc.gnu.org/PR8790
   23402   98. https://gcc.gnu.org/PR8887
   23403   99. https://gcc.gnu.org/PR9076
   23404  100. https://gcc.gnu.org/PR9151
   23405  101. https://gcc.gnu.org/PR9168
   23406  102. https://gcc.gnu.org/PR9269
   23407  103. https://gcc.gnu.org/PR9322
   23408  104. https://gcc.gnu.org/PR9433
   23409  105. https://gcc.gnu.org/PR8032
   23410  106. https://gcc.gnu.org/PR8639
   23411  107. https://gcc.gnu.org/PR8794
   23412  108. https://gcc.gnu.org/PR8832
   23413  109. https://gcc.gnu.org/PR8988
   23414  110. https://gcc.gnu.org/PR9492
   23415  111. https://gcc.gnu.org/PR9267
   23416  112. https://gcc.gnu.org/PR8344
   23417  113. https://gcc.gnu.org/PR8524
   23418  114. https://gcc.gnu.org/PR8880
   23419  115. https://gcc.gnu.org/PR9090
   23420  116. https://gcc.gnu.org/PR8588
   23421  117. https://gcc.gnu.org/PR8599
   23422  118. https://gcc.gnu.org/PR9506
   23423  119. https://gcc.gnu.org/PR9484
   23424  120. https://gcc.gnu.org/PR9292
   23425  121. https://gcc.gnu.org/PR9293
   23426  122. https://gcc.gnu.org/PR9295
   23427  123. https://gcc.gnu.org/PR9296
   23428  124. https://gcc.gnu.org/PR9316
   23429  125. https://gcc.gnu.org/PR9493
   23430  126. https://gcc.gnu.org/PR7341
   23431  127. https://gcc.gnu.org/PR8947
   23432  128. https://gcc.gnu.org/PR7448
   23433  129. https://gcc.gnu.org/PR8882
   23434  130. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.1
   23435  131. https://gcc.gnu.org/PR7445
   23436  132. https://gcc.gnu.org/PR2521
   23437  133. https://gcc.gnu.org/PR5661
   23438  134. https://gcc.gnu.org/PR6419
   23439  135. https://gcc.gnu.org/PR6994
   23440  136. https://gcc.gnu.org/PR7150
   23441  137. https://gcc.gnu.org/PR7160
   23442  138. https://gcc.gnu.org/PR7228
   23443  139. https://gcc.gnu.org/PR7266
   23444  140. https://gcc.gnu.org/PR7353
   23445  141. https://gcc.gnu.org/PR7411
   23446  142. https://gcc.gnu.org/PR7478
   23447  143. https://gcc.gnu.org/PR7526
   23448  144. https://gcc.gnu.org/PR7721
   23449  145. https://gcc.gnu.org/PR7803
   23450  146. https://gcc.gnu.org/PR7754
   23451  147. https://gcc.gnu.org/PR7788
   23452  148. https://gcc.gnu.org/PR8031
   23453  149. https://gcc.gnu.org/PR8055
   23454  150. https://gcc.gnu.org/PR8067
   23455  151. https://gcc.gnu.org/PR8134
   23456  152. https://gcc.gnu.org/PR8149
   23457  153. https://gcc.gnu.org/PR8160
   23458  154. https://gcc.gnu.org/PR5607
   23459  155. https://gcc.gnu.org/PR6579
   23460  156. https://gcc.gnu.org/PR6803
   23461  157. https://gcc.gnu.org/PR7176
   23462  158. https://gcc.gnu.org/PR7188
   23463  159. https://gcc.gnu.org/PR7306
   23464  160. https://gcc.gnu.org/PR7461
   23465  161. https://gcc.gnu.org/PR7524
   23466  162. https://gcc.gnu.org/PR7584
   23467  163. https://gcc.gnu.org/PR7676
   23468  164. https://gcc.gnu.org/PR7679
   23469  165. https://gcc.gnu.org/PR7811
   23470  166. https://gcc.gnu.org/PR7961
   23471  167. https://gcc.gnu.org/PR8071
   23472  168. https://gcc.gnu.org/PR8127
   23473  169. https://gcc.gnu.org/PR6745
   23474  170. https://gcc.gnu.org/PR8096
   23475  171. https://gcc.gnu.org/PR8127
   23476  172. https://gcc.gnu.org/PR8218
   23477  173. https://gcc.gnu.org/PR8287
   23478  174. https://gcc.gnu.org/PR8347
   23479  175. https://gcc.gnu.org/PR8348
   23480  176. https://gcc.gnu.org/PR8391
   23481  177. https://gcc.gnu.org/PR6627
   23482  178. https://gcc.gnu.org/PR6631
   23483  179. https://gcc.gnu.org/PR7102
   23484  180. https://gcc.gnu.org/PR7120
   23485  181. https://gcc.gnu.org/PR7209
   23486  182. https://gcc.gnu.org/PR7515
   23487  183. https://gcc.gnu.org/PR7814
   23488  184. https://gcc.gnu.org/PR8467
   23489  185. https://gcc.gnu.org/PR4890
   23490  186. https://gcc.gnu.org/PR7357
   23491  187. https://gcc.gnu.org/PR7358
   23492  188. https://gcc.gnu.org/PR7602
   23493  189. https://gcc.gnu.org/PR7862
   23494  190. https://gcc.gnu.org/PR8190
   23495  191. https://gcc.gnu.org/PR8524
   23496  192. https://gcc.gnu.org/PR5351
   23497  193. https://gcc.gnu.org/PR7591
   23498  194. https://gcc.gnu.org/PR6845
   23499  195. https://gcc.gnu.org/PR7034
   23500  196. https://gcc.gnu.org/PR7124
   23501  197. https://gcc.gnu.org/PR7174
   23502  198. https://gcc.gnu.org/PR7134
   23503  199. https://gcc.gnu.org/PR7375
   23504  200. https://gcc.gnu.org/PR7390
   23505  201. https://gcc.gnu.org/PR6890
   23506  202. https://gcc.gnu.org/PR6981
   23507  203. https://gcc.gnu.org/PR7242
   23508  204. https://gcc.gnu.org/PR7396
   23509  205. https://gcc.gnu.org/PR7630
   23510  206. https://gcc.gnu.org/PR7693
   23511  207. https://gcc.gnu.org/PR7723
   23512  208. https://gcc.gnu.org/PR7951
   23513  209. https://gcc.gnu.org/PR8146
   23514  210. https://gcc.gnu.org/PR5967
   23515  211. https://gcc.gnu.org/PR6984
   23516  212. https://gcc.gnu.org/PR7114
   23517  213. https://gcc.gnu.org/PR7130
   23518  214. https://gcc.gnu.org/PR7133
   23519  215. https://gcc.gnu.org/PR7380
   23520  216. https://gcc.gnu.org/PR8252
   23521  217. https://gcc.gnu.org/PR8451
   23522  218. https://gcc.gnu.org/PR7250
   23523  219. https://gcc.gnu.org/PR6668
   23524  220. https://gcc.gnu.org/PR7151
   23525  221. https://gcc.gnu.org/PR7335
   23526  222. https://gcc.gnu.org/PR7842
   23527  223. https://gcc.gnu.org/PR7856
   23528  224. https://gcc.gnu.org/PR7967
   23529  225. https://gcc.gnu.org/PR7374
   23530  226. https://gcc.gnu.org/PR7370
   23531  227. https://gcc.gnu.org/PR7409
   23532  228. https://gcc.gnu.org/PR8232
   23533  229. https://gcc.gnu.org/PR7623
   23534  230. https://gcc.gnu.org/PR8314
   23535  231. https://gcc.gnu.org/PR761
   23536  232. https://gcc.gnu.org/PR5610
   23537  233. https://gcc.gnu.org/PR7484
   23538  234. https://gcc.gnu.org/PR7531
   23539  235. https://gcc.gnu.org/PR8120
   23540  236. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2
   23541  237. https://gcc.gnu.org/PR7320
   23542  238. https://gcc.gnu.org/PR7470
   23543  239. https://gcc.gnu.org/PR6410
   23544  240. https://gcc.gnu.org/PR6503
   23545  241. https://gcc.gnu.org/PR6642
   23546  242. https://gcc.gnu.org/PR7186
   23547  243. https://gcc.gnu.org/PR7216
   23548  244. https://gcc.gnu.org/PR7220
   23549  245. https://gcc.gnu.org/PR7222
   23550  246. https://gcc.gnu.org/PR7286
   23551  247. https://gcc.gnu.org/PR7442
   23552  248. https://gcc.gnu.org/PR7445
   23553  249. https://gcc.gnu.org/PR7291
   23554  250. https://gcc.gnu.org/onlinedocs/
   23555  251. mailto:gcc-help (a] gcc.gnu.org
   23556  252. mailto:gcc (a] gcc.gnu.org
   23557  253. https://gcc.gnu.org/lists.html
   23558  254. https://www.fsf.org/
   23559  255. https://gcc.gnu.org/about.html
   23560 ======================================================================
   23561 http://gcc.gnu.org/gcc-3.1/index.html
   23562                                     GCC 3.1
   23563 
   23564    (This release series is no longer supported.)
   23565 
   23566    July 27, 2002
   23567 
   23568    The GNU project and the GCC developers are pleased to announce the
   23569    release of GCC 3.1.1.
   23570 
   23571    The links below still apply to GCC 3.1.1.
   23572 
   23573    May 15, 2002
   23574 
   23575    The [1]GNU project and the GCC developers are pleased to announce the
   23576    release of GCC 3.1.
   23577 
   23578    GCC used to stand for the GNU C Compiler, but since the compiler
   23579    supports several other languages aside from C, it now stands for the
   23580    GNU Compiler Collection.
   23581 
   23582    A list of [2]successful builds is updated as new information becomes
   23583    available.
   23584 
   23585    The GCC developers would like to thank the numerous people that have
   23586    contributed [3]new features, improvements, bug fixes, and other changes
   23587    as well as test results to GCC. This [4]amazing group of volunteers is
   23588    what makes GCC successful.
   23589 
   23590    For additional information about GCC please refer to the [5]GCC project
   23591    web site or contact the [6]GCC development mailing list.
   23592 
   23593    To obtain GCC please use [7]our mirror sites, or our CVS server.
   23594      __________________________________________________________________
   23595 
   23596 
   23597     For questions related to the use of GCC, please consult these web
   23598     pages and the [8]GCC manuals. If that fails, the
   23599     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23600     web pages and the development of GCC are welcome on our developer
   23601     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   23602     archives.
   23603 
   23604    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   23605    distribution of this entire article is permitted in any medium,
   23606    provided this notice is preserved.
   23607 
   23608    These pages are [13]maintained by the GCC team. Last modified
   23609    2024-07-04.
   23610 
   23611 References
   23612 
   23613    1. https://www.gnu.org/
   23614    2. https://gcc.gnu.org/gcc-3.1/buildstat.html
   23615    3. https://gcc.gnu.org/gcc-3.1/changes.html
   23616    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   23617    5. https://gcc.gnu.org/index.html
   23618    6. mailto:gcc (a] gcc.gnu.org
   23619    7. https://gcc.gnu.org/mirrors.html
   23620    8. https://gcc.gnu.org/onlinedocs/
   23621    9. mailto:gcc-help (a] gcc.gnu.org
   23622   10. mailto:gcc (a] gcc.gnu.org
   23623   11. https://gcc.gnu.org/lists.html
   23624   12. https://www.fsf.org/
   23625   13. https://gcc.gnu.org/about.html
   23626 ======================================================================
   23627 http://gcc.gnu.org/gcc-3.1/changes.html
   23628                              GCC 3.1 Release Series
   23629                         Changes, New Features, and Fixes
   23630 
   23631 Additional changes in GCC 3.1.1
   23632 
   23633      * A bug related to how structures and unions are returned has been
   23634        fixed for powerpc-*-netbsd*.
   23635      * An important bug in the implementation of -fprefetch-loop-arrays
   23636        has been fixed. Previously the optimization prefetched random
   23637        blocks of memory for most targets except for i386.
   23638      * The Java compiler now compiles Java programs much faster and also
   23639        works with parallel make.
   23640      * Nested functions have been fixed for mips*-*-netbsd*.
   23641      * Some missing floating point support routines have beed added for
   23642        mips*-*-netbsd*.
   23643      * This [1]message gives additional information about the bugs fixed
   23644        in this release.
   23645 
   23646 Caveats
   23647 
   23648      * The -traditional C compiler option has been deprecated and will be
   23649        removed in GCC 3.3. (It remains possible to preprocess non-C code
   23650        with the traditional preprocessor.)
   23651      * The default debugging format for most ELF platforms (including
   23652        GNU/Linux and FreeBSD; notable exception is Solaris) has changed
   23653        from stabs to DWARF2. This requires GDB 5.1.1 or later.
   23654 
   23655 General Optimizer Improvements
   23656 
   23657      * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat,
   23658        and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure
   23659        for profile driven optimizations.
   23660        Options -fprofile-arcs and -fbranch-probabilities can now be used
   23661        to improve speed of the generated code by profiling the actual
   23662        program behavior on typical runs. In the absence of profile info
   23663        the compiler attempts to guess the profile statically.
   23664      * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
   23665        monitor performance of the generated code.
   23666        According to the SPECInt2000 results on an AMD Athlon CPU, the code
   23667        generated by GCC 3.1 is 6% faster on the average (8.2% faster with
   23668        profile feedback) compared to GCC 3.0. The code produced by GCC 3.0
   23669        is about 2.1% faster compared to 2.95.3. Tests were done using the
   23670        -O2 -march=athlon command-line options.
   23671      * Alexandre Oliva, of Red Hat, has generalized the tree inlining
   23672        infrastructure developed by CodeSourcery, LLC for the C++ front
   23673        end, so that it is now used in the C front end too. Inlining
   23674        functions as trees exposes them earlier to the compiler, giving it
   23675        more opportunities for optimization.
   23676      * Support for data prefetching instructions has been added to the GCC
   23677        back end and several targets. A new __builtin_prefetch intrinsic is
   23678        available to explicitly insert prefetch instructions and
   23679        experimental support for loop array prefetching has been added (see
   23680        -fprefetch-loop-array documentation).
   23681      * Support for emitting debugging information for macros has been
   23682        added for DWARF2. It is activated using -g3.
   23683 
   23684 New Languages and Language specific improvements
   23685 
   23686   C/C++
   23687 
   23688      * A few more [4]ISO C99 features.
   23689      * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0.
   23690      * The preprocessor's symbol table has been merged with the symbol
   23691        table of the C, C++ and Objective-C front ends.
   23692      * The preprocessor consumes less memory than the preprocessor in GCC
   23693        3.0, often significantly so. On normal input files, it typically
   23694        consumes less memory than pre-3.0 cccp-based GCC, too.
   23695 
   23696   C++
   23697 
   23698      * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std
   23699        was a workaround to allow std compliant code to work with the
   23700        non-std compliant libstdc++-v2. libstdc++-v3 is std compliant.
   23701      * The C++ ABI has been fixed so that void (A::*)() const is mangled
   23702        as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only
   23703        affects pointer to cv-qualified member function types.
   23704      * The C++ ABI has been changed to correctly handle this code:
   23705     struct A {
   23706       void operator delete[] (void *, size_t);
   23707     };
   23708 
   23709     struct B : public A {
   23710     };
   23711 
   23712     new B[10];
   23713 
   23714        The amount of storage allocated for the array will be greater than
   23715        it was in 3.0, in order to store the number of elements in the
   23716        array, so that the correct size can be passed to operator delete[]
   23717        when the array is deleted. Previously, the value passed to operator
   23718        delete[] was unpredictable.
   23719        This change will only affect code that declares a two-argument
   23720        operator delete[] with a second parameter of type size_t in a base
   23721        class, and does not override that definition in a derived class.
   23722      * The C++ ABI has been changed so that:
   23723     struct A {
   23724       void operator delete[] (void *, size_t);
   23725       void operator delete[] (void *);
   23726     };
   23727 
   23728        does not cause unnecessary storage to be allocated when an array of
   23729        A objects is allocated.
   23730        This change will only affect code that declares both of these forms
   23731        of operator delete[], and declared the two-argument form before the
   23732        one-argument form.
   23733      * The C++ ABI has been changed so that when a parameter is passed by
   23734        value, any cleanup for that parameter is performed in the caller,
   23735        as specified by the ia64 C++ ABI, rather than the called function
   23736        as before. As a result, classes with a non-trivial destructor but a
   23737        trivial copy constructor will be passed and returned by invisible
   23738        reference, rather than by bitwise copy as before.
   23739      * G++ now supports the "named return value optimization": for code
   23740        like
   23741     A f () {
   23742       A a;
   23743       ...
   23744       return a;
   23745     }
   23746 
   23747        G++ will allocate a in the return value slot, so that the return
   23748        becomes a no-op. For this to work, all return statements in the
   23749        function must return the same variable.
   23750      * Improvements to the C++ library are listed in [5]the libstdc++-v3
   23751        FAQ.
   23752 
   23753   Objective-C
   23754 
   23755      * Annoying linker warnings (due to incorrect code being generated)
   23756        have been fixed.
   23757      * If a class method cannot be found, the compiler no longer issues a
   23758        warning if a corresponding instance method exists in the root
   23759        class.
   23760      * Forward @protocol declarations have been fixed.
   23761      * Loading of categories has been fixed in certain situations (GNU run
   23762        time only).
   23763      * The class lookup in the run-time library has been rewritten so that
   23764        class method dispatch is more than twice as fast as it used to be
   23765        (GNU run time only).
   23766 
   23767   Java
   23768 
   23769      * libgcj now includes RMI, java.lang.ref.*, javax.naming, and
   23770        javax.transaction.
   23771      * Property files and other system resources can be compiled into
   23772        executables which use libgcj using the new gcj --resource feature.
   23773      * libgcj has been ported to more platforms. In particular there is
   23774        now a mostly-functional mingw32 (Windows) target port.
   23775      * JNI and CNI invocation interfaces were implemented, so gcj-compiled
   23776        Java code can now be called from a C/C++ application.
   23777      * gcj can now use builtin functions for certain known methods, for
   23778        instance Math.cos.
   23779      * gcj can now automatically remove redundant array-store checks in
   23780        some common cases.
   23781      * The --no-store-checks optimization option was added. This can be
   23782        used to omit runtime store checks for code which is known not to
   23783        throw ArrayStoreException
   23784      * The following third party interface standards were added to libgcj:
   23785        org.w3c.dom and org.xml.sax.
   23786      * java.security has been merged with GNU Classpath. The new package
   23787        is now JDK 1.2 compliant, and much more complete.
   23788      * A bytecode verifier was added to the libgcj interpreter.
   23789      * java.lang.Character was rewritten to comply with the Unicode 3.0
   23790        standard, and improve performance.
   23791      * Partial support for many more locales was added to libgcj.
   23792      * Socket timeouts have been implemented.
   23793      * libgcj has been merged into a single shared library. There are no
   23794        longer separate shared libraries for the garbage collector and
   23795        zlib.
   23796      * Several performance improvements were made to gcj and libgcj:
   23797           + Hash synchronization (thin locks)
   23798           + A special allocation path for finalizer-free objects
   23799           + Thread-local allocation
   23800           + Parallel GC, and other GC tweaks
   23801 
   23802   Fortran
   23803 
   23804    Fortran improvements are listed in [6]the Fortran documentation.
   23805 
   23806   Ada
   23807 
   23808    [7]AdaCore, has contributed its GNAT Ada 95 front end and associated
   23809    tools. The GNAT compiler fully implements the Ada language as defined
   23810    by the ISO/IEC 8652 standard.
   23811 
   23812    Please note that the integration of the Ada front end is still work in
   23813    progress.
   23814 
   23815 New Targets and Target Specific Improvements
   23816 
   23817      * Hans-Peter Nilsson has contributed a port to MMIX, the CPU
   23818        architecture used in new editions of Donald E. Knuth's The Art of
   23819        Computer Programming.
   23820      * Axis Communications has contributed its port to the CRIS CPU
   23821        architecture, used in the ETRAX system-on-a-chip series.
   23822      * Alexandre Oliva, of Red Hat, has contributed a port to the SuperH
   23823        SH5 64-bit RISC microprocessor architecture, extending the existing
   23824        SH port.
   23825      * UltraSPARC is fully supported in 64-bit mode. The option -m64
   23826        enables it.
   23827      * For compatibility with the Sun compiler #pragma redefine_extname
   23828        has been implemented on Solaris.
   23829      * The x86 back end has had some noticeable work done to it.
   23830           + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas
   23831             Jaeger have contributed a port to the AMD x86-64 architecture.
   23832             For more information on x86-64 see http://www.x86-64.org.
   23833           + The compiler now supports MMX, 3DNow!, SSE, and SSE2
   23834             instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will
   23835             enable the respective instruction sets. Intel C++ compatible
   23836             MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics
   23837             will be added in next major release.
   23838           + Following those improvements, targets for Pentium MMX, K6-2,
   23839             K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were
   23840             added. Refer to the documentation on -march= and -mcpu=
   23841             options for details.
   23842           + For those targets that support it, -mfpmath=sse will cause the
   23843             compiler to generate SSE/SSE2 instructions for floating point
   23844             math instead of x87 instructions. Usually, this will lead to
   23845             quicker code  especially on the Pentium 4. Note that only
   23846             scalar floating point instructions are used and GCC does not
   23847             exploit SIMD features yet.
   23848           + Prefetch support has been added to the Pentium III, Pentium 4,
   23849             K6-2, K6-3, and Athlon series.
   23850           + Code generated for floating point to integer conversions has
   23851             been improved leading to better performance of many 3D
   23852             applications.
   23853      * The PowerPC back end has added 64-bit PowerPC GNU/Linux support.
   23854      * C++ support for AIX has been improved.
   23855      * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the
   23856        PowerPC port supporting the AltiVec programming model (SIMD). The
   23857        support, though presently useful, is experimental and is expected
   23858        to stabilize for 3.2. The support is written to conform to
   23859        Motorola's AltiVec specs. See -maltivec.
   23860 
   23861 [8]Obsolete Systems
   23862 
   23863    Support for a number of older systems has been declared obsolete in GCC
   23864    3.1. Unless there is activity to revive them, the next release of GCC
   23865    will have their sources permanently removed.
   23866 
   23867    All configurations of the following processor architectures have been
   23868    declared obsolete:
   23869      * MIL-STD-1750A, 1750a-*-*
   23870      * AMD A29k, a29k-*-*
   23871      * Convex, c*-convex-*
   23872      * Clipper, clipper-*-*
   23873      * Elxsi, elxsi-*-*
   23874      * Intel i860, i860-*-*
   23875      * Sun picoJava, pj-*-* and pjl-*-*
   23876      * Western Electric 32000, we32k-*-*
   23877 
   23878    Most configurations of the following processor architectures have been
   23879    declared obsolete, but we are preserving a few systems which may have
   23880    active developers. It is unlikely that the remaining systems will
   23881    survive much longer unless we see definite signs of port activity.
   23882      * Motorola 88000 except
   23883           + Generic a.out, m88k-*-aout*
   23884           + Generic SVR4, m88k-*-sysv4
   23885           + OpenBSD, m88k-*-openbsd*
   23886      * NS32k except
   23887           + NetBSD, ns32k-*-netbsd*
   23888           + OpenBSD, ns32k-*-openbsd*.
   23889      * ROMP except
   23890           + OpenBSD, romp-*-openbsd*.
   23891 
   23892    Finally, only some configurations of these processor architectures are
   23893    being obsoleted.
   23894      * Alpha:
   23895           + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka
   23896             alpha*-*-osf[45], are still supported.)
   23897      * ARM:
   23898           + RISCiX, arm-*-riscix*.
   23899      * i386:
   23900           + 386BSD, i?86-*-bsd*
   23901           + Chorus, i?86-*-chorusos*
   23902           + DG/UX, i?86-*-dgux*
   23903           + FreeBSD 1.x, i?86-*-freebsd1.*
   23904           + IBM AIX, i?86-*-aix*
   23905           + ISC UNIX, i?86-*-isc*
   23906           + GNU/Linux with pre-BFD linker, i?86-*-linux*oldld*
   23907           + NEXTstep, i?86-next-*
   23908           + OSF UNIX, i?86-*-osf1* and i?86-*-osfrose*
   23909           + RTEMS/coff, i?86-*-rtemscoff*
   23910           + RTEMS/go32, i?86-go32-rtems*
   23911           + Sequent/BSD, i?86-sequent-bsd*
   23912           + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and
   23913             i?86-sequent-sysv3*
   23914           + SunOS, i?86-*-sunos*
   23915      * Motorola 68000:
   23916           + Altos, m68[k0]*-altos-*
   23917           + Apollo, m68[k0]*-apollo-*
   23918           + Apple A/UX, m68[k0]*-apple-*
   23919           + Bull, m68[k0]*-bull-*
   23920           + Convergent, m68[k0]*-convergent-*
   23921           + Generic SVR3, m68[k0]*-*-sysv3*
   23922           + ISI, m68[k0]*-isi-*
   23923           + LynxOS, m68[k0]*-*-lynxos*
   23924           + NEXT, m68[k0]*-next-*
   23925           + RTEMS/coff, m68[k0]*-*-rtemscoff*
   23926           + Sony, m68[k0]*-sony-*
   23927      * MIPS:
   23928           + DEC Ultrix, mips-*-ultrix* and mips-dec-*
   23929           + Generic BSD, mips-*-bsd*
   23930           + Generic System V, mips-*-sysv*
   23931           + IRIX before version 5, mips-sgi-irix[1234]*
   23932           + RiscOS, mips-*-riscos*
   23933           + Sony, mips-sony-*
   23934           + Tandem, mips-tandem-*
   23935      * SPARC:
   23936           + RTEMS/a.out, sparc-*-rtemsaout*.
   23937 
   23938 Documentation improvements
   23939 
   23940      * The old manual ("Using and Porting the GNU Compiler Collection")
   23941        has been replaced by a users manual ("Using the GNU Compiler
   23942        Collection") and a separate internals reference manual ("GNU
   23943        Compiler Collection Internals").
   23944      * More complete and much improved documentation about GCC's internal
   23945        representation used by the C and C++ front ends.
   23946      * Many cleanups and improvements in general.
   23947 
   23948 
   23949     For questions related to the use of GCC, please consult these web
   23950     pages and the [9]GCC manuals. If that fails, the
   23951     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23952     web pages and the development of GCC are welcome on our developer
   23953     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   23954     archives.
   23955 
   23956    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   23957    distribution of this entire article is permitted in any medium,
   23958    provided this notice is preserved.
   23959 
   23960    These pages are [14]maintained by the GCC team. Last modified
   23961    2026-06-07.
   23962 
   23963 References
   23964 
   23965    1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
   23966    2. https://gcc.gnu.org/news/profiledriven.html
   23967    3. https://gcc.gnu.org/benchmarks/
   23968    4. https://gcc.gnu.org/projects/c-status.html
   23969    5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
   23970    6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
   23971    7. https://www.adacore.com/
   23972    8. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   23973    9. https://gcc.gnu.org/onlinedocs/
   23974   10. mailto:gcc-help (a] gcc.gnu.org
   23975   11. mailto:gcc (a] gcc.gnu.org
   23976   12. https://gcc.gnu.org/lists.html
   23977   13. https://www.fsf.org/
   23978   14. https://gcc.gnu.org/about.html
   23979 ======================================================================
   23980 http://gcc.gnu.org/gcc-3.0/index.html
   23981                                    GCC 3.0.4
   23982 
   23983    (This release series is no longer supported.)
   23984 
   23985    February 20, 2002
   23986 
   23987    The [1]GNU project and the GCC developers are pleased to announce the
   23988    release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0
   23989    series.
   23990 
   23991    GCC used to stand for the GNU C Compiler, but since the compiler
   23992    supports several other languages aside from C, it now stands for the
   23993    GNU Compiler Collection.
   23994 
   23995    GCC 3.0.x has several new optimizations, new targets, new languages and
   23996    many other new features, relative to GCC 2.95.x. See the [2]new
   23997    features page for a more complete list.
   23998 
   23999    A list of [3]successful builds is updated as new information becomes
   24000    available.
   24001 
   24002    The GCC developers would like to thank the numerous people that have
   24003    contributed new features, test results, bug fixes, etc to GCC. This
   24004    [4]amazing group of volunteers is what makes GCC successful.
   24005 
   24006    And finally, we can't in good conscience fail to mention some
   24007    [5]caveats to using GCC 3.0.x.
   24008 
   24009    For additional information about GCC please refer to the [6]GCC project
   24010    web site or contact the [7]GCC development mailing list.
   24011 
   24012    To obtain GCC please use [8]our mirror sites, or our CVS server.
   24013      __________________________________________________________________
   24014 
   24015 Previous 3.0.x Releases
   24016 
   24017    December 20, 2001: GCC 3.0.3 has been released.
   24018    October 25, 2001: GCC 3.0.2 has been released.
   24019    August 20, 2001: GCC 3.0.1 has been released.
   24020    June 18, 2001: GCC 3.0 has been released.
   24021 
   24022 
   24023     For questions related to the use of GCC, please consult these web
   24024     pages and the [9]GCC manuals. If that fails, the
   24025     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24026     web pages and the development of GCC are welcome on our developer
   24027     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   24028     archives.
   24029 
   24030    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   24031    distribution of this entire article is permitted in any medium,
   24032    provided this notice is preserved.
   24033 
   24034    These pages are [14]maintained by the GCC team. Last modified
   24035    2024-07-04.
   24036 
   24037 References
   24038 
   24039    1. https://www.gnu.org/
   24040    2. https://gcc.gnu.org/gcc-3.0/features.html
   24041    3. https://gcc.gnu.org/gcc-3.0/buildstat.html
   24042    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24043    5. https://gcc.gnu.org/gcc-3.0/caveats.html
   24044    6. https://gcc.gnu.org/index.html
   24045    7. mailto:gcc (a] gcc.gnu.org
   24046    8. https://gcc.gnu.org/mirrors.html
   24047    9. https://gcc.gnu.org/onlinedocs/
   24048   10. mailto:gcc-help (a] gcc.gnu.org
   24049   11. mailto:gcc (a] gcc.gnu.org
   24050   12. https://gcc.gnu.org/lists.html
   24051   13. https://www.fsf.org/
   24052   14. https://gcc.gnu.org/about.html
   24053 ======================================================================
   24054 http://gcc.gnu.org/gcc-3.0/features.html
   24055                               GCC 3.0 New Features
   24056 
   24057 Additional changes in GCC 3.0.4
   24058 
   24059      * GCC 3.0 now supports newer versions of the [1]NetBSD operating
   24060        system, which use the ELF object file format, on x86 processors.
   24061      * Correct debugging information is generated from functions that have
   24062        lines from multiple files (e.g. yacc output).
   24063      * A fix for whitespace handling in the -traditional preprocessor,
   24064        which can affect Fortran.
   24065      * Fixes to the exception handling runtime.
   24066      * More fixes for bad code generation in C++.
   24067      * A fix for shared library generation under AIX 4.3.
   24068      * Documentation updates.
   24069      * Port of GCC to Tensilica's Xtensa processor contributed.
   24070      * A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
   24071 
   24072 Additional changes in GCC 3.0.3
   24073 
   24074      * A fix to correct an accidental change to the PowerPC ABI.
   24075      * Fixes for bad code generation on a variety of architectures.
   24076      * Improvements to the debugging information generated for C++
   24077        classes.
   24078      * Fixes for bad code generation in C++.
   24079      * A fix to avoid crashes in the C++ demangler.
   24080      * A fix to the C++ standard library to avoid buffer overflows.
   24081      * Miscellaneous improvements for a variety of architectures.
   24082 
   24083 Additional changes in GCC 3.0.2
   24084 
   24085      * Fixes for bad code generation during loop unrolling.
   24086      * Fixes for bad code generation by the sibling call optimization.
   24087      * Minor improvements to x86 code generation.
   24088      * Implementation of function descriptors in C++ vtables for IA64.
   24089      * Numerous minor bug-fixes.
   24090 
   24091 Additional changes in GCC 3.0.1
   24092 
   24093      * C++ fixes for incorrect code-generation.
   24094      * Improved cross-compiling support for the C++ standard library.
   24095      * Fixes for some embedded targets that worked in GCC 2.95.3, but not
   24096        in GCC 3.0.
   24097      * Fixes for various exception-handling bugs.
   24098      * A port to the S/390 architecture.
   24099 
   24100 General Optimizer Improvements
   24101 
   24102      * [2]Basic block reordering pass.
   24103      * New if-conversion pass with support for conditional (predicated)
   24104        execution.
   24105      * New tail call and sibling call elimination optimizations.
   24106      * New register renaming pass.
   24107      * New (experimental) [3]static single assignment (SSA) representation
   24108        support.
   24109      * New dead-code elimination pass implemented using the SSA
   24110        representation.
   24111      * [4]Global null pointer test elimination.
   24112      * [5]Global code hoisting/unification.
   24113      * More builtins and optimizations for stdio.h, string.h and old BSD
   24114        functions, as well as for ISO C99 functions.
   24115      * New builtin __builtin_expect for giving hints to the branch
   24116        predictor.
   24117 
   24118 New Languages and Language specific improvements
   24119 
   24120      * The GNU Compiler for the Java(TM) language (GCJ) is now integrated
   24121        and supported, including the run-time library containing most
   24122        common non-GUI Java classes, a bytecode interpreter, and the Boehm
   24123        conservative garbage collector. Many bugs have been fixed. GCJ can
   24124        compile Java source or Java bytecodes to either native code or Java
   24125        class files, and supports native methods written in either the
   24126        standard JNI or the more efficient and convenient CNI.
   24127      * Here is a [6]partial list of C++ improvements, both new features
   24128        and those no longer supported.
   24129      * New C++ ABI. On the IA-64 platform GCC is capable of
   24130        inter-operating with other IA-64 compilers.
   24131      * The new ABI also significantly reduces the size of symbol and debug
   24132        information.
   24133      * New C++ support library and many C++ bug fixes, vastly improving
   24134        our conformance to the ISO C++ standard.
   24135      * New [7]inliner for C++.
   24136      * Rewritten C preprocessor, integrated into the C, C++ and
   24137        Objective-C compilers, with very many improvements including ISO
   24138        C99 support and [8]improvements to dependency generation.
   24139      * Support for more [9]ISO C99 features.
   24140      * Many improvements to support for checking calls to format functions
   24141        such as printf and scanf, including support for ISO C99 format
   24142        features, extensions from the Single Unix Specification and GNU
   24143        libc 2.2, checking of strfmon formats and features to assist in
   24144        auditing for format string security bugs.
   24145      * New warnings for C code that may have undefined semantics because
   24146        of violations of sequence point rules in the C standard (such as a
   24147        = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall.
   24148      * Additional warning option -Wfloat-equal.
   24149      * Improvements to -Wtraditional.
   24150      * Fortran improvements are listed in [10]the Fortran documentation.
   24151 
   24152 New Targets and Target Specific Improvements
   24153 
   24154      * New x86 back end, generating much improved code.
   24155      * Support for a generic i386-elf target contributed.
   24156      * New option to emit x86 assembly code using Intel style syntax
   24157        (-mintel-syntax).
   24158      * HPUX 11 support contributed.
   24159      * Improved PowerPC code generation, including scheduled prologue and
   24160        epilogue.
   24161      * Port of GCC to Intel's IA-64 processor contributed.
   24162      * Port of GCC to Motorola's MCore 210 and 340 contributed.
   24163      * New unified back-end for Arm, Thumb and StrongArm contributed.
   24164      * Port of GCC to Intel's XScale processor contributed.
   24165      * Port of GCC to Atmel's AVR microcontrollers contributed.
   24166      * Port of GCC to Mitsubishi's D30V processor contributed.
   24167      * Port of GCC to Matsushita's AM33 processor (a member of the MN10300
   24168        processor family) contributed.
   24169      * Port of GCC to Fujitsu's FR30 processor contributed.
   24170      * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed.
   24171      * Port of GCC to Sun's picoJava processor core contributed.
   24172 
   24173 Documentation improvements
   24174 
   24175      * Substantially rewritten and improved C preprocessor manual.
   24176      * Many improvements to other documentation.
   24177      * Manpages for gcc, cpp and gcov are now generated automatically from
   24178        the master Texinfo manual, eliminating the problem of manpages
   24179        being out of date. (The generated manpages are only extracts from
   24180        the full manual, which is provided in Texinfo form, from which
   24181        info, HTML, other formats and a printed manual can be generated.)
   24182      * Generated info files are included in the release tarballs alongside
   24183        their Texinfo sources, avoiding problems on some platforms with
   24184        building makeinfo as part of the GCC distribution.
   24185 
   24186 Other significant improvements
   24187 
   24188      * Garbage collection used internally by the compiler for most memory
   24189        allocation instead of obstacks.
   24190      * Lengauer and Tarjan algorithm used for computing dominators in the
   24191        CFG. This algorithm can be significantly faster and more space
   24192        efficient than our older algorithm.
   24193      * gccbug script provided to assist in submitting bug reports to our
   24194        bug tracking system. (Bug reports previously submitted directly to
   24195        our mailing lists, for which you received no bug tracking number,
   24196        should be submitted again using gccbug if you can reproduce the
   24197        problem with GCC 3.0.)
   24198      * The internal libgcc library is [11]built as a shared library on
   24199        systems that support it.
   24200      * Extensive testsuite included with GCC, with many new tests. In
   24201        addition to tests for GCC bugs that have been fixed, many tests
   24202        have been added for language features, compiler warnings and
   24203        builtin functions.
   24204      * Additional language-independent warning options -Wpacked, -Wpadded,
   24205        -Wunreachable-code and -Wdisabled-optimization.
   24206      * Target-independent options -falign-functions, -falign-loops and
   24207        -falign-jumps.
   24208 
   24209    Plus a great many bug fixes and almost all the [12]features found in
   24210    GCC 2.95.
   24211 
   24212 
   24213     For questions related to the use of GCC, please consult these web
   24214     pages and the [13]GCC manuals. If that fails, the
   24215     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24216     web pages and the development of GCC are welcome on our developer
   24217     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   24218     archives.
   24219 
   24220    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   24221    distribution of this entire article is permitted in any medium,
   24222    provided this notice is preserved.
   24223 
   24224    These pages are [18]maintained by the GCC team. Last modified
   24225    2026-01-02.
   24226 
   24227 References
   24228 
   24229    1. http://www.netbsd.org/
   24230    2. https://gcc.gnu.org/news/reorder.html
   24231    3. https://gcc.gnu.org/news/ssa.html
   24232    4. https://gcc.gnu.org/news/null.html
   24233    5. https://gcc.gnu.org/news/unify.html
   24234    6. https://gcc.gnu.org/gcc-3.0/c++features.html
   24235    7. https://gcc.gnu.org/news/inlining.html
   24236    8. https://gcc.gnu.org/news/dependencies.html
   24237    9. https://gcc.gnu.org/projects/c-status.html
   24238   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   24239   11. https://gcc.gnu.org/gcc-3.0/libgcc.html
   24240   12. https://gcc.gnu.org/gcc-2.95/features.html
   24241   13. https://gcc.gnu.org/onlinedocs/
   24242   14. mailto:gcc-help (a] gcc.gnu.org
   24243   15. mailto:gcc (a] gcc.gnu.org
   24244   16. https://gcc.gnu.org/lists.html
   24245   17. https://www.fsf.org/
   24246   18. https://gcc.gnu.org/about.html
   24247 ======================================================================
   24248 http://gcc.gnu.org/gcc-3.0/caveats.html
   24249                                 GCC 3.0 Caveats
   24250 
   24251      * -fstrict-aliasing is now part of -O2 and higher optimization
   24252        levels. This allows the compiler to assume the strictest aliasing
   24253        rules applicable to the language being compiled. For C and C++,
   24254        this activates optimizations based on the type of expressions. This
   24255        optimization may thus break old, non-compliant code.
   24256      * Enumerations are now properly promoted to int in function
   24257        parameters and function returns. Normally this change is not
   24258        visible, but when using -fshort-enums this is an ABI change.
   24259      * The undocumented extension that allowed C programs to have a label
   24260        at the end of a compound statement has been deprecated and may be
   24261        removed in a future version. Programs that now generate a warning
   24262        about this may be fixed by adding a null statement (a single
   24263        semicolon) after the label.
   24264      * The poorly documented extension that allowed string constants in C,
   24265        C++ and Objective-C to contain unescaped newlines has been
   24266        deprecated and may be removed in a future version. Programs using
   24267        this extension may be fixed in several ways: the bare newline may
   24268        be replaced by \n, or preceded by \n\, or string concatenation may
   24269        be used with the bare newline preceded by \n" and " placed at the
   24270        start of the next line.
   24271      * The Chill compiler is not included in GCC 3.0, because of the lack
   24272        of a volunteer to convert it to use garbage collection.
   24273      * Certain non-standard iostream methods from earlier versions of
   24274        libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach,
   24275        ostream::form, and istream::gets.
   24276      * The new C++ ABI is not yet fully supported by current (as of
   24277        2001-07-01) releases and development versions of GDB, or any
   24278        earlier versions. There is a problem setting breakpoints by line
   24279        number, and other related issues that have been fixed in GCC 3.0
   24280        but not yet handled in GDB:
   24281        [1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   24282 
   24283 
   24284     For questions related to the use of GCC, please consult these web
   24285     pages and the [2]GCC manuals. If that fails, the
   24286     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24287     web pages and the development of GCC are welcome on our developer
   24288     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   24289 
   24290    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   24291    distribution of this entire article is permitted in any medium,
   24292    provided this notice is preserved.
   24293 
   24294    These pages are [7]maintained by the GCC team. Last modified
   24295    2026-01-02.
   24296 
   24297 References
   24298 
   24299    1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   24300    2. https://gcc.gnu.org/onlinedocs/
   24301    3. mailto:gcc-help (a] gcc.gnu.org
   24302    4. mailto:gcc (a] gcc.gnu.org
   24303    5. https://gcc.gnu.org/lists.html
   24304    6. https://www.fsf.org/
   24305    7. https://gcc.gnu.org/about.html
   24306 ======================================================================
   24307 http://gcc.gnu.org/gcc-2.95/index.html
   24308                                     GCC 2.95
   24309 
   24310    (This release series is no longer supported.)
   24311 
   24312    March 16, 2001: The GNU project and the GCC developers are pleased to
   24313    announce the release of GCC version 2.95.3.
   24314 
   24315 Release History
   24316 
   24317    GCC 2.95.3
   24318           March 16, 2001
   24319 
   24320    GCC 2.95.2
   24321           October 27, 1999
   24322 
   24323    GCC 2.95.1
   24324           August 19, 1999
   24325 
   24326    GCC 2.95
   24327           July 31, 1999. This is the first release of GCC since the April
   24328           1999 GCC/EGCS reunification and includes nearly a year's worth
   24329           of new development and bugfixes.
   24330 
   24331 References and Acknowledgements
   24332 
   24333    GCC used to stand for the GNU C Compiler, but since the compiler
   24334    supports several other languages aside from C, it now stands for the
   24335    GNU Compiler Collection.
   24336 
   24337    The whole suite has been extensively [1]regression tested and
   24338    [2]package tested. It should be reliable and suitable for widespread
   24339    use.
   24340 
   24341    The compiler has several new optimizations, new targets, new languages
   24342    and other new features. See the [3]new features page for a more
   24343    complete list of new features found in the GCC 2.95 releases.
   24344 
   24345    The sources include installation instructions in both HTML and
   24346    plaintext forms in the install directory in the distribution. However,
   24347    the most up to date installation instructions and [4]build/test status
   24348    are on the web pages. We will update those pages as new information
   24349    becomes available.
   24350 
   24351    The GCC developers would like to thank the numerous people that have
   24352    contributed new features, test results, bugfixes, etc to GCC. This
   24353    [5]amazing group of volunteers is what makes GCC successful.
   24354 
   24355    And finally, we can't in good conscience fail to mention some
   24356    [6]caveats to using GCC 2.95.
   24357 
   24358    Download GCC 2.95 from one of our many [7]mirror sites.
   24359 
   24360    For additional information about GCC please see the [8]GCC project web
   24361    server or contact the [9]GCC development mailing list.
   24362 
   24363 
   24364     For questions related to the use of GCC, please consult these web
   24365     pages and the [10]GCC manuals. If that fails, the
   24366     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24367     web pages and the development of GCC are welcome on our developer
   24368     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   24369     archives.
   24370 
   24371    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   24372    distribution of this entire article is permitted in any medium,
   24373    provided this notice is preserved.
   24374 
   24375    These pages are [15]maintained by the GCC team. Last modified
   24376    2022-10-26.
   24377 
   24378 References
   24379 
   24380    1. https://gcc.gnu.org/gcc-2.95/regress.html
   24381    2. https://gcc.gnu.org/gcc-2.95/othertest.html
   24382    3. https://gcc.gnu.org/gcc-2.95/features.html
   24383    4. https://gcc.gnu.org/gcc-2.95/buildstat.html
   24384    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24385    6. https://gcc.gnu.org/gcc-2.95/caveats.html
   24386    7. https://gcc.gnu.org/mirrors.html
   24387    8. https://gcc.gnu.org/index.html
   24388    9. mailto:gcc (a] gcc.gnu.org
   24389   10. https://gcc.gnu.org/onlinedocs/
   24390   11. mailto:gcc-help (a] gcc.gnu.org
   24391   12. mailto:gcc (a] gcc.gnu.org
   24392   13. https://gcc.gnu.org/lists.html
   24393   14. https://www.fsf.org/
   24394   15. https://gcc.gnu.org/about.html
   24395 ======================================================================
   24396 http://gcc.gnu.org/gcc-2.95/features.html
   24397                              GCC 2.95 New Features
   24398 
   24399      * General Optimizer Improvements:
   24400           + [1]Localized register spilling to improve speed and code
   24401             density especially on small register class machines.
   24402           + [2]Global CSE using lazy code motion algorithms.
   24403           + [3]Improved global constant/copy propagation.
   24404           + [4]Improved control flow graph analysis and manipulation.
   24405           + [5]Local dead store elimination.
   24406           + [6]Memory Load hoisting/store sinking in loops.
   24407           + [7]Type based alias analysis is enabled by default. Note this
   24408             feature will expose bugs in the Linux kernel. Please refer to
   24409             the FAQ (as shipped with GCC 2.95) for additional information
   24410             on this issue.
   24411           + Major revamp of GIV detection, combination and simplification
   24412             to improve loop performance.
   24413           + Major improvements to register allocation and reloading.
   24414      * New Languages and Language specific improvements
   24415           + [8]Many C++ improvements.
   24416           + [9]Many Fortran improvements.
   24417           + [10]Java front-end has been integrated. A [11]runtime library
   24418             is available separately.
   24419           + [12]ISO C99 support
   24420           + [13]Chill front-end and runtime has been integrated.
   24421           + Boehm garbage collector support in libobjc.
   24422           + More support for various pragmas which appear in vendor
   24423             include files
   24424      * New Targets and Target Specific Improvements
   24425           + [14]SPARC back end rewrite.
   24426           + -mschedule=8000 will optimize code for PA8000 class
   24427             processors; -mpa-risc-2-0 will generate code for PA2.0
   24428             processors
   24429           + Various micro-optimizations for the ia32 port. K6
   24430             optimizations
   24431           + Compiler will attempt to align doubles in the stack on the
   24432             ia32 port
   24433           + Alpha EV6 support
   24434           + PowerPC 750
   24435           + RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
   24436             -mcpu=e603e was added to do -mcpu=603e and -msoft-float.
   24437           + c3x, c4x
   24438           + HyperSPARC
   24439           + SparcLite86x
   24440           + sh4
   24441           + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
   24442             arm-linux)
   24443           + VxWorks targets include support for VxWorks threads
   24444           + StrongARM 110 and ARM9 support added. ARM Scheduling
   24445             parameters rewritten.
   24446           + Various changes to the MIPS port to avoid assembler macros,
   24447             which in turn improves performance
   24448           + Various performance improvements to the i960 port.
   24449           + Major rewrite of ns32k port
   24450      * Other significant improvements
   24451           + [15]Ability to dump cfg information and display it using vcg.
   24452           + The new faster scheme for fixing vendor header files is
   24453             enabled by default.
   24454           + Experimental internationalization support.
   24455           + multibyte character support
   24456           + Some compile-time speedups for pathological problems
   24457           + Better support for complex types
   24458      * Plus the usual mountain of bugfixes
   24459      * Core compiler is based on the gcc2 development tree from Sept 30,
   24460        1998, so we have all of the [16]features found in GCC 2.8.
   24461 
   24462 Additional Changes in GCC 2.95.1
   24463 
   24464      * Generic bugfixes and improvements
   24465           + Various documentation fixes related to the GCC/EGCS merger.
   24466           + Fix memory management bug which could lead to spurious aborts,
   24467             core dumps or random parsing errors in the compiler.
   24468           + Fix a couple bugs in the dwarf1 and dwarf2 debug record
   24469             support.
   24470           + Fix infinite loop in the CSE optimizer.
   24471           + Avoid undefined behavior in compiler FP emulation code
   24472           + Fix install problem when prefix is overridden on the make
   24473             install command.
   24474           + Fix problem with unwanted installation of assert.h on some
   24475             systems.
   24476           + Fix problem with finding the wrong assembler in a single tree
   24477             build.
   24478           + Avoid increasing the known alignment of a register that is
   24479             already known to be a pointer.
   24480      * Platform specific bugfixes and improvements
   24481           + Codegen bugfix for prologue/epilogue for cpu32 target.
   24482           + Fix long long code generation bug for the Coldfire target.
   24483           + Fix various aborts in the SH compiler.
   24484           + Fix bugs in libgcc support library for the SH.
   24485           + Fix alpha ev6 code generation bug.
   24486           + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
   24487             AIX platforms.
   24488           + Fix -fpic code generation bug for rs6000/ppc svr4 targets.
   24489           + Fix varargs/stdarg code generation bug for rs6000/ppc svr4
   24490             targets.
   24491           + Fix weak symbol handling for rs6000/ppc svr4 targets.
   24492           + Fix various problems with 64bit code generation for the
   24493             rs6000/ppc port.
   24494           + Fix codegen bug which caused tetex to be mis-compiled on the
   24495             x86.
   24496           + Fix compiler abort in new cfg code exposed by x86 port.
   24497           + Fix out of range array reference in code convert flat
   24498             registers to the x87 stacked FP register file.
   24499           + Fix minor VxWorks configuration bug.
   24500           + Fix return type of bsearch for SunOS 4.x.
   24501      * Language & Runtime specific fixes.
   24502           + The G++ signature extension has been deprecated. It will be
   24503             removed in the next major release of G++. Use of signatures
   24504             will result in a warning from the compiler.
   24505           + Several bugs relating to templates and namespaces were fixed.
   24506           + A bug that caused crashes when combining templates with -g on
   24507             DWARF1 platforms was fixed.
   24508           + Pointers-to-members, virtual functions, and multiple
   24509             inheritance should now work together correctly.
   24510           + Some code-generation bugs relating to function try blocks were
   24511             fixed.
   24512           + G++ is a little bit more lenient with certain archaic
   24513             constructs than in GCC 2.95.
   24514           + Fix to prevent shared library version #s from bring truncated
   24515             to 1 digit
   24516           + Fix missing std:: in the libstdc++ library.
   24517           + Fix stream locking problems in libio.
   24518           + Fix problem in java compiler driver.
   24519 
   24520 Additional Changes in GCC 2.95.2
   24521 
   24522    The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
   24523    the optimizations performed by -fstrict-aliasing are valid according to
   24524    the C and C++ standards, the optimization have caused some problems,
   24525    particularly with old non-conforming code.
   24526 
   24527    The GCC developers are experimenting with ways to warn users about code
   24528    which violates the C/C++ standards, but those warnings are not ready
   24529    for widespread use at this time. Rather than wait for those warnings
   24530    the GCC developers have chosen to disable -fstrict-aliasing by default
   24531    for the GCC 2.95.2 release.
   24532 
   24533    We strongly encourage developers to find and fix code which violates
   24534    the C/C++ standards as -fstrict-aliasing may be enabled by default in
   24535    future releases. Use the option -fstrict-aliasing to re-enable these
   24536    optimizations.
   24537      * Generic bugfixes and improvements
   24538           + Fix incorrectly optimized memory reference in global common
   24539             subexpression elimination (GCSE) optimization pass.
   24540           + Fix code generation bug in regmove.c in which it could
   24541             incorrectly change a "const" value.
   24542           + Fix bug in optimization of conditionals involving volatile
   24543             memory references.
   24544           + Avoid over-allocation of stack space for some procedures.
   24545           + Fixed bug in the compiler which caused incorrect optimization
   24546             of an obscure series of bit manipulations, shifts and
   24547             arithmetic.
   24548           + Fixed register allocator bug which caused teTeX to be
   24549             mis-compiled on SPARC targets.
   24550           + Avoid incorrect optimization of degenerate case statements for
   24551             certain targets such as the ARM.
   24552           + Fix out of range memory reference in the jump optimizer.
   24553           + Avoid dereferencing null pointer in fix-header.
   24554           + Fix test for GCC specific features so that it is possible to
   24555             bootstrap with gcc-2.6.2 and older versions of GCC.
   24556           + Fix typo in scheduler which could potentially cause out of
   24557             range memory accesses.
   24558           + Avoid incorrect loop reversal which caused incorrect code for
   24559             certain loops on PowerPC targets.
   24560           + Avoid incorrect optimization of switch statements on certain
   24561             targets (for example the ARM).
   24562      * Platform specific bugfixes and improvements
   24563           + Work around bug in Sun V5.0 compilers which caused bootstrap
   24564             comparison failures on SPARC targets.
   24565           + Fix SPARC back end bug which caused aborts in final.c.
   24566           + Fix sparc-hal-solaris2* configuration fragments.
   24567           + Fix bug in sparc block profiling.
   24568           + Fix obscure code generation bug for the PARISC targets.
   24569           + Define __STDC_EXT__ for HPUX configurations.
   24570           + Various POWERPC64 code generation bugfixes.
   24571           + Fix abort for PPC targets using ELF (ex GNU/Linux).
   24572           + Fix collect2 problems for AIX targets.
   24573           + Correct handling of .file directive for PPC targets.
   24574           + Fix bug in fix_trunc x86 patterns.
   24575           + Fix x86 port to correctly pop the FP stack for functions that
   24576             return structures in memory.
   24577           + Fix minor bug in strlen x86 pattern.
   24578           + Use stabs debugging instead of dwarf1 for x86-solaris targets.
   24579           + Fix template repository code to handle leading underscore in
   24580             mangled names.
   24581           + Fix weak/weak alias support for OpenBSD.
   24582           + GNU/Linux for the ARM has C++ compatible include files.
   24583      * Language & Runtime specific fixes.
   24584           + Fix handling of constructor attribute in the C front-end which
   24585             caused problems building the Chill runtime library on some
   24586             targets.
   24587           + Fix minor problem merging type qualifiers in the C front-end.
   24588           + Fix aliasing bug for pointers and references (C/C++).
   24589           + Fix incorrect "non-constant initializer bug" when -traditional
   24590             or -fwritable-strings is enabled.
   24591           + Fix build error for Chill front-end on SunOS.
   24592           + Do not complain about duplicate instantiations when using
   24593             -frepo (C++).
   24594           + Fix array bounds handling in C++ front-end which caused
   24595             problems with dwarf debugging information in some
   24596             circumstances.
   24597           + Fix minor namespace problem.
   24598           + Fix problem linking java programs.
   24599 
   24600 Additional Changes in GCC 2.95.3
   24601 
   24602      * Generic bugfixes and improvements
   24603           + Fix numerous problems that caused incorrect optimization in
   24604             the register reloading code.
   24605           + Fix numerous problems that caused incorrect optimization in
   24606             the loop optimizer.
   24607           + Fix aborts in the functions build_insn_chain and scan_loops
   24608             under some circumstances.
   24609           + Fix an alias analysis bug.
   24610           + Fix an infinite compilation bug in the combiner.
   24611           + A few problems with complex number support have been fixed.
   24612           + It is no longer possible for gcc to act as a fork bomb when
   24613             installed incorrectly.
   24614           + The -fpack-struct option should be recognized now.
   24615           + Fixed a bug that caused incorrect code to be generated due to
   24616             a lost stack adjustment.
   24617      * Platform specific bugfixes and improvements
   24618           + Support building ARM toolchains hosted on Windows.
   24619           + Fix attribute calculations in ARM toolchains.
   24620           + arm-linux support has been improved.
   24621           + Fix a PIC failure on sparc targets.
   24622           + On ix86 targets, the regparm attribute should now work
   24623             reliably.
   24624           + Several updates for the h8300 port.
   24625           + Fix problem building libio with glibc 2.2.
   24626 
   24627 
   24628     For questions related to the use of GCC, please consult these web
   24629     pages and the [17]GCC manuals. If that fails, the
   24630     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24631     web pages and the development of GCC are welcome on our developer
   24632     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   24633     archives.
   24634 
   24635    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   24636    distribution of this entire article is permitted in any medium,
   24637    provided this notice is preserved.
   24638 
   24639    These pages are [22]maintained by the GCC team. Last modified
   24640    2025-10-08.
   24641 
   24642 References
   24643 
   24644    1. https://gcc.gnu.org/news/spill.html
   24645    2. https://gcc.gnu.org/news/lcm.html
   24646    3. https://gcc.gnu.org/news/cprop.html
   24647    4. https://gcc.gnu.org/news/cfg.html
   24648    5. https://gcc.gnu.org/news/dse.html
   24649    6. https://gcc.gnu.org/news/hoist.html
   24650    7. https://gcc.gnu.org/news/alias.html
   24651    8. https://gcc.gnu.org/gcc-2.95/c++features.html
   24652    9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   24653   10. https://gcc.gnu.org/news/gcj-announce.txt
   24654   11. https://gcc.gnu.org/news/javaannounce.html
   24655   12. https://gcc.gnu.org/projects/c-status.html
   24656   13. https://gcc.gnu.org/news/chill.html
   24657   14. https://gcc.gnu.org/news/sparc.html
   24658   15. https://gcc.gnu.org/news/egcs-vcg.html
   24659   16. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   24660   17. https://gcc.gnu.org/onlinedocs/
   24661   18. mailto:gcc-help (a] gcc.gnu.org
   24662   19. mailto:gcc (a] gcc.gnu.org
   24663   20. https://gcc.gnu.org/lists.html
   24664   21. https://www.fsf.org/
   24665   22. https://gcc.gnu.org/about.html
   24666 ======================================================================
   24667 http://gcc.gnu.org/gcc-2.95/caveats.html
   24668                                 GCC 2.95 Caveats
   24669 
   24670      * GCC 2.95 will issue an error for invalid asm statements that had
   24671        been silently accepted by earlier versions of the compiler. This is
   24672        particularly noticeable when compiling older versions of the Linux
   24673        kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95)
   24674        for more information on this issue.
   24675      * GCC 2.95 implements type based alias analysis to disambiguate
   24676        memory references. Some programs, particularly the Linux kernel
   24677        violate ANSI/ISO aliasing rules and therefore may not operate
   24678        correctly when compiled with GCC 2.95. Please refer to the FAQ (as
   24679        shipped with GCC 2.95) for more information on this issue.
   24680      * GCC 2.95 has a known bug in its handling of complex variables for
   24681        64bit targets. Instead of silently generating incorrect code, GCC
   24682        2.95 will issue a fatal error for situations it can not handle.
   24683        This primarily affects the Fortran community as Fortran makes more
   24684        use of complex variables than C or C++.
   24685      * GCC 2.95 has an integrated libstdc++, but does not have an
   24686        integrated libg++. Furthermore old libg++ releases will not work
   24687        with GCC 2.95. You can retrieve a recent copy of libg++ from the
   24688        [1]GCC ftp server.
   24689        Note most C++ programs only need libstdc++.
   24690      * Exception handling may not work with shared libraries, particularly
   24691        on alphas, hppas, rs6000/powerpc and mips based platforms.
   24692        Exception handling is known to work on x86 GNU/Linux platforms with
   24693        shared libraries.
   24694      * In general, GCC 2.95 is more rigorous about rejecting invalid C++
   24695        code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
   24696        or EGCS 1.1. As a result it may be necessary to fix C++ code before
   24697        it will compile with GCC 2.95.
   24698      * G++ is also converting toward the ISO C++ standard; as a result
   24699        code which was previously valid (and thus accepted by other
   24700        compilers and older versions of g++) may no longer be accepted. The
   24701        flag -fpermissive may allow some non-conforming code to compile
   24702        with GCC 2.95.
   24703      * GCC 2.95 compiled C++ code is not binary compatible with EGCS
   24704        1.1.x, EGCS 1.0.x or GCC 2.8.x.
   24705      * GCC 2.95 does not have changes from the GCC 2.8 tree that were made
   24706        between Sept 30, 1998 and April 30, 1999 (the official end of the
   24707        GCC 2.8 project). Future GCC releases will include all the changes
   24708        from the defunct GCC 2.8 sources.
   24709 
   24710 
   24711     For questions related to the use of GCC, please consult these web
   24712     pages and the [2]GCC manuals. If that fails, the
   24713     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24714     web pages and the development of GCC are welcome on our developer
   24715     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   24716 
   24717    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   24718    distribution of this entire article is permitted in any medium,
   24719    provided this notice is preserved.
   24720 
   24721    These pages are [7]maintained by the GCC team. Last modified
   24722    2022-10-26.
   24723 
   24724 References
   24725 
   24726    1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
   24727    2. https://gcc.gnu.org/onlinedocs/
   24728    3. mailto:gcc-help (a] gcc.gnu.org
   24729    4. mailto:gcc (a] gcc.gnu.org
   24730    5. https://gcc.gnu.org/lists.html
   24731    6. https://www.fsf.org/
   24732    7. https://gcc.gnu.org/about.html
   24733 ======================================================================
   24734 http://gcc.gnu.org/egcs-1.1/index.html
   24735                                     EGCS 1.1
   24736 
   24737    September 3, 1998: We are pleased to announce the release of EGCS 1.1.
   24738    December 1, 1998: We are pleased to announce the release of EGCS 1.1.1.
   24739    March 15, 1999: We are pleased to announce the release of EGCS 1.1.2.
   24740 
   24741    EGCS is a free software project to further the development of the GNU
   24742    compilers using an open development environment.
   24743 
   24744    EGCS 1.1 is a major new release of the EGCS compiler system. It has
   24745    been [1]extensively tested and is believed to be stable and suitable
   24746    for widespread use.
   24747 
   24748    EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
   24749    development sources; it contains all of the new features found in GCC
   24750    2.8.1 as well as all new development from GCC up to June 6, 1998.
   24751 
   24752    EGCS 1.1 also contains many improvements and features not found in GCC
   24753    or in older versions of EGCS:
   24754      * Global common subexpression elimination and global constant/copy
   24755        propagation (aka [2]gcse)
   24756      * Ongoing improvements to the [3]alias analysis support to allow for
   24757        better optimizations throughout the compiler.
   24758      * Vastly improved [4]C++ compiler and integrated C++ runtime
   24759        libraries.
   24760      * Fixes for the /tmp symlink race security problems.
   24761      * New targets including mips16, arm-thumb and 64-bit PowerPC.
   24762      * Improvements to GNU Fortran (g77) compiler and runtime library made
   24763        since g77 version 0.5.23.
   24764 
   24765    See the [5]new features page for a more complete list of new features
   24766    found in EGCS 1.1 releases.
   24767 
   24768    EGCS 1.1.1 is a minor update to fix several serious problems in EGCS
   24769    1.1:
   24770      * General improvements and fixes
   24771           + Avoid some stack overflows when compiling large functions.
   24772           + Avoid incorrect loop invariant code motions.
   24773           + Fix some core dumps on Linux kernel code.
   24774           + Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
   24775           + Fix code generation problem in gcse.
   24776           + Various documentation related fixes.
   24777      * g++/libstdc++ improvements and fixes
   24778           + MT safe EH fix for setjmp/longjmp based exception handling.
   24779           + Fix a few bad interactions between optimization and exception
   24780             handling.
   24781           + Fixes for demangling of template names starting with "__".
   24782           + Fix a bug that would fail to run destructors in some cases
   24783             with -O2.
   24784           + Fix 'new' of classes with virtual bases.
   24785           + Fix crash building Qt on the Alpha.
   24786           + Fix failure compiling WIFEXITED macro on GNU/Linux.
   24787           + Fix some -frepo failures.
   24788      * g77 and libf2c improvements and fixes
   24789           + Various documentation fixes.
   24790           + Avoid compiler crash on RAND intrinsic.
   24791           + Fix minor bugs in makefiles exposed by BSD make programs.
   24792           + Define _XOPEN_SOURCE for libI77 build to avoid potential
   24793             problems on some 64-bit systems.
   24794           + Fix problem with implicit endfile on rewind.
   24795           + Fix spurious recursive I/O errors.
   24796      * platform specific improvements and fixes
   24797           + Match all versions of UnixWare7.
   24798           + Do not assume x86 SVR4 or UnixWare targets can handle stabs.
   24799           + Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
   24800             from unsigned ints to double precision floats.
   24801           + Fix ARM ABI issue with NetBSD.
   24802           + Fix a few arm code generation bugs.
   24803           + Fixincludes will fix additional broken SCO OpenServer header
   24804             files.
   24805           + Fix a m68k back end bug which caused invalid offsets in reg+d
   24806             addresses.
   24807           + Fix problems with 64bit AIX 4.3 support.
   24808           + Fix handling of long longs for varargs/stdarg functions on the
   24809             ppc.
   24810           + Minor fixes to CPP predefines for Windows.
   24811           + Fix code generation problems with gpr<->fpr copies for 64bit
   24812             ppc.
   24813           + Fix a few coldfire code generation bugs.
   24814           + Fix some more header file problems on SunOS 4.x.
   24815           + Fix assert.h handling for RTEMS.
   24816           + Fix Windows handling of TREE_SYMBOL_REFERENCED.
   24817           + Fix x86 compiler abort in reg-stack pass.
   24818           + Fix cygwin/windows problem with section attributes.
   24819           + Fix Alpha code generation problem exposed by SMP Linux
   24820             kernels.
   24821           + Fix typo in m68k 32->64bit integer conversion.
   24822           + Make sure target libraries build with -fPIC for PPC & Alpha
   24823             targets.
   24824 
   24825    EGCS 1.1.2 is a minor update to fix several serious problems in EGCS
   24826    1.1.1:
   24827      * General improvements and fixes
   24828           + Fix bug in loop optimizer which caused the SPARC (and
   24829             potentially other) ports to segfault.
   24830           + Fix infinite recursion in alias analysis and combiner code.
   24831           + Fix bug in regclass preferencing.
   24832           + Fix incorrect loop reversal which caused incorrect code to be
   24833             generated for several targets.
   24834           + Fix return value for builtin memcpy.
   24835           + Reduce compile time for certain loops which exposed quadratic
   24836             behavior in the loop optimizer.
   24837           + Fix bug which caused volatile memory to be written multiple
   24838             times when only one write was needed/desired.
   24839           + Fix compiler abort in caller-save.c
   24840           + Fix combiner bug which caused incorrect code generation for
   24841             certain division by constant operations.
   24842           + Fix incorrect code generation due to a bug in range check
   24843             optimizations.
   24844           + Fix incorrect code generation due to mis-handling of clobbered
   24845             values in CSE.
   24846           + Fix compiler abort/segfault due to incorrect register
   24847             splitting when unrolling loops.
   24848           + Fix code generation involving autoincremented addresses with
   24849             ternary operators.
   24850           + Work around bug in the scheduler which caused qt to be
   24851             mis-compiled on some platforms.
   24852           + Fix code generation problems with -fshort-enums.
   24853           + Tighten security for temporary files.
   24854           + Improve compile time for codes which make heavy use of
   24855             overloaded functions.
   24856           + Fix multiply defined constructor/destructor symbol problems.
   24857           + Avoid setting bogus RPATH environment variable during
   24858             bootstrap.
   24859           + Avoid GNU-make dependencies in the texinfo subdir.
   24860           + Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
   24861             --enable-cpp=<dirname> can be used to specify an additional
   24862             install directory for the cpp wrapper script.
   24863           + Fix CSE bug which caused incorrect label-label refs to appear
   24864             on some platforms.
   24865           + Avoid linking in EH routines from libgcc if they are not
   24866             needed.
   24867           + Avoid obscure bug in aliasing code.
   24868           + Fix bug in weak symbol handling.
   24869      * Platform-specific improvements and fixes
   24870           + Fix detection of PPro/PII on Unixware 7.
   24871           + Fix compiler segfault when building spec99 and other programs
   24872             for SPARC targets.
   24873           + Fix code-generation bugs for integer and floating point
   24874             conditional move instructions on the PPro/PII.
   24875           + Use fixincludes to fix byteorder problems on i?86-*-sysv.
   24876           + Fix build failure for the arc port.
   24877           + Fix floating point format configuration for i?86-gnu port.
   24878           + Fix problems with hppa1.0-hp-hpux10.20 configuration when
   24879             threads are enabled.
   24880           + Fix coldfire code generation bugs.
   24881           + Fix "unrecognized insn" problems for Alpha and PPC ports.
   24882           + Fix h8/300 code generation problem with floating point values
   24883             in memory.
   24884           + Fix unrecognized insn problems for the m68k port.
   24885           + Fix namespace-pollution problem for the x86 port.
   24886           + Fix problems with old assembler on x86 NeXT systems.
   24887           + Fix PIC code-generation problems for the SPARC port.
   24888           + Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
   24889           + Fix minor ISO namespace violation in Alpha varargs/stdarg
   24890             support.
   24891           + Fix incorrect "braf" instruction usage for the SH port.
   24892           + Fix minor bug in va-sh which prevented its use with -ansi.
   24893           + Fix problems recognizing and supporting FreeBSD.
   24894           + Handle OpenBSD systems correctly.
   24895           + Minor fixincludes fix for Digital UNIX 4.0B.
   24896           + Fix problems with ctors/dtors in SCO shared libraries.
   24897           + Abort instead of generating incorrect code for PPro/PII
   24898             floating point conditional moves.
   24899           + Avoid multiply defined symbols on GNU/Linux systems using
   24900             libc-5.4.xx.
   24901           + Fix abort in alpha compiler.
   24902      * Fortran-specific fixes
   24903           + Fix the IDate intrinsic (VXT) (in libg2c) so the returned year
   24904             is in the documented, non-Y2K-compliant range of 0-99, instead
   24905             of being returned as 100 in the year 2000.
   24906           + Fix the `Date_and_Time' intrinsic (in libg2c) to return the
   24907             milliseconds value properly in Values(8).
   24908           + Fix the `LStat' intrinsic (in libg2c) to return device-ID
   24909             information properly in SArray(7).
   24910 
   24911    Each release includes installation instructions in both HTML and
   24912    plaintext forms (see the INSTALL directory in the toplevel directory of
   24913    the distribution). However, we also keep the most up to date
   24914    installation instructions and [6]build/test status on our web page. We
   24915    will update those pages as new information becomes available.
   24916 
   24917    The EGCS project would like to thank the numerous people that have
   24918    contributed new features, test results, bugfixes, etc. This [7]amazing
   24919    group of volunteers is what makes EGCS successful.
   24920 
   24921    And finally, we can't in good conscience fail to mention some
   24922    [8]caveats to using EGCS 1.1.
   24923 
   24924    Download EGCS from egcs.cygnus.com (USA California).
   24925 
   24926    The EGCS 1.1 release is also available on many mirror sites.
   24927    [9]Goto mirror list to find a closer site.
   24928 
   24929 
   24930     For questions related to the use of GCC, please consult these web
   24931     pages and the [10]GCC manuals. If that fails, the
   24932     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24933     web pages and the development of GCC are welcome on our developer
   24934     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   24935     archives.
   24936 
   24937    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   24938    distribution of this entire article is permitted in any medium,
   24939    provided this notice is preserved.
   24940 
   24941    These pages are [15]maintained by the GCC team. Last modified
   24942    2024-05-18.
   24943 
   24944 References
   24945 
   24946    1. https://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
   24947    2. https://gcc.gnu.org/news/gcse.html
   24948    3. https://gcc.gnu.org/news/alias.html
   24949    4. https://gcc.gnu.org/egcs-1.1/c++features.html
   24950    5. https://gcc.gnu.org/egcs-1.1/features.html
   24951    6. https://gcc.gnu.org/egcs-1.1/buildstat.html
   24952    7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24953    8. https://gcc.gnu.org/egcs-1.1/caveats.html
   24954    9. https://gcc.gnu.org/mirrors.html
   24955   10. https://gcc.gnu.org/onlinedocs/
   24956   11. mailto:gcc-help (a] gcc.gnu.org
   24957   12. mailto:gcc (a] gcc.gnu.org
   24958   13. https://gcc.gnu.org/lists.html
   24959   14. https://www.fsf.org/
   24960   15. https://gcc.gnu.org/about.html
   24961 ======================================================================
   24962 http://gcc.gnu.org/egcs-1.1/features.html
   24963                              EGCS 1.1 new features
   24964 
   24965      * Integrated GNU Fortran (g77) compiler and runtime library with
   24966        improvements, based on g77 version 0.5.23.
   24967      * Vast improvements in the C++ compiler; so many they have [1]page of
   24968        their own!
   24969      * Compiler implements [2]global common subexpression elimination and
   24970        global copy/constant propagation.
   24971      * More major improvements in the [3]alias analysis code.
   24972      * More major improvements in the exception handling code to improve
   24973        performance, lower static overhead and provide the infrastructure
   24974        for future improvements.
   24975      * The infamous /tmp symlink race security problems have been fixed.
   24976      * The regmove optimization pass has been nearly completely rewritten
   24977        to improve performance of generated code.
   24978      * The compiler now recomputes register usage information before local
   24979        register allocation. By providing more accurate information to the
   24980        priority based allocator, we get better register allocation.
   24981      * The register reloading phase of the compiler optimizes spill code
   24982        much better than in previous releases.
   24983      * Some bad interactions between the register allocator and
   24984        instruction scheduler have been fixed, resulting in much better
   24985        code for certain programs. Additionally, we have tuned the
   24986        scheduler in various ways to improve performance of generated code
   24987        for some architectures.
   24988      * The compiler's branch shortening algorithms have been significantly
   24989        improved to work better on targets which align jump targets.
   24990      * The compiler now supports -Os to prefer optimizing for code space
   24991        over optimizing for code speed.
   24992      * The compiler will now totally eliminate library calls which compute
   24993        constant values. This primarily helps targets with no integer
   24994        div/mul support and targets without floating point support.
   24995      * The compiler now supports an extensive "--help" option.
   24996      * cpplib has been greatly improved and may be suitable for limited
   24997        use.
   24998      * Memory footprint for the compiler has been significantly reduced
   24999        for some pathological cases.
   25000      * The time to build EGCS has been improved for certain targets
   25001        (particularly the alpha and mips platforms).
   25002      * Many infrastructure improvements throughout the compiler, plus the
   25003        usual mountain of bugfixes and minor improvements.
   25004      * Target dependent improvements:
   25005           + SPARC port now includes V8 plus and V9 support as well as
   25006             performance tuning for Ultra class machines. The SPARC port
   25007             now uses the Haifa scheduler.
   25008           + Alpha port has been tuned for the EV6 processor and has an
   25009             optimized expansion of memcpy/bzero. The Alpha port now uses
   25010             the Haifa scheduler.
   25011           + RS6000/PowerPC: support for the Power64 architecture and AIX
   25012             4.3. The RS6000/PowerPC port now uses the Haifa scheduler.
   25013           + x86: Alignment of static store data and jump targets is per
   25014             Intel recommendations now. Various improvements throughout the
   25015             x86 port to improve performance on Pentium processors
   25016             (including improved epilogue sequences for Pentium chips and
   25017             back end improvements which should help register allocation on
   25018             all x86 variants. Conditional move support has been fixed and
   25019             enabled for PPro processors. The x86 port also better supports
   25020             64bit operations now. Unixware 7, a System V Release 5 target,
   25021             is now supported and SCO OpenServer targets can support GAS.
   25022           + MIPS has improved multiply/multiply-add support and now
   25023             includes mips16 ISA support.
   25024           + M68k has many micro-optimizations and Coldfire fixes.
   25025      * Core compiler is based on the GCC development tree from June 9,
   25026        1998, so we have all of the [4]features found in GCC 2.8.
   25027 
   25028 
   25029     For questions related to the use of GCC, please consult these web
   25030     pages and the [5]GCC manuals. If that fails, the
   25031     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25032     web pages and the development of GCC are welcome on our developer
   25033     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   25034 
   25035    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   25036    distribution of this entire article is permitted in any medium,
   25037    provided this notice is preserved.
   25038 
   25039    These pages are [10]maintained by the GCC team. Last modified
   25040    2023-09-02.
   25041 
   25042 References
   25043 
   25044    1. https://gcc.gnu.org/egcs-1.1/c++features.html
   25045    2. https://gcc.gnu.org/news/gcse.html
   25046    3. https://gcc.gnu.org/news/alias.html
   25047    4. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   25048    5. https://gcc.gnu.org/onlinedocs/
   25049    6. mailto:gcc-help (a] gcc.gnu.org
   25050    7. mailto:gcc (a] gcc.gnu.org
   25051    8. https://gcc.gnu.org/lists.html
   25052    9. https://www.fsf.org/
   25053   10. https://gcc.gnu.org/about.html
   25054 ======================================================================
   25055 http://gcc.gnu.org/egcs-1.1/caveats.html
   25056                                 EGCS 1.1 Caveats
   25057 
   25058      * EGCS has an integrated libstdc++, but does not have an integrated
   25059        libg++. Furthermore old libg++ releases will not work with EGCS; HJ
   25060        Lu has made a libg++-2.8.1.2 snapshot available which may work with
   25061        EGCS.
   25062        Note most C++ programs only need libstdc++.
   25063      * Exception handling may not work with shared libraries, particularly
   25064        on alphas, hppas, rs6000/powerpc and mips based platforms.
   25065        Exception handling is known to work on x86-linux platforms with
   25066        shared libraries.
   25067      * Some versions of the Linux kernel have bugs which prevent them from
   25068        being compiled or from running when compiled by EGCS. See the FAQ
   25069        (as shipped with EGCS 1.1) for additional information.
   25070      * In general, EGCS is more rigorous about rejecting invalid C++ code
   25071        or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
   25072        a result it may be necessary to fix C++ code before it will compile
   25073        with EGCS.
   25074      * G++ is also converting toward the ISO C++ standard; as a result
   25075        code which was previously valid (and thus accepted by other
   25076        compilers and older versions of g++) may no longer be accepted.
   25077      * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x
   25078        or GCC 2.8.x due to changes necessary to support thread safe
   25079        exception handling.
   25080 
   25081 
   25082     For questions related to the use of GCC, please consult these web
   25083     pages and the [1]GCC manuals. If that fails, the
   25084     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25085     web pages and the development of GCC are welcome on our developer
   25086     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   25087 
   25088    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   25089    distribution of this entire article is permitted in any medium,
   25090    provided this notice is preserved.
   25091 
   25092    These pages are [6]maintained by the GCC team. Last modified
   25093    2022-10-26.
   25094 
   25095 References
   25096 
   25097    1. https://gcc.gnu.org/onlinedocs/
   25098    2. mailto:gcc-help (a] gcc.gnu.org
   25099    3. mailto:gcc (a] gcc.gnu.org
   25100    4. https://gcc.gnu.org/lists.html
   25101    5. https://www.fsf.org/
   25102    6. https://gcc.gnu.org/about.html
   25103 ======================================================================
   25104 http://gcc.gnu.org/egcs-1.0/index.html
   25105                                     EGCS 1.0
   25106 
   25107    December 3, 1997: We are pleased to announce the release of EGCS 1.0.
   25108    January 6, 1998: We are pleased to announce the release of EGCS 1.0.1.
   25109    March 16, 1998: We are pleased to announce the release of EGCS 1.0.2.
   25110    May 15, 1998 We are pleased to announce the release of EGCS 1.0.3.
   25111 
   25112    EGCS is a collaborative effort involving several groups of hackers
   25113    using an open development model to accelerate development and testing
   25114    of GNU compilers and runtime libraries.
   25115 
   25116    An important goal of EGCS is to allow wide scale testing of
   25117    experimental features and optimizations; therefore, EGCS contains some
   25118    features and optimizations which are still under development. However,
   25119    EGCS has been carefully tested and should be comparable in quality to
   25120    most GCC releases.
   25121 
   25122    EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
   25123    development sources; it contains nearly all of the new features found
   25124    in GCC 2.8.
   25125 
   25126    EGCS 1.0 also contains many improvements and features not found in GCC
   25127    2.7 and even the GCC 2.8 series (which was released after the original
   25128    EGCS 1.0 release).
   25129      * Integrated C++ runtime libraries, including support for most major
   25130        GNU/Linux systems!
   25131      * The integrated libstdc++ library includes a verbatim copy of SGI's
   25132        STL release.
   25133      * Integrated GNU Fortran compiler.
   25134      * New instruction scheduler.
   25135      * New alias analysis code.
   25136 
   25137    See the [1]new features page for a more complete list of new features.
   25138 
   25139    EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
   25140    critical bugs and add support for Red Hat 5.0 Linux. Changes since the
   25141    EGCS 1.0 release:
   25142      * Add support for Red Hat 5.0 Linux and better support for Linux
   25143        systems using glibc2.
   25144        Many programs failed to link when compiled with EGCS 1.0 on Red Hat
   25145        5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should
   25146        fix these problems.
   25147      * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception
   25148        handling interfaces.
   25149        To avoid future compatibility problems, we strongly urge anyone who
   25150        is planning on distributing shared libraries that contain C++ code
   25151        to upgrade to EGCS 1.0.1 first.
   25152        Soon after EGCS 1.0 was released, the GCC developers made some
   25153        incompatible changes in libgcc's exception handling interfaces.
   25154        These changes were needed to solve problems on some platforms. This
   25155        means that GCC 2.8.0, when released, will not be seamlessly
   25156        compatible with shared libraries built by EGCS 1.0. The reason is
   25157        that the libgcc.a in GCC 2.8.0 will not contain a function needed
   25158        by the old interface.
   25159        The result of this is that there may be compatibility problems with
   25160        shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
   25161        With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) interface,
   25162        and libgcc.a has the support routines for both the old and the new
   25163        interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be freely mixed,
   25164        and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed).
   25165        The maintainers of GCC 2.x have decided against including seamless
   25166        support for the old interface in 2.8.0, since it was never
   25167        "official", so to avoid future compatibility problems we recommend
   25168        against distributing any shared libraries built by EGCS 1.0 that
   25169        contain C++ code (upgrade to 1.0.1 and use that).
   25170      * Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
   25171        The x86 changes fix code generation errors exposed when building
   25172        glibc2 and the usual GNU/Linux dynamic linker (ld.so).
   25173        The hppa change fixes a compiler abort when configured for use with
   25174        RTEMS.
   25175        The MIPS changes fix problems with the definition of LONG_MAX on
   25176        newer systems, allow for command line selection of the target ABI,
   25177        and fix one code generation problem.
   25178        The rs6000/ppc change fixes some problems with passing structures
   25179        to varargs/stdarg functions.
   25180      * A few machine independent bugfixes, mostly to fix code generation
   25181        errors when building Linux kernels or glibc.
   25182      * Fix a few critical exception handling and template bugs in the C++
   25183        compiler.
   25184      * Fix Fortran namelist bug on alphas.
   25185      * Fix build problems on x86-solaris systems.
   25186 
   25187    EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
   25188    serious problems in EGCS 1.0.1.
   25189      * General improvements and fixes
   25190           + Memory consumption significantly reduced, especially for
   25191             templates and inline functions.
   25192           + Fix various problems with glibc2.1.
   25193           + Fix loop optimization bug exposed by rs6000/ppc port.
   25194           + Fix to avoid potential code generation problems in jump.c.
   25195           + Fix some undefined symbol problems in dwarf1 debug support.
   25196      * g++/libstdc++ improvements and fixes
   25197           + libstdc++ in the EGCS release has been updated and should be
   25198             link compatible with libstdc++-2.8.
   25199           + Various fixes in libio/libstdc++ to work better on GNU/Linux
   25200             systems.
   25201           + Fix problems with duplicate symbols on systems that do not
   25202             support weak symbols.
   25203           + Memory corruption bug and undefined symbols in bastring have
   25204             been fixed.
   25205           + Various exception handling fixes.
   25206           + Fix compiler abort for very long thunk names.
   25207      * g77 improvements and fixes
   25208           + Fix compiler crash for omitted bound in Fortran CASE
   25209             statement.
   25210           + Add missing entries to g77 lang-options.
   25211           + Fix problem with -fpedantic in the g77 compiler.
   25212           + Fix "backspace" problem with g77 on alphas.
   25213           + Fix x86 back end problem with Fortran literals and -fpic.
   25214           + Fix some of the problems with negative subscripts for g77 on
   25215             alphas.
   25216           + Fixes for Fortran builds on cygwin32/mingw32.
   25217      * platform specific improvements and fixes
   25218           + Fix long double problems on x86 (exposed by glibc).
   25219           + x86 ports define i386 again to keep imake happy.
   25220           + Fix exception handling support on NetBSD ports.
   25221           + Several changes to collect2 to fix many problems with AIX.
   25222           + Define __ELF__ for GNU/Linux on rs6000.
   25223           + Fix -mcall-linux problem on GNU/Linux on rs6000.
   25224           + Fix stdarg/vararg problem for GNU/Linux on rs6000.
   25225           + Allow autoconf to select a proper install problem on AIX 3.1.
   25226           + m68k port support includes -mcpu32 option as well as cpu32
   25227             multilibs.
   25228           + Fix stdarg bug for irix6.
   25229           + Allow EGCS to build on irix5 without the gnu assembler.
   25230           + Fix problem with static linking on sco5.
   25231           + Fix bootstrap on sco5 with native compiler.
   25232           + Fix for abort building newlib on H8 target.
   25233           + Fix fixincludes handling of math.h on SunOS.
   25234           + Minor fix for Motorola 3300 m68k systems.
   25235 
   25236    EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
   25237    problems reported by Red Hat for builds of Red Hat 5.1.
   25238      * Generic bugfixes:
   25239           + Fix a typo in the libio library which resulted in incorrect
   25240             behavior of istream::get.
   25241           + Fix the Fortran negative array index problem.
   25242           + Fix a major problem with the ObjC runtime thread support
   25243             exposed by glibc2.
   25244           + Reduce memory consumption of the Haifa scheduler.
   25245      * Target specific bugfixes:
   25246           + Fix one x86 floating point code generation bug exposed by
   25247             glibc2 builds.
   25248           + Fix one x86 internal compiler error exposed by glibc2 builds.
   25249           + Fix profiling bugs on the Alpha.
   25250           + Fix ImageMagick & emacs 20.2 build problems on the Alpha.
   25251           + Fix rs6000/ppc bug when converting values from integer types
   25252             to floating point types.
   25253 
   25254    The EGCS 1.0 releases include installation instructions in both HTML
   25255    and plaintext forms (see the INSTALL directory in the toplevel
   25256    directory of the distribution). However, we also keep the most up to
   25257    date installation instructions and [2]build/test status on our web
   25258    page. We will update those pages as new information becomes available.
   25259 
   25260    And, we can't in good conscience fail to mention some [3]caveats to
   25261    using EGCS.
   25262 
   25263    Update: Big thanks to Stanford for providing a high speed link for
   25264    downloading EGCS (go.cygnus.com)!
   25265 
   25266    Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com
   25267    (USA California -- High speed link provided by Stanford).
   25268 
   25269    The EGCS 1.0 release is also available many mirror sites.
   25270    [4]Goto mirror list to find a closer site
   25271 
   25272    We'd like to thank the numerous people that have contributed new
   25273    features, test results, bugfixes, etc. Unfortunately, they're far too
   25274    numerous to mention by name.
   25275 
   25276 
   25277     For questions related to the use of GCC, please consult these web
   25278     pages and the [5]GCC manuals. If that fails, the
   25279     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25280     web pages and the development of GCC are welcome on our developer
   25281     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   25282 
   25283    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   25284    distribution of this entire article is permitted in any medium,
   25285    provided this notice is preserved.
   25286 
   25287    These pages are [10]maintained by the GCC team. Last modified
   25288    2023-09-02.
   25289 
   25290 References
   25291 
   25292    1. https://gcc.gnu.org/egcs-1.0/features.html
   25293    2. https://gcc.gnu.org/egcs-1.0/buildstat.html
   25294    3. https://gcc.gnu.org/egcs-1.0/caveats.html
   25295    4. https://gcc.gnu.org/mirrors.html
   25296    5. https://gcc.gnu.org/onlinedocs/
   25297    6. mailto:gcc-help (a] gcc.gnu.org
   25298    7. mailto:gcc (a] gcc.gnu.org
   25299    8. https://gcc.gnu.org/lists.html
   25300    9. https://www.fsf.org/
   25301   10. https://gcc.gnu.org/about.html
   25302 ======================================================================
   25303 http://gcc.gnu.org/egcs-1.0/features.html
   25304                                EGCS 1.0 features
   25305 
   25306      * Core compiler is based on the gcc2 development tree from Aug 2,
   25307        1997, so we have most of the [1]features found in GCC 2.8.
   25308      * Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
   25309      * Vast improvements in the C++ compiler; so many they have [2]page of
   25310        their own!
   25311      * Integrated C++ runtime libraries, including support for most major
   25312        GNU/Linux systems!
   25313      * New instruction scheduler from IBM Haifa which includes support for
   25314        function wide instruction scheduling as well as superscalar
   25315        scheduling.
   25316      * Significantly improved alias analysis code.
   25317      * Improved register allocation for two address machines.
   25318      * Significant code generation improvements for Fortran code on
   25319        Alphas.
   25320      * Various optimizations from the g77 project as well as improved loop
   25321        optimizations.
   25322      * Dwarf2 debug format support for some targets.
   25323      * egcs libstdc++ includes the SGI STL implementation without changes.
   25324      * As a result of these and other changes, egcs libstc++ is not binary
   25325        compatible with previous releases of libstdc++.
   25326      * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The SCO
   25327        Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 and
   25328        1.1), Support for RTEMS on several embedded targets, Support for
   25329        arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
   25330        MN103, NEC V850, Sparclet, Solaris & GNU/Linux on PowerPCs, etc.
   25331      * Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
   25332      * RS6000/PowerPC ports generate code which can run on all
   25333        RS6000/PowerPC variants by default.
   25334      * -mcpu= and -march= switches for the x86 port to allow better
   25335        control over how the x86 port generates code.
   25336      * Includes the template repository patch (aka repo patch); note the
   25337        new template code makes repo obsolete for ELF systems using gnu-ld
   25338        such as GNU/Linux.
   25339      * Plus the usual assortment of bugfixes and improvements.
   25340 
   25341 
   25342     For questions related to the use of GCC, please consult these web
   25343     pages and the [3]GCC manuals. If that fails, the
   25344     [4]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25345     web pages and the development of GCC are welcome on our developer
   25346     list at [5]gcc (a] gcc.gnu.org. All of [6]our lists have public archives.
   25347 
   25348    Copyright (C) [7]Free Software Foundation, Inc. Verbatim copying and
   25349    distribution of this entire article is permitted in any medium,
   25350    provided this notice is preserved.
   25351 
   25352    These pages are [8]maintained by the GCC team. Last modified
   25353    2022-10-26.
   25354 
   25355 References
   25356 
   25357    1. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   25358    2. https://gcc.gnu.org/egcs-1.0/c++features.html
   25359    3. https://gcc.gnu.org/onlinedocs/
   25360    4. mailto:gcc-help (a] gcc.gnu.org
   25361    5. mailto:gcc (a] gcc.gnu.org
   25362    6. https://gcc.gnu.org/lists.html
   25363    7. https://www.fsf.org/
   25364    8. https://gcc.gnu.org/about.html
   25365 ======================================================================
   25366 http://gcc.gnu.org/egcs-1.0/caveats.html
   25367                                 EGCS 1.0 Caveats
   25368 
   25369      * EGCS has an integrated libstdc++, but does not have an integrated
   25370        libg++. Furthermore old libg++ releases will not work with egc; HJ
   25371        Lu has made a libg++-2.8.1.2 available which may work with EGCS.
   25372        Note most C++ programs only need libstdc++.
   25373      * Note that using -pedantic or -Wreturn-type can cause an explosion
   25374        in the amount of memory needed for template-heavy C++ code, such as
   25375        code that uses STL. Also note that -Wall includes -Wreturn-type, so
   25376        if you use -Wall you will need to specify -Wno-return-type to turn
   25377        it off.
   25378      * Exception handling may not work with shared libraries, particularly
   25379        on alphas, hppas, and mips based platforms. Exception handling is
   25380        known to work on x86-linux platforms with shared libraries.
   25381      * Some versions of the Linux kernel have bugs which prevent them from
   25382        being compiled or from running when compiled by EGCS. See the FAQ
   25383        (as shipped with EGCS 1.0) for additional information.
   25384      * In general, EGCS is more rigorous about rejecting invalid C++ code
   25385        or deprecated C++ constructs than G++ 2.7. As a result it may be
   25386        necessary to fix C++ code before it will compile with EGCS.
   25387      * G++ is also aggressively tracking the C++ standard; as a result
   25388        code which was previously valid (and thus accepted by other
   25389        compilers and older versions of G++) may no longer be accepted.
   25390      * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
   25391        1.0.x and later releases should work with Red Hat Linux 5.0.
   25392 
   25393 
   25394     For questions related to the use of GCC, please consult these web
   25395     pages and the [1]GCC manuals. If that fails, the
   25396     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25397     web pages and the development of GCC are welcome on our developer
   25398     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   25399 
   25400    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   25401    distribution of this entire article is permitted in any medium,
   25402    provided this notice is preserved.
   25403 
   25404    These pages are [6]maintained by the GCC team. Last modified
   25405    2022-10-26.
   25406 
   25407 References
   25408 
   25409    1. https://gcc.gnu.org/onlinedocs/
   25410    2. mailto:gcc-help (a] gcc.gnu.org
   25411    3. mailto:gcc (a] gcc.gnu.org
   25412    4. https://gcc.gnu.org/lists.html
   25413    5. https://www.fsf.org/
   25414    6. https://gcc.gnu.org/about.html
   25415 ======================================================================
   25416